com php-src: Fix bug #67052 (NumberFormatter::parse() resets LC_NUMERIC setting): NEWS ext/intl/formatter/format ter_parse.c
ext/intl/tests/bug14562.phpt ex t/intl/tests/bug67052.phpt

From: Date: Mon, 07 Jul 2014 07:36:57 +0000
Subject: com php-src: Fix bug #67052 (NumberFormatter::parse() resets LC_NUMERIC setting): NEWS ext/intl/formatter/format ter_parse.c
ext/intl/tests/bug14562.phpt ex t/intl/tests/bug67052.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-79256@lists.php.net to get a copy of this message
Commit: 6c8a570a969b262d233350829ead759364a29e82 Author: Stanislav Malyshev <stas@php.net> Mon, 7 Jul 2014 00:36:57 -0700 Parents: 716d2a3937b4590772212b563127810eb4aad672 Branches: PHP-5.4 PHP-5.5 PHP-5.6 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=6c8a570a969b262d233350829ead759364a29e82 Log: Fix bug #67052 (NumberFormatter::parse() resets LC_NUMERIC setting) Bugs: https://bugs.php.net/67052 Changed paths: M NEWS M ext/intl/formatter/formatter_parse.c M ext/intl/tests/bug14562.phpt A ext/intl/tests/bug67052.phpt Diff: diff --git a/NEWS b/NEWS index 44196a3..3fb4781 100644 --- a/NEWS +++ b/NEWS @@ -16,7 +16,11 @@ PHP NEWS (Adam) - FPM: - . Fix bug #67531 (syslog cannot be set in pool configuration). (Remi) + . Fixed bug #67531 (syslog cannot be set in pool configuration). (Remi) + +- Intl: + . Fixed bug #67052 (NumberFormatter::parse() resets LC_NUMERIC setting). + (Stas) - pgsql: . Fix bug #67550 (Error in code "form" instead of "from", pgsql.c, line 756), diff --git a/ext/intl/formatter/formatter_parse.c b/ext/intl/formatter/formatter_parse.c index 6f3a3a1..0c8704d 100644 --- a/ext/intl/formatter/formatter_parse.c +++ b/ext/intl/formatter/formatter_parse.c @@ -73,7 +73,9 @@ PHP_FUNCTION( numfmt_parse ) } #if ICU_LOCALE_BUG && defined(LC_NUMERIC) - oldlocale = setlocale(LC_NUMERIC, "C"); + /* need to copy here since setlocale may change it later */ + oldlocale = estrdup(setlocale(LC_NUMERIC, NULL)); + setlocale(LC_NUMERIC, "C"); #endif switch(type) { @@ -100,6 +102,7 @@ PHP_FUNCTION( numfmt_parse ) } #if ICU_LOCALE_BUG && defined(LC_NUMERIC) setlocale(LC_NUMERIC, oldlocale); + efree(oldlocale); #endif if(zposition) { zval_dtor(zposition); diff --git a/ext/intl/tests/bug14562.phpt b/ext/intl/tests/bug14562.phpt index 3256268..7cf927f 100644 --- a/ext/intl/tests/bug14562.phpt +++ b/ext/intl/tests/bug14562.phpt @@ -15,6 +15,7 @@ function ut_main() setlocale(LC_ALL, $de_locale); $fmt = new NumberFormatter("de", NumberFormatter::DECIMAL ); $numeric = $fmt->parse("1234,56"); + setlocale(LC_ALL, "C"); // reset for printing $res_str .= "$numeric\n"; return $res_str; } diff --git a/ext/intl/tests/bug67052.phpt b/ext/intl/tests/bug67052.phpt new file mode 100644 index 0000000..5957939 --- /dev/null +++ b/ext/intl/tests/bug67052.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #67052 - NumberFormatter::parse() resets LC_NUMERIC setting +--SKIPIF-- +<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?> +--FILE-- +<?php + +function ut_main() +{ + setlocale(LC_ALL, 'sl_SI.UTF-8'); + + $fmt = new NumberFormatter( 'sl_SI.UTF-8', NumberFormatter::DECIMAL); + $num = "1.234.567,891"; + $res_str = $fmt->parse($num)."\n"; + $res_str .= setlocale(LC_NUMERIC, 0); + return $res_str; +} + +include_once( 'ut_common.inc' ); +ut_run(); + +?> +--EXPECT-- +1234567,891 +sl_SI.UTF-8

« previous php.cvs (#79256) next »