Fix x86 strncat optimized implementation for large sizes
commit8dad72997af2be0dc72a4bc7dbe82d85c90334fc
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 3 Jan 2017 14:19:12 +0000 (3 12:19 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 3 Jan 2017 16:24:53 +0000 (3 14:24 -0200)
treedc5d83dfccb1e2fba0354ecc9f13a538d47fbb42
parentd4d629e6187e33050902824a94498b6096eacac9
Fix x86 strncat optimized implementation for large sizes

Similar to BZ#19387, BZ#21014, and BZ#20971, both x86 sse2 strncat
optimized assembly implementations do not handle the size overflow
correctly.

The x86_64 one is in fact an issue with strcpy-sse2-unaligned, but
that is triggered also with strncat optimized implementation.

This patch uses a similar strategy used on 3daef2c8ee4df2, where
saturared math is used for overflow case.

Checked on x86_64-linux-gnu and i686-linux-gnu.  It fixes BZ #19390.

[BZ #19390]
* string/test-strncat.c (test_main): Add tests with SIZE_MAX as
maximum string size.
* sysdeps/i386/i686/multiarch/strcat-sse2.S (STRCAT): Avoid overflow
in pointer addition.
* sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S (STRCPY):
Likewise.
ChangeLog
string/test-strncat.c
sysdeps/i386/i686/multiarch/strcat-sse2.S
sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S