diff options
| author | Antony Dovgal <tony2001@php.net> | 2006-04-01 19:13:04 +0000 |
|---|---|---|
| committer | Antony Dovgal <tony2001@php.net> | 2006-04-01 19:13:04 +0000 |
| commit | 9a59df13cc1a779bcd3d9ea1e775ca0e79293c82 (patch) | |
| tree | 3eac3d751f9775b8f2d2057787fa8d3042f519ca /ext | |
| parent | 8ccdceb4db1a2e979c16b1dc7314f44c51ab7c0c (diff) | |
| download | php-git-9a59df13cc1a779bcd3d9ea1e775ca0e79293c82.tar.gz | |
fix segfault when assigning value by ref and add test
(I consider it's wrong that we can't do it, but we shouldn't segfault anyway)
Diffstat (limited to 'ext')
| -rwxr-xr-x | ext/spl/spl_array.c | 4 | ||||
| -rw-r--r-- | ext/spl/tests/iterator_035.phpt | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 4b17419246..cb450b1eab 100755 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -219,6 +219,10 @@ static zval **spl_array_get_dimension_ptr_ptr(int check_inherited, zval *object, if (check_inherited && intern->fptr_offset_get) { return zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_get, "offsetGet", NULL, offset); }*/ + + if (!offset) { + return &EG(uninitialized_zval_ptr); + } switch(Z_TYPE_P(offset)) { case IS_STRING: diff --git a/ext/spl/tests/iterator_035.phpt b/ext/spl/tests/iterator_035.phpt new file mode 100644 index 0000000000..eebc7f22a4 --- /dev/null +++ b/ext/spl/tests/iterator_035.phpt @@ -0,0 +1,17 @@ +--TEST-- +SPL: ArrayIterator and values assigned by reference +--SKIPIF-- +<?php if (!extension_loaded("spl")) print "skip"; ?> +--FILE-- +<?php + +$tmp = 1; + +$a = new ArrayIterator(); +$a[] = $tmp; +$a[] = &$tmp; + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in %s on line %d |
