diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2017-09-20 15:36:50 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2017-09-20 15:46:04 +0200 |
commit | eedc060c92e12e054a542dc7156e31cec935a8d6 (patch) | |
tree | 155f56fef24c255cc6644a9b27a1d614a3441e02 /ext/spl | |
parent | 9641586efa861abc1f6b1dba9efba73a065e3ca5 (diff) | |
download | php-git-eedc060c92e12e054a542dc7156e31cec935a8d6.tar.gz |
Fixed bug #73629 (SplDoublyLinkedList::setIteratorMode masks intern flags)
We must not overwrite the SPL_DLLIST_IT_FIX flag when changing the
iterator mode.
Diffstat (limited to 'ext/spl')
-rw-r--r-- | ext/spl/spl_dllist.c | 2 | ||||
-rw-r--r-- | ext/spl/tests/bug73629.phpt | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c index c205de5fed..db9fa838c8 100644 --- a/ext/spl/spl_dllist.c +++ b/ext/spl/spl_dllist.c @@ -733,7 +733,7 @@ SPL_METHOD(SplDoublyLinkedList, setIteratorMode) return; } - intern->flags = value & SPL_DLLIST_IT_MASK; + intern->flags = value & SPL_DLLIST_IT_MASK | intern->flags & SPL_DLLIST_IT_FIX; RETURN_LONG(intern->flags); } diff --git a/ext/spl/tests/bug73629.phpt b/ext/spl/tests/bug73629.phpt new file mode 100644 index 0000000000..5b6587c685 --- /dev/null +++ b/ext/spl/tests/bug73629.phpt @@ -0,0 +1,20 @@ +--TEST--
+Bug #73629 (SplDoublyLinkedList::setIteratorMode masks intern flags)
+--FILE--
+<?php
+$q = new SplQueue();
+try {
+ $q->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
+} catch (Exception $e) {
+ echo 'unexpected exception: ' . $e->getMessage() . "\n";
+}
+try {
+ $q->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
+} catch (Exception $e) {
+ echo 'expected exception: ' . $e->getMessage() . "\n";
+}
+?>
+===DONE===
+--EXPECTF--
+expected exception: Iterators' LIFO/FIFO modes for SplStack/SplQueue objects are frozen
+===DONE===
|