summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-03-06 09:10:43 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-03-06 09:11:10 +0100
commitb761997de37edf72a6b7f7d458f6503a00c9edb7 (patch)
tree39ae07aeae7abaf855dcbdacf268895dd9ac19ff
parent04c9c4ae7d8a11c132e8275735dcf457709a0cbd (diff)
parentb84277297ae18f11055a5731a881a347df8d76b9 (diff)
downloadphp-git-b761997de37edf72a6b7f7d458f6503a00c9edb7.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #75673: SplStack::unserialize() behavior
-rw-r--r--NEWS5
-rw-r--r--ext/spl/spl_dllist.c6
-rw-r--r--ext/spl/tests/bug75673.phpt19
3 files changed, 30 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 7902b67522..7e6b0377d1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,11 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+?? ??? ????, PHP 7.4.5
+
+- Spl:
+ . Fixed bug #75673 (SplStack::unserialize() behavior). (cmb)
+
?? ??? ????, PHP 7.4.4
- Core:
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index 168034906a..a0eb06a97a 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -1185,6 +1185,12 @@ SPL_METHOD(SplDoublyLinkedList, unserialize)
return;
}
+ while (intern->llist->count > 0) {
+ zval tmp;
+ spl_ptr_llist_pop(intern->llist, &tmp);
+ zval_ptr_dtor(&tmp);
+ }
+
s = p = (const unsigned char*)buf;
PHP_VAR_UNSERIALIZE_INIT(var_hash);
diff --git a/ext/spl/tests/bug75673.phpt b/ext/spl/tests/bug75673.phpt
new file mode 100644
index 0000000000..76fe3745fb
--- /dev/null
+++ b/ext/spl/tests/bug75673.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #75673 (SplStack::unserialize() behavior)
+--FILE--
+<?php
+$stack = new SplStack();
+$stack->push("one");
+$stack->push("two");
+
+$serialized = $stack->serialize();
+var_dump($stack->count());
+$stack->unserialize($serialized);
+var_dump($stack->count());
+$stack->unserialize($serialized);
+var_dump($stack->count());
+?>
+--EXPECT--
+int(2)
+int(2)
+int(2)