[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