diff options
| -rw-r--r-- | CHANGES | 7 | ||||
| -rw-r--r-- | RELEASE-NOTES | 3 | ||||
| -rw-r--r-- | lib/hostip.c | 23 | 
3 files changed, 28 insertions, 5 deletions
@@ -7,6 +7,13 @@                                    Changelog +Daniel (28 October) +- Dan C tracked down yet another weird behavior in the glibc gethostbyname_r() +  function for some specific versions (reported on 2.2.5 and 2.1.1), and +  provided a fix. On Linux machines with these glibc versioins, non-ipv6 +  builds of libcurl would often fail to resolve perfectly resolvable host +  names. +  Daniel (26 October)  - James Bursa found out that curl_msnprintf() could write the trailing    zero-byte outside its given buffer size. This could happen if you generated diff --git a/RELEASE-NOTES b/RELEASE-NOTES index f5d1cd081..894ca0ca4 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -24,6 +24,7 @@ This release includes the following changes:  This release includes the following bugfixes: + o added work-around for a name resolve problem on some glibc versions   o a rare ERRORBUFFER single-byte overflow was fixed   o HTTP-resuming an already downloaded file works better   o builds better on Solaris 8+ with gcc @@ -83,6 +84,6 @@ advice from friends like these:   Jeremy Friesner, Florian Schoppmann, Neil Dunbar, Frank Ticheler, Lachlan   O'Dea, Dirk Manske, Domenico Andreoli, Gisle Vanem, Kimmo Kinnunen, Andrew   Fuller, Georg Horn, Andrés García, Dylan Ellicott, Kevin Roth, David Hull, - James Bursa + James Bursa, Dan C          Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/hostip.c b/lib/hostip.c index 21227567e..5a7ef2a4c 100644 --- a/lib/hostip.c +++ b/lib/hostip.c @@ -983,13 +983,28 @@ static Curl_addrinfo *my_getaddrinfo(struct connectdata *conn,           of buffer size (step_size grows beyond CURL_NAMELOOKUP_SIZE).           If anyone has a better fix, please tell us! + +         ------------------------------------------------------------------- + +         On October 23rd 2003, Dan C dug up more details on the mysteries of +         gethostbyname_r() in glibc: + +         In glibc 2.2.5 the interface is different (this has also been +         discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't +         explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32 +         (shipped/upgraded by Redhat 7.2) don't show this behavior! + +         In this "buggy" version, the return code is -1 on error and 'errno' +         is set to the ERANGE or EAGAIN code. Note that 'errno' is not a +         thread-safe variable. +        */ -      if((ERANGE == res) || (EAGAIN == res)) { +      if(((ERANGE == res) || (EAGAIN == res)) || +         ((res<0) && ((ERANGE == errno) || (EAGAIN == errno))))  	step_size+=200; -	continue; -      } -      break; +      else +        break;      } while(step_size <= CURL_NAMELOOKUP_SIZE);      if(!h) /* failure */  | 
