]> Savannah Git Hosting - gnulib.git/commitdiff
localename-tests: memory allocation fixes
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 14 Mar 2016 05:44:58 +0000 (22:44 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 14 Mar 2016 05:45:39 +0000 (22:45 -0700)
* 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.

ChangeLog
tests/test-localename.c

index 0b1639eb1470a3dc908139ec60e2149484131e14..317c50a9e22428f39440b6c611d7e849a09e5fb1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-03-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       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  <eggert@cs.ucla.edu>
 
        intprops: make .h file license match module
index a61fa2cd9afb761a310dc679cf27f29440b650c2..be8fcaffec70925988d0a207c7dd3a3527c5abe7 100644 (file)
@@ -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