tony2001 Thu Jan 25 13:37:04 2007 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/date/lib parse_tz.c
Log:
setlocale() returns static buffer, which must be copied
http://cvs.php.net/viewvc.cgi/php-src/ext/date/lib/parse_tz.c?r1=1.20.2.6.2.10&r2=1.20.2.6.2.11&diff_format=u
Index: php-src/ext/date/lib/parse_tz.c
diff -u php-src/ext/date/lib/parse_tz.c:1.20.2.6.2.10
php-src/ext/date/lib/parse_tz.c:1.20.2.6.2.11
--- php-src/ext/date/lib/parse_tz.c:1.20.2.6.2.10 Thu Jan 18 23:20:24 2007
+++ php-src/ext/date/lib/parse_tz.c Thu Jan 25 13:37:04 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: parse_tz.c,v 1.20.2.6.2.10 2007/01/18 23:20:24 iliaa Exp $ */
+/* $Id: parse_tz.c,v 1.20.2.6.2.11 2007/01/25 13:37:04 tony2001 Exp $ */
#include "timelib.h"
@@ -196,7 +196,13 @@
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 @@
} 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;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php