Bug #68992 [NEW]: json_encode stacks exceptions thrown by JsonSerializable classes
| From: | knuteirik at leirahjelle dot net | Date: | Thu, 05 Feb 2015 13:17:05 +0000 |
| Subject: | Bug #68992 [NEW]: json_encode stacks exceptions thrown by JsonSerializable classes | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-190479@lists.php.net to get a copy of this message | ||
From: knuteirik at leirahjelle dot net
Operating system: OS X
PHP version: Irrelevant
Package: JSON related
Bug Type: Bug
Bug description:json_encode stacks exceptions thrown by JsonSerializable classes
Description:
------------
When calling json_encode on an array of classes implementing
JsonSerializable and all of the classes throw an exception, the original
exception appears on the end of an exception chain that is equal to the
length of the array + 1.
Test script:
---------------
<?php
class MyClass implements JsonSerializable {
public function jsonSerialize() {
throw new Exception('Not implemented!');
}
}
$classes = [];
for($i = 0; $i < 5; $i++) {
$classes[] = new MyClass();
}
try {
json_encode($classes);
} catch(Exception $e) {
do {
printf("%s (%d) [%s]\n", $e->getMessage(), $e->getCode(),
get_class($e));
}
while($e = $e->getPrevious());
}
Expected result:
----------------
Failed calling MyClass::jsonSerialize() (0) [Exception]
Not implemented! (0) [Exception]
Actual result:
--------------
Failed calling MyClass::jsonSerialize() (0) [Exception]
Failed calling MyClass::jsonSerialize() (0) [Exception]
Failed calling MyClass::jsonSerialize() (0) [Exception]
Failed calling MyClass::jsonSerialize() (0) [Exception]
Failed calling MyClass::jsonSerialize() (0) [Exception]
Not implemented! (0) [Exception]
--
Edit bug report at https://bugs.php.net/bug.php?id=68992&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=68992&r=trysnapshot54
Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=68992&r=trysnapshot55
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=68992&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=68992&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=68992&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=68992&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=68992&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=68992&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=68992&r=support
Expected behavior: https://bugs.php.net/fix.php?id=68992&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=68992&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=68992&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=68992&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=68992&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=68992&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=68992&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=68992&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=68992&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=68992&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=68992&r=mysqlcfg