From: Rasmus Lerdorf Date: Sat, 8 Aug 2009 14:39:34 +0000 (+0000) Subject: Restore intra-string whitespace collapsing broken in the previous change. X-Git-Tag: php-5.2.11RC1~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c729bb28cec6ae5311813052078625b21e46761;p=php Restore intra-string whitespace collapsing broken in the previous change. --- diff --git a/ext/standard/strnatcmp.c b/ext/standard/strnatcmp.c index 2d7ecd8178..a071fd186f 100644 --- a/ext/standard/strnatcmp.c +++ b/ext/standard/strnatcmp.c @@ -116,17 +116,26 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len while (1) { ca = *ap; cb = *bp; - /* skip over leading spaces or zeros */ - while (leading && (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1))))) { + /* skip over leading zeros unless they are followed by punctuation */ + while (leading && ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1))) { ca = *++ap; } - while (leading && (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1))))) { + while (leading && cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1))) { cb = *++bp; } leading = 0; + /* Skip consecutive whitespace */ + while (isspace((int)(unsigned char)ca)) { + ca = *++ap; + } + + while (isspace((int)(unsigned char)cb)) { + cb = *++bp; + } + /* process run of digits */ if (isdigit((int)(unsigned char)ca) && isdigit((int)(unsigned char)cb)) { fractional = (ca == '0' || cb == '0');