Skip to content

Commit 1f60a64

Browse files
committed
Adding truncate methods removing unnecessary test as following covers all
1 parent 7beafc5 commit 1f60a64

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

core/src/main/java/com/microsoft/applicationinsights/common/SanitizationUtils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,13 @@ else if(curr == '\r'){
4848
else if(curr == '\t'){
4949
result.append("\\t");
5050
}
51-
else {
51+
else if (!Character.isISOControl(curr)){
5252
result.append(curr);
5353
}
54+
else {
55+
result.append("\\u");
56+
result.append((String.format( "%04x", Integer.valueOf(curr))));
57+
}
5458
}
5559
return result.toString();
5660
}

core/src/main/java/com/microsoft/applicationinsights/telemetry/JsonTelemetryDataSerializer.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ private <T> void write(T item) throws IOException {
276276
} else {
277277
String sanitizedItem = SanitizationUtils.sanitizeStringForJSON(String.valueOf(item));
278278
out.write(JSON_COMMA);
279-
out.write(sanitizedItem);
279+
out.write(truncateValueToMaxLength(sanitizedItem));
280280
out.write(JSON_COMMA);
281281
}
282282
}
@@ -297,9 +297,10 @@ private <T extends JsonSerializable> String createJsonFor(T value) throws IOExce
297297
}
298298

299299
private void writeName(String name) throws IOException {
300+
String sanitizedName = SanitizationUtils.sanitizeStringForJSON(name);
300301
out.write(separator);
301302
out.write(JSON_COMMA);
302-
out.write(name);
303+
out.write(truncateKeyToMaxLength(sanitizedName));
303304
out.write(JSON_COMMA);
304305
out.write(JSON_NAME_VALUE_SEPARATOR);
305306
}
@@ -349,4 +350,18 @@ protected void writeEscapedString(String value) throws IOException {
349350
}
350351
}
351352
}
353+
354+
private String truncateValueToMaxLength(String value) {
355+
if (value.length() > 8192) {
356+
return value.substring(0, 8192);
357+
}
358+
return value;
359+
}
360+
361+
private String truncateKeyToMaxLength(String key) {
362+
if (key.length() > 150) {
363+
return key.substring(0, 150);
364+
}
365+
return key;
366+
}
352367
}

core/src/test/java/com/microsoft/applicationinsights/common/SanitizationUtilsTests.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ public class SanitizationUtilsTests {
77

88
@Test
99
public void testSanitizeStringForJSON() {
10-
String result = SanitizationUtils.sanitizeStringForJSON("{\"entityType\":\"CONTACTNAME\",\"contactField\":\"\"," +
11-
"\"query\":\"zuck\",\"candidates\":[{\"id\":\"2\",\"name\":\"Andrew Zuck\",\"aliases\":[],\"phoneNumbers\":[{\"type\":\"MOBILENUMBER\",\"number\":\"+1 (555) 222-2222\"}],\"emailAddresses\":[],\"streetAddresses\":[]}],\"scores\":{\"2\":2.327993297520463}}");
12-
Assert.assertEquals(result, "{\\\"entityType\\\":\\\"CONTACTNAME\\\",\\\"contactField\\\":\\\"\\\",\\\"query\\\":\\\"zuck\\\",\\\"candidates\\\":[{\\\"id\\\":\\\"2\\\",\\\"name\\\":\\\"Andrew Zuck\\\",\\\"aliases\\\":[],\\\"phoneNumbers\\\":[{\\\"type\\\":\\\"MOBILENUMBER\\\",\\\"number\\\":\\\"+1 (555) 222-2222\\\"}],\\\"emailAddresses\\\"" +
13-
":[],\\\"streetAddresses\\\":[]}],\\\"scores\\\":{\\\"2\\\":2.327993297520463}}");
1410

1511
String resutl1 = SanitizationUtils.sanitizeStringForJSON("\\'\\f\\b\\f\\n\\r\\t/\\");
1612
Assert.assertEquals(resutl1, "\\\\\\'\\\\f\\\\b\\\\f\\\\n\\\\r\\\\t\\/\\\\");
13+
14+
String resultControlCharVer = SanitizationUtils.sanitizeStringForJSON("\u0000");
15+
Assert.assertEquals(resultControlCharVer, "\\u0000");
1716
}
1817
}

0 commit comments

Comments
 (0)