- Fixed bug #52138 (Constants are parsed into the ini file for section names)

This commit is contained in:
Felipe Pena 2010-06-24 22:32:42 +00:00
parent ee4818a12a
commit b355aa00b0
3 changed files with 66 additions and 1 deletions

View File

@ -304,7 +304,7 @@ statement:
;
section_string_or_value:
var_string_list { $$ = $1; }
var_string_list_section { $$ = $1; }
| /* empty */ { zend_ini_init_string(&$$); }
;
@ -326,6 +326,15 @@ encapsed_list:
| /* empty */ { zend_ini_init_string(&$$); }
;
var_string_list_section:
cfg_var_ref { $$ = $1; }
| constant_literal { $$ = $1; }
| '"' encapsed_list '"' { $$ = $2; }
| var_string_list_section cfg_var_ref { zend_ini_add_string(&$$, &$1, &$2); free(Z_STRVAL($2)); }
| var_string_list_section constant_literal { zend_ini_add_string(&$$, &$1, &$2); free(Z_STRVAL($2)); }
| var_string_list_section '"' encapsed_list '"' { zend_ini_add_string(&$$, &$1, &$3); free(Z_STRVAL($3)); }
;
var_string_list:
cfg_var_ref { $$ = $1; }
| constant_string { $$ = $1; }
@ -348,6 +357,14 @@ cfg_var_ref:
TC_DOLLAR_CURLY TC_VARNAME '}' { zend_ini_get_var(&$$, &$2 TSRMLS_CC); free(Z_STRVAL($2)); }
;
constant_literal:
TC_CONSTANT { $$ = $1; }
| TC_RAW { $$ = $1; /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
| TC_NUMBER { $$ = $1; /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
| TC_STRING { $$ = $1; /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
| TC_WHITESPACE { $$ = $1; /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
;
constant_string:
TC_CONSTANT { zend_ini_get_constant(&$$, &$1 TSRMLS_CC); }
| TC_RAW { $$ = $1; /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }

View File

@ -0,0 +1,11 @@
[MYCONST]
MYCONST = MYCONST
[M_PI]
FOO=M_PI " test"
[foo::bar]
A=1
B=A "A" A
[MYCONST M_PI]

View File

@ -0,0 +1,37 @@
--TEST--
Bug #52138 (Constants are parsed into the ini file for section names)
--FILE--
<?php
define('MYCONST', 1);
define('A', 'B');
$ini_file = dirname(__FILE__)."/bug52138.data";
$ret = parse_ini_file($ini_file, true);
var_dump($ret);
?>
--EXPECTF--
array(4) {
["MYCONST"]=>
array(1) {
["MYCONST"]=>
string(1) "1"
}
["M_PI"]=>
array(1) {
["FOO"]=>
string(%d) "3.%d test"
}
["foo::bar"]=>
array(2) {
["A"]=>
string(1) "1"
["B"]=>
string(3) "BAB"
}
["MYCONST M_PI"]=>
array(0) {
}
}