Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tests from JSONTestSuite #140

Merged
merged 1 commit into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public byte[] mask(byte[] input) {
visitValue(maskingState, keyMaskingConfig);

return maskingState.flushReplacementOperations();
} catch (ArrayIndexOutOfBoundsException e) {
} catch (ArrayIndexOutOfBoundsException | StackOverflowError e) {
throw new InvalidJsonException("Invalid JSON input provided: %s".formatted(e.getMessage()), e);
}
}
Expand All @@ -65,6 +65,9 @@ public byte[] mask(byte[] input) {
* being masked
*/
private void visitValue(MaskingState maskingState, @Nullable KeyMaskingConfig keyMaskingConfig) {
if (maskingState.endOfJson()) {
return;
}
// using switch-case over 'if'-statements to improve performance by ~20% (measured in benchmarks)
switch (maskingState.byteAtCurrentIndex()) {
case '[' -> visitArray(maskingState, keyMaskingConfig);
Expand Down Expand Up @@ -123,7 +126,7 @@ private void visitArray(MaskingState maskingState, @Nullable KeyMaskingConfig ke

stepOverWhitespaceCharacters(maskingState);
// check if we're at the end of a (non-empty) array
if (maskingState.byteAtCurrentIndex() == ']') {
if (maskingState.endOfJson() || maskingState.byteAtCurrentIndex() == ']') {
break;
}
}
Expand Down Expand Up @@ -185,7 +188,7 @@ private void visitObject(MaskingState maskingState, @Nullable KeyMaskingConfig p

stepOverWhitespaceCharacters(maskingState);
// check if we're at the end of a (non-empty) object
if (maskingState.byteAtCurrentIndex() == '}') {
if (maskingState.endOfJson() || maskingState.byteAtCurrentIndex() == '}') {
break;
}
}
Expand Down Expand Up @@ -292,7 +295,7 @@ private static void stepOverWhitespaceCharacters(MaskingState maskingState) {
private static void stepOverNumericValue(MaskingState maskingState) {
do {
maskingState.next();
} while (maskingState.currentIndex() < maskingState.getMessage().length && AsciiJsonUtil.isNumericCharacter(maskingState.byteAtCurrentIndex()));
} while (!maskingState.endOfJson() && AsciiJsonUtil.isNumericCharacter(maskingState.byteAtCurrentIndex()));
}

/**
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/dev/blaauwendraad/masker/json/MaskingState.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ final class MaskingState implements ValueMaskerContext {
* Current JSONPath is represented by a stack of segment references.
* A stack is implemented with an array of the trie nodes that reference the end of the segment
*/
private KeyMatcher.@Nullable TrieNode[] currentJsonPath = null;
private KeyMatcher.@Nullable TrieNode @Nullable [] currentJsonPath = null;
private int currentJsonPathHeadIndex = -1;
private int currentValueStartIndex = -1;

Expand All @@ -47,7 +47,7 @@ public byte byteAtCurrentIndex() {
}

public boolean endOfJson() {
return currentIndex == message.length;
return currentIndex >= message.length;
}

public int currentIndex() {
Expand Down Expand Up @@ -209,7 +209,7 @@ public byte getByte(int index) {

@Override
public int byteLength() {
return currentIndex - getCurrentValueStartIndex();
return Math.min(currentIndex, message.length) - getCurrentValueStartIndex();
}

@Override
Expand Down Expand Up @@ -256,7 +256,7 @@ public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(new String(message, Math.max(0, currentIndex - 10), Math.min(10, currentIndex)));
sb.append(">");
if (currentIndex == message.length) {
if (endOfJson()) {
sb.append("<end of json>");
} else {
sb.append((char) message[currentIndex]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ the byte encoded unicode character (\\u + 4 hex bytes) to prevent possible Array
decodedBytes[decodedIndex++] = (byte) (0x80 | ((unicodeHexBytesAsChar >> 6) & 0x3f));
decodedBytes[decodedIndex++] = (byte) (0x80 | (unicodeHexBytesAsChar & 0x3f));
}
} catch (IllegalArgumentException e) {
} catch (IllegalArgumentException | IndexOutOfBoundsException e) {
throw context.invalidJson(Objects.requireNonNull(e.getMessage()), valueStartIndex);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/i_number_huge_exp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/i_number_real_underflow.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"\uDFAA":"###"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/i_string_invalid_utf-8.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/i_string_iso_latin_1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###" true]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_a_invalid_utf8.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[aå]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***": "###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"],
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[,"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_double_comma.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###",,"###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***",,]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_extra_close.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"]]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_extra_comma.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***",]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_incomplete.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[x
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"["###"]]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_invalid_utf8.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ÿ]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###":"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_just_comma.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[,]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_just_minus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_missing_value.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ , "***"]
3 changes: 3 additions & 0 deletions src/test/JSONTestSuite/masked/n_array_newlines_unclosed.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
["***",
"###"
,"###",
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###",]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###",,]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"\"&&&"
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_star_inside.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[*]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_array_unclosed.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["***"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###",
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
["###",
"###"
,"###"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{}
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_incomplete_false.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["&&&"
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_incomplete_null.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[nul]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_incomplete_true.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["&&&"
Binary file not shown.
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_++.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[++"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_+1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[+"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_+Inf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[+Inf]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_-01.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_-1.0..json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_-2..json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_-NaN.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"NaN]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_.-1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[."###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_.2e-3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[."###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0.1.2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0.3e+.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0.3e.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0.e1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0_capital_E+.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0_capital_E.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0e+.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_0e.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_1.0e+.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_1.0e-.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_1.0e.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_1_000.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###" 0"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_1eE2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_2.e+3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_2.e-3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_2.e3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_9.e+.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_Inf.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[Inf]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_NaN.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[NaN]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[1]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_expression.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_hex_1_digit.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"x"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_hex_2_digits.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"x"###"]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_infinity.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[Infini"&&&"
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_invalid+-.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"foo]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"å]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"å]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"å]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_minus_infinity.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"Infini"&&&"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###"foo]
1 change: 1 addition & 0 deletions src/test/JSONTestSuite/masked/n_number_minus_space_1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["###" 1]