mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-29 22:40:34 +02:00
Fix double-free error on non-GNU systems.
* libguile/i18n.c (scm_make_locale): Null out c_locale_name after it's freed, so it doesn't get freed again. While this only has effect if USE_GNU_LOCALE_API is unset, the nulling out happens in both cases, to be consistent and robust. (scm_nl_langinfo): Free c_result in all switch cases, in particular P_SIGN_POSN, N_SIGN_POSN, INT_P_SIGN_POSN, and INT_N_SIGN_POSN.
This commit is contained in:
parent
241247e8b9
commit
e22ad42bdb
1 changed files with 3 additions and 0 deletions
|
@ -645,6 +645,7 @@ SCM_DEFINE (scm_make_locale, "make-locale", 2, 1, 0,
|
|||
c_locale = newlocale (c_category_mask, c_locale_name, c_base_locale);
|
||||
|
||||
free (c_locale_name);
|
||||
c_locale_name = NULL;
|
||||
|
||||
if (c_locale == (locale_t) 0)
|
||||
{
|
||||
|
@ -662,6 +663,7 @@ SCM_DEFINE (scm_make_locale, "make-locale", 2, 1, 0,
|
|||
c_locale->category_mask = c_category_mask;
|
||||
c_locale->locale_name = scm_gc_strdup (c_locale_name, "locale");
|
||||
free (c_locale_name);
|
||||
c_locale_name = NULL;
|
||||
|
||||
if (scm_is_eq (base_locale, SCM_VARIABLE_REF (scm_global_locale)))
|
||||
{
|
||||
|
@ -1652,6 +1654,7 @@ SCM_DEFINE (scm_nl_langinfo, "nl-langinfo", 1, 1, 0,
|
|||
default:
|
||||
result = scm_from_latin1_symbol ("unspecified");
|
||||
}
|
||||
free (c_result);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue