]> granicus.if.org Git - php/commitdiff
Throw warning for failed object to int/float conversion
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 21 Sep 2020 09:07:42 +0000 (11:07 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 21 Sep 2020 15:04:39 +0000 (17:04 +0200)
We previously couldn't increase the error level here because it
was coupled to comparison handling. This is no longer the case
in PHP 8.

17 files changed:
Zend/tests/bug33999.phpt
Zend/tests/cast_to_double.phpt
Zend/tests/cast_to_int.phpt
Zend/tests/offset_string.phpt
Zend/tests/settype_double.phpt
Zend/tests/settype_int.phpt
Zend/zend_operators.c
ext/gd/tests/bug67248.phpt
ext/posix/tests/posix_ttyname_variation6.phpt
ext/spl/tests/countable_count_variation1.phpt
ext/standard/tests/array/array_multisort_variation9.phpt
ext/standard/tests/general_functions/gettype_settype_basic.phpt
ext/standard/tests/general_functions/gettype_settype_variation2.phpt
ext/standard/tests/general_functions/gettype_settype_variation3.phpt
ext/standard/tests/general_functions/intval_variation1.phpt
ext/standard/tests/strings/sprintf_variation54.phpt
ext/xml/tests/xml_parser_set_option_variation3.phpt

index 7460815441beb2cccc925d23e57ac7f1305d28e2..2b03c3124a3c3012b6bac62e62d9c28cc0098dc5 100644 (file)
@@ -23,8 +23,8 @@ object(Foo)#1 (1) {
   string(3) "bat"
 }
 
-Notice: Object of class Foo could not be converted to int in %sbug33999.php on line 9
+Warning: Object of class Foo could not be converted to int in %s on line %d
 int(1)
 
-Notice: Object of class Foo could not be converted to float in %sbug33999.php on line 12
+Warning: Object of class Foo could not be converted to float in %s on line %d
 float(1)
index 58286436bd29ba8b165ffe69c569542b6a7558d0..2972fbbe8027aa6830a24f419d4aad68e960c85d 100644 (file)
@@ -52,6 +52,6 @@ float(1)
 float(0)
 float(%f)
 
-Notice: Object of class test could not be converted to float in %s on line %d
+Warning: Object of class test could not be converted to float in %s on line %d
 float(1)
 Done
index 5dbab23fd2df20ac585f2c21700aa7465a36314e..6451c4a2f7208218e1042f758b2f07ac4eac486a 100644 (file)
@@ -50,6 +50,6 @@ int(1)
 int(0)
 int(%d)
 
-Notice: Object of class test could not be converted to int in %s on line %d
+Warning: Object of class test could not be converted to int in %s on line %d
 int(1)
 Done
index 36481dccce7c1422e4aab3bc6a87b8a02e7fc81d..f14c63af5de79fe15a52f28125b0224163654cf2 100644 (file)
@@ -69,7 +69,7 @@ Warning: String offset cast occurred in %s on line %d
 string(1) "S"
 Cannot access offset of type resource on string
 
-Notice: Object of class stdClass could not be converted to int in %s on line %d
+Warning: Object of class stdClass could not be converted to int in %s on line %d
 Cannot access offset of type stdClass on string
 Cannot access offset of type array on string
 Done
index d5b2f0e42ea94878f82f5c16253e959ee2782f06..6bbe773d0c2c9d655113c3b6bfa8c42ff91c214a 100644 (file)
@@ -52,6 +52,6 @@ float(1)
 float(0)
 float(%f)
 
-Notice: Object of class test could not be converted to float in %s on line %d
+Warning: Object of class test could not be converted to float in %s on line %d
 float(1)
 Done
index 9dac9c5b8f2b9ab0257e7ad9f338b5b7e8e6cb0c..e5eb098a67f5658cf57f08ddee822880b84ee77c 100644 (file)
@@ -50,6 +50,6 @@ int(1)
 int(0)
 int(%d)
 
-Notice: Object of class test could not be converted to int in %s on line %d
+Warning: Object of class test could not be converted to int in %s on line %d
 int(1)
 Done
index 0923741723d48f0329021523fff94e8767371e37..5f9dbe3d3ce01ab2c89112c5cfc10b61a9d3f550 100644 (file)
@@ -142,7 +142,7 @@ ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len) /* {
 #define convert_object_to_type(op, dst, ctype)                                                                 \
        ZVAL_UNDEF(dst);                                                                                                                                                \
        if (Z_OBJ_HT_P(op)->cast_object(Z_OBJ_P(op), dst, ctype) == FAILURE) {                                  \
-               zend_error(E_NOTICE,                                                                                                                            \
+               zend_error(E_WARNING,                                                                                                                           \
                        "Object of class %s could not be converted to %s", ZSTR_VAL(Z_OBJCE_P(op)->name),\
                zend_get_type_by_const(ctype));                                                                                                         \
        }                                                                                                                                                                               \
index 5b5e0e8baec37832f76ac68db7ca4fd3eb5e254c..c48512e281ebe0df1c3303be2ecc450259c0f21d 100644 (file)
@@ -19,7 +19,7 @@ for($i=0;$i<7;$i++) {
 !! [TypeError] imageaffinematrixget(): Argument #1 ($type) must be of type array when using translate or scale
 !! [TypeError] imageaffinematrixget(): Argument #1 ($type) must be of type array when using translate or scale
 
-Notice: Object of class stdClass could not be converted to float in %s on line %d
+Warning: Object of class stdClass could not be converted to float in %s on line %d
 array(6) {
   [0]=>
   float(%f)
@@ -35,7 +35,7 @@ array(6) {
   float(0)
 }
 
-Notice: Object of class stdClass could not be converted to float in %s on line %d
+Warning: Object of class stdClass could not be converted to float in %s on line %d
 array(6) {
   [0]=>
   float(1)
@@ -51,7 +51,7 @@ array(6) {
   float(0)
 }
 
-Notice: Object of class stdClass could not be converted to float in %s on line %d
+Warning: Object of class stdClass could not be converted to float in %s on line %d
 array(6) {
   [0]=>
   float(1)
index 691c5eea7ee3a7833eed544734ff6d2d45e0b9ab..4af6334b2f310588af55df925538a695c123551e 100644 (file)
@@ -16,18 +16,6 @@ if (!extension_loaded('posix')) {
 
 echo "*** Test substituting argument 1 with object values ***\n";
 
-
-
-function test_error_handler($err_no, $err_msg, $filename, $linenum) {
-        if (error_reporting() != 0) {
-                // report non-silenced errors
-                echo "Error: $err_no - $err_msg, $filename($linenum)\n";
-        }
-}
-set_error_handler('test_error_handler');
-
-
-
 class classWithToString
 {
         public function __toString() {
@@ -51,7 +39,9 @@ foreach ( $variation_array as $var ) {
 ?>
 --EXPECTF--
 *** Test substituting argument 1 with object values ***
-Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+
+Warning: Object of class classWithToString could not be converted to int in %s on line %d
 bool(false)
-Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+
+Warning: Object of class classWithoutToString could not be converted to int in %s on line %d
 bool(false)
index 8ce29410d9ab9e3b93cc5ae7db76510154ebfff7..0e17eccbe68abad5abd4d91d94d6e3f1c1b0a025 100644 (file)
@@ -60,7 +60,7 @@ Count returns a string:
 int(0)
 Count returns an object:
 
-Notice: Object of class returnObject could not be converted to int in %s on line 40
+Warning: Object of class returnObject could not be converted to int in %s on line %d
 int(1)
 Count returns an array:
 int(1)
index 0451daca330d70faaad89461303df6d31731e19d..d7203c335b7ae8bbe9dc2b5f511dee933929f088 100644 (file)
@@ -33,13 +33,13 @@ var_dump($inputs);
 --EXPECTF--
 *** Testing array_multisort() : usage variation  - test sort order of all types***
 
-Notice: Object of class classWithToString could not be converted to float in %sarray_multisort_variation9.php on line %d
+Warning: Object of class classWithToString could not be converted to float in %s on line %d
 
-Notice: Object of class classWithToString could not be converted to float in %sarray_multisort_variation9.php on line %d
+Warning: Object of class classWithToString could not be converted to float in %s on line %d
 
-Notice: Object of class classWithoutToString could not be converted to float in %sarray_multisort_variation9.php on line %d
+Warning: Object of class classWithoutToString could not be converted to float in %s on line %d
 
-Notice: Object of class classWithoutToString could not be converted to float in %sarray_multisort_variation9.php on line %d
+Warning: Object of class classWithoutToString could not be converted to float in %s on line %d
 bool(true)
 array(10) {
   ["float -10.5"]=>
index 0c336f8a23672aa27aed870b84c662946b367b72..a5e1a0b5bf3c425afaf212049fd29ecb6ed7043a 100644 (file)
@@ -237,7 +237,7 @@ bool(true)
 int(%d)
 string(7) "integer"
 -- Iteration 14 --
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
@@ -296,7 +296,7 @@ bool(true)
 int(%d)
 string(7) "integer"
 -- Iteration 14 --
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
@@ -355,7 +355,7 @@ bool(true)
 float(%f)
 string(6) "double"
 -- Iteration 14 --
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
@@ -414,7 +414,7 @@ bool(true)
 float(%f)
 string(6) "double"
 -- Iteration 14 --
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
index 91561715acd1f8365fdc4dc6d0b690aa6a354112..12f001e924e46c3b0dd9c1da815f454e2acb6dba 100644 (file)
@@ -554,19 +554,19 @@ int(-512000)
 string(7) "integer"
 -- Iteration 76 --
 string(6) "object"
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
 -- Iteration 77 --
 string(6) "object"
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
 -- Iteration 78 --
 string(6) "object"
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
@@ -949,19 +949,19 @@ int(-512000)
 string(7) "integer"
 -- Iteration 76 --
 string(6) "object"
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
 -- Iteration 77 --
 string(6) "object"
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
 -- Iteration 78 --
 string(6) "object"
-8: Object of class point could not be converted to int
+2: Object of class point could not be converted to int
 bool(true)
 int(1)
 string(7) "integer"
index 75e01cfccf6a817104a1c681e3eddf566c95accc..16cc2b8dfd234819b5936767d07abb1a2f009b66 100644 (file)
@@ -548,19 +548,19 @@ float(-512000)
 string(6) "double"
 -- Iteration 76 --
 string(6) "object"
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
 -- Iteration 77 --
 string(6) "object"
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
 -- Iteration 78 --
 string(6) "object"
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
@@ -943,19 +943,19 @@ float(-512000)
 string(6) "double"
 -- Iteration 76 --
 string(6) "object"
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
 -- Iteration 77 --
 string(6) "object"
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
 -- Iteration 78 --
 string(6) "object"
-8: Object of class point could not be converted to float
+2: Object of class point could not be converted to float
 bool(true)
 float(1)
 string(6) "double"
index f2e3db9f1065ca7b72a30819e7aa63cb4d1735f0..c18910a1d8023aadc306bfeb40a31f888ca86d3f 100644 (file)
@@ -4,15 +4,6 @@ Test intval() function : usage variation
 <?php
 echo "*** Testing intval() : usage variation ***\n";
 
-// Define error handler
-function test_error_handler($err_no, $err_msg, $filename, $linenum) {
-    if (error_reporting() & $err_no) {
-        // report non-silenced errors
-        echo "Error: $err_no - $err_msg, $filename($linenum)\n";
-    }
-}
-set_error_handler('test_error_handler');
-
 // Initialise function arguments not being substituted (if any)
 $base = 10;
 
@@ -181,11 +172,13 @@ int(0)
 int(0)
 
 --instance of classWithToString--
-Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+
+Warning: Object of class classWithToString could not be converted to int in %s on line %d
 int(1)
 
 --instance of classWithoutToString--
-Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+
+Warning: Object of class classWithoutToString could not be converted to int in %s on line %d
 int(1)
 
 --undefined var--
index 82efde8d7f038294db5e75eb2d20c484df170a4a..51a4e48827345387795fd45b14bf111b62019edf 100644 (file)
Binary files a/ext/standard/tests/strings/sprintf_variation54.phpt and b/ext/standard/tests/strings/sprintf_variation54.phpt differ
index d1163de356e0b6696efe6a0956ae62ddfa33123f..a6b3a9b6ecab409b9ec3cb4f4b783c55fd158ac6 100644 (file)
@@ -162,7 +162,7 @@ bool(true)
 
 Arg value Some Ascii Data 
 
-Notice: Object of class aClass could not be converted to int in %s on line %d
+Warning: Object of class aClass could not be converted to int in %s on line %d
 bool(true)
 
 Arg value Resource id %s