From: Ilia Alshanetsky Date: Sun, 15 Feb 2009 14:31:17 +0000 (+0000) Subject: Revert patch for bug #46701 as it introduces a BC break X-Git-Tag: php-5.2.9RC3~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ca087df1279797489ab7cf462fcb24c2db350d6;p=php Revert patch for bug #46701 as it introduces a BC break --- diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 7d8fb56ced..3dc4ab2253 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -979,7 +979,7 @@ fetch_string_dim: long index; if (Z_TYPE_P(dim) == IS_DOUBLE) { - DVAL_TO_LVAL(Z_DVAL_P(dim), index); + index = (long)Z_DVAL_P(dim); } else { index = Z_LVAL_P(dim); } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 6cef79691e..0d3e846fdf 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -186,6 +186,22 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) } \ } +#ifdef _WIN64 +# define DVAL_TO_LVAL(d, l) \ + if ((d) > LONG_MAX) { \ + (l) = (long)(unsigned long)(__int64) (d); \ + } else { \ + (l) = (long) (d); \ + } +#else +# define DVAL_TO_LVAL(d, l) \ + if ((d) > LONG_MAX) { \ + (l) = (unsigned long) (d); \ + } else { \ + (l) = (long) (d); \ + } +#endif + #define zendi_convert_to_long(op, holder, result) \ if (op == result) { \ convert_to_long(op); \ diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 0415542fe5..1968cb06d5 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -75,22 +75,6 @@ ZEND_API zend_bool instanceof_function_ex(zend_class_entry *instance_ce, zend_cl ZEND_API zend_bool instanceof_function(zend_class_entry *instance_ce, zend_class_entry *ce TSRMLS_DC); END_EXTERN_C() -#ifdef _WIN64 -# define DVAL_TO_LVAL(d, l) \ - if ((d) > LONG_MAX) { \ - (l) = (long)(unsigned long)(__int64) (d); \ - } else { \ - (l) = (long) (d); \ - } -#else -# define DVAL_TO_LVAL(d, l) \ - if ((d) > LONG_MAX) { \ - (l) = (unsigned long) (d); \ - } else { \ - (l) = (long) (d); \ - } -#endif - #define ZEND_IS_DIGIT(c) ((c) >= '0' && (c) <= '9') #define ZEND_IS_XDIGIT(c) (((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index c734f24900..54064509c3 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2726,11 +2726,9 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUS } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 4ae2cffb3e..50176ad13a 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2810,11 +2810,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_A } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -3171,11 +3169,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -3532,11 +3528,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -3627,11 +3621,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -3987,11 +3979,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -5450,11 +5440,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -5897,11 +5885,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -6344,11 +6330,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -6439,11 +6423,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -6883,11 +6865,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -9535,11 +9515,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -11058,11 +11036,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -12629,11 +12605,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -13340,11 +13314,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -14643,11 +14615,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -21699,11 +21669,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -23214,11 +23182,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -24776,11 +24742,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -25482,11 +25446,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARG } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: @@ -26780,11 +26742,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } if (offset) { - long l; switch (Z_TYPE_P(offset)) { case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(offset), l); - zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: