Skip to content

Commit

Permalink
Add tests from JSONTestSuite
Browse files Browse the repository at this point in the history
  • Loading branch information
gavlyukovskiy committed May 4, 2024
1 parent 7bc09ac commit 02e873c
Show file tree
Hide file tree
Showing 638 changed files with 891 additions and 9 deletions.
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 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]

0 comments on commit 02e873c

Please sign in to comment.