From 5c729bb28cec6ae5311813052078625b21e46761 Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Sat, 8 Aug 2009 14:39:34 +0000 Subject: [PATCH] Restore intra-string whitespace collapsing broken in the previous change. --- ext/standard/strnatcmp.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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'); -- 2.40.0