glibc/string
Leonhard Holz 0f9e585480 Fix memory handling in strxfrm_l [BZ #16009]
[Modified from the original email by Siddhesh Poyarekar]

This patch solves bug #16009 by implementing an additional path in
strxfrm that does not depend on caching the weight and rule indices.

In detail the following changed:

* The old main loop was factored out of strxfrm_l into the function
do_xfrm_cached to be able to alternativly use the non-caching version
do_xfrm.

* strxfrm_l allocates a a fixed size array on the stack. If this is not
sufficiant to store the weight and rule indices, the non-caching path is
taken. As the cache size is not dependent on the input there can be no
problems with integer overflows or stack allocations greater than
__MAX_ALLOCA_CUTOFF. Note that malloc-ing is not possible because the
definition of strxfrm does not allow an oom errorhandling.

* The uncached path determines the weight and rule index for every char
and for every pass again.

* Passing all the locale data array by array resulted in very long
parameter lists, so I introduced a structure that holds them.

* Checking for zero src string has been moved a bit upwards, it is
before the locale data initialization now.

* To verify that the non-caching path works correct I added a test run
to localedata/sort-test.sh & localedata/xfrm-test.c where all strings
are patched up with spaces so that they are too large for the caching path.
2015-01-13 11:33:56 +05:30
..
bits Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
_strerror.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-addsep.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-append.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-count.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-create.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-ctsep.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-delete.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-extract.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-insert.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-next.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-replace.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz-stringify.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
argz.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
basename.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bcopy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bug-envz1.c * string/Makefile (tests): Add bug-envz1. 2006-06-04 16:36:04 +00:00
bug-strcoll1.c Update. 2001-04-26 20:45:18 +00:00
bug-strncat1.c * malloc/memusagestat.c (main): Use return instead of exit to 2000-12-31 10:52:32 +00:00
bug-strpbrk1.c * malloc/memusagestat.c (main): Use return instead of exit to 2000-12-31 10:52:32 +00:00
bug-strspn1.c * malloc/memusagestat.c (main): Use return instead of exit to 2000-12-31 10:52:32 +00:00
bug-strtok1.c [BZ #2126] 2006-01-10 00:25:07 +00:00
byteswap.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bzero.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Depend Update. 2001-03-19 21:40:15 +00:00
endian.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
envz.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
envz.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ffs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ffsll.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
inl-tester.c
Makefile Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memccpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memcmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memfrob.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memmem.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memmove.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memory.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mempcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memrchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
memset.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
noinl-tester.c
rawmemchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stpcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stpncpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
str-two-way.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stratcliff.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcasecmp_l.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcasecmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcasestr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strchrnul.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcoll_l.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcoll.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcspn.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strdup.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strerror_l.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strerror.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strfry.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
string-inlines.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
string.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strings.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strlen.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strncase_l.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strncase.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strncat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strncmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strncpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strndup.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strnlen.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strpbrk.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strrchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strsep.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strsignal.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strspn.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strstr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strtok_r.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strtok.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strverscmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strxfrm_l.c Fix memory handling in strxfrm_l [BZ #16009] 2015-01-13 11:33:56 +05:30
strxfrm.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
swab.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-bcopy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-bzero.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-ffs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memccpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memcmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memmem.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memmove.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-mempcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memrchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-memset.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-rawmemchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-stpcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-stpncpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strcasecmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strcasestr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strcat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strchrnul.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strcmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strcpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strcspn.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-string.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strlen.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strncasecmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strncat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strncmp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strncpy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strnlen.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strpbrk.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strrchr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strspn.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-strstr.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
testcopy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tester.c Revert "Suppress warning in string/tester.c for gcc 4.9" 2015-01-06 18:43:28 +01:00
tst-bswap.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-endian.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
tst-inlcall.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-strcoll-overflow.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-strfry.c * stdlib/random_r.c (__initstate_r): Don't use non-existing state. 2005-04-12 15:29:07 +00:00
tst-strlen.c Add optimized x86-64 implementation of strnlen. 2010-07-26 08:37:08 -07:00
tst-strtok_r.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-strtok.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-strxfrm2.c * string/strxfrm_l.c (STRXFRM): Fix trailing \1 optimization 2006-11-10 15:20:59 +00:00
tst-strxfrm.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-svc2.c [BZ #9893] 2009-03-14 23:57:33 +00:00
tst-svc.c * malloc/memusagestat.c (main): Use return instead of exit to 2000-12-31 10:52:32 +00:00
tst-svc.expect * string/strverscmp.c (__strverscmp): Fix last cleanups. 2009-04-07 06:51:59 +00:00
tst-svc.input * string/strverscmp.c (__strverscmp): Fix last cleanups. 2009-04-07 06:51:59 +00:00
Versions Sort Versions files 2013-02-17 16:34:04 +01:00
wordcopy.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xpg-strerror.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00