summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-09-27 19:47:48 +0200
committerNikita Popov <nikic@php.net>2016-09-27 19:47:48 +0200
commitb7cbaa7f43d8a584e273e214209a4f7406a30029 (patch)
tree0bc8f7fafde1b4e9a8489214bfc23ab44896596c
parentcb29c01ed6ff60bb693a0b943bc8993b45c462b4 (diff)
downloadphp-git-b7cbaa7f43d8a584e273e214209a4f7406a30029.tar.gz
Fix bug #73181
-rw-r--r--NEWS4
-rw-r--r--Zend/tests/bug73181.phpt20
-rw-r--r--Zend/zend_hash.c8
3 files changed, 29 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index e45d2b52eb..0848c2e964 100644
--- a/NEWS
+++ b/NEWS
@@ -2,7 +2,9 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2016 PHP 7.0.13
-
+- Core:
+ . Fixed bug #73181 (parse_str() without a second argument leads to crash).
+ (Nikita)
13 Oct 2016 PHP 7.0.12
diff --git a/Zend/tests/bug73181.phpt b/Zend/tests/bug73181.phpt
new file mode 100644
index 0000000000..2994e99b9f
--- /dev/null
+++ b/Zend/tests/bug73181.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #73181: parse_str() without a second argument leads to crash
+--FILE--
+<?php
+
+function x() {
+ parse_str("1&x");
+ var_dump(get_defined_vars());
+}
+
+x();
+
+?>
+--EXPECT--
+array(2) {
+ [1]=>
+ string(0) ""
+ ["x"]=>
+ string(0) ""
+}
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index efbc1e2ae4..aecdac6379 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -1447,13 +1447,17 @@ ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht)
} else if (ht->nNumUsed == ht->nNumOfElements) {
do {
i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC);
- zend_string_release(p->key);
+ if (EXPECTED(p->key)) {
+ zend_string_release(p->key);
+ }
} while (++p != end);
} else {
do {
if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF)) {
i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC);
- zend_string_release(p->key);
+ if (EXPECTED(p->key)) {
+ zend_string_release(p->key);
+ }
}
} while (++p != end);
}