Fix crash when escaping JSON strings with UTF-8 characters #3447
8000
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Running
sorbet --print parse-tree-json -e "'a👋a'"
with Sorbet's master results in aBus error: 10
error.This is because when we escape the String with
JSON::escape
we iterate over each character of the string:For the
a👋a
string this mean we actually end up iterating over the code points of the UTF-8 chars:This means that later when we will check if that character is a control character:
The condition will be true and we will print the code-point resulting in the bus error.
We can avoid this by adding a guard on the lower bound:
Test plan
We had no test for
parse-json
so I copied and adapted theparse-whitequark
one.