helly Wed Jul 16 06:41:44 2003 EDT Modified files: /spl spl_array.c /spl/tests array_access_001.phpt array_access_002.phpt Log: Make array write stuff work again correct and fix tests Index: spl/spl_array.c diff -u spl/spl_array.c:1.7 spl/spl_array.c:1.8 --- spl/spl_array.c:1.7 Wed Jul 16 05:48:36 2003 +++ spl/spl_array.c Wed Jul 16 06:41:43 2003 @@ -218,9 +218,18 @@ FREE_OP(Ts, op2, EG(free_op2)); if (&EX(opline)->result) { - EX_T(EX(opline)->result.u.var).var.ptr = retval; - EX_T(EX(opline)->result.u.var).var.ptr_ptr = NULL;/*&EX_T(EX(opline)->result.u.var).var.ptr;*/ - SELECTIVE_PZVAL_LOCK(retval, &EX(opline)->result); + if (retval->refcount < 2) { + zend_error(E_WARNING, "Method %s::set() did not return a value, using input value", obj_ce->name); + EX_T(EX(opline)->result.u.var).var.ptr = value; + SELECTIVE_PZVAL_LOCK(value, &EX(opline)->result); + DELETE_RET_ZVAL(retval); + } else { + EX_T(EX(opline)->result.u.var).var.ptr = retval; + retval->refcount--; + } + EX_T(EX(opline)->result.u.var).var.ptr_ptr = NULL; + } else { + DELETE_RET_ZVAL(retval); } EX(opline)++; Index: spl/tests/array_access_001.phpt diff -u spl/tests/array_access_001.phpt:1.2 spl/tests/array_access_001.phpt:1.3 --- spl/tests/array_access_001.phpt:1.2 Wed Jun 4 16:54:13 2003 +++ spl/tests/array_access_001.phpt Wed Jul 16 06:41:43 2003 @@ -82,32 +82,28 @@ int(4) c::exists(5th) -Notice: Undefined index: 5th in %s on line %d +Notice: Undefined index: 5th in %sarray_access_001.php on line %d NULL c::exists(6) -Notice: Undefined index: 6 in %s on line %d +Notice: Undefined index: 6 in %sarray_access_001.php on line %d NULL WRITE 1 -c::exists(1) c::set(1,Changed 1) c::exists(1) c::get(1) string(9) "Changed 1" WRITE 2 -c::exists(4th) c::set(4th,Changed 4th) c::exists(4th) c::get(4th) string(11) "Changed 4th" WRITE 3 -c::exists(5th) c::set(5th,Added 5th) c::exists(5th) c::get(5th) string(9) "Added 5th" WRITE 4 -c::exists(6) c::set(6,Added 6) c::exists(6) c::get(6) @@ -118,7 +114,6 @@ c::exists(2) c::get(2) string(3) "3rd" -c::exists(6) c::set(6,changed 6) c::exists(6) c::get(6) Index: spl/tests/array_access_002.phpt diff -u spl/tests/array_access_002.phpt:1.2 spl/tests/array_access_002.phpt:1.3 --- spl/tests/array_access_002.phpt:1.2 Wed Jun 4 16:54:13 2003 +++ spl/tests/array_access_002.phpt Wed Jul 16 06:41:43 2003 @@ -10,6 +10,7 @@ class c implements spl_array_access { public $a = array('1st', 1, 2=>'3rd', '4th'=>4); + function exists($index) { echo __METHOD__ . "($index)\n"; return array_key_exists($index, $this->a); @@ -82,41 +83,37 @@ int(4) c::exists(5th) -Notice: Undefined index: 5th in %s on line %d +Notice: Undefined index: 5th in %sarray_access_002.php on line %d NULL c::exists(6) -Notice: Undefined index: 6 in %s on line %d +Notice: Undefined index: 6 in %sarray_access_002.php on line %d NULL WRITE 1 -c::exists(1) c::set(1,Changed 1) -Warning: Method c::set() did not return a value, using NULL in %s on line %d +Warning: Method c::set() did not return a value, using input value in %sarray_access_002.php on line %d c::exists(1) c::get(1) string(9) "Changed 1" WRITE 2 -c::exists(4th) c::set(4th,Changed 4th) -Warning: Method c::set() did not return a value, using NULL in %s on line %d +Warning: Method c::set() did not return a value, using input value in %sarray_access_002.php on line %d c::exists(4th) c::get(4th) string(11) "Changed 4th" WRITE 3 -c::exists(5th) c::set(5th,Added 5th) -Warning: Method c::set() did not return a value, using NULL in %s on line %d +Warning: Method c::set() did not return a value, using input value in %sarray_access_002.php on line %d c::exists(5th) c::get(5th) string(9) "Added 5th" WRITE 4 -c::exists(6) c::set(6,Added 6) -Warning: Method c::set() did not return a value, using NULL in %s on line %d +Warning: Method c::set() did not return a value, using input value in %sarray_access_002.php on line %d c::exists(6) c::get(6) string(7) "Added 6" @@ -126,12 +123,11 @@ c::exists(2) c::get(2) string(3) "3rd" -c::exists(6) c::set(6,changed 6) -Warning: Method c::set() did not return a value, using NULL in %s on line %d +Warning: Method c::set() did not return a value, using input value in %sarray_access_002.php on line %d c::exists(6) c::get(6) string(9) "changed 6" -NULL +string(9) "changed 6" Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php