php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | |
Patch string_offset_trigger_notice.patch for Arrays related Bug #60362Patch version 2011-12-05 05:17 UTC Return to Bug #60362 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: laruence@php.netIndex: Zend/zend_execute.c =================================================================== --- Zend/zend_execute.c (revision 320369) +++ Zend/zend_execute.c (working copy) @@ -1150,10 +1150,13 @@ switch(Z_TYPE_P(dim)) { /* case IS_LONG: */ case IS_STRING: + if (IS_LONG == is_numeric_string(Z_STRVAL_P(dim), Z_STRLEN_P(dim), NULL, NULL, -1)) { + break; + } case IS_DOUBLE: case IS_NULL: case IS_BOOL: - /* do nothing */ + zend_error(E_NOTICE, "String offset cast occured"); break; default: zend_error(E_WARNING, "Illegal offset type"); @@ -1260,15 +1263,18 @@ case IS_STRING: { zval tmp; zval *ptr; - + if (Z_TYPE_P(dim) != IS_LONG) { switch(Z_TYPE_P(dim)) { /* case IS_LONG: */ case IS_STRING: + if (IS_LONG == is_numeric_string(Z_STRVAL_P(dim), Z_STRLEN_P(dim), NULL, NULL, -1)) { + break; + } case IS_DOUBLE: case IS_NULL: case IS_BOOL: - /* do nothing */ + zend_error(E_NOTICE, "String offset cast occured"); break; default: zend_error(E_WARNING, "Illegal offset type"); @@ -1287,7 +1293,7 @@ if (Z_LVAL_P(dim) < 0 || Z_STRLEN_P(container) <= Z_LVAL_P(dim)) { if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Uninitialized string offset: %ld", Z_LVAL_P(dim)); + zend_error(E_NOTICE, "Uninitialized or invalid string offset: %ld", Z_LVAL_P(dim)); } Z_STRVAL_P(ptr) = STR_EMPTY_ALLOC(); Z_STRLEN_P(ptr) = 0; Index: Zend/tests/offset_string.phpt =================================================================== --- Zend/tests/offset_string.phpt (revision 320369) +++ Zend/tests/offset_string.phpt (working copy) @@ -26,20 +26,30 @@ ?> --EXPECTF-- string(1) "i" + +Notice: String offset cast occured in %soffset_string.php on line %d string(1) "S" + +Notice: String offset cast occured in %soffset_string.php on line %d string(1) "S" + +Notice: String offset cast occured in %soffset_string.php on line %d string(1) "S" + +Notice: String offset cast occured in %soffset_string.php on line %d string(1) "i" + +Notice: String offset cast occured in %soffset_string.php on line %d string(1) "S" -Warning: Illegal offset type in %s on line %d -string(1) "%s" +Warning: Illegal offset type in %soffset_string.php on line %d +string(1) "n" -Warning: Illegal offset type in %s on line %d +Warning: Illegal offset type in %soffset_string.php on line %d -Notice: Object of class stdClass could not be converted to int in %s on line %d -string(1) "%s" +Notice: Object of class stdClass could not be converted to int in %soffset_string.php on line %d +string(1) "i" -Warning: Illegal offset type in %s on line %d +Warning: Illegal offset type in %soffset_string.php on line %d string(1) "i" Done Index: Zend/tests/bug39304.phpt =================================================================== --- Zend/tests/bug39304.phpt (revision 320369) +++ Zend/tests/bug39304.phpt (working copy) @@ -7,10 +7,10 @@ echo "I am alive"; ?> --EXPECTF-- -Notice: Uninitialized string offset: 0 in %sbug39304.php on line 3 +Notice: Uninitialized or invalid string offset: 0 in %sbug39304.php on line 3 -Notice: Uninitialized string offset: 1 in %sbug39304.php on line 3 +Notice: Uninitialized or invalid string offset: 1 in %sbug39304.php on line 3 -Notice: Uninitialized string offset: 0 in %sbug39304.php on line 3 +Notice: Uninitialized or invalid string offset: 0 in %sbug39304.php on line 3 I am alive Index: Zend/tests/bug39304_2_4.phpt =================================================================== --- Zend/tests/bug39304_2_4.phpt (revision 320369) +++ Zend/tests/bug39304_2_4.phpt (working copy) @@ -9,10 +9,10 @@ var_dump($a,$b); ?> --EXPECTF-- -Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line 3 +Notice: Uninitialized or invalid string offset: 0 in %sbug39304_2_4.php on line 3 -Notice: Uninitialized string offset: 1 in %sbug39304_2_4.php on line 3 +Notice: Uninitialized or invalid string offset: 1 in %sbug39304_2_4.php on line 3 -Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line 3 +Notice: Uninitialized or invalid string offset: 0 in %sbug39304_2_4.php on line 3 string(0) "" string(0) "" Index: Zend/tests/bug39018.phpt =================================================================== --- Zend/tests/bug39018.phpt (revision 320369) +++ Zend/tests/bug39018.phpt (working copy) @@ -63,30 +63,42 @@ ?> --EXPECTF-- -Notice: Uninitialized string offset: %i in %s on line 6 +Notice: Uninitialized or invalid string offset: %i in %s on line 6 -Notice: Uninitialized string offset: 0 in %s on line 10 +Notice: Uninitialized or invalid string offset: 0 in %s on line 10 -Notice: Uninitialized string offset: 0 in %s on line 12 +Notice: Uninitialized or invalid string offset: 0 in %s on line 12 -Notice: Uninitialized string offset: %i in %s on line 14 +Notice: String offset cast occured in %s on line 14 -Notice: Uninitialized string offset: %i in %s on line 16 +Notice: Uninitialized or invalid string offset: %i in %s on line 14 -Notice: Uninitialized string offset: 0 in %s on line 18 +Notice: String offset cast occured in %s on line 16 -Notice: Uninitialized string offset: 4 in %s on line 28 +Notice: Uninitialized or invalid string offset: %i in %s on line 16 -Notice: Uninitialized string offset: 4 in %s on line 34 +Notice: Uninitialized or invalid string offset: 0 in %s on line 18 -Notice: Uninitialized string offset: 4 in %s on line 38 +Notice: Uninitialized or invalid string offset: 4 in %s on line 28 -Notice: Uninitialized string offset: 4 in %s on line 42 +Notice: Uninitialized or invalid string offset: 4 in %s on line 34 -Notice: Uninitialized string offset: 4 in %s on line 46 +Notice: Uninitialized or invalid string offset: 4 in %s on line 38 -Notice: Uninitialized string offset: 12 in %s on line 50 +Notice: Uninitialized or invalid string offset: 4 in %s on line 42 -Notice: Uninitialized string offset: 12 in %s on line 52 +Notice: Uninitialized or invalid string offset: 4 in %s on line 46 + +Notice: String offset cast occured in %s on line 50 + +Notice: Uninitialized or invalid string offset: 12 in %s on line 50 + +Notice: String offset cast occured in %s on line 52 + +Notice: Uninitialized or invalid string offset: 12 in %s on line 52 + +Notice: String offset cast occured in %s on line 54 + +Notice: String offset cast occured in %s on line 56 b Done Index: Zend/tests/result_unused.phpt =================================================================== --- Zend/tests/result_unused.phpt (revision 320369) +++ Zend/tests/result_unused.phpt (working copy) @@ -24,6 +24,6 @@ $x->y; echo "ok\n"; --EXPECTF-- -Notice: Uninitialized string offset: 3 in %sresult_unused.php on line 11 +Notice: Uninitialized or invalid string offset: 3 in %sresult_unused.php on line 11 ok Index: Zend/tests/indexing_001.phpt =================================================================== --- Zend/tests/indexing_001.phpt (revision 320369) +++ Zend/tests/indexing_001.phpt (working copy) @@ -71,6 +71,8 @@ } } +Notice: String offset cast occured in %s on line %d + Notice: Array to string conversion in %s on line %d string(1) "A" @@ -209,4 +211,4 @@ } } -Done \ No newline at end of file +Done Index: Zend/tests/bug54262.phpt =================================================================== --- Zend/tests/bug54262.phpt (revision 320369) +++ Zend/tests/bug54262.phpt (working copy) @@ -9,6 +9,7 @@ echo "ok\n"; ?> --EXPECTF-- +Notice: String offset cast occured in %sbug54262.php on line %d bool(true) Warning: Attempt to modify property of non-object in %sbug54262.php on line 4 Index: Zend/tests/offset_assign.phpt =================================================================== --- Zend/tests/offset_assign.phpt (revision 320369) +++ Zend/tests/offset_assign.phpt (working copy) @@ -7,5 +7,7 @@ echo "Done\n"; ?> ---EXPECTF-- -Fatal error: Cannot use string offset as an array in %s on line %d +--EXPECTF-- +Notice: String offset cast occured in %soffset_assign.php on line %d + +Fatal error: Cannot use string offset as an array in %soffset_assign.php on line %d Index: Zend/tests/str_offset_001.phpt =================================================================== --- Zend/tests/str_offset_001.phpt (revision 320369) +++ Zend/tests/str_offset_001.phpt (working copy) @@ -24,28 +24,28 @@ foo($str[2][1]); ?> --EXPECTF-- -Notice: Uninitialized string offset: -1 in %sstr_offset_001.php on line 7 +Notice: Uninitialized or invalid string offset: -1 in %sstr_offset_001.php on line 7 string(0) "" string(1) "a" string(1) "b" string(1) "c" -Notice: Uninitialized string offset: 3 in %sstr_offset_001.php on line 11 +Notice: Uninitialized or invalid string offset: 3 in %sstr_offset_001.php on line 11 string(0) "" string(1) "b" -Notice: Uninitialized string offset: 1 in %sstr_offset_001.php on line 13 +Notice: Uninitialized or invalid string offset: 1 in %sstr_offset_001.php on line 13 string(0) "" -Notice: Uninitialized string offset: -1 in %sstr_offset_001.php on line 15 +Notice: Uninitialized or invalid string offset: -1 in %sstr_offset_001.php on line 15 string(0) "" string(1) "a" string(1) "b" string(1) "c" -Notice: Uninitialized string offset: 3 in %sstr_offset_001.php on line 19 +Notice: Uninitialized or invalid string offset: 3 in %sstr_offset_001.php on line 19 string(0) "" string(1) "b" -Notice: Uninitialized string offset: 1 in %sstr_offset_001.php on line 21 +Notice: Uninitialized or invalid string offset: 1 in %sstr_offset_001.php on line 21 string(0) "" Index: Zend/tests/bug24773.phpt =================================================================== --- Zend/tests/bug24773.phpt (revision 320369) +++ Zend/tests/bug24773.phpt (working copy) @@ -6,4 +6,6 @@ unset($array["lvl1"]["lvl2"]["b"]); ?> --EXPECTF-- +Notice: String offset cast occured in %sbug24773.php on line %d + Fatal error: Cannot unset string offsets in %s on line %d Index: Zend/tests/bug31098.phpt =================================================================== --- Zend/tests/bug31098.phpt (revision 320369) +++ Zend/tests/bug31098.phpt (working copy) @@ -33,10 +33,18 @@ bool(false) bool(false) bool(false) + +Notice: String offset cast occured in %sbug31098.php on line %d bool(false) + +Notice: String offset cast occured in %sbug31098.php on line %d bool(true) + +Notice: String offset cast occured in %sbug31098.php on line %d bool(true) ok + +Notice: String offset cast occured in %sbug31098.php on line %d ok ok ok @@ -46,6 +54,10 @@ Notice: Trying to get property of non-object in %sbug31098.php on line %d ok + +Notice: String offset cast occured %sbug31098.php on line %d ok ok + +Notice: String offset cast occured in %sbug31098.php on line %d ok Index: Zend/zend_vm_def.h =================================================================== --- Zend/zend_vm_def.h (revision 320369) +++ Zend/zend_vm_def.h (working copy) @@ -4507,6 +4507,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); Index: Zend/zend_vm_execute.h =================================================================== --- Zend/zend_vm_execute.h (revision 320369) +++ Zend/zend_vm_execute.h (working copy) @@ -14035,6 +14035,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -15941,6 +15945,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -18205,6 +18213,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -21119,6 +21131,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -22446,6 +22462,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -23596,6 +23616,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -24746,6 +24770,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -26162,6 +26190,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -29470,6 +29502,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -31250,6 +31286,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -33387,6 +33427,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -36038,6 +36082,10 @@ zval tmp; if (Z_TYPE_P(offset) != IS_LONG) { + if ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1))) { + zend_error(E_NOTICE, "String offset cast occured"); + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); |
Copyright © 2001-2024 The PHP Group All rights reserved. |
Last updated: Tue Dec 03 17:01:29 2024 UTC |