summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-03-22 21:56:40 +0000
committerAntony Dovgal <tony2001@php.net>2006-03-22 21:56:40 +0000
commit32f611097f68425f9ffa94b01ad361cc6e952d42 (patch)
tree9f16eb208cbfb829e21ac4f61759c1337a26d5af /ext
parent8a58105f4292f1fc8d55b7ffb4080c8f1cd2bee0 (diff)
downloadphp-git-32f611097f68425f9ffa94b01ad361cc6e952d42.tar.gz
fix #36825 (Exceptions thrown in ArrayObject::offsetGet cause segfault)
fix similar issue in offsetExists() remove redundant semicolons
Diffstat (limited to 'ext')
-rwxr-xr-xext/spl/spl_array.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 4414e48ea1..0491fc70f4 100755
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -262,7 +262,11 @@ static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval
zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_get, "offsetGet", &rv, offset);
zval_ptr_dtor(&intern->retval);
MAKE_STD_ZVAL(intern->retval);
- ZVAL_ZVAL(intern->retval, rv, 1, 1);
+ if (rv) {
+ ZVAL_ZVAL(intern->retval, rv, 1, 1);
+ } else {
+ ZVAL_NULL(intern->retval);
+ }
return intern->retval;
}
}
@@ -390,11 +394,13 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
if (check_inherited && intern->fptr_offset_has) {
zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset);
- if (zend_is_true(rv)) {
+ if (rv && zend_is_true(rv)) {
zval_ptr_dtor(&rv);
return 1;
}
- zval_ptr_dtor(&rv);
+ if (rv) {
+ zval_ptr_dtor(&rv);
+ }
return 0;
}
@@ -1207,43 +1213,43 @@ SPL_METHOD(Array, getChildren)
static
ZEND_BEGIN_ARG_INFO(arginfo_array___construct, 0)
ZEND_ARG_INFO(0, array)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetGet, 0, 0, 1)
ZEND_ARG_INFO(0, index)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetSet, 0, 0, 2)
ZEND_ARG_INFO(0, index)
ZEND_ARG_INFO(0, newval)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO(arginfo_array_append, 0)
ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO(arginfo_array_seek, 0)
ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO(arginfo_array_exchangeArray, 0)
ZEND_ARG_INFO(0, array)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO(arginfo_array_setFlags, 0)
ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO(arginfo_array_setIteratorClass, 0)
ZEND_ARG_INFO(0, iteratorClass)
-ZEND_END_ARG_INFO();
+ZEND_END_ARG_INFO()
static zend_function_entry spl_funcs_ArrayObject[] = {
SPL_ME(Array, __construct, arginfo_array___construct, ZEND_ACC_PUBLIC)