[Moscow.pm] Баг в JSON::XS?
Eugene Ponizovsky
ponizovsky на gmail.com
Пт Янв 30 04:57:13 PST 2015
Приветствую.
Столкнулся со странным поведением JSON::XS (3.01).
Пытаюсь сериализовать объект, содержащий объекты, используя функцию FREEZE. Один из объектов содержит большое число аргументов (61 пара ключ-значение). При сериализации такого объекта скрипт падает с ошибкой "Segmentation fault" или метод encode() возвращает undef.
Иногда скрипт работает корректно. В этом случае незначительное увеличение кол-ва аргументов или уровня вложенности объектов снова приводит к выше описанному результату.
Пример:
#!/usr/bin/env perl
use 5.010000;
use strict;
use warnings;
use JSON::XS;
my $json_szr = JSON::XS->new();
$json_szr->allow_tags( 1 );
my @foo_params;
for ( 1 .. 61 ) {
push ( @foo_params, "coo$_" => 1 );
}
my $foo1 = Foo->new( @foo_params );
my $foo2 = Foo->new( @foo_params );
my $bar1 = Bar->new(
foo => $foo1,
);
my $bar2 = Bar->new(
foo => $foo2,
bar => $bar1
);
my $bar_json = $json_szr->encode( $bar2 );
if ( defined $bar_json ) {
say $bar_json;
}
package Foo;
####
sub new {
my $class = shift;
my %params = @_;
return bless \%params, $class;
}
####
sub FREEZE {
my $self = shift;
return %{$self};
}
####
sub THAW {
my $class = shift;
my $szr = shift;
return $class->new( @_ );
}
package Bar;
# Аналогично Foo
…
С уважением
Евгений Понизовский
Подробная информация о списке рассылки Moscow-pm