jani                                     Tue, 04 Aug 2009 02:34:04 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=286778

Log:
- Fixed bug #49056 (parse_ini_file() regression in 5.3.0 when using non-ASCII 
strings as option keys)

Bug: http://bugs.php.net/49056 (Open) parse_ini_file() regression in 5.3.0 when 
using non-ASCII strings as option keys
      
Changed paths:
    A   
php/php-src/branches/PHP_5_2/ext/standard/tests/general_functions/bug49056.phpt
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/Zend/zend_ini_scanner.l
    A   
php/php-src/branches/PHP_5_3/ext/standard/tests/general_functions/bug49056.phpt
    U   php/php-src/trunk/Zend/zend_ini_scanner.l
    A   php/php-src/trunk/ext/standard/tests/general_functions/bug49056.phpt

Added: 
php/php-src/branches/PHP_5_2/ext/standard/tests/general_functions/bug49056.phpt
===================================================================
--- 
php/php-src/branches/PHP_5_2/ext/standard/tests/general_functions/bug49056.phpt 
                            (rev 0)
+++ 
php/php-src/branches/PHP_5_2/ext/standard/tests/general_functions/bug49056.phpt 
    2009-08-04 02:34:04 UTC (rev 286778)
@@ -0,0 +1,26 @@
+--TEST--
+Bug #49056 (parse_ini_*() regression in 5.3.0 when using non-ASCII strings as 
option keys)
+--FILE--
+<?php
+
+$string = <<<EOT
+Cooking_furniture="Küchen Möbel (en)"
+Küchen_Möbel="Cooking furniture (en)"
+EOT;
+
+$filename = dirname(__FILE__) . '/bug49056.tmp';
+
+file_put_contents( $filename, $string);
+
+var_dump(parse_ini_file($filename));
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug49056.tmp'); ?>
+--EXPECT--
+array(2) {
+  ["Cooking_furniture"]=>
+  string(23) "Küchen Möbel (en)"
+  ["Küchen_Möbel"]=>
+  string(22) "Cooking furniture (en)"
+}

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2009-08-04 02:24:47 UTC (rev 286777)
+++ php/php-src/branches/PHP_5_3/NEWS   2009-08-04 02:34:04 UTC (rev 286778)
@@ -23,6 +23,8 @@
   Zend extensions). (Stas)
 - Fixed bug #49064 (--enable-session=shared does not work: undefined symbol:
   php_url_scanner_reset_vars). (Jani)
+- Fixed bug #49056 (parse_ini_file() regression in 5.3.0 when using non-ASCII
+  strings as option keys). (Jani)
 - Fixed bug #49052 (context option headers freed too early when using
   --with-curlwrappers). (Jani)
 - Fixed bug #49032 (SplFileObject::fscanf() variables passed by reference).

Modified: php/php-src/branches/PHP_5_3/Zend/zend_ini_scanner.l
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/zend_ini_scanner.l        2009-08-04 
02:24:47 UTC (rev 286777)
+++ php/php-src/branches/PHP_5_3/Zend/zend_ini_scanner.l        2009-08-04 
02:34:04 UTC (rev 286778)
@@ -308,7 +308,7 @@
 TABS_AND_SPACES [ \t]
 WHITESPACE [ \t]+
 CONSTANT [a-zA-Z][a-zA-Z0-9_]*
-LABEL [a-zA-Z0-9*._-]*
+LABEL [^=\n\r\t ;|&$~(){}!"\[]+
 TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?...@{}]
 OPERATORS [&|~()!]
 DOLLAR_CURLY "${"

Added: 
php/php-src/branches/PHP_5_3/ext/standard/tests/general_functions/bug49056.phpt
===================================================================
--- 
php/php-src/branches/PHP_5_3/ext/standard/tests/general_functions/bug49056.phpt 
                            (rev 0)
+++ 
php/php-src/branches/PHP_5_3/ext/standard/tests/general_functions/bug49056.phpt 
    2009-08-04 02:34:04 UTC (rev 286778)
@@ -0,0 +1,26 @@
+--TEST--
+Bug #49056 (parse_ini_*() regression in 5.3.0 when using non-ASCII strings as 
option keys)
+--FILE--
+<?php
+
+$string = <<<EOT
+Cooking_furniture="Küchen Möbel (en)"
+Küchen_Möbel="Cooking furniture (en)"
+EOT;
+
+$filename = dirname(__FILE__) . '/bug49056.tmp';
+
+file_put_contents( $filename, $string);
+
+var_dump(parse_ini_file($filename));
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug49056.tmp'); ?>
+--EXPECT--
+array(2) {
+  ["Cooking_furniture"]=>
+  string(23) "Küchen Möbel (en)"
+  ["Küchen_Möbel"]=>
+  string(22) "Cooking furniture (en)"
+}

Modified: php/php-src/trunk/Zend/zend_ini_scanner.l
===================================================================
--- php/php-src/trunk/Zend/zend_ini_scanner.l   2009-08-04 02:24:47 UTC (rev 
286777)
+++ php/php-src/trunk/Zend/zend_ini_scanner.l   2009-08-04 02:34:04 UTC (rev 
286778)
@@ -298,7 +298,6 @@
                        goto restart;
                }
        }
-
 /*!re2c
 re2c:yyfill:check = 0;
 LNUM [0-9]+
@@ -309,7 +308,7 @@
 TABS_AND_SPACES [ \t]
 WHITESPACE [ \t]+
 CONSTANT [a-zA-Z][a-zA-Z0-9_]*
-LABEL [a-zA-Z0-9*._-]*
+LABEL [^=\n\r\t ;|&$~(){}!"\[]+
 TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?...@{}]
 OPERATORS [&|~()!]
 DOLLAR_CURLY "${"
@@ -318,13 +317,12 @@
 SINGLE_QUOTED_CHARS [^']
 RAW_VALUE_CHARS [^=\n\r;]

-/* Allow using ${foobar} in sections, quoted strings and values */
 LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
 VALUE_CHARS         ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
 SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
 DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"[^"])|{LITERAL_DOLLAR}|"\\"["][^\r\n])

-+<!*> := yyleng = YYCURSOR - SCNG(yy_text);
+<!*> := yyleng = YYCURSOR - SCNG(yy_text);

 <INITIAL>"[" { /* Section start */
        /* Enter section data lookup state */
@@ -489,11 +487,18 @@
        return END_OF_LINE;
 }

-<ST_VALUE,ST_RAW>[^] { /* End of option value (if EOF is reached before EOL) */
+<INITIAL>{TABS_AND_SPACES}*[#][^\r\n]*{NEWLINE} { /* #Comment */
+       zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in 
%s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno));
        BEGIN(INITIAL);
+       SCNG(lineno)++;
        return END_OF_LINE;
 }

+<ST_VALUE,ST_RAW>[^] { /* End of option value (if EOF is reached before EOL */
+       BEGIN(INITIAL);
+       return END_OF_LINE;
+}
+
 <*>[^] {
        return 0;
 }

Added: php/php-src/trunk/ext/standard/tests/general_functions/bug49056.phpt
===================================================================
--- php/php-src/trunk/ext/standard/tests/general_functions/bug49056.phpt        
                        (rev 0)
+++ php/php-src/trunk/ext/standard/tests/general_functions/bug49056.phpt        
2009-08-04 02:34:04 UTC (rev 286778)
@@ -0,0 +1,26 @@
+--TEST--
+Bug #49056 (parse_ini_*() regression in 5.3.0 when using non-ASCII strings as 
option keys)
+--FILE--
+<?php
+
+$string = <<<EOT
+Cooking_furniture="Küchen Möbel (en)"
+Küchen_Möbel="Cooking furniture (en)"
+EOT;
+
+$filename = dirname(__FILE__) . '/bug49056.tmp';
+
+file_put_contents( $filename, $string);
+
+var_dump(parse_ini_file($filename));
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug49056.tmp'); ?>
+--EXPECT--
+array(2) {
+  [u"Cooking_furniture"]=>
+  unicode(19) "Küchen Möbel (en)"
+  [u"Küchen_Möbel"]=>
+  unicode(22) "Cooking furniture (en)"
+}

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to