diff options
author | Andreas Schwab <schwab@suse.de> | 2013-07-17 10:26:58 +0200 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2013-08-27 12:21:12 +0200 |
commit | 45b8acccaf43ec06d31413c75a8f1737ae3ff0e2 (patch) | |
tree | 1ad302dba87a6937959803853a32924f6f7f4a6b | |
parent | 5d228a436a8257f082e84671bf8c89b79a2c3853 (diff) | |
download | glibc-45b8acccaf43ec06d31413c75a8f1737ae3ff0e2.zip glibc-45b8acccaf43ec06d31413c75a8f1737ae3ff0e2.tar.gz glibc-45b8acccaf43ec06d31413c75a8f1737ae3ff0e2.tar.bz2 |
Fix missing declaration of LC_CTYPE nonascii-case element
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | locale/categories.def | 1 | ||||
-rw-r--r-- | string/Makefile | 4 | ||||
-rw-r--r-- | string/test-strcasecmp.c | 26 | ||||
-rw-r--r-- | string/test-strncasecmp.c | 26 |
6 files changed, 58 insertions, 9 deletions
@@ -1,5 +1,13 @@ 2013-08-27 Andreas Schwab <schwab@suse.de> + [BZ #15736] + * locale/categories.def (LC_CTYPE): Add "nonascii-case" element. + * string/Makefile (test-strcasecmp-ENV, test-strncasecmp-ENV) + (test-strcasecmp-ifunc-ENV, test-strncasecmp-ifunc-ENV): Define. + * string/test-strcasecmp.c (test_main): Run tests in several + locales. + * string/test-strncasecmp.c (test_main): Likewise. + * sysdeps/i386/i686/multiarch/strcmp-sse4.S (__strcasecmp_sse4_2) (__strncasecmp_sse4_2) [PIC]: Restore %ebx before falling through to __strcasecmp_nonascii and __strncasecmp_nonascii. @@ -9,7 +9,7 @@ Version 2.19 * The following bugs are resolved with this release: - 14699, 15531, 15532, 15749, 15797, 15867, 15890 + 14699, 15531, 15532, 15736, 15749, 15797, 15867, 15890 * CVE-2013-4237 The readdir_r function could write more than NAME_MAX bytes to the d_name member of struct dirent, or omit the terminating NUL diff --git a/locale/categories.def b/locale/categories.def index 9a89d2d..8c25378 100644 --- a/locale/categories.def +++ b/locale/categories.def @@ -133,6 +133,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_IGNORE_LEN, "ctype-translit-ignore-len", std, word) DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_IGNORE, "ctype-translit-ignore", std, string) DEFINE_ELEMENT (_NL_CTYPE_MAP_TO_NONASCII, "map-to-nonascii", std, word) + DEFINE_ELEMENT (_NL_CTYPE_NONASCII_CASE, "nonascii-case", std, word) ), _nl_postload_ctype) diff --git a/string/Makefile b/string/Makefile index 0237edd..aaad743 100644 --- a/string/Makefile +++ b/string/Makefile @@ -65,6 +65,10 @@ noinl-tester-ENV = LANGUAGE=C tst-strxfrm-ENV = LOCPATH=$(common-objpfx)localedata tst-strxfrm2-ENV = LOCPATH=$(common-objpfx)localedata bug-strcoll1-ENV = LOCPATH=$(common-objpfx)localedata +test-strcasecmp-ENV = LOCPATH=$(common-objpfx)localedata +test-strncasecmp-ENV = LOCPATH=$(common-objpfx)localedata +test-strcasecmp-ifunc-ENV = LOCPATH=$(common-objpfx)localedata +test-strncasecmp-ifunc-ENV = LOCPATH=$(common-objpfx)localedata CFLAGS-inl-tester.c = -fno-builtin CFLAGS-noinl-tester.c = -fno-builtin CFLAGS-tst-strlen.c = -fno-builtin diff --git a/string/test-strcasecmp.c b/string/test-strcasecmp.c index f321501..bdfccca 100644 --- a/string/test-strcasecmp.c +++ b/string/test-strcasecmp.c @@ -17,6 +17,7 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <locale.h> #include <ctype.h> #define TEST_MAIN #define TEST_NAME "strcasecmp" @@ -206,14 +207,18 @@ do_random_tests (void) } } -int -test_main (void) +static void +test_locale (const char *locale) { size_t i; - test_init (); + if (setlocale (LC_CTYPE, locale) == NULL) + { + error (0, 0, "cannot set locale \"%s\"", locale); + ret = 1; + } - printf ("%23s", ""); + printf ("%-23s", locale); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); putchar ('\n'); @@ -246,6 +251,19 @@ test_main (void) } do_random_tests (); +} + +int +test_main (void) +{ + test_init (); + + test_locale ("C"); + test_locale ("en_US.ISO-8859-1"); + test_locale ("en_US.UTF-8"); + test_locale ("tr_TR.ISO-8859-9"); + test_locale ("tr_TR.UTF-8"); + return ret; } diff --git a/string/test-strncasecmp.c b/string/test-strncasecmp.c index 4eedd3d..00eca4a 100644 --- a/string/test-strncasecmp.c +++ b/string/test-strncasecmp.c @@ -17,6 +17,7 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <locale.h> #include <ctype.h> #define TEST_MAIN #define TEST_NAME "strncasecmp" @@ -256,17 +257,21 @@ bz14195 (void) check_result (impl, empty_string, "", 5, 0); } -int -test_main (void) +static void +test_locale (const char *locale) { size_t i; - test_init (); + if (setlocale (LC_CTYPE, locale) == NULL) + { + error (0, 0, "cannot set locale \"%s\"", locale); + ret = 1; + } bz12205 (); bz14195 (); - printf ("%23s", ""); + printf ("%23s", locale); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); putchar ('\n'); @@ -329,6 +334,19 @@ test_main (void) } do_random_tests (); +} + +int +test_main (void) +{ + test_init (); + + test_locale ("C"); + test_locale ("en_US.ISO-8859-1"); + test_locale ("en_US.UTF-8"); + test_locale ("tr_TR.ISO-8859-9"); + test_locale ("tr_TR.UTF-8"); + return ret; } |