From f6b90f42997f98bdd91dac713d610b66edc55c7c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 26 Sep 2004 03:40:38 +0000 Subject: [PATCH] Update. * intl/finddomain.c (_nl_find_domain): Protect calls to _nl_make_l10nflist. --- ChangeLog | 3 +++ intl/finddomain.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index e0a5f2c..abb6328 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2004-09-25 Ulrich Drepper + * intl/finddomain.c (_nl_find_domain): Protect calls to + _nl_make_l10nflist. + * sysdeps/posix/getaddrinfo.c (getaddrinfo): If determinination of source address fails, initialized source_addr_len field so that duplicate address recognition does not copy junk. diff --git a/intl/finddomain.c b/intl/finddomain.c index 6988d9e..9af765d 100644 --- a/intl/finddomain.c +++ b/intl/finddomain.c @@ -35,6 +35,7 @@ #include "gettextP.h" #ifdef _LIBC # include +# include #else # include "libgnuintl.h" #endif @@ -78,11 +79,17 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) (4) modifier */ + /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ + __libc_lock_define_initialized (static, lock); + __libc_lock_lock (lock); + /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, domainname, 0); + __libc_lock_unlock (lock); + if (retval != NULL) { /* We know something about this locale. */ @@ -102,6 +109,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) if (retval->successor[cnt]->data != NULL) break; } + return cnt >= 0 ? retval : NULL; /* NOTREACHED */ } @@ -132,12 +140,17 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset); + /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ + __libc_lock_lock (lock); + /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, domainname, 1); + __libc_lock_unlock (lock); + if (retval == NULL) /* This means we are out of core. */ return NULL; -- 2.7.4