Skip to content

Fix uncaught json::out_of_range in parseJson/parseYaml causing abort() - #1341

Open
0xOverlordX wants to merge 1 commit into
google:masterfrom
0xOverlordX:fix-parsejson-uncaught-exception
Open

0xOverlordX wants to merge 1 commit into
google:masterfrom
0xOverlordX:fix-parsejson-uncaught-exception

Conversation

@0xOverlordX

Copy link
Copy Markdown

Security Impact

std.parseJson("1e400") crashes the process with abort() via SIGABRT. This is a denial-of-service vulnerability , any application embedding libjsonnet that evaluates untrusted Jsonnet input can be killed instantly with a single line of Jsonnet.

The abort() is not catchable by the embedding application. There is no way to recover.

This affects any tool built on libjsonnet that processes user-supplied Jsonnet, including CI/CD pipelines, Kubernetes config generators (Tanka, Kubecfg), and multi-tenant services.

Root Cause

builtinParseJson() in core/vm.cpp catches json::parse_error but not json::out_of_range. When nlohmann throws out_of_range for unrepresentable numbers like 1e400, the exception escapes to the TRY/CATCH macro which calls abort().

Same issue in builtinParseYaml().

Fix

Catch json::exception (the common base class) instead of just json::parse_error. This turns the crash into a normal Jsonnet RUNTIME ERROR that callers can handle gracefully.

Before

jsonnet -e 'std.parseJson("1e400")'

Something went wrong during jsonnet_evaluate_snippet, please report this:
[json.exception.out_of_range.406] number overflow parsing '1e400'
zsh: abort      jsonnet -e 'std.parseJson("1e400")'

After

jsonnet -e 'std.parseJson("1e400")'

RUNTIME ERROR: [json.exception.out_of_range.406] number overflow parsing '1e400'
       <cmdline>:1:1-23

@google-cla

google-cla Bot commented Oct 15, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the exception handling in core/vm.cpp by catching the broader json::exception instead of json::parse_error, and adds a catch block for json::exception during YAML-to-JSON parsing. There are no review comments, so I have no feedback to provide.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant