Bug #75986 [Opn->Nab]: JSON parser not following preposed RFC

From: Date: Tue, 20 Feb 2018 14:07:59 +0000
Subject: Bug #75986 [Opn->Nab]: JSON parser not following preposed RFC
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-214048@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75986&edit=1 ID: 75986 Updated by: nikic@php.net Reported by: welfordmartin at gmail dot com Summary: JSON parser not following preposed RFC -Status: Open +Status: Not a bug Type: Bug Package: JSON related Operating System: Ubuntu Server 16.04 & Windows 10 PHP Version: 7.2.2 Block user comment: N Private report: N New Comment: Your JSON contains invalid escape sequences. \d is not valid JSON. \x7D is not valid JSON. The correct syntax is \\d and \u007D respectively. Previous Comments: ------------------------------------------------------------------------ [2018-02-20 14:00:41] welfordmartin at gmail dot com Description: ------------ When using json_decode to decode a string value containing "{" or "}" the validation fails and it does not produce an object this even happens when both are UTF-8 encoded with "\x7B" and "\x7D" respectfully. both cases cause a 'JSON_ERROR_SYNTAX', While the JSON code has been manually checked against the RFC4627 and it says standard C strings well I can't believe I have to point this one out to you but using "{" and "}" are both ASCII chars so valid in a string. The JSON also parses correctly in Web Browsers both Chrome, Edge & IE parsers. JSON Code used: { "defaultModel":"Campaign", "routes" : { "getCampaignsForWebsite":{ "scope" : "read_campaigns", "api":{ "method" : "GET", "uri" : "/campaign/\x7BdisplayType\x7D/\x7Bwebsite_id:\d+\x7D" }, "perms":{ "module" : "website", "requirement" : "read" } }, "getSingleCampaign":{ "scope" : "read_campaigns", "api":{ "method" : "GET", "uri" : "/campaign/\x7Bcampaign_id:\d+\x7D" }, "perms":{ "module" : "campaign", "requirement" : "read" } } } } Test script: --------------- $raw = file_get_contents("test.json"); $json = json_decode($raw, true); switch (json_last_error()) { case JSON_ERROR_NONE: echo ' - No errors'; break; case JSON_ERROR_DEPTH: echo ' - Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: echo ' - Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: echo ' - Unexpected control character found'; break; case JSON_ERROR_SYNTAX: echo ' - Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: echo ' - Unknown error'; break; } Expected result: ---------------- I expect an array result when using assoc or a stdClass object when not. Actual result: -------------- Null and json_last_error results in JSON_ERROR_SYNTAX ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=75986&edit=1

« previous php.bugs (#214048) next »