* 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. --- libguile/i18n.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/libguile/i18n.c b/libguile/i18n.c index 4bb9e21..5a53bfa 100644 --- a/libguile/i18n.c +++ b/libguile/i18n.c @@ -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 -- 1.7.2.5