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-04 17:26 UTC Return to Bug #60362 | Download this patchThis patch is obsolete Obsoleted by patches: Patch Revisions: 2011-12-05 05:17 UTC | 2011-12-04 17:26 UTCDeveloper: laruence@php.netIndex: Zend/tests/indexing_001.phpt =================================================================== --- Zend/tests/indexing_001.phpt (revision 320369) +++ Zend/tests/indexing_001.phpt (working copy) @@ -71,6 +71,8 @@ @@ -48,13 +48,13 @@ } } +Notice: String offset cast occured in %s on line %d -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 7 int(0) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 7 int(1) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 7 bool(true) array(1) { ["foo"]=> @@ -71,10 +71,12 @@ } } -Notice: Array to string conversion in %s on line %d -string(1) "A" +Warning: Invalid string offset 'foo' in %s on line 7 -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Illegal string offset: -1 in %s on line 7 +string(1) " " + Notice: Array to string conversion in %s on line %d string(1) "A" +Warning: Cannot use a scalar value as an array in %s on line 7 float(0.1) array(1) { ["foo"]=> @@ -93,13 +95,13 @@ } } -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 15 int(0) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 15 int(1) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 15 bool(true) array(1) { ["foo"]=> @@ -116,7 +118,7 @@ } } -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 15 float(0.1) array(1) { ["foo"]=> @@ -134,13 +136,13 @@ } } -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 23 int(0) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 23 int(1) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 23 bool(true) array(1) { [0]=> @@ -157,7 +159,7 @@ } } -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 23 float(0.1) array(1) { [0]=> @@ -176,13 +178,13 @@ } } -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 31 int(0) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 31 int(1) -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 31 bool(true) array(1) { [0]=> @@ -199,7 +201,7 @@ } } -Warning: Cannot use a scalar value as an array in %s on line %d +Warning: Cannot use a scalar value as an array in %s on line 31 float(0.1) array(1) { [0]=> @@ -209,4 +211,4 @@ } } Index: Zend/tests/bug54262.phpt =================================================================== --- Zend/tests/bug54262.phpt (revision 320369) +++ Zend/tests/bug54262.phpt (working copy) @@ -9,6 +9,7 @@ @@ -9,7 +9,7 @@ echo "ok\n"; ?> --EXPECTF-- +Notice: String offset cast occured in %sbug54262.php on line %d bool(true) -bool(true) +bool(false) 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 -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) "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(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"]); Index: Zend/tests/bug31098.phpt =================================================================== --- Zend/tests/bug31098.phpt (revision 320369) +++ Zend/tests/bug31098.phpt (working copy) @@ -33,10 +33,18 @@ @@ -17,7 +17,7 @@ $simpleString = "Bogus String Text"; echo isset($simpleString->wrong)?"bug\n":"ok\n"; -echo isset($simpleString["wrong"])?"ok\n":"bug\n"; +echo isset($simpleString["wrong"])?"bug\n":"ok\n"; echo isset($simpleString[-1])?"bug\n":"ok\n"; echo isset($simpleString[0])?"ok\n":"bug\n"; echo isset($simpleString["0"])?"ok\n":"bug\n"; @@ -34,8 +34,8 @@ bool(false) 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) -bool(true) -bool(true) +bool(false) +bool(false) ok ok + +Notice: String offset cast occured in %sbug31098.php on line %d ok @@ -44,8 +44,12 @@ ok ok @@ -46,6 +54,10 @@ Notice: Trying to get property of non-object in %sbug31098.php on line %d -Notice: Trying to get property of non-object in %sbug31098.php on line %d +Notice: Trying to get property of non-object in %s on line 23 ok + +Notice: String offset cast occured %sbug31098.php on line %d +Notice: String offset cast occured %s on line 24 ok ok + +Notice: String offset cast occured in %sbug31098.php on line %d +Notice: String offset cast occured in %s on line 26 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 @@ @@ -4507,10 +4507,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { Index: Zend/zend_vm_execute.h =================================================================== --- Zend/zend_vm_execute.h (revision 320369) +++ Zend/zend_vm_execute.h (working copy) @@ -14035,6 +14035,10 @@ @@ -14035,10 +14035,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -15941,6 +15945,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -15941,10 +15949,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -18205,6 +18213,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -18205,10 +18221,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -21119,6 +21131,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -21119,10 +21143,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -22446,6 +22462,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -22446,10 +22478,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -23596,6 +23616,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -23596,10 +23636,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -24746,6 +24770,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -24746,10 +24794,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -26162,6 +26190,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -26162,10 +26218,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -29470,6 +29502,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -29470,10 +29534,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -31250,6 +31286,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -31250,10 +31322,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -33387,6 +33427,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -33387,10 +33467,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); @@ -36038,6 +36082,10 @@ } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { @@ -36038,10 +36126,18 @@ 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); - offset = &tmp; + /** if it's an object/array etc.. */ + if (((Z_TYPE_P(offset) != IS_STRING) &&(Z_TYPE_P(offset) != IS_DOUBLE) + && (Z_TYPE_P(offset) != IS_NULL) && (Z_TYPE_P(offset) != IS_BOOL)) + || ((Z_TYPE_P(offset) == IS_STRING) + && (IS_LONG != is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, -1)))) { + result = 0; + } else { + ZVAL_COPY_VALUE(&tmp, offset); + zval_copy_ctor(&tmp); + convert_to_long(&tmp); + offset = &tmp; + } ZVAL_COPY_VALUE(&tmp, offset); zval_copy_ctor(&tmp); convert_to_long(&tmp); } if (Z_TYPE_P(offset) == IS_LONG) { if (opline->extended_value & ZEND_ISSET) { |
Copyright © 2001-2024 The PHP Group All rights reserved. |
Last updated: Tue Mar 19 01:01:30 2024 UTC |