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