|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch fix_disabling_bad_string_offsets for Arrays related Bug #60362Patch version 2011-12-04 16:43 UTC Return to Bug #60362 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: laruence@php.net
Index: Zend/zend_execute.c
===================================================================
--- Zend/zend_execute.c (revision 320369)
+++ Zend/zend_execute.c (working copy)
@@ -1147,15 +1147,25 @@
}
if (Z_TYPE_P(dim) != IS_LONG) {
+ int invalid_string = 0;
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;
+ }
+ if (type != BP_VAR_UNSET) {
+ zend_error(E_WARNING, "Invalid string offset '%s'", dim->value.str.val);
+ }
+ invalid_string = 1;
+ break;
case IS_DOUBLE:
case IS_NULL:
case IS_BOOL:
- /* do nothing */
+ zend_error(E_NOTICE, "String offset cast occured");
break;
default:
+ invalid_string = 1;
zend_error(E_WARNING, "Illegal offset type");
break;
}
@@ -1164,6 +1174,9 @@
zval_copy_ctor(&tmp);
convert_to_long(&tmp);
dim = &tmp;
+ if (invalid_string) {
+ dim->value.lval = -1;
+ }
}
if (type != BP_VAR_UNSET) {
SEPARATE_ZVAL_IF_NOT_REF(container_ptr);
@@ -1260,17 +1273,27 @@
case IS_STRING: {
zval tmp;
zval *ptr;
-
+ int invalid_string = 0;
+
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;
+ }
+ if (type != BP_VAR_IS) {
+ zend_error(E_WARNING, "Illegal string offset '%s'", dim->value.str.val);
+ }
+ invalid_string = 1;
+ break;
case IS_DOUBLE:
case IS_NULL:
case IS_BOOL:
- /* do nothing */
+ zend_error(E_NOTICE, "String offset cast occured");
break;
default:
+ invalid_string = 1;
zend_error(E_WARNING, "Illegal offset type");
break;
}
@@ -1279,6 +1302,9 @@
zval_copy_ctor(&tmp);
convert_to_long(&tmp);
dim = &tmp;
+ if (invalid_string) {
+ dim->value.lval = -1;
+ }
}
ALLOC_ZVAL(ptr);
@@ -1286,8 +1312,8 @@
Z_TYPE_P(ptr) = IS_STRING;
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));
+ if (type != BP_VAR_IS && !invalid_string) {
+ 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)
@@ -24,22 +24,32 @@
echo "Done\n";
?>
---EXPECTF--
+--EXPECTF--
string(1) "i"
+
+Notice: String offset cast occured in %s on line 6
string(1) "S"
+
+Notice: String offset cast occured in %s on line 7
string(1) "S"
-string(1) "S"
+
+Warning: Illegal string offset 'run away' in %s on line 8
+string(0) ""
+
+Notice: String offset cast occured in %s on line 10
string(1) "i"
+
+Notice: String offset cast occured in %s on line 11
string(1) "S"
-Warning: Illegal offset type in %s on line %d
-string(1) "%s"
+Warning: Illegal offset type in %s on line 14
+string(0) ""
-Warning: Illegal offset type in %s on line %d
+Warning: Illegal offset type in %s on line 17
-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 %s on line 17
+string(0) ""
-Warning: Illegal offset type in %s on line %d
-string(1) "i"
-Done
+Warning: Illegal offset type in %s on line 20
+string(0) ""
+Done
\ No newline at end of file
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)
@@ -48,13 +48,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 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) " "
+
+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]=>
Index: Zend/tests/bug54262.phpt
===================================================================
--- Zend/tests/bug54262.phpt (revision 320369)
+++ Zend/tests/bug54262.phpt (working copy)
@@ -9,7 +9,7 @@
echo "ok\n";
?>
--EXPECTF--
-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
+--EXPECTF--
+Warning: Invalid string offset 'x' 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/bug31098.phpt
===================================================================
--- Zend/tests/bug31098.phpt (revision 320369)
+++ Zend/tests/bug31098.phpt (working copy)
@@ -17,25 +17,25 @@
$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";
echo isset($simpleString["16"])?"ok\n":"bug\n";
echo isset($simpleString["17"])?"bug\n":"ok\n";
echo $simpleString->wrong === null?"ok\n":"bug\n";
-echo $simpleString["wrong"] === "B"?"ok\n":"bug\n";
+echo $simpleString["wrong"] === "B"?"bug\n":"ok\n";
echo $simpleString["0"] === "B"?"ok\n":"bug\n";
$simpleString["wrong"] = "f";
-echo $simpleString["0"] === "f"?"ok\n":"bug\n";
+echo $simpleString["0"] === "f"?"bug\n":"ok\n";
?>
--EXPECTF--
bool(false)
bool(false)
bool(false)
bool(false)
-bool(true)
-bool(true)
+bool(false)
+bool(false)
ok
ok
ok
@@ -44,8 +44,14 @@
ok
ok
-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
+
+Warning: Illegal string offset 'wrong' in %s on line 24
ok
ok
-ok
+
+Warning: Invalid string offset 'wrong' in %s on line 26
+
+Warning: Illegal string offset: -1 in %s on line 26
+ok
\ No newline at end of file
Index: Zend/zend_vm_def.h
===================================================================
--- Zend/zend_vm_def.h (revision 320369)
+++ Zend/zend_vm_def.h (working copy)
@@ -4507,10 +4507,18 @@
zval tmp;
if (Z_TYPE_P(offset) != IS_LONG) {
- 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;
+ }
}
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,10 +14035,18 @@
zval tmp;
if (Z_TYPE_P(offset) != IS_LONG) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
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) {
- 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;
+ }
}
if (Z_TYPE_P(offset) == IS_LONG) {
if (opline->extended_value & ZEND_ISSET) {
|
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 02:00:01 2025 UTC |