7 changed files with 236 additions and 34 deletions
-
3NEWS
-
15UPGRADING
-
97ext/json/json.c
-
1ext/json/php_json.h
-
50ext/json/tests/json_decode_exceptions.phpt
-
56ext/json/tests/json_encode_exceptions.phpt
-
48ext/json/tests/json_exceptions_error_clearing.phpt
@ -0,0 +1,50 @@ |
|||
--TEST-- |
|||
Test json_decode() function : JSON_THROW_ON_ERROR flag |
|||
--FILE-- |
|||
<?php |
|||
|
|||
try { |
|||
var_dump(json_decode("{", false, 512, JSON_THROW_ON_ERROR)); |
|||
} catch (JsonException $e) { |
|||
var_dump($e); |
|||
} |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
object(JsonException)#1 (7) { |
|||
["message":protected]=> |
|||
string(12) "Syntax error" |
|||
["string":"Exception":private]=> |
|||
string(0) "" |
|||
["code":protected]=> |
|||
int(4) |
|||
["file":protected]=> |
|||
string(%d) "%s" |
|||
["line":protected]=> |
|||
int(%d) |
|||
["trace":"Exception":private]=> |
|||
array(1) { |
|||
[0]=> |
|||
array(4) { |
|||
["file"]=> |
|||
string(%d) "%s" |
|||
["line"]=> |
|||
int(%d) |
|||
["function"]=> |
|||
string(11) "json_decode" |
|||
["args"]=> |
|||
array(4) { |
|||
[0]=> |
|||
string(1) "{" |
|||
[1]=> |
|||
bool(false) |
|||
[2]=> |
|||
int(512) |
|||
[3]=> |
|||
int(4194304) |
|||
} |
|||
} |
|||
} |
|||
["previous":"Exception":private]=> |
|||
NULL |
|||
} |
|||
@ -0,0 +1,56 @@ |
|||
--TEST-- |
|||
Test json_encode() function : JSON_THROW_ON_ERROR flag |
|||
--FILE-- |
|||
<?php |
|||
|
|||
try { |
|||
var_dump(json_encode("\x80", JSON_THROW_ON_ERROR)); |
|||
} catch (JsonException $e) { |
|||
var_dump($e); |
|||
} |
|||
|
|||
// JSON_PARTIAL_OUTPUT_ON_ERROR is incompatible with exceptions |
|||
// So it overrides it for the sake of working with wrappers that add the |
|||
// JSON_THROW_ON_ERROR flag |
|||
var_dump(json_encode("\x80", JSON_THROW_ON_ERROR | JSON_PARTIAL_OUTPUT_ON_ERROR)); |
|||
var_dump(json_last_error()); |
|||
var_dump(json_last_error_msg()); |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
object(JsonException)#1 (7) { |
|||
["message":protected]=> |
|||
string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" |
|||
["string":"Exception":private]=> |
|||
string(0) "" |
|||
["code":protected]=> |
|||
int(5) |
|||
["file":protected]=> |
|||
string(%d) "%s" |
|||
["line":protected]=> |
|||
int(%d) |
|||
["trace":"Exception":private]=> |
|||
array(1) { |
|||
[0]=> |
|||
array(4) { |
|||
["file"]=> |
|||
string(%d) "%s" |
|||
["line"]=> |
|||
int(%d) |
|||
["function"]=> |
|||
string(11) "json_encode" |
|||
["args"]=> |
|||
array(2) { |
|||
[0]=> |
|||
string(1) "%s" |
|||
[1]=> |
|||
int(4194304) |
|||
} |
|||
} |
|||
} |
|||
["previous":"Exception":private]=> |
|||
NULL |
|||
} |
|||
string(4) "null" |
|||
int(5) |
|||
string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" |
|||
@ -0,0 +1,48 @@ |
|||
--TEST-- |
|||
JSON_THROW_ON_ERROR: global error flag untouched |
|||
--FILE-- |
|||
<?php |
|||
|
|||
var_dump(json_last_error()); |
|||
|
|||
// here we cause a different kind of error to the following errors, so that |
|||
// we can be sure the global error state looking unchanged isn't coincidence |
|||
json_decode("\xFF"); |
|||
|
|||
var_dump(json_last_error()); |
|||
|
|||
try { |
|||
json_decode("", false, 512, JSON_THROW_ON_ERROR); |
|||
} catch (JsonException $e) { |
|||
echo "Caught JSON exception: ", $e->getCode(), PHP_EOL; |
|||
} |
|||
|
|||
var_dump(json_last_error()); |
|||
|
|||
try { |
|||
json_decode("{", false, 512, JSON_THROW_ON_ERROR); |
|||
} catch (JsonException $e) { |
|||
echo "Caught JSON exception: ", $e->getCode(), PHP_EOL; |
|||
} |
|||
|
|||
var_dump(json_last_error()); |
|||
|
|||
|
|||
try { |
|||
json_encode(NAN, JSON_THROW_ON_ERROR); |
|||
} catch (JsonException $e) { |
|||
echo "Caught JSON exception: ", $e->getCode(), PHP_EOL; |
|||
} |
|||
|
|||
var_dump(json_last_error()); |
|||
|
|||
?> |
|||
--EXPECT-- |
|||
int(0) |
|||
int(5) |
|||
Caught JSON exception: 4 |
|||
int(5) |
|||
Caught JSON exception: 4 |
|||
int(5) |
|||
Caught JSON exception: 7 |
|||
int(5) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue