diff options
Diffstat (limited to 'ext/spl/tests/spl_heap_iteration_error.phpt')
-rw-r--r-- | ext/spl/tests/spl_heap_iteration_error.phpt | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/ext/spl/tests/spl_heap_iteration_error.phpt b/ext/spl/tests/spl_heap_iteration_error.phpt new file mode 100644 index 0000000000..62e462f553 --- /dev/null +++ b/ext/spl/tests/spl_heap_iteration_error.phpt @@ -0,0 +1,53 @@ +--TEST-- +SPL: Attempt to corrupt the heap while iterating +--CREDITS-- +Lukasz Andrzejak meltir@meltir.com +#testfest London 2009-05-09 +--FILE-- +<?php +class ext_heap extends SplMaxHeap { + public $fail = false; + public function compare($val1,$val2) { + if ($this->fail) + throw new Exception('Corrupting heap',99); + return 0; + } +} + +$h = new ext_heap(); +$h->insert(array('foobar')); +$h->insert(array('foobar1')); +$h->insert(array('foobar2')); + +try { + $h->fail=true; + foreach ($h as $value) {}; + echo "I should have raised an exception here"; +} catch (Exception $e) { + if ($e->getCode()!=99) echo "Unexpected exception"; +} + +var_dump($h); +?> +--EXPECTF-- +object(ext_heap)#%d (4) { + [%u|b%"fail"]=> + bool(true) + [%u|b%"flags":%u|b%"SplHeap":private]=> + int(0) + [%u|b%"isCorrupted":%u|b%"SplHeap":private]=> + bool(true) + [%u|b%"heap":%u|b%"SplHeap":private]=> + array(2) { + [0]=> + array(1) { + [0]=> + %unicode|string%(7) "foobar2" + } + [1]=> + array(1) { + [0]=> + %unicode|string%(7) "foobar1" + } + } +} |