Avoid crash when calling __localeconv_l with __C_locale

__C_locale is const.  Thus, overwriting the lconv values in __localeconv_l
will try to write to a R/O region.  Given the lconv values in __C_locale
are initialized, there's no reason to write them in __localeconv_l at all.
Just return &__C_locale.lconv.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2016-08-24 19:46:55 +02:00
parent 2fd2f308e2
commit a703d64ad7
1 changed files with 3 additions and 0 deletions

View File

@ -6,6 +6,9 @@ struct lconv *
__localeconv_l (struct __locale_t *locale) __localeconv_l (struct __locale_t *locale)
{ {
struct lconv *lconv = &locale->lconv; struct lconv *lconv = &locale->lconv;
if (locale == __get_C_locale ())
return lconv;
#ifdef __HAVE_LOCALE_INFO__ #ifdef __HAVE_LOCALE_INFO__
const struct lc_numeric_T *n = __get_numeric_locale (locale); const struct lc_numeric_T *n = __get_numeric_locale (locale);
const struct lc_monetary_T *m = __get_monetary_locale (locale); const struct lc_monetary_T *m = __get_monetary_locale (locale);