From 4cb734b05f74f5f5a92a56e630e1a9f941496f32 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Thu, 25 Jan 2007 13:37:04 +0000 Subject: [PATCH] setlocale() returns static buffer, which must be copied --- ext/date/lib/parse_tz.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c index 4f99d22c54..2483961365 100644 --- a/ext/date/lib/parse_tz.c +++ b/ext/date/lib/parse_tz.c @@ -196,7 +196,13 @@ void timelib_dump_tzinfo(timelib_tzinfo *tz) static int seek_to_tz_position(const unsigned char **tzf, char *timezone, const timelib_tzdb *tzdb) { int left = 0, right = tzdb->index_size - 1; - char *cur_locale = setlocale(LC_CTYPE, "C"); + char *cur_locale = NULL, *tmp; + + tmp = setlocale(LC_CTYPE, NULL); + if (tmp) { + cur_locale = strdup(tmp); + } + setlocale(LC_CTYPE, "C"); do { int mid = ((unsigned)left + right) >> 1; @@ -209,12 +215,14 @@ static int seek_to_tz_position(const unsigned char **tzf, char *timezone, const } else { /* (cmp == 0) */ (*tzf) = &(tzdb->data[tzdb->index[mid].pos + 20]); setlocale(LC_CTYPE, cur_locale); + if (cur_locale) free(cur_locale); return 1; } } while (left <= right); setlocale(LC_CTYPE, cur_locale); + if (cur_locale) free(cur_locale); return 0; } -- 2.50.1