From: Paul Eggert Date: Mon, 14 Mar 2016 05:44:58 +0000 (-0700) Subject: localename-tests: memory allocation fixes X-Git-Tag: v1.0~6794 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=77313df97daf963cd14515a54a4244b0fbb87371;p=gnulib.git localename-tests: memory allocation fixes * tests/test-localename.c (test_locale_name) (test_locale_name_thread): Don't call freelocale on a locale that was the base of a successful newlocale, as that results in a double free. Problem reported by Assaf Gordon. (test_locale_name_thread): Free saved names after use, to pacify gcc -fsanitize=address. --- diff --git a/ChangeLog b/ChangeLog index 0b1639eb14..317c50a9e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2016-03-13 Paul Eggert + + localename-tests: memory allocation fixes + * tests/test-localename.c (test_locale_name) + (test_locale_name_thread): Don't call freelocale on a locale + that was the base of a successful newlocale, as that + results in a double free. Problem reported by Assaf Gordon. + (test_locale_name_thread): Free saved names after use, to pacify + gcc -fsanitize=address. + 2016-03-08 Paul Eggert intprops: make .h file license match module diff --git a/tests/test-localename.c b/tests/test-localename.c index a61fa2cd9a..be8fcaffec 100644 --- a/tests/test-localename.c +++ b/tests/test-localename.c @@ -200,7 +200,9 @@ test_locale_name (void) if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); - if (locale != NULL) + if (locale == NULL) + freelocale (loc); + else { unsigned int j; @@ -217,7 +219,6 @@ test_locale_name (void) uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } - freelocale (loc); } } } @@ -267,7 +268,9 @@ test_locale_name_thread (void) if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); - if (locale != NULL) + if (locale == NULL) + freelocale (loc); + else { unsigned int j; @@ -285,7 +288,6 @@ test_locale_name_thread (void) uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } - freelocale (loc); } } } @@ -464,7 +466,10 @@ test_locale_name_thread (void) unsigned int i; for (i = 0; i < SIZEOF (categories); i++) - ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); + { + ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); + free (saved_names[j][i]); + } } } #else