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: | Stanislav Malyshev | 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