Bug #81685 [Com]: Using json_decode with an integer as first parameter doesn't return NULL

From: Date: Wed, 01 Dec 2021 15:42:00 +0000
Subject: Bug #81685 [Com]: Using json_decode with an integer as first parameter doesn't return NULL
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-238092@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81685&edit=1 ID: 81685 Comment by: me at davidgarcia dot cat Reported by: joaquimsb89 at gmail dot com Summary: Using json_decode with an integer as first parameter doesn't return NULL Status: Not a bug Type: Bug Package: JSON related Operating System: Debian & Arch PHP Version: 7.4.26 Assigned To: cmb Block user comment: N Private report: N New Comment: On the same web link that was shared previously: https://datatracker.ietf.org/doc/html/rfc8259#section-2 A JSON text is a sequence of tokens. The set of tokens includes six structural characters, strings, numbers, and three literal names. ---- Wikipedia definition https://en.wikipedia.org/wiki/JSON JSON [...] is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other serializable values) [...] ---- JSON https://www.json.org/json-en.html (similar description and detailed chart to explain in detail) ==== To me, passing an integer or a non-formatted JSON string means there's a bug here... Previous Comments: ------------------------------------------------------------------------ [2021-12-01 15:18:57] cmb@php.net See <https://datatracker.ietf.org/doc/html/rfc8259#section-2>: | A JSON text is a serialized value. Note that certain previous | specifications of JSON constrained a JSON text to be an object or | an array. So the actual behavior of json_decode() looks good to me. ------------------------------------------------------------------------ [2021-12-01 14:40:38] joaquimsb89 at gmail dot com Description: ------------ When using the json_decode() function and passing an integer as the first parameter, or with the strval() function, the return value is the integer itself instead of an expected NULL, expecting "Syntax error" as the error description. Behaviour observed in the following environments: PHP 7.4.26, debian 10/buster, installed via deb sury repo PHP 8.0.13, Arch Linux, installed via pacman -S php PHP 8.1.0, debian 11/bullseye, installed via deb sury repo Test script: --------------- <?php var_dump(json_decode('', true)); var_dump(json_last_error_msg()); echo "\n"; var_dump(json_decode(123, true)); var_dump(json_last_error_msg()); echo "\n"; var_dump(json_decode(strval(123), true)); var_dump(json_last_error_msg()); echo "\n"; var_dump(json_decode('{"a":123}', true)); var_dump(json_last_error_msg()); Expected result: ---------------- NULL string(12) "Syntax error" NULL string(12) "Syntax error" NULL string(12) "Syntax error" array(1) { ["a"]=> int(123) } string(8) "No error" Actual result: -------------- NULL string(12) "Syntax error" int(123) string(8) "No error" int(123) string(8) "No error" array(1) { ["a"]=> int(123) } string(8) "No error" ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81685&edit=1

« previous php.bugs (#238092) next »