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

From: Date: Wed, 01 Dec 2021 15:46:44 +0000
Subject: Bug #81685 [Nab]: 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-238093@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
 Updated by:         cmb@php.net
 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:

RFC 8259 is a standards document; neither that Wikipedia page nor
that json.org page are.  And besides, adhering Postel's law is
almost never a bad idea.


Previous Comments:
------------------------------------------------------------------------
[2021-12-01 15:41:59] me at davidgarcia dot cat

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...

------------------------------------------------------------------------
[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


Thread (5 messages)

« previous php.bugs (#238093) next »