From ad4d6634f49bfb6ce382e9b9a3d50492d41687ea Mon Sep 17 00:00:00 2001 From: =?utf8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 20 Nov 2019 02:26:39 +0100 Subject: [PATCH] Promote warnings to exceptions in settype() function --- Zend/tests/settype_resource.phpt | Bin 1579 -> 1190 bytes .../gettype_settype_basic.phpt | 106 ++----- .../gettype_settype_error.phpt | 12 +- .../gettype_settype_variation5.phpt | 263 ++++++------------ .../tests/general_functions/type.phpt | 33 +-- ext/standard/type.c | 6 +- 6 files changed, 135 insertions(+), 285 deletions(-) diff --git a/Zend/tests/settype_resource.phpt b/Zend/tests/settype_resource.phpt index a6721cb7572a2b4964a3eb7d650bb83b041594ca..1b038613f33520e50c6f0661574896ce5314f243 100644 GIT binary patch delta 359 zcmYj~O-sW-5QZ(*LYKB)^lF!-hYe_HF&`D7(1W+?LC}+zHB8e$%$C`W7)t1m$bS&T zi$Brb#0BRxJkLAtd=EbRKaZUQHKVbld(yY70$Gv*y&W}o@ucuI}mT>KXtWCK;MH>A_4BvDP=D?Go4)%t?IYVbuEs^ zXGCdC^Mr>UW$ns{73WSwMl7Ph_k*xCBWGsDwCL2Kxj{!Rmgbt@ETS;*1Fz{EkWD6q z=CkR%1tTI5MafOmo>Wby4!SG*e@I@X%=kuR3fy%=G!}oLM;@Nm>-OsFWNfeMVejG> Dt7Kw0 literal 1579 zcmb`H-)q}25Xbjw{S}9ofDG}l^RsK$_MuB*5JsUH8?3`9w!C<_l9A+&Qu@E|PEH#3 zt{2_;WPP~%>U3$kUEgohl$FA|M*W7WscUJZa_}TfBX+H{;4~O%b#F=uy`{gbbndy6 zJYi{i`(?96z^ChO-!V2aa0#{Uq~b+ETSYN}*u=>NV`VEW(xi3p!lJrYrE9bTC<>?V zok1{9XeTn#^+rLQXYmD#UfC;hHFA~w>yIOAgy~rf31h@FXHjfDAfBLmwpz^Ri>3Gd z@{p1Fc(z(D<_q+)4|#@WIGenA`D8ko(Pu4ME73aBlll5>vq3X5v}i`9)Y?ctV8{5VJWxJp3R;Ga6jr!B=}sC4!2k1QRh37xzj MSHKTlL(_@<19~0v%K!iX diff --git a/ext/standard/tests/general_functions/gettype_settype_basic.phpt b/ext/standard/tests/general_functions/gettype_settype_basic.phpt index fac0327ad5..80d12588e1 100644 --- a/ext/standard/tests/general_functions/gettype_settype_basic.phpt +++ b/ext/standard/tests/general_functions/gettype_settype_basic.phpt @@ -93,14 +93,19 @@ foreach ($types as $type) { $loop_count = 1; foreach ($values as $var) { echo "-- Iteration $loop_count --\n"; $loop_count ++; - // set to new type - var_dump( settype($var, $type) ); - // dump the var - var_dump( $var ); + try { + // set to new type + var_dump( settype($var, $type) ); - // check the new type - var_dump( gettype($var) ); + // dump the var + var_dump( $var ); + + // check the new type + var_dump( gettype($var) ); + } catch (ValueError $exception) { + echo $exception->getMessage() . "\n"; + } } } @@ -539,94 +544,33 @@ string(7) "boolean" -- Setting type of data to resource -- -- Iteration 1 -- -2: settype(): Cannot convert to resource type -bool(false) -array(3) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) -} -string(5) "array" +Cannot convert to resource type -- Iteration 2 -- -2: settype(): Cannot convert to resource type -bool(false) -string(14) "another string" -string(6) "string" +Cannot convert to resource type -- Iteration 3 -- -2: settype(): Cannot convert to resource type -bool(false) -array(3) { - [0]=> - int(2) - [1]=> - int(3) - [2]=> - int(4) -} -string(5) "array" +Cannot convert to resource type -- Iteration 4 -- -2: settype(): Cannot convert to resource type -bool(false) -int(1) -string(7) "integer" +Cannot convert to resource type -- Iteration 5 -- -2: settype(): Cannot convert to resource type -bool(false) -int(-20) -string(7) "integer" +Cannot convert to resource type -- Iteration 6 -- -2: settype(): Cannot convert to resource type -bool(false) -float(2.54) -string(6) "double" +Cannot convert to resource type -- Iteration 7 -- -2: settype(): Cannot convert to resource type -bool(false) -float(-2.54) -string(6) "double" +Cannot convert to resource type -- Iteration 8 -- -2: settype(): Cannot convert to resource type -bool(false) -NULL -string(4) "NULL" +Cannot convert to resource type -- Iteration 9 -- -2: settype(): Cannot convert to resource type -bool(false) -bool(false) -string(7) "boolean" +Cannot convert to resource type -- Iteration 10 -- -2: settype(): Cannot convert to resource type -bool(false) -string(11) "some string" -string(6) "string" +Cannot convert to resource type -- Iteration 11 -- -2: settype(): Cannot convert to resource type -bool(false) -string(6) "string" -string(6) "string" +Cannot convert to resource type -- Iteration 12 -- -2: settype(): Cannot convert to resource type -bool(false) -resource(%d) of type (stream) -string(8) "resource" +Cannot convert to resource type -- Iteration 13 -- -2: settype(): Cannot convert to resource type -bool(false) -resource(%d) of type (stream) -string(8) "resource" +Cannot convert to resource type -- Iteration 14 -- -2: settype(): Cannot convert to resource type -bool(false) -object(point)#1 (2) { - ["x"]=> - int(10) - ["y"]=> - int(20) -} -string(6) "object" +Cannot convert to resource type -- Setting type of data to array -- -- Iteration 1 -- diff --git a/ext/standard/tests/general_functions/gettype_settype_error.phpt b/ext/standard/tests/general_functions/gettype_settype_error.phpt index e204c64d4c..e310f9e0ac 100644 --- a/ext/standard/tests/general_functions/gettype_settype_error.phpt +++ b/ext/standard/tests/general_functions/gettype_settype_error.phpt @@ -16,15 +16,17 @@ echo "**** Testing gettype() and settype() functions ****\n"; echo "\n*** Testing settype(): error conditions ***\n"; // passing an invalid type to set -var_dump( settype( $var, "unknown" ) ); +try { + settype( $var, "unknown" ); +} catch (ValueError $exception) { + echo $exception->getMessage() . "\n"; +} echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- **** Testing gettype() and settype() functions **** *** Testing settype(): error conditions *** - -Warning: settype(): Invalid type in %s on line %d -bool(false) +Invalid type Done diff --git a/ext/standard/tests/general_functions/gettype_settype_variation5.phpt b/ext/standard/tests/general_functions/gettype_settype_variation5.phpt index 6437baa10b..f9f0059bfa 100644 --- a/ext/standard/tests/general_functions/gettype_settype_variation5.phpt +++ b/ext/standard/tests/general_functions/gettype_settype_variation5.phpt @@ -24,17 +24,6 @@ precision=14 dump the variable to see its new data get the new type of the variable */ - -/* function to handle catchable errors */ -function foo($errno, $errstr, $errfile, $errline) { -// var_dump($errstr); - // print error no and error string - echo "$errno: $errstr\n"; -} -//set the error handler, this is required as -// settype() would fail with catachable fatal error -set_error_handler("foo"); - $var1 = "another string"; $var2 = array(2,3,4); @@ -63,7 +52,7 @@ $var_values = array ( true, /* strings */ - "\xFF", + "\$", "\x66", "\0123", "", @@ -159,286 +148,246 @@ foreach ($var_values as $var) { // get the current data type var_dump( gettype($var) ); - // convert it to null - var_dump( settype($var, $type) ); + // convert it to resource + try { + var_dump(settype($var, $type)); + } catch (ValueError $exception) { + echo $exception->getMessage() . "\n"; + } // dump the converted data - var_dump( $var ); + var_dump($var); // check the new type after conversion - var_dump( gettype($var) ); + var_dump(gettype($var)); } echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- *** Testing gettype() & settype() functions : usage variations *** -- Setting type of data to resource -- -- Iteration 1 -- string(4) "NULL" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type NULL string(4) "NULL" -- Iteration 2 -- string(7) "boolean" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type bool(false) string(7) "boolean" -- Iteration 3 -- string(7) "boolean" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type bool(true) string(7) "boolean" -- Iteration 4 -- string(7) "boolean" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type bool(true) string(7) "boolean" -- Iteration 5 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) -string(1) "ΓΏ" +Cannot convert to resource type +string(1) "$" string(6) "string" -- Iteration 6 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(1) "f" string(6) "string" -- Iteration 7 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) " 3" string(6) "string" -- Iteration 8 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(0) "" string(6) "string" -- Iteration 9 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(0) "" string(6) "string" -- Iteration 10 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(1) " " string(6) "string" -- Iteration 11 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(1) " " string(6) "string" -- Iteration 12 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) "10" string(6) "string" -- Iteration 13 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) "10" string(6) "string" -- Iteration 14 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(8) "10string" string(6) "string" -- Iteration 15 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(8) "10string" string(6) "string" -- Iteration 16 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(1) "1" string(6) "string" -- Iteration 17 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) "-1" string(6) "string" -- Iteration 18 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(3) "1e2" string(6) "string" -- Iteration 19 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) " 1" string(6) "string" -- Iteration 20 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(22) "2974394749328742328432" string(6) "string" -- Iteration 21 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "-1e-2" string(6) "string" -- Iteration 22 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(1) "1" string(6) "string" -- Iteration 23 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) "-1" string(6) "string" -- Iteration 24 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(3) "1e2" string(6) "string" -- Iteration 25 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(2) " 1" string(6) "string" -- Iteration 26 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(22) "2974394749328742328432" string(6) "string" -- Iteration 27 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "-1e-2" string(6) "string" -- Iteration 28 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(4) "0xff" string(6) "string" -- Iteration 29 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(4) "0x55" string(6) "string" -- Iteration 30 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "0XA55" string(6) "string" -- Iteration 31 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "0X123" string(6) "string" -- Iteration 32 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(4) "0123" string(6) "string" -- Iteration 33 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(4) "0123" string(6) "string" -- Iteration 34 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "-0123" string(6) "string" -- Iteration 35 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "+0123" string(6) "string" -- Iteration 36 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "-0123" string(6) "string" -- Iteration 37 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(5) "+0123" string(6) "string" -- Iteration 38 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(8) "-0x80001" string(6) "string" -- Iteration 39 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(8) "+0x80001" string(6) "string" -- Iteration 40 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(10) "-0x80001.5" string(6) "string" -- Iteration 41 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(9) "0x80001.5" string(6) "string" -- Iteration 42 -- string(6) "string" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type string(12) "@$%#$%^$%^&^" string(6) "string" -- Iteration 43 -- string(5) "array" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type array(0) { } string(5) "array" -- Iteration 44 -- string(5) "array" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type array(1) { [0]=> NULL @@ -446,8 +395,7 @@ array(1) { string(5) "array" -- Iteration 45 -- string(5) "array" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type array(4) { [0]=> int(1) @@ -461,8 +409,7 @@ array(4) { string(5) "array" -- Iteration 46 -- string(5) "array" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type array(4) { [1]=> string(3) "one" @@ -476,8 +423,7 @@ array(4) { string(5) "array" -- Iteration 47 -- string(5) "array" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type array(3) { [0]=> float(1.5) @@ -489,176 +435,147 @@ array(3) { string(5) "array" -- Iteration 48 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-2147483648) string(6) "double" -- Iteration 49 -- string(7) "integer" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type int(2147483647) string(7) "integer" -- Iteration 50 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(2147483649) string(6) "double" -- Iteration 51 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(1232147483649) string(6) "double" -- Iteration 52 -- string(7) "integer" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type int(85) string(7) "integer" -- Iteration 53 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(1058513956921) string(6) "double" -- Iteration 54 -- string(7) "integer" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type int(-21903) string(7) "integer" -- Iteration 55 -- string(7) "integer" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type int(365) string(7) "integer" -- Iteration 56 -- string(7) "integer" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type int(-365) string(7) "integer" -- Iteration 57 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(80561044571754) string(6) "double" -- Iteration 58 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(100000) string(6) "double" -- Iteration 59 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-100000) string(6) "double" -- Iteration 60 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(100000) string(6) "double" -- Iteration 61 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-100000) string(6) "double" -- Iteration 62 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-1.5) string(6) "double" -- Iteration 63 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(0.5) string(6) "double" -- Iteration 64 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-0.5) string(6) "double" -- Iteration 65 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(500000) string(6) "double" -- Iteration 66 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-500000) string(6) "double" -- Iteration 67 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-5.0E-7) string(6) "double" -- Iteration 68 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(500000) string(6) "double" -- Iteration 69 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-500000) string(6) "double" -- Iteration 70 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(512000) string(6) "double" -- Iteration 71 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-512000) string(6) "double" -- Iteration 72 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(5.12E-7) string(6) "double" -- Iteration 73 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(5.12E-7) string(6) "double" -- Iteration 74 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(512000) string(6) "double" -- Iteration 75 -- string(6) "double" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type float(-512000) string(6) "double" -- Iteration 76 -- string(6) "object" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type object(point)#1 (2) { ["x"]=> NULL @@ -668,8 +585,7 @@ object(point)#1 (2) { string(6) "object" -- Iteration 77 -- string(6) "object" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type object(point)#2 (2) { ["x"]=> float(2.5) @@ -679,8 +595,7 @@ object(point)#2 (2) { string(6) "object" -- Iteration 78 -- string(6) "object" -2: settype(): Cannot convert to resource type -bool(false) +Cannot convert to resource type object(point)#3 (2) { ["x"]=> int(0) diff --git a/ext/standard/tests/general_functions/type.phpt b/ext/standard/tests/general_functions/type.phpt index 0b460b08d1..342b353baf 100644 --- a/ext/standard/tests/general_functions/type.phpt +++ b/ext/standard/tests/general_functions/type.phpt @@ -160,8 +160,7 @@ bool(true) bool(true) bool(true) bool(true) -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type array(3) { [0]=> int(1) @@ -170,11 +169,9 @@ array(3) { [2]=> int(3) } -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type string(14) "another string" -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type array(3) { [0]=> int(2) @@ -183,29 +180,21 @@ array(3) { [2]=> int(4) } -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type int(1) -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type float(2) -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type NULL -string(42) "settype(): Cannot convert to resource type" -bool(false) -bool(false) -string(42) "settype(): Cannot convert to resource type" +Error: Cannot convert to resource type bool(false) +Error: Cannot convert to resource type string(11) "some string" -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type resource(%d) of type (Unknown) -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type resource(%d) of type (stream) -string(42) "settype(): Cannot convert to resource type" -bool(false) +Error: Cannot convert to resource type object(stdClass)#%d (0) { } bool(true) diff --git a/ext/standard/type.c b/ext/standard/type.c index af847bf352..b794937b88 100644 --- a/ext/standard/type.c +++ b/ext/standard/type.c @@ -82,11 +82,11 @@ PHP_FUNCTION(settype) zval_ptr_dtor(&tmp); } if (zend_string_equals_literal_ci(type, "resource")) { - php_error_docref(NULL, E_WARNING, "Cannot convert to resource type"); + zend_value_error("Cannot convert to resource type"); } else { - php_error_docref(NULL, E_WARNING, "Invalid type"); + zend_value_error("Invalid type"); } - RETURN_FALSE; + return; } if (ptr == &tmp) { -- 2.40.0