diff --git a/NEWS b/NEWS index 29cc73c3b15..4bac3084122 100644 --- a/NEWS +++ b/NEWS @@ -38,6 +38,8 @@ PHP NEWS newline). (Arnaud) - Fixed bug #45044 (relative paths not resolved correctly). (Dmitry) - Fixed bug #44925 (preg_grep() modifies input array). (Nuno) +- Fixed bug #44842 (parse_ini_file keys that start/end with underscore). + (Arnaud) - Fixed bug #44100 (Inconsistent handling of static array declarations with duplicate keys). (Dmitry) - Fixed bug #43817 (opendir() fails on Windows directories with parent diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index 901b52681a2..742bbe2b243 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -312,7 +312,7 @@ NEWLINE ("\r"|"\n"|"\r\n") TABS_AND_SPACES [ \t] WHITESPACE [ \t]+ CONSTANT [a-zA-Z][a-zA-Z0-9_]* -LABEL [a-zA-Z0-9][a-zA-Z0-9._-]* +LABEL [a-zA-Z0-9_][a-zA-Z0-9._-]* TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?@{}] OPERATORS [&|~()!] DOLLAR_CURLY "${" diff --git a/ext/standard/tests/general_functions/parse_ini_file.phpt b/ext/standard/tests/general_functions/parse_ini_file.phpt index 23684510804..e7b9e898c20 100644 --- a/ext/standard/tests/general_functions/parse_ini_file.phpt +++ b/ext/standard/tests/general_functions/parse_ini_file.phpt @@ -94,6 +94,15 @@ $ini = "[section1]\nname = value"; file_put_contents($filename, $ini); var_dump(parse_ini_file($filename, true)); +/* #44842, labels starting with underscore */ +$ini = <<<'INI' +foo=bar1 +_foo=bar2 +foo_=bar3 +INI; +file_put_contents($filename, $ini); +var_dump(parse_ini_file($filename, true)); + @unlink($filename); echo "Done\n"; ?> @@ -182,4 +191,12 @@ array(1) { string(5) "value" } } +array(3) { + ["foo"]=> + string(4) "bar1" + ["_foo"]=> + string(4) "bar2" + ["foo_"]=> + string(4) "bar3" +} Done