diff options
author | David S. Miller <davem@davemloft.net> | 2014-04-30 12:57:51 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-01 12:15:06 -0700 |
commit | 5331255b6eeafa74865b2e6af627cb712c41dafd (patch) | |
tree | a9d5fe7cfb4ad4af1dcb12bad7e1b158d281eca5 /string | |
parent | 4fdfe821e20a70670b3d03deb2abed5d8c83e51b (diff) | |
download | glibc-5331255b6eeafa74865b2e6af627cb712c41dafd.zip glibc-5331255b6eeafa74865b2e6af627cb712c41dafd.tar.gz glibc-5331255b6eeafa74865b2e6af627cb712c41dafd.tar.bz2 |
Fix v9/64-bit strcmp when string ends in multiple zero bytes.
[BZ #16885]
* sysdeps/sparc/sparc64/strcmp.S: Fix end comparison handling when
multiple zero bytes exist at the end of a string.
Reported by Aurelien Jarno <aurelien@aurel32.net>
* string/test-strcmp.c (check): Add explicit test for situations where
there are multiple zero bytes after the first.
Diffstat (limited to 'string')
-rw-r--r-- | string/test-strcmp.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/string/test-strcmp.c b/string/test-strcmp.c index b395dc7..fcd059f 100644 --- a/string/test-strcmp.c +++ b/string/test-strcmp.c @@ -329,6 +329,34 @@ check (void) FOR_EACH_IMPL (impl, 0) check_result (impl, s1 + i1, s2 + i2, exp_result); } + + /* Test cases where there are multiple zero bytes after the first. */ + + for (size_t i = 0; i < 16 + 1; i++) + { + s1[i] = 0x00; + s2[i] = 0x00; + } + + for (size_t i = 0; i < 16; i++) + { + int exp_result; + + for (int val = 0x01; val < 0x100; val++) + { + for (size_t j = 0; j < i; j++) + { + s1[j] = val; + s2[j] = val; + } + + s2[i] = val; + + exp_result = SIMPLE_STRCMP (s1, s2); + FOR_EACH_IMPL (impl, 0) + check_result (impl, s1, s2, exp_result); + } + } } |