Skip to content

Commit ce01fb5

Browse files
committed
Fix GH-20695: Assertion failure in normalize_value() when parsing malformed INI input via parse_ini_string()
I think there's simply a reasoning error about when which scanner state can cause which parser component to invoke later on.
1 parent 038e534 commit ce01fb5

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

Zend/zend_ini_scanner.l

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,10 @@ ZEND_API zend_ini_scanner_globals ini_scanner_globals;
145145
if (SCNG(scanner_mode) == ZEND_INI_SCANNER_TYPED && \
146146
(YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW))) {\
147147
zend_ini_copy_typed_value(ini_lval, type, str, len); \
148-
Z_EXTRA_P(ini_lval) = 0; \
149148
} else { \
150149
zend_ini_copy_value(ini_lval, str, len); \
151150
} \
151+
Z_EXTRA_P(ini_lval) = 0; \
152152
return type; \
153153
}
154154

ext/standard/tests/gh20695.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
GH-20695 (Assertion failure in normalize_value() when parsing malformed INI input via parse_ini_string())
3+
--FILE--
4+
<?php
5+
var_dump(parse_ini_string('8 [[] = !!$]', true, INI_SCANNER_TYPED));
6+
?>
7+
--EXPECT--
8+
array(1) {
9+
[8]=>
10+
array(1) {
11+
["["]=>
12+
int(0)
13+
}
14+
}

0 commit comments

Comments
 (0)