tony2001 Tue Jun 26 12:10:08 2007 UTC Added files: (Branch: PHP_5_2) /php-src/ext/standard/tests/general_functions bug41445.phpt bug41445_1.phpt
Modified files: /php-src/ext/standard basic_functions.c /php-src NEWS Log: MFH: fix #41445 (parse_ini_file() has a problem with certain types of integer as sections) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.725.2.31.2.55&r2=1.725.2.31.2.56&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.725.2.31.2.55 php-src/ext/standard/basic_functions.c:1.725.2.31.2.56 --- php-src/ext/standard/basic_functions.c:1.725.2.31.2.55 Mon Jun 25 21:12:47 2007 +++ php-src/ext/standard/basic_functions.c Tue Jun 26 12:10:08 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.725.2.31.2.55 2007/06/25 21:12:47 tony2001 Exp $ */ +/* $Id: basic_functions.c,v 1.725.2.31.2.56 2007/06/26 12:10:08 tony2001 Exp $ */ #include "php.h" #include "php_streams.h" @@ -6130,12 +6130,7 @@ *element = *arg2; zval_copy_ctor(element); INIT_PZVAL(element); - if (is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) != IS_LONG) { - zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &element, sizeof(zval *), NULL); - } else { - ulong key = (ulong) zend_atoi(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)); - zend_hash_index_update(Z_ARRVAL_P(arr), key, &element, sizeof(zval *), NULL); - } + zend_symtable_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &element, sizeof(zval *), NULL); break; case ZEND_INI_PARSER_POP_ENTRY: @@ -6147,17 +6142,7 @@ break; } - if (is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) != IS_LONG) { - if (zend_hash_find(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void **) &find_hash) == FAILURE) { - ALLOC_ZVAL(hash); - INIT_PZVAL(hash); - array_init(hash); - - zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &hash, sizeof(zval *), NULL); - } else { - hash = *find_hash; - } - } else { + if (!(Z_STRLEN_P(arg1) > 1 && Z_STRVAL_P(arg1)[0]=='0') && is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) == IS_LONG) { ulong key = (ulong) zend_atoi(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)); if (zend_hash_index_find(Z_ARRVAL_P(arr), key, (void **) &find_hash) == FAILURE) { ALLOC_ZVAL(hash); @@ -6168,6 +6153,16 @@ } else { hash = *find_hash; } + } else { + if (zend_hash_find(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void **) &find_hash) == FAILURE) { + ALLOC_ZVAL(hash); + INIT_PZVAL(hash); + array_init(hash); + + zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &hash, sizeof(zval *), NULL); + } else { + hash = *find_hash; + } } if (Z_TYPE_P(hash) != IS_ARRAY) { @@ -6196,12 +6191,7 @@ if (callback_type == ZEND_INI_PARSER_SECTION) { MAKE_STD_ZVAL(BG(active_ini_file_section)); array_init(BG(active_ini_file_section)); - if (is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) != IS_LONG) { - zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &BG(active_ini_file_section), sizeof(zval *), NULL); - } else { - ulong key = (ulong) zend_atoi(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)); - zend_hash_index_update(Z_ARRVAL_P(arr), key, &BG(active_ini_file_section), sizeof(zval *), NULL); - } + zend_symtable_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &BG(active_ini_file_section), sizeof(zval *), NULL); } else if (arg2) { zval *active_arr; http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.801&r2=1.2027.2.547.2.802&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.801 php-src/NEWS:1.2027.2.547.2.802 --- php-src/NEWS:1.2027.2.547.2.801 Tue Jun 26 11:04:55 2007 +++ php-src/NEWS Tue Jun 26 12:10:08 2007 @@ -84,6 +84,8 @@ - Fixed bug #41527 (WDDX deserialize numeric string array key). (Matt, Ilia) - Fixed bug #41518 (file_exists() warns of open_basedir restriction on non-existent file). (Tony) +- Fixed bug #41445 (parse_ini_file() has a problem with certain types of + integer as sections). (Tony) - Fixed bug #41350 (my_thread_global_end() error during request shutdown on Windows). (Scott, Andrey) - Fixed bug #39330 (apache2handler does not call shutdown actions before http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/bug41445.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/general_functions/bug41445.phpt +++ php-src/ext/standard/tests/general_functions/bug41445.phpt --TEST-- Bug #41445 (parse_ini_file() function parses octal numbers in section names) --FILE-- <?php $file = dirname(__FILE__)."/bug41445.ini"; $data = <<<DATA [001099030277] option1 = yes [011099030277] option2 = yes DATA; file_put_contents($file, $data); var_dump(parse_ini_file($file, TRUE)); var_dump(parse_ini_file($file)); $data = <<<DATA [23.44] option1 = yes [9633337363542736472364] option2 = yes DATA; file_put_contents($file, $data); var_dump(parse_ini_file($file, TRUE)); var_dump(parse_ini_file($file)); @unlink($file); echo "Done\n"; ?> --EXPECTF-- array(2) { ["001099030277"]=> array(1) { ["option1"]=> string(1) "1" } ["011099030277"]=> array(1) { ["option2"]=> string(1) "1" } } array(2) { ["option1"]=> string(1) "1" ["option2"]=> string(1) "1" } array(2) { ["23.44"]=> array(1) { ["option1"]=> string(1) "1" } ["9633337363542736472364"]=> array(1) { ["option2"]=> string(1) "1" } } array(2) { ["option1"]=> string(1) "1" ["option2"]=> string(1) "1" } Done --UEXPECTF-- array(2) { [u"001099030277"]=> array(1) { [u"option1"]=> unicode(1) "1" } [u"011099030277"]=> array(1) { [u"option2"]=> unicode(1) "1" } } array(2) { [u"option1"]=> unicode(1) "1" [u"option2"]=> unicode(1) "1" } array(2) { [u"23.44"]=> array(1) { [u"option1"]=> unicode(1) "1" } [u"9633337363542736472364"]=> array(1) { [u"option2"]=> unicode(1) "1" } } array(2) { [u"option1"]=> unicode(1) "1" [u"option2"]=> unicode(1) "1" } Done http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/bug41445_1.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/general_functions/bug41445_1.phpt +++ php-src/ext/standard/tests/general_functions/bug41445_1.phpt --TEST-- Bug #41445 (parse_ini_file() function parses octal numbers in section names) - 2 --FILE-- <?php $file = dirname(__FILE__)."/bug41445.ini"; $data = <<<DATA [2454.33] 09 = yes [9876543] 098765434567876543 = yes [09876543] 987654345678765432456798765434567876543 = yes DATA; file_put_contents($file, $data); var_dump(parse_ini_file($file, TRUE)); var_dump(parse_ini_file($file)); @unlink($file); echo "Done\n"; ?> --EXPECTF-- array(3) { ["2454.33"]=> array(1) { ["09"]=> string(1) "1" } [9876543]=> array(1) { ["098765434567876543"]=> string(1) "1" } ["09876543"]=> array(1) { ["987654345678765432456798765434567876543"]=> string(1) "1" } } array(3) { ["09"]=> string(1) "1" ["098765434567876543"]=> string(1) "1" ["987654345678765432456798765434567876543"]=> string(1) "1" } Done --UEXPECTF-- array(3) { [u"2454.33"]=> array(1) { [u"09"]=> unicode(1) "1" } [9876543]=> array(1) { [u"098765434567876543"]=> unicode(1) "1" } [u"09876543"]=> array(1) { [u"987654345678765432456798765434567876543"]=> unicode(1) "1" } } array(3) { [u"09"]=> unicode(1) "1" [u"098765434567876543"]=> unicode(1) "1" [u"987654345678765432456798765434567876543"]=> unicode(1) "1" } Done -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php