Edit report at https://bugs.php.net/bug.php?id=61537&edit=1

 ID:                 61537
 Updated by:         ahar...@php.net
 Reported by:        j...@php.net
 Summary:            json_encode() incorrectly truncates/discards
                     information
-Status:             Assigned
+Status:             Closed
 Type:               Bug
 Package:            JSON related
 Operating System:   all
 PHP Version:        5.4.0
 Assigned To:        aharvey
 Block user comment: N
 Private report:     N

 New Comment:

This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.

 For Windows:

http://windows.php.net/snapshots/
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------
[2012-04-11 00:44:24] ahar...@php.net

Automatic comment on behalf of a...@pwd.net.au
Revision: 
http://git.php.net/?p=php-src.git;a=commit;h=cb2a1c71c96d7c9b2ee03d77beae0c8e0d385f1b
Log: Fix bug #61537 (json_encode() incorrectly truncates/discards information) 
and remove a test case that's now mooted by this fix.

------------------------------------------------------------------------
[2012-04-11 00:44:23] ahar...@php.net

Automatic comment on behalf of a...@pwd.net.au
Revision: 
http://git.php.net/?p=php-src.git;a=commit;h=3f3ad30c50c32327e723046bcc6649d05dd9236a
Log: Fix bug #61537 (json_encode() incorrectly truncates/discards information) 
and remove a test case that's now mooted by this fix.

------------------------------------------------------------------------
[2012-04-10 21:10:14] theanomaly dot is at gmail dot com

The patch submitted fixes the problem.

json_ecode() has been incorrectly documented all along. Instead of 
json_encode() 
returning false it has been gladly returning a string containing "null" to 
replace invalid data. Now, "null" is valid json, but the problem is the user 
never ends up knowing that json_encode() silently failed unless they explicitly 
check json_last_error() every single time they call json_encode(). Clearly this 
was not the documented behavior.

It should be the case that when the user tries...

<?php
if (!(json_encode() = $json)) {
    /* Then we have valid json to work with and there is no error */
} else {
    /*
        json_encode() failed and we should check json_last_error()
        in order to know why
    */
?>


I also submitted a patch to fix the problem not realizing there was another 
patch already there which fixes it too and allows it throw the error.
https://github.com/srgoogleguy/php-
src/commit/ba181fce117a3a7d1c7668cf30744b3d7cd7cdbf

However, now there is a test that's going to fail ext/json/tests/bug43941.phpt 
which is testing for undocumented behavior. It was in response to this older 
bug 
report:

https://bugs.php.net/bug.php?id=43941

However, that fix never really fixed the problem. It just made it worse. In my 
opinion we should remove this test. I just wanted ahar...@php.net to also look 
at in case they feel the test should remain or be modified to comply with the 
spec.

Thanks.

------------------------------------------------------------------------
[2012-04-02 01:19:07] ahar...@php.net

Haven't heard any screaming, so let's go with option 2.

------------------------------------------------------------------------
[2012-03-28 08:11:39] yohg...@php.net

I prefer option 2. 
It's an error condition anyway.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=61537


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61537&edit=1

Reply via email to