Comments 11
В коде патча ничего не понял, но предполагаю что он завалится на вот этом тесте:
class Foo implements JsonSerializable {
public function jsonSerialize() {
return new Bar;
}
}
class Bar implements JsonSerializable {
public function jsonSerialize() {
return new Foo;
}
}
+7
Тоже самое написали и в PR:
https://github.com/php/php-src/pull/2763#discussion_r143798219
+1
Или вот таком:
class Foo implements JsonSerializable
{
public function jsonSerialize() {
return [new self];
}
}
0
Есть вполне понятный debug json, когда он возвращает ошибку. Она имеет документацию http://php.net/manual/ru/function.json-last-error.php
-4
Потер, не гоже.
-3
В комментарии к PR совершенно верно заявили что это не баг а фича, главная же проблема это переполнение стека.
+2
Chicago PHP UG represent!
-1
Основной баг как раз в вашем рнр коде, как вы сами и написали рекурсивный вызов, который и так очевиден, без анализа исходников.
По хорошему метод jsonSerialize должен возвращать строку, а не новый экземпляр какого-то объекта и не массив как тут некоторые предлагают :)
Забавно, что на винхп на рнр версии 5.2.4 нет никаких segfault, а на экране печатается
Правда класс объявлен без
Но в целом вы получили разносторонний опыт…
По хорошему метод jsonSerialize должен возвращать строку, а не новый экземпляр какого-то объекта и не массив как тут некоторые предлагают :)
Забавно, что на винхп на рнр версии 5.2.4 нет никаких segfault, а на экране печатается
string(2) "{}"
Правда класс объявлен без
implements JsonSerializableт.к. моя сбока рнр не знает о существовании JsonSerializable интерфейса.
Но в целом вы получили разносторонний опыт…
0
Sign up to leave a comment.
Поиск и исправление багов в исходниках PHP