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

Reply via email to