Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,6 @@ public Builder withPreparedLevels(int preparedLevels) {
return this;
}

public Builder withoutLinebreak() {
return withLinebreak(LinebreakType.NONE);
}

public Builder withWindowsLinebreak() {
return withLinebreak(LinebreakType.CarriageReturnLineFeed);
}
Expand Down Expand Up @@ -190,9 +186,6 @@ public String asIndent() {
}

public String asLinebreak() {
if(linebreakType != null) {
return linebreakType.characters;
}
return null;
return linebreakType.characters;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ public void setMark(int mark) {
this.mark = mark;
}

public void setLimit(int limit) {
public void setMaxSizeLimit(int limit) {
this.limit = limit;
}

public int getLimit() {
public int getMaxSizeLimit() {
return limit;
}

Expand All @@ -69,7 +69,7 @@ public int skipObjectOrArrayMaxSizeMaxStringLength(final byte[] chars, int offse
int bracketLevel = getLevel();
int levelLimit = bracketLevel - 1;

int maxSizeLimit = getLimit();
int maxSizeLimit = getMaxSizeLimit();

boolean[] squareBrackets = getSquareBrackets();

Expand Down Expand Up @@ -226,7 +226,7 @@ public int skipObjectOrArrayMaxSizeMaxStringLength(final byte[] chars, int offse
setFlushOffset(flushOffset);
setMark(mark);
setLevel(bracketLevel);
setLimit(maxSizeLimit);
setMaxSizeLimit(maxSizeLimit);

return offset;
}
Expand All @@ -235,7 +235,7 @@ public int anonymizeObjectOrArrayMaxSize(final byte[] chars, int offset, int max
int levelLimit = getLevel() - 1;
int bracketLevel = getLevel();

int maxSizeLimit = getLimit();
int maxSizeLimit = getMaxSizeLimit();

boolean[] squareBrackets = getSquareBrackets();

Expand Down Expand Up @@ -410,7 +410,7 @@ public int anonymizeObjectOrArrayMaxSize(final byte[] chars, int offset, int max
setFlushOffset(flushOffset);
setMark(mark);
setLevel(bracketLevel);
setLimit(maxSizeLimit);
setMaxSizeLimit(maxSizeLimit);

return offset;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,6 @@ public int getMaxSizeLimit() {
return maxSizeLimit;
}

public char[] getTruncateString() {
return truncateMessage;
}

public int skipObjectOrArrayMaxSizeMaxStringLength(final char[] chars, int offset, int maxReadLimit, final StringBuilder buffer, int maxStringLength, JsonFilterMetrics metrics) {

int bracketLevel = getLevel();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ public boolean process(final byte[] chars, int offset, int length, final Resizab

ByteArrayWhitespaceSizeFilter filter = new ByteArrayWhitespaceSizeFilter(pruneJsonValueAsBytes, anonymizeJsonValueAsBytes, truncateStringValueAsBytes);

filter.setLimit(maxSizeLimit);
filter.setMaxSizeLimit(maxSizeLimit);

processMaxSize(chars, offset, maxReadLimit, 0, output, 0, maxPathMatches, filter, metrics);

Expand All @@ -466,7 +466,7 @@ protected void processMaxSize(final byte[] chars, int offset, int maxReadLimit,

int maxStringLength = this.maxStringLength;

int maxSizeLimit = filter.getLimit();
int maxSizeLimit = filter.getMaxSizeLimit();

int flushOffset = filter.getFlushOffset();
int mark = filter.getMark();
Expand Down Expand Up @@ -666,7 +666,7 @@ protected void processMaxSize(final byte[] chars, int offset, int maxReadLimit,
filter.setLevel(bracketLevel);
filter.setMark(nextOffset + 1);

filter.setLimit(maxSizeLimit);
filter.setMaxSizeLimit(maxSizeLimit);
filter.setFlushOffset(flushOffset);
filter.setWrittenMark(streamMark);

Expand All @@ -679,7 +679,7 @@ protected void processMaxSize(final byte[] chars, int offset, int maxReadLimit,
streamMark = filter.getWrittenMark();

squareBrackets = filter.getSquareBrackets();
maxSizeLimit = filter.getLimit();
maxSizeLimit = filter.getMaxSizeLimit();
} else if(chars[nextOffset] == '"') {
flushOffset = nextOffset;

Expand Down Expand Up @@ -737,7 +737,7 @@ protected void processMaxSize(final byte[] chars, int offset, int maxReadLimit,
squareBrackets = filter.grow(squareBrackets);
}

filter.setLimit(maxSizeLimit);
filter.setMaxSizeLimit(maxSizeLimit);
filter.setFlushOffset(flushOffset);
filter.setLevel(bracketLevel);
filter.setMark(nextOffset + 1);
Expand All @@ -750,7 +750,7 @@ protected void processMaxSize(final byte[] chars, int offset, int maxReadLimit,
mark = filter.getMark();
streamMark = filter.getWrittenMark();
squareBrackets = filter.getSquareBrackets();
maxSizeLimit = filter.getLimit();
maxSizeLimit = filter.getMaxSizeLimit();
} else {
if(nextOffset + filter.getAnonymizeMessageLength() > maxSizeLimit) {
offset = nextOffset;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,54 @@

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class IndentTest {

@Test
public void testConstructors() {
Assertions.assertThrows(
IllegalArgumentException.class,
() -> {
new Indent(' ', -1, 0, LinebreakType.CarriageReturn);
}
);
Assertions.assertThrows(
IllegalArgumentException.class,
() -> {
new Indent(' ', 0, -1, LinebreakType.CarriageReturn);
}
);
Assertions.assertThrows(
IllegalArgumentException.class,
() -> {
new Indent(' ', 0, 0, null);
}
);
}

@Test
public void testSpaces() {
Indent build = Indent.newBuilder().withSpace(2).withUnixLinebreak().build();

assertEquals(build.asIndent(), " ");
}

@Test
public void testTab() {
Indent build = Indent.newBuilder().withTab().withUnixLinebreak().build();

assertEquals(build.asIndent(), "\t");
}

@Test
public void testWindows() {
Indent build = Indent.newBuilder().withTab().withWindowsLinebreak().build();

assertEquals(build.asLinebreak(), "\r\n");
}

@Test
public void testPreparedLevels() {
Indent build = Indent.newBuilder().withSpace(2).withUnixLinebreak().withPreparedLevels(64).build();
assertEquals(build.asIndent(), " ");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.github.skjolber.jsonfilter.core.util;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.nio.charset.StandardCharsets;

import org.junit.jupiter.api.Test;

import com.github.skjolber.jsonfilter.ResizableByteArrayOutputStream;

public class ByteArrayWhitespaceSizeFilterTest {

@Test
public void testDeepBrackets1() {
ByteArrayWhitespaceSizeFilter filter = new ByteArrayWhitespaceSizeFilter("pruneMessage".getBytes(StandardCharsets.UTF_8), "anonymizeMessage".getBytes(StandardCharsets.UTF_8), "truncateMessage".getBytes(StandardCharsets.UTF_8));

String text = createBracket('{', '}', 100);

ResizableByteArrayOutputStream builder = new ResizableByteArrayOutputStream(1024);
int offset = filter.skipObjectMaxStringLength(text.getBytes(StandardCharsets.UTF_8), 1, 1, builder, null);
assertEquals(offset, 200);
}

@Test
public void testDeepBrackets2() {
ByteArrayWhitespaceSizeFilter filter = new ByteArrayWhitespaceSizeFilter("pruneMessage".getBytes(StandardCharsets.UTF_8), "anonymizeMessage".getBytes(StandardCharsets.UTF_8), "truncateMessage".getBytes(StandardCharsets.UTF_8));

String text = createBracket('{', '}', 100);

ResizableByteArrayOutputStream builder = new ResizableByteArrayOutputStream(1024);
filter.setMaxSizeLimit(200);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.getBytes(StandardCharsets.UTF_8), 1, 200, builder, 1, null);
assertEquals(offset, 200);
}

@Test
public void testDeepBrackets3() {
ByteArrayWhitespaceSizeFilter filter = new ByteArrayWhitespaceSizeFilter("pruneMessage".getBytes(StandardCharsets.UTF_8), "anonymizeMessage".getBytes(StandardCharsets.UTF_8), "truncateMessage".getBytes(StandardCharsets.UTF_8));

String text = createBracket('[', ']', 100);

ResizableByteArrayOutputStream builder = new ResizableByteArrayOutputStream(1024);
filter.setMaxSizeLimit(200);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.getBytes(StandardCharsets.UTF_8), 1, 200, builder, 1, null);
assertEquals(offset, 200);
}

public String createBracket(char start, char end, int count) {
StringBuilder builder = new StringBuilder();

for(int i = 0; i < count; i++) {
builder.append(start);
}
for(int i = 0; i < count; i++) {
builder.append(end);
}

return builder.toString();
}

@Test
public void testLongKey() {
ByteArrayWhitespaceSizeFilter filter = new ByteArrayWhitespaceSizeFilter("pruneMessage".getBytes(StandardCharsets.UTF_8), "anonymizeMessage".getBytes(StandardCharsets.UTF_8), "truncateMessage".getBytes(StandardCharsets.UTF_8));

String text = "{\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\":\"x\"}";

ResizableByteArrayOutputStream builder = new ResizableByteArrayOutputStream(1024);
filter.setMaxSizeLimit(19);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.getBytes(StandardCharsets.UTF_8), 1, 20, builder, 1, null);
assertEquals(offset, text.length() - 4);
}


@Test
public void testLongKeyWhitespace() {
ByteArrayWhitespaceSizeFilter filter = new ByteArrayWhitespaceSizeFilter("pruneMessage".getBytes(StandardCharsets.UTF_8), "anonymizeMessage".getBytes(StandardCharsets.UTF_8), "truncateMessage".getBytes(StandardCharsets.UTF_8));

String text = "{\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" : \"x\"}";

ResizableByteArrayOutputStream builder = new ResizableByteArrayOutputStream(1024);
filter.setMaxSizeLimit(19);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.getBytes(StandardCharsets.UTF_8), 1, 20, builder, 1, null);
assertEquals(offset, text.length() - 4);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.github.skjolber.jsonfilter.core.util;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

public class CharArrayWhitespaceSizeFilterTest {

@Test
public void testDeepBrackets1() {
CharArrayWhitespaceSizeFilter filter = new CharArrayWhitespaceSizeFilter("pruneMessage".toCharArray(), "anonymizeMessage".toCharArray(), "truncateMessage".toCharArray());

String text = createBracket('{', '}', 100);

StringBuilder builder = new StringBuilder();
int offset = filter.skipObjectMaxStringLength(text.toCharArray(), 1, 1, builder, null);
assertEquals(offset, 200);
}

@Test
public void testDeepBrackets2() {
CharArrayWhitespaceSizeFilter filter = new CharArrayWhitespaceSizeFilter("pruneMessage".toCharArray(), "anonymizeMessage".toCharArray(), "truncateMessage".toCharArray());

String text = createBracket('{', '}', 100);

StringBuilder builder = new StringBuilder();
filter.setMaxSizeLimit(200);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.toCharArray(), 1, 200, builder, 1, null);
assertEquals(offset, 200);
}

@Test
public void testDeepBrackets3() {
CharArrayWhitespaceSizeFilter filter = new CharArrayWhitespaceSizeFilter("pruneMessage".toCharArray(), "anonymizeMessage".toCharArray(), "truncateMessage".toCharArray());

String text = createBracket('[', ']', 100);

StringBuilder builder = new StringBuilder();
filter.setMaxSizeLimit(200);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.toCharArray(), 1, 200, builder, 1, null);
assertEquals(offset, 200);
}

public String createBracket(char start, char end, int count) {
StringBuilder builder = new StringBuilder();

for(int i = 0; i < count; i++) {
builder.append(start);
}
for(int i = 0; i < count; i++) {
builder.append(end);
}

return builder.toString();
}

@Test
public void testLongKey() {
CharArrayWhitespaceSizeFilter filter = new CharArrayWhitespaceSizeFilter("pruneMessage".toCharArray(), "anonymizeMessage".toCharArray(), "truncateMessage".toCharArray());

String text = "{\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\":\"x\"}";

StringBuilder builder = new StringBuilder();
filter.setMaxSizeLimit(19);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.toCharArray(), 1, 20, builder, 1, null);
assertEquals(offset, text.length() - 4);
}

@Test
public void testLongKeyWhitespace() {
CharArrayWhitespaceSizeFilter filter = new CharArrayWhitespaceSizeFilter("pruneMessage".toCharArray(), "anonymizeMessage".toCharArray(), "truncateMessage".toCharArray());

String text = "{\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" : \"x\"}";

StringBuilder builder = new StringBuilder();
filter.setMaxSizeLimit(19);
int offset = filter.skipObjectOrArrayMaxSizeMaxStringLength(text.toCharArray(), 1, 20, builder, 1, null);
assertEquals(offset, text.length() - 4);
}
}