Skip to content

Commit 08e8862

Browse files
authored
Fix json_validate double free in parser when discarding lookahead (php#9696)
1 parent 3e9fcb5 commit 08e8862

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

ext/json/json_parser.y

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,13 +280,17 @@ static int php_json_parser_object_update_validate(php_json_parser *parser, zval
280280
static int php_json_yylex(union YYSTYPE *value, php_json_parser *parser)
281281
{
282282
int token = php_json_scan(&parser->scanner);
283-
value->value = parser->scanner.value;
284283

285-
if (parser->methods.array_create == php_json_parser_array_create_validate
284+
bool validate = parser->methods.array_create == php_json_parser_array_create_validate
286285
&& parser->methods.array_append == php_json_parser_array_append_validate
287286
&& parser->methods.object_create == php_json_parser_object_create_validate
288-
&& parser->methods.object_update == php_json_parser_object_update_validate) {
287+
&& parser->methods.object_update == php_json_parser_object_update_validate;
288+
289+
if (validate) {
289290
zval_ptr_dtor_str(&(parser->scanner.value));
291+
ZVAL_UNDEF(&value->value);
292+
} else {
293+
value->value = parser->scanner.value;
290294
}
291295

292296
return token;

0 commit comments

Comments
 (0)