Неделя багов в JSON::XS! :)
Тоже столкнулся с багом в JSON::XS - при установке модуля boolean, который
в зависимостях у Test::DBIx::Class, не был пройден тест json.t.
Заглянув в issue данного модуля на github, нашел такой тикет:
json.t fails on many Linux systems -
https://github.com/ingydotnet/boolean-pm/issues/5
Там некоторые советуют установить Cpanel::JSON::XS - установил и все
заработало, хотя не у всех падает при установленном JSON::XS.
Если модифицировать тест:
use strict; use warnings;
use Test::More tests => 3;
use boolean -truth;
my $HAVE_JSON = eval { require JSON::MaybeXS };
SKIP: {
skip "JSON is missing", 3 unless $HAVE_JSON;
eval{
my $json = JSON::MaybeXS->new->convert_blessed();
is($json->encode({false => (0 == 1)}), '{"false":false}',
'JSON false works');
is($json->encode({true => (1 == 1)}), '{"true":true}',
'JSON true works');
is(ref(boolean::TO_JSON(true)), 'SCALAR',
'Make sure we can call boolean::TO_JSON($b)');
}
};
в следующий:
use strict; use warnings;
use Test::More tests => 3;
use boolean -truth;
my $HAVE_JSON = eval { require JSON::XS };
SKIP: {
skip "JSON is missing", 3 unless $HAVE_JSON;
my $json = JSON::XS->new->convert_blessed();
is($json->encode({false => (0 == 1)}), '{"false":false}',
'JSON false works');
is($json->encode({true => (1 == 1)}), '{"true":true}',
'JSON true works');
is(ref(boolean::TO_JSON(true)), 'SCALAR',
'Make sure we can call boolean::TO_JSON($b)');
};
и запустить, то тест сваливается с ошибкой "Modification of a read-only
value attempted at test/json.t line 9"
Если заменить на Cpanel::JSON::XS или JSON::PP, то все ок
Вадим Власов <[email protected]> писал(а) в своём письме Wed, 26 Nov
2014 20:01:33 +0300:
Исследуя новый сериализатор в JSON::XS наткнулся:
$ echo 'use strict;
use warnings;
use feature "say";
use JSON::XS;
my $j=JSON::XS->new->allow_tags;
say "JSON::XS: $JSON::XS::VERSION";
say "Types::Serialiser: $Types::Serialiser::VERSION";
my $t = $j->encode( Foo->new );
say $t;
my @t = $j->encode( Foo->new );
package Foo;
sub new { bless {}, $_[0]; }
sub FREEZE { ( 123, 456 ); }' | perl
*JSON::XS: 3.01*
*Types::Serialiser: 1.0*
*("Foo")[123,456]*
*panic: attempt to copy freed scalar c37a18 to c37a00 at - line 14.*
$ perl -MJSON::XS -wE 'say JSON::XS->new->allow_tags->encode( bless {},
Foo
); package Foo; sub FREEZE{ return 123 }'
*Use of uninitialized value in say at -e line 1.*
*("Foo")[123]*
$ perl -MJSON::XS -wE 'say scalar( JSON::XS->new->allow_tags->encode(
bless
{}, Foo )); package Foo; sub FREEZE{ return 123 }'
*("Foo")[123]*
Проверили на разных машинах и на разных версиях perl-а - одно и то же.
--
Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org