Also check dead->data[category] != NULL

_nl_load_locale_from_archive (int category, const char **namep)

has

 for (cnt = 0; cnt < __LC_LAST; ++cnt)
    if (cnt != LC_ALL)
      {
        lia->data[cnt] = _nl_intern_locale_data (cnt,
                                                 results[cnt].addr,
                                                 results[cnt].len);
        if (__glibc_likely (lia->data[cnt] != NULL))
          {
...
          }
      }

lia->data[cnt] can be NULL, which happens to en_US.UTF-8 with
LC_COLLATE.  But this won't happen if glibc is configured with
--enable-hardcoded-path-in-tests.  We should also check
dead->data[category] != NULL.

	* locale/loadarchive.c (_nl_archive_subfreeres): Also check
	dead->data[category] != NULL.
This commit is contained in:
H.J. Lu 2015-08-05 08:15:51 -07:00
parent cf36e5034f
commit 782723d6d8
2 changed files with 6 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2015-08-05 H.J. Lu <hongjiu.lu@intel.com>
* locale/loadarchive.c (_nl_archive_subfreeres): Also check
dead->data[category] != NULL.
2015-08-05 Joseph Myers <joseph@codesourcery.com>
[BZ #18647]

View File

@ -515,7 +515,7 @@ _nl_archive_subfreeres (void)
free (dead->name);
for (category = 0; category < __LC_LAST; ++category)
if (category != LC_ALL)
if (category != LC_ALL && dead->data[category] != NULL)
{
/* _nl_unload_locale just does this free for the archive case. */
if (dead->data[category]->private.cleanup)