Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

JSON boolean sentinel $JSON::true becomes undef on both backends

Open
#1,392 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
55/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
perl
Domain
compilers

Research direction

Start with the JSON/JSON::PP loading and package-variable handling paths, using t/children.t tests 8-9 and the minimal reproducer as the behavioral reference. Compare results under system Perl, the JVM backend, and the interpreter. Done means $JSON::true and $JSON::false retain standard values and decoded booleans compare correctly, with a permanent project-owned regression test.

Written by the indexing model from the issue text.

Description

area:backend area:cpan-port area:runtime bug

Summary

PerlOnJava mishandles the package variable $JSON::true when a JSON boolean is
decoded. The decoded value is a JSON::PP::Boolean, but $JSON::true becomes
undef in both execution backends. This breaks standard Perl identity/equality
semantics and causes upstream CPAN tests to fail.

CPAN evidence

  • Distribution: Net-Google-Drive-Simple v3.02
  • CPAN run: 20260915-125610-17469
  • Failure record: FAIL Net::Google::Drive::Simple Net::Google::Drive::Simple
  • Failing test: t/children.t, tests 8-9
  • PerlOnJava result: 93/95 assertions pass; 2 fail in 1/12 test programs
  • System Perl: the equivalent JSON boolean comparison passes
  • Environment: pure-Perl target distribution; no target XS/native code
  • Backends: reproduced on both the JVM backend and the interpreter

The failing upstream assertion is:

ok $JSON::true;
is $first_file->copyable, $JSON::true, "copyable is true";

The first assertion fails because $JSON::true is false/undefined. The second
reports an actual JSON::PP::Boolean object but an expected undef value.

Minimal reproducer

use JSON;
use Test2::V0;

my $json = JSON->new;
my $value = $json->decode('{"copyable":true}');

ok $JSON::true;
is $value->{copyable}, $JSON::true, 'JSON true';
done_testing;

Expected under standard Perl:

ok 1
ok 2 - JSON true
1..2

Observed on both PerlOnJava backends:

not ok 1
not ok 2 - JSON true
GOT:   JSON::PP::Boolean=SCALAR(...)
CHECK: undef
1..2

Impact

Code using JSON's documented boolean sentinels can incorrectly treat true as
false or undefined. This affects API clients, configuration readers, feature
flags, permission checks, and any CPAN module that compares decoded JSON
booleans with $JSON::true or $JSON::false. In this distribution it causes
the copyable property of a decoded Google Drive item to be reported
incorrectly by its test suite.

Likely ownership

The failure is not caused by Net::Google::Drive::Simple: the same JSON
boolean semantics pass under system Perl, and the distribution's other 11 test
programs pass on PerlOnJava. The behavior points to package-variable handling
or JSON boolean initialization/runtime state in PerlOnJava. It is shared by
the JVM and interpreter backends.

Expected fix

Preserve the standard Perl behavior of $JSON::true and $JSON::false after
loading JSON/JSON::PP, including comparisons against decoded boolean
values. Add a permanent project-owned regression test for the reproducer and
run it under system Perl, the JVM backend, and the interpreter backend.

Deduplication

I searched all GitHub issues for JSON::true, JSON::PP::Boolean,
package variable undef boolean, and Net::Google::Drive::Simple.

  • No existing issue directly covers this $JSON::true/JSON boolean failure.
  • #1352 concerns incorrect IOK/NOK flags for large floating-point values;
    it is adjacent scalar-typing work but has a different reproducer and impact.
  • #1260, #1262, and #1308 concern other scalar typing or dual-value cases and
    do not cover JSON boolean package variables.

This issue is therefore not a duplicate.

Dominant language
Perl
Stars
64
Forks
6
Avg merge
5h 11m
Merged PRs (30d)
168

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from fglock/PerlOnJava

All issues in fglock/PerlOnJava

Similar issues

More Perl issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.