From: Nuno Lopes Date: Fri, 12 Dec 2008 23:55:48 +0000 (+0000) Subject: MFB X-Git-Tag: php-5.4.0alpha1~191^2~4818 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=01bbafc58c77ace199637700e7c39057cbe26d09;p=php MFB --- diff --git a/configure.in b/configure.in index a811f75766..861ef41cde 100644 --- a/configure.in +++ b/configure.in @@ -625,6 +625,7 @@ strcoll \ strdup \ strerror \ strftime \ +strnlen \ strptime \ strstr \ strtok_r \ diff --git a/main/spprintf.c b/main/spprintf.c index 90f3c380fb..be0db3487a 100644 --- a/main/spprintf.c +++ b/main/spprintf.c @@ -77,6 +77,7 @@ * for xinetd. */ +#define _GNU_SOURCE #include "php.h" #include @@ -209,6 +210,14 @@ do { \ /* }}} */ + +#if !HAVE_STRNLEN +static size_t strnlen(const char *s, size_t maxlen) { + char *r = memchr(s, '\0', maxlen); + return r ? r-s : maxlen; +} +#endif + /* * Do format conversion placing the output in buffer */ @@ -656,9 +665,11 @@ fmt_unicode: fmt_string: s = va_arg(ap, char *); if (s != NULL) { - s_len = strlen(s); - if (adjust_precision && precision < s_len) - s_len = precision; + if (!adjust_precision) { + s_len = strlen(s); + } else { + s_len = strnlen(s, precision); + } } else { s = S_NULL; s_len = S_NULL_LEN;