From a703d64ad7edac344e4959e8d624ce1d8012678b Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 24 Aug 2016 19:46:55 +0200 Subject: [PATCH] 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 --- newlib/libc/locale/localeconv.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/newlib/libc/locale/localeconv.c b/newlib/libc/locale/localeconv.c index 1f8816dfd..165f6f7c3 100644 --- a/newlib/libc/locale/localeconv.c +++ b/newlib/libc/locale/localeconv.c @@ -6,6 +6,9 @@ struct lconv * __localeconv_l (struct __locale_t *locale) { struct lconv *lconv = &locale->lconv; + if (locale == __get_C_locale ()) + return lconv; + #ifdef __HAVE_LOCALE_INFO__ const struct lc_numeric_T *n = __get_numeric_locale (locale); const struct lc_monetary_T *m = __get_monetary_locale (locale);