summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-12-19 10:42:10 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-12-19 10:43:05 +0100
commit0f078f6e78c70ec544adea4b06c4aebfba356a8e (patch)
treeed81f61b486f97575714908672a7670b4bf6b474
parentbacfae8baf71ad935585dbf1a046682f7f925a40 (diff)
downloadphp-git-0f078f6e78c70ec544adea4b06c4aebfba356a8e.tar.gz
Add destructor annotations in ini parser
It would be better to switch this to use %union and %type annotations, but not going to do that change for 7.3.
-rw-r--r--Zend/zend_ini_parser.y2
-rw-r--r--ext/standard/tests/general_functions/parse_ini_string_error.phpt10
2 files changed, 11 insertions, 1 deletions
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
index a83976a2d6..30c52277a3 100644
--- a/Zend/zend_ini_parser.y
+++ b/Zend/zend_ini_parser.y
@@ -310,7 +310,7 @@ static void zval_ini_dtor(zval *zv)
%left '|' '&' '^'
%right '~' '!'
-%destructor { zval_ini_dtor(&$$); } TC_RAW TC_CONSTANT TC_NUMBER TC_STRING TC_WHITESPACE TC_LABEL TC_OFFSET TC_VARNAME BOOL_TRUE BOOL_FALSE NULL_NULL
+%destructor { zval_ini_dtor(&$$); } TC_RAW TC_CONSTANT TC_NUMBER TC_STRING TC_WHITESPACE TC_LABEL TC_OFFSET TC_VARNAME BOOL_TRUE BOOL_FALSE NULL_NULL cfg_var_ref constant_literal constant_string encapsed_list expr option_offset section_string_or_value string_or_value var_string_list var_string_list_section
%%
diff --git a/ext/standard/tests/general_functions/parse_ini_string_error.phpt b/ext/standard/tests/general_functions/parse_ini_string_error.phpt
new file mode 100644
index 0000000000..0eba65ea17
--- /dev/null
+++ b/ext/standard/tests/general_functions/parse_ini_string_error.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Ini parsing errors should not result in memory leaks
+--FILE--
+<?php
+var_dump(parse_ini_string('a="b'));
+?>
+--EXPECTF--
+Warning: syntax error, unexpected $end, expecting TC_DOLLAR_CURLY or TC_QUOTED_STRING or '"' in Unknown on line 1
+ in %s on line %d
+bool(false)