diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2013-02-13 13:18:43 +0100 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2013-02-14 10:41:45 +0100 | 
| commit | 358c5c0745a4c47f910189095f3832163b4708c4 (patch) | |
| tree | 7e605f952fc16496ce4a0b5583c258466948d8e2 /lib | |
| parent | d821525cee3fb43f746fdebf6dcc2dd8daa2bb7f (diff) | |
strlcat: remove function
This function was only used twice, both in places where performance
isn't crucial (socks + if2ip). Removing the use of this function removes
the need to have our private version for systems without it == reduced
amount of code.
Also, in the SOCKS case it is clearly better to fail gracefully rather
than to truncate the results.
This work was triggered by a bug report on the strcal prototype in
strequal.h.
strlcat was added in commit db70cd28 in February 2001!
Bug: http://curl.haxx.se/bug/view.cgi?id=1192
Reported by: Jeremy Huddleston
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/config-dos.h | 6 | ||||
| -rw-r--r-- | lib/config-os400.h | 5 | ||||
| -rw-r--r-- | lib/config-riscos.h | 5 | ||||
| -rw-r--r-- | lib/config-symbian.h | 5 | ||||
| -rw-r--r-- | lib/config-tpf.h | 5 | ||||
| -rw-r--r-- | lib/config-vxworks.h | 5 | ||||
| -rw-r--r-- | lib/if2ip.c | 8 | ||||
| -rw-r--r-- | lib/socks.c | 13 | ||||
| -rw-r--r-- | lib/strequal.c | 47 | ||||
| -rw-r--r-- | lib/strequal.h | 7 | 
10 files changed, 23 insertions, 83 deletions
diff --git a/lib/config-dos.h b/lib/config-dos.h index 68614e8f4..0ab396349 100644 --- a/lib/config-dos.h +++ b/lib/config-dos.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -164,10 +164,6 @@    #define HAVE_SYS_TIME_H 1    #define HAVE_VARIADIC_MACROS_GCC 1 -  #if (DJGPP_MINOR >= 4) -    #define HAVE_STRLCAT  1 -  #endif -    /* Because djgpp <= 2.03 doesn't have snprintf() etc. */    #if (DJGPP_MINOR < 4)      #define _MPRINTF_REPLACE diff --git a/lib/config-os400.h b/lib/config-os400.h index 208c02903..0ac2cdb61 100644 --- a/lib/config-os400.h +++ b/lib/config-os400.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -298,9 +298,6 @@  /* Define if you have the <string.h> header file. */  #define HAVE_STRING_H -/* Define if you have the `strlcat' function. */ -#undef HAVE_STRLCAT -  /* Define if you have the `strlcpy' function. */  #undef HAVE_STRLCPY diff --git a/lib/config-riscos.h b/lib/config-riscos.h index e2af9af6c..e40057789 100644 --- a/lib/config-riscos.h +++ b/lib/config-riscos.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -305,9 +305,6 @@  /* Define if you have the <string.h> header file. */  #define HAVE_STRING_H -/* Define if you have the `strlcat' function. */ -#undef HAVE_STRLCAT -  /* Define if you have the `strlcpy' function. */  #undef HAVE_STRLCPY diff --git a/lib/config-symbian.h b/lib/config-symbian.h index fcfb4058c..754319f94 100644 --- a/lib/config-symbian.h +++ b/lib/config-symbian.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -525,9 +525,6 @@  /* Define to 1 if you have the <string.h> header file. */  #define HAVE_STRING_H 1 -/* Define to 1 if you have the `strlcat' function. */ -#define HAVE_STRLCAT 1 -  /* Define to 1 if you have the `strlcpy' function. */  #define HAVE_STRLCPY 1 diff --git a/lib/config-tpf.h b/lib/config-tpf.h index 0208ab835..ddb8f778c 100644 --- a/lib/config-tpf.h +++ b/lib/config-tpf.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -471,9 +471,6 @@  /* Define to 1 if you have the <string.h> header file. */  #define HAVE_STRING_H 1 -/* Define to 1 if you have the `strlcat' function. */ -/* #undef HAVE_STRLCAT */ -  /* Define to 1 if you have the `strlcpy' function. */  /* #undef HAVE_STRLCPY */ diff --git a/lib/config-vxworks.h b/lib/config-vxworks.h index 5b224c045..ab128768a 100644 --- a/lib/config-vxworks.h +++ b/lib/config-vxworks.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -592,9 +592,6 @@  /* Define to 1 if you have the <string.h> header file. */  #define HAVE_STRING_H 1 -/* Define to 1 if you have the strlcat function. */ -/* #undef HAVE_STRLCAT */ -  /* Define to 1 if you have the `strlcpy' function. */  /* #undef HAVE_STRLCPY */ diff --git a/lib/if2ip.c b/lib/if2ip.c index 558e30f15..cc191201e 100644 --- a/lib/if2ip.c +++ b/lib/if2ip.c @@ -5,7 +5,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -95,6 +95,7 @@ char *Curl_if2ip(int af, const char *interf, char *buf, int buf_size)           curl_strequal(iface->ifa_name, interf)) {          void *addr;          char scope[12]=""; +        char ipstr[64];  #ifdef ENABLE_IPV6          if(af == AF_INET6) {            unsigned int scopeid = 0; @@ -109,8 +110,9 @@ char *Curl_if2ip(int af, const char *interf, char *buf, int buf_size)          else  #endif            addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr; -        ip = (char *) Curl_inet_ntop(af, addr, buf, buf_size); -        strlcat(buf, scope, buf_size); +        ip = (char *) Curl_inet_ntop(af, addr, ipstr, sizeof(ipstr)); +        snprintf(buf, buf_size, "%s%s", ip, scope); +        ip = buf;          break;        }      } diff --git a/lib/socks.c b/lib/socks.c index 51bb94664..b101a0de4 100644 --- a/lib/socks.c +++ b/lib/socks.c @@ -5,7 +5,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -196,8 +196,15 @@ CURLcode Curl_SOCKS4(const char *proxy_name,     * This is currently not supporting "Identification Protocol (RFC1413)".     */    socksreq[8] = 0; /* ensure empty userid is NUL-terminated */ -  if(proxy_name) -    strlcat((char*)socksreq + 8, proxy_name, sizeof(socksreq) - 8); +  if(proxy_name) { +    size_t plen = strlen(proxy_name); +    if(plen >= sizeof(socksreq) - 8) { +      failf(data, "Too long SOCKS proxy name, can't use!\n"); +      return CURLE_COULDNT_CONNECT; +    } +    /* copy the proxy name WITH trailing zero */ +    memcpy(socksreq + 8, proxy_name, plen+1); +  }    /*     * Make connection diff --git a/lib/strequal.c b/lib/strequal.c index f69c5bf9e..5f2f508e2 100644 --- a/lib/strequal.c +++ b/lib/strequal.c @@ -5,7 +5,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -77,48 +77,3 @@ int curl_strnequal(const char *first, const char *second, size_t max)    return toupper(*first) == toupper(*second);  #endif  } - -#ifndef HAVE_STRLCAT -/* - * The strlcat() function appends the NUL-terminated string src to the end - * of dst. It will append at most size - strlen(dst) - 1 bytes, NUL-termi- - * nating the result. - * - * The strlcpy() and strlcat() functions return the total length of the - * string they tried to create.  For strlcpy() that means the length of src. - * For strlcat() that means the initial length of dst plus the length of - * src. While this may seem somewhat confusing it was done to make trunca- - * tion detection simple. - * - * - */ -size_t Curl_strlcat(char *dst, const char *src, size_t siz) -{ -  char *d = dst; -  const char *s = src; -  size_t n = siz; -  union { -    ssize_t sig; -     size_t uns; -  } dlen; - -  /* Find the end of dst and adjust bytes left but don't go past end */ -  while(n-- != 0 && *d != '\0') -    d++; -  dlen.sig = d - dst; -  n = siz - dlen.uns; - -  if(n == 0) -    return(dlen.uns + strlen(s)); -  while(*s != '\0') { -    if(n != 1) { -      *d++ = *s; -      n--; -    } -    s++; -  } -  *d = '\0'; - -  return(dlen.uns + (s - src));     /* count does not include NUL */ -} -#endif diff --git a/lib/strequal.h b/lib/strequal.h index 287e042f4..117a305b7 100644 --- a/lib/strequal.h +++ b/lib/strequal.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -27,10 +27,5 @@  #define strequal(a,b) curl_strequal(a,b)  #define strnequal(a,b,c) curl_strnequal(a,b,c) -#ifndef HAVE_STRLCAT -#define strlcat(x,y,z) Curl_strlcat(x,y,z) -#endif -size_t strlcat(char *dst, const char *src, size_t siz); -  #endif /* HEADER_CURL_STREQUAL_H */  | 
