Package: libjson-xs-perl
Version: 3.030-1
Severity: important
Dear Maintainer,
The following program exposes a bug in JSON::XS module which makes the
program die.
--8<---cut here---start->8---
#!/usr/bin/perl
use JSON;
use threads;
my $thnum = int($ARGV[0]);
$href{"foo"} = "bar";
for (1..$thnum) {
threads->create(sub { print "quick thread\n" });
}
foreach (threads->list()) { $_->join(); }
print to_json(\%href);
--8<---cut here---end--->8---
For any number of threads other than 0 (e.g. "perl prog.pl 1") the
program dies printing[1]
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow
this) at /usr/share/perl5/JSON.pm line 156.
The logic that triggers it is in json_nonref()[2]. The condition that
causes the function to return 1 is[3]
SvSTASH (scalar) == bool_stash
because bool_stash is 0! bool_stash is assigned a value twice. Once in
BOOT[4] and for the second time in CLONE[5], which appears to be a problem.
Note, that to_json() dies even in the main thread.
[1]
https://anonscm.debian.org/git/pkg-perl/packages/libjson-xs-perl.git/tree/XS.xs#n961
[2]
https://anonscm.debian.org/git/pkg-perl/packages/libjson-xs-perl.git/tree/XS.xs#n356
[3]
https://anonscm.debian.org/git/pkg-perl/packages/libjson-xs-perl.git/tree/XS.xs#n365
[4]
https://anonscm.debian.org/git/pkg-perl/packages/libjson-xs-perl.git/tree/XS.xs#n1999
[5]
https://anonscm.debian.org/git/pkg-perl/packages/libjson-xs-perl.git/tree/XS.xs#n2014
-- System Information:
Debian Release: 9.3
APT prefers stable
APT policy: (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: armel, arm64
Kernel: Linux 4.9.0-0.bpo.5-amd64 (SMP w/8 CPU cores)
Locale: LANG=pl_PL.UTF-8, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8),
LANGUAGE=pl_PL.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages libjson-xs-perl depends on:
ii libc6 2.24-11+deb9u1
ii libcommon-sense-perl3.74-2
ii libtypes-serialiser-perl1.0-1
ii perl5.24.1-3+deb9u2
ii perl-base [perlapi-5.24.1] 5.24.1-3+deb9u2
libjson-xs-perl recommends no packages.
libjson-xs-perl suggests no packages.
-- no debconf information
--
Łukasz Stelmach
Samsung R&D Institute Poland
Samsung Electronics
signature.asc
Description: PGP signature