diff options
Diffstat (limited to 'ext/json/tests')
-rw-r--r-- | ext/json/tests/003.phpt | 17 | ||||
-rw-r--r-- | ext/json/tests/004.phpt | 16 | ||||
-rw-r--r-- | ext/json/tests/007.phpt | 16 | ||||
-rw-r--r-- | ext/json/tests/bug43941.phpt | 7 | ||||
-rw-r--r-- | ext/json/tests/bug53946.phpt | 6 | ||||
-rw-r--r-- | ext/json/tests/bug54058.phpt | 13 | ||||
-rw-r--r-- | ext/json/tests/bug61537.phpt | 39 | ||||
-rw-r--r-- | ext/json/tests/bug61978.phpt | 10 | ||||
-rw-r--r-- | ext/json/tests/bug62369.phpt | 34 | ||||
-rw-r--r-- | ext/json/tests/inf_nan_error.phpt | 45 | ||||
-rw-r--r-- | ext/json/tests/json_encode_basic.phpt | 6 | ||||
-rw-r--r-- | ext/json/tests/json_encode_error.phpt | 4 | ||||
-rw-r--r-- | ext/json/tests/pass001.1.phpt | 4 | ||||
-rw-r--r-- | ext/json/tests/pass001.1_64bit.phpt | 4 | ||||
-rw-r--r-- | ext/json/tests/pass001.phpt | 4 | ||||
-rw-r--r-- | ext/json/tests/unsupported_type_error.phpt | 26 |
16 files changed, 210 insertions, 41 deletions
diff --git a/ext/json/tests/003.phpt b/ext/json/tests/003.phpt index 3b52fb0884..4ce5b0fde9 100644 --- a/ext/json/tests/003.phpt +++ b/ext/json/tests/003.phpt @@ -9,10 +9,16 @@ $a = array(); $a[] = &$a; var_dump($a); + +echo "\n"; + var_dump(json_encode($a)); +var_dump(json_last_error(), json_last_error_msg()); -/* Break circular data structure to prevent memory leaks */ -unset($a[0]); +echo "\n"; + +var_dump(json_encode($a, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); echo "Done\n"; ?> @@ -25,6 +31,11 @@ array(1) { } } -Warning: json_encode(): recursion detected in %s on line %d +bool(false) +int(6) +string(%d) "Recursion detected" + string(8) "[[null]]" +int(6) +string(%d) "Recursion detected" Done diff --git a/ext/json/tests/004.phpt b/ext/json/tests/004.phpt index 1d282f9a96..70ef3ffd1b 100644 --- a/ext/json/tests/004.phpt +++ b/ext/json/tests/004.phpt @@ -9,7 +9,16 @@ $a = new stdclass; $a->prop = $a; var_dump($a); + +echo "\n"; + var_dump(json_encode($a)); +var_dump(json_last_error(), json_last_error_msg()); + +echo "\n"; + +var_dump(json_encode($a, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); echo "Done\n"; ?> @@ -19,6 +28,11 @@ object(stdClass)#%d (1) { *RECURSION* } -Warning: json_encode(): recursion detected in %s on line %d +bool(false) +int(6) +string(%d) "Recursion detected" + string(22) "{"prop":{"prop":null}}" +int(6) +string(%d) "Recursion detected" Done diff --git a/ext/json/tests/007.phpt b/ext/json/tests/007.phpt index 9ee190a24c..7557ac9ed7 100644 --- a/ext/json/tests/007.phpt +++ b/ext/json/tests/007.phpt @@ -5,15 +5,15 @@ json_last_error() tests --FILE-- <?php var_dump(json_decode("[1]")); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); var_dump(json_decode("[[1]]", false, 2)); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); var_dump(json_decode("[1}")); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); var_dump(json_decode('["' . chr(0) . 'abcd"]')); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); var_dump(json_decode("[1")); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); echo "Done\n"; @@ -24,13 +24,17 @@ array(1) { int(1) } int(0) +string(8) "No error" NULL int(1) +string(28) "Maximum stack depth exceeded" NULL int(2) +string(42) "State mismatch (invalid or malformed JSON)" NULL int(3) +string(53) "Control character error, possibly incorrectly encoded" NULL int(4) +string(12) "Syntax error" Done - diff --git a/ext/json/tests/bug43941.phpt b/ext/json/tests/bug43941.phpt index 0f86d1dfad..48bd7ad524 100644 --- a/ext/json/tests/bug43941.phpt +++ b/ext/json/tests/bug43941.phpt @@ -7,15 +7,14 @@ Bug #43941 (json_encode() invalid UTF-8) var_dump(json_encode("abc")); var_dump(json_encode("ab\xE0")); -var_dump(json_encode("ab\xE0c")); -var_dump(json_encode(array("ab\xE0", "ab\xE0c", "abc"))); +var_dump(json_encode("ab\xE0", JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_encode(array("ab\xE0", "ab\xE0c", "abc"), JSON_PARTIAL_OUTPUT_ON_ERROR)); echo "Done\n"; ?> --EXPECTF-- string(5) ""abc"" -string(4) "null" +bool(false) string(4) "null" string(17) "[null,null,"abc"]" Done - diff --git a/ext/json/tests/bug53946.phpt b/ext/json/tests/bug53946.phpt index abbb81238b..111438ddc4 100644 --- a/ext/json/tests/bug53946.phpt +++ b/ext/json/tests/bug53946.phpt @@ -9,8 +9,8 @@ var_dump(json_encode("latin 1234 -/ russian мама мыла раму speci var_dump(json_encode("ab\xE0")); var_dump(json_encode("ab\xE0", JSON_UNESCAPED_UNICODE)); ?> ---EXPECT-- +--EXPECTF-- string(156) ""latin 1234 -\/ russian \u043c\u0430\u043c\u0430 \u043c\u044b\u043b\u0430 \u0440\u0430\u043c\u0443 specialchars \u0002 \b \n U+1D11E >\ud834\udd1e<"" string(100) ""latin 1234 -\/ russian мама мыла раму specialchars \u0002 \b \n U+1D11E >𝄞<"" -string(4) "null" -string(4) "null" +bool(false) +bool(false) diff --git a/ext/json/tests/bug54058.phpt b/ext/json/tests/bug54058.phpt index 3b1136bdd9..df1b3130f8 100644 --- a/ext/json/tests/bug54058.phpt +++ b/ext/json/tests/bug54058.phpt @@ -8,28 +8,33 @@ Bug #54058 (json_last_error() invalid UTF-8 produces wrong error) $bad_utf8 = quoted_printable_decode('=B0'); json_encode($bad_utf8); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); $a = new stdclass; $a->foo = quoted_printable_decode('=B0'); json_encode($a); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); $b = new stdclass; $b->foo = $bad_utf8; $b->bar = 1; json_encode($b); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); $c = array( 'foo' => $bad_utf8, 'bar' => 1 ); json_encode($c); -var_dump(json_last_error()); +var_dump(json_last_error(), json_last_error_msg()); + ?> --EXPECTF-- int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" diff --git a/ext/json/tests/bug61537.phpt b/ext/json/tests/bug61537.phpt new file mode 100644 index 0000000000..80ed051c9a --- /dev/null +++ b/ext/json/tests/bug61537.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #61537 (json_encode() incorrectly truncates/discards information) +--SKIPIF-- +<?php if (!extension_loaded("json")) print "skip"; ?> +--FILE-- +<?php +$invalid_utf8 = "\x9f"; + +var_dump(json_encode($invalid_utf8)); +var_dump(json_last_error(), json_last_error_msg()); + +var_dump(json_encode($invalid_utf8, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); + +echo "\n"; + +$invalid_utf8 = "an invalid sequen\xce in the middle of a string"; + +var_dump(json_encode($invalid_utf8)); +var_dump(json_last_error(), json_last_error_msg()); + +var_dump(json_encode($invalid_utf8, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); + +?> +--EXPECTF-- +bool(false) +int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" +string(4) "null" +int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" + +bool(false) +int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" +string(4) "null" +int(5) +string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" diff --git a/ext/json/tests/bug61978.phpt b/ext/json/tests/bug61978.phpt index 2c732979ef..c34b03f8f7 100644 --- a/ext/json/tests/bug61978.phpt +++ b/ext/json/tests/bug61978.phpt @@ -29,19 +29,15 @@ class JsonTest2 implements JsonSerializable { $obj1 = new JsonTest1(); -var_dump(json_encode($obj1)); +var_dump(json_encode($obj1, JSON_PARTIAL_OUTPUT_ON_ERROR)); -echo "\n==\n"; +echo "==\n"; $obj2 = new JsonTest2(); -var_dump(json_encode($obj2)); +var_dump(json_encode($obj2, JSON_PARTIAL_OUTPUT_ON_ERROR)); ?> --EXPECTF-- -Warning: json_encode(): recursion detected in %s on line %d string(44) "{"test":"123","me":{"test":"123","me":null}}" - == - -Warning: json_encode(): recursion detected in %s on line %d string(44) "{"test":"123","me":{"test":"123","me":null}}" diff --git a/ext/json/tests/bug62369.phpt b/ext/json/tests/bug62369.phpt new file mode 100644 index 0000000000..a5efd802c5 --- /dev/null +++ b/ext/json/tests/bug62369.phpt @@ -0,0 +1,34 @@ +--TEST-- +FR #62369 (Segfault on json_encode(deeply_nested_array) +--SKIPIF-- +<?php if (!extension_loaded("json")) print "skip"; ?> +--FILE-- +<?php + +$array = array(); +for ($i=0; $i<550; $i++) { + $array = array($array); +} + +json_encode($array, 0, 551); +switch (json_last_error()) { + case JSON_ERROR_NONE: + echo 'OK'.PHP_EOL; + break; + case JSON_ERROR_DEPTH: + echo 'ERROR'.PHP_EOL; + break; +} + +json_encode($array, 0, 540); +switch (json_last_error()) { + case JSON_ERROR_NONE: + echo 'OK'.PHP_EOL; + break; + case JSON_ERROR_DEPTH: + echo 'ERROR'.PHP_EOL; + break; +} +--EXPECTF-- +OK +ERROR diff --git a/ext/json/tests/inf_nan_error.phpt b/ext/json/tests/inf_nan_error.phpt new file mode 100644 index 0000000000..f9deecc469 --- /dev/null +++ b/ext/json/tests/inf_nan_error.phpt @@ -0,0 +1,45 @@ +--TEST-- +An error is thrown when INF or NaN are encoded +--SKIPIF-- +<?php if (!extension_loaded("json")) print "skip"; ?> +--FILE-- +<?php + +$inf = INF; + +var_dump($inf); + +var_dump(json_encode($inf)); +var_dump(json_last_error(), json_last_error_msg()); + +var_dump(json_encode($inf, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); + +echo "\n"; + +$nan = NAN; + +var_dump($nan); + +var_dump(json_encode($nan)); +var_dump(json_last_error(), json_last_error_msg()); + +var_dump(json_encode($nan, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); +?> +--EXPECTF-- +float(INF) +bool(false) +int(7) +string(34) "Inf and NaN cannot be JSON encoded" +string(1) "0" +int(7) +string(34) "Inf and NaN cannot be JSON encoded" + +float(NAN) +bool(false) +int(7) +string(34) "Inf and NaN cannot be JSON encoded" +string(1) "0" +int(7) +string(34) "Inf and NaN cannot be JSON encoded" diff --git a/ext/json/tests/json_encode_basic.phpt b/ext/json/tests/json_encode_basic.phpt index 152e24444c..fc348eed81 100644 --- a/ext/json/tests/json_encode_basic.phpt +++ b/ext/json/tests/json_encode_basic.phpt @@ -150,9 +150,7 @@ string(4) "null" -- Iteration 25 -- string(4) "null" -- Iteration 26 -- - -Warning: json_encode(): type is unsupported, encoded as null in %s on line %d -string(4) "null" +bool(false) -- Iteration 27 -- string(82) "{"MyInt":99,"MyFloat":123.45,"MyBool":true,"MyNull":null,"MyString":"Hello World"}" -===Done===
\ No newline at end of file +===Done=== diff --git a/ext/json/tests/json_encode_error.phpt b/ext/json/tests/json_encode_error.phpt index d130dd960c..547c8bef17 100644 --- a/ext/json/tests/json_encode_error.phpt +++ b/ext/json/tests/json_encode_error.phpt @@ -34,7 +34,5 @@ Warning: json_encode() expects at least 1 parameter, 0 given in %s on line %d NULL -- Testing json_encode() function with more than expected no. of arguments -- - -Warning: json_encode() expects at most 2 parameters, 3 given in %s on line %d -NULL +string(5) ""abc"" ===Done=== diff --git a/ext/json/tests/pass001.1.phpt b/ext/json/tests/pass001.1.phpt index 7e15a7622a..a51f885780 100644 --- a/ext/json/tests/pass001.1.phpt +++ b/ext/json/tests/pass001.1.phpt @@ -90,10 +90,10 @@ $arr = json_decode($test, true); var_dump($arr); echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj); +$obj_enc = json_encode($obj, JSON_PARTIAL_OUTPUT_ON_ERROR); echo $obj_enc . "\n"; echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr); +$arr_enc = json_encode($arr, JSON_PARTIAL_OUTPUT_ON_ERROR); echo $arr_enc . "\n"; echo "DECODE AGAIN: AS OBJECT\n"; diff --git a/ext/json/tests/pass001.1_64bit.phpt b/ext/json/tests/pass001.1_64bit.phpt index 9c3e669952..ff2714436d 100644 --- a/ext/json/tests/pass001.1_64bit.phpt +++ b/ext/json/tests/pass001.1_64bit.phpt @@ -90,10 +90,10 @@ $arr = json_decode($test, true); var_dump($arr); echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj); +$obj_enc = json_encode($obj, JSON_PARTIAL_OUTPUT_ON_ERROR); echo $obj_enc . "\n"; echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr); +$arr_enc = json_encode($arr, JSON_PARTIAL_OUTPUT_ON_ERROR); echo $arr_enc . "\n"; echo "DECODE AGAIN: AS OBJECT\n"; diff --git a/ext/json/tests/pass001.phpt b/ext/json/tests/pass001.phpt index 43be11e2b0..1fd05fcdd8 100644 --- a/ext/json/tests/pass001.phpt +++ b/ext/json/tests/pass001.phpt @@ -79,10 +79,10 @@ $arr = json_decode($test, true); var_dump($arr); echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj); +$obj_enc = json_encode($obj, JSON_PARTIAL_OUTPUT_ON_ERROR); echo $obj_enc . "\n"; echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr); +$arr_enc = json_encode($arr, JSON_PARTIAL_OUTPUT_ON_ERROR); echo $arr_enc . "\n"; echo "DECODE AGAIN: AS OBJECT\n"; diff --git a/ext/json/tests/unsupported_type_error.phpt b/ext/json/tests/unsupported_type_error.phpt new file mode 100644 index 0000000000..45a167a5ac --- /dev/null +++ b/ext/json/tests/unsupported_type_error.phpt @@ -0,0 +1,26 @@ +--TEST-- +An error is thrown when an unsupported type is encoded +--SKIPIF-- +<?php if (!extension_loaded("json")) print "skip"; ?> +--FILE-- +<?php + +$resource = fopen(__FILE__, "r"); + +var_dump($resource); + +var_dump(json_encode($resource)); +var_dump(json_last_error(), json_last_error_msg()); + +var_dump(json_encode($resource, JSON_PARTIAL_OUTPUT_ON_ERROR)); +var_dump(json_last_error(), json_last_error_msg()); + +?> +--EXPECTF-- +resource(5) of type (stream) +bool(false) +int(8) +string(21) "Type is not supported" +string(4) "null" +int(8) +string(21) "Type is not supported" |