tony2001                Thu Mar  8 00:43:06 2007 UTC

  Added files:                 
    /php-src/ext/standard/tests/general_functions       bug40752.phpt 

  Modified files:              
    /php-src/ext/standard       basic_functions.c 
  Log:
  fix #40752 (parse_ini_file() segfaults when a scalar setting is redeclared as 
an array)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.851&r2=1.852&diff_format=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.851 
php-src/ext/standard/basic_functions.c:1.852
--- php-src/ext/standard/basic_functions.c:1.851        Tue Mar  6 19:59:13 2007
+++ php-src/ext/standard/basic_functions.c      Thu Mar  8 00:43:05 2007
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c,v 1.851 2007/03/06 19:59:13 tony2001 Exp $ */
+/* $Id: basic_functions.c,v 1.852 2007/03/08 00:43:05 tony2001 Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -6211,6 +6211,12 @@
                                }
                        }
 
+                       if (Z_TYPE_P(hash) != IS_ARRAY) {
+                               zval_dtor(hash);
+                               INIT_PZVAL(hash);
+                               array_init(hash);
+                       }
+
                        ALLOC_ZVAL(element);
                        *element = *arg2;
                        zval_copy_ctor(element);

http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/bug40752.phpt?view=markup&rev=1.1
Index: php-src/ext/standard/tests/general_functions/bug40752.phpt
+++ php-src/ext/standard/tests/general_functions/bug40752.phpt
--TEST--
Bug #40752 (parse_ini_file() segfaults when a scalar setting is redeclared as 
an array)
--FILE--
<?php

$file = dirname(__FILE__)."/bug40752.ini";
file_put_contents($file, '
foo   = 1;
foo[] = 1;
');

var_dump(parse_ini_file($file));

file_put_contents($file, '
foo[] = 1;
foo   = 1;
');

var_dump(parse_ini_file($file));

unlink($file);

echo "Done\n";
?>
--EXPECTF--     
array(1) {
  ["foo"]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
}
array(1) {
  ["foo"]=>
  string(1) "1"
}
Done
--UEXPECTF--
array(1) {
  [u"foo"]=>
  array(1) {
    [0]=>
    unicode(1) "1"
  }
}
array(1) {
  [u"foo"]=>
  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