diff options
| -rw-r--r-- | ext/standard/strnatcmp.c | 6 | ||||
| -rw-r--r-- | ext/standard/tests/strings/bug29075.phpt | 14 |
2 files changed, 17 insertions, 3 deletions
diff --git a/ext/standard/strnatcmp.c b/ext/standard/strnatcmp.c index f0cc8f8672..e1f491a3df 100644 --- a/ext/standard/strnatcmp.c +++ b/ext/standard/strnatcmp.c @@ -153,13 +153,13 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len return +1; ++ap; ++bp; - if (ap == aend && bp == bend) + if (ap >= aend && bp >= bend) /* The strings compare the same. Perhaps the caller will want to call strcmp to break the tie. */ return 0; - else if (ap == aend) + else if (ap >= aend) return -1; - else if (bp == bend) + else if (bp >= bend) return 1; } } diff --git a/ext/standard/tests/strings/bug29075.phpt b/ext/standard/tests/strings/bug29075.phpt new file mode 100644 index 0000000000..7fe7da6c49 --- /dev/null +++ b/ext/standard/tests/strings/bug29075.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #29075 (strnatcmp() incorrectly handles whitespace) +--FILE-- +<?php + var_dump( + strnatcmp('foo ', 'foo '), + strnatcmp('foo', 'foo'), + strnatcmp(' foo', ' foo') + ); +?> +--EXPECT-- +int(0) +int(0) +int(0) |
