Bug fix for data sanitization error for property value length, should be 8k

This commit is contained in:
Piyali Jana 2018-03-30 16:16:52 -07:00
Родитель 0c1baa3ea8
Коммит 553c518f04
5 изменённых файлов: 81 добавлений и 7 удалений

Просмотреть файл

@ -146,6 +146,30 @@ class DataSanitizerTests extends TestClass {
}
});
this.testCase({
name: "DataSanitizerTests: Validate sanitizestring defaults to DataSanitizer.MAX_STRING_LENGTH length",
test: () => {
var expected = "247E5792-7F2";
var input = "247E5792-7F2A-49DE-81EB-17D868775A06";
Microsoft.ApplicationInsights.Telemetry.Common.DataSanitizer["MAX_STRING_LENGTH"] = 12;
var actual = Microsoft.ApplicationInsights.Telemetry.Common.DataSanitizer.sanitizeString(input);
Assert.equal(expected, actual);
}
});
this.testCase({
name: "DataSanitizerTests: Validate sanitizestring checks against input max length",
test: () => {
var expected = "24";
var input = "247E5792-7F2A-49DE-81EB-17D868775A06";
Microsoft.ApplicationInsights.Telemetry.Common.DataSanitizer["MAX_STRING_LENGTH"] = 12;
var actual = Microsoft.ApplicationInsights.Telemetry.Common.DataSanitizer.sanitizeString(input, 2);
Assert.equal(expected, actual);
}
});
this.testCase({
name: "DataSanitizerTests: Validate sanitizeProperties trims whitespaces in properties names and values",
test: () => {
@ -160,6 +184,18 @@ class DataSanitizerTests extends TestClass {
}
});
this.testCase({
name: "DataSanitizerTests: Validate sanitizeId trims to valid size",
test: () => {
var expected = "247E5";
var input = "247E5792-7F2A-49DE-81EB-17D868775A06";
Microsoft.ApplicationInsights.Telemetry.Common.DataSanitizer["MAX_ID_LENGTH"] = 5;
var actual = Microsoft.ApplicationInsights.Telemetry.Common.DataSanitizer.sanitizeId(input);
Assert.equal(expected, actual);
}
});
this.testCase({
name: "DataSanitizerTests: Validate sanitizeString handles null and undefined",
test: () => {

Просмотреть файл

@ -281,6 +281,7 @@ declare module Microsoft.ApplicationInsights {
UrlTooLong = 64,
SessionStorageBufferFull = 65,
CannotAccessCookie = 66,
IdTooLong = 67,
}
class _InternalLogMessage {
message: string;
@ -1417,9 +1418,17 @@ declare module Microsoft.ApplicationInsights.Telemetry.Common {
* Max length allowed for custom names.
*/
private static MAX_NAME_LENGTH;
/**
* Max length allowed for Id field in page views.
*/
private static MAX_ID_LENGTH;
/**
* Max length allowed for custom values.
*/
private static MAX_PROPERTY_LENGTH;
/**
* Max length allowed for names
*/
private static MAX_STRING_LENGTH;
/**
* Max length allowed for url.
@ -1435,12 +1444,13 @@ declare module Microsoft.ApplicationInsights.Telemetry.Common {
private static MAX_EXCEPTION_LENGTH;
static sanitizeKeyAndAddUniqueness(key: any, map: any): any;
static sanitizeKey(name: any): any;
static sanitizeString(value: any): any;
static sanitizeString(value: any, maxLength?: number): any;
static sanitizeUrl(url: any): any;
static sanitizeMessage(message: any): any;
static sanitizeException(exception: any): any;
static sanitizeProperties(properties: any): any;
static sanitizeMeasurements(measurements: any): any;
static sanitizeId(id: string): string;
static padNumber(num: any): string;
}
}

Просмотреть файл

@ -86,6 +86,7 @@
UrlTooLong,
SessionStorageBufferFull,
CannotAccessCookie,
IdTooLong
}
export class _InternalLogMessage {

Просмотреть файл

@ -11,9 +11,19 @@ module Microsoft.ApplicationInsights.Telemetry.Common {
*/
private static MAX_NAME_LENGTH = 150;
/**
* Max length allowed for Id field in page views.
*/
private static MAX_ID_LENGTH = 128;
/**
* Max length allowed for custom values.
*/
private static MAX_PROPERTY_LENGTH = 8192;
/**
* Max length allowed for names
*/
private static MAX_STRING_LENGTH = 1024;
/**
@ -67,15 +77,15 @@ module Microsoft.ApplicationInsights.Telemetry.Common {
return name;
}
public static sanitizeString(value) {
public static sanitizeString(value, maxLength: number = DataSanitizer.MAX_STRING_LENGTH) {
if (value) {
value = Util.trim(value);
if (value.toString().length > DataSanitizer.MAX_STRING_LENGTH) {
value = value.toString().substring(0, DataSanitizer.MAX_STRING_LENGTH);
if (value.toString().length > maxLength) {
value = value.toString().substring(0, maxLength);
_InternalLogging.throwInternal(
LoggingSeverity.WARNING,
_InternalMessageId.StringValueTooLong,
"string value is too long. It has been truncated to " + DataSanitizer.MAX_STRING_LENGTH + " characters.",
"string value is too long. It has been truncated to " + maxLength + " characters.",
{ value: value }, true);
}
}
@ -132,7 +142,7 @@ module Microsoft.ApplicationInsights.Telemetry.Common {
if (properties) {
var tempProps = {};
for (var prop in properties) {
var value = DataSanitizer.sanitizeString(properties[prop]);
var value = DataSanitizer.sanitizeString(properties[prop], DataSanitizer.MAX_PROPERTY_LENGTH);
prop = DataSanitizer.sanitizeKeyAndAddUniqueness(prop, tempProps);
tempProps[prop] = value;
}
@ -156,6 +166,23 @@ module Microsoft.ApplicationInsights.Telemetry.Common {
return measurements;
}
public static sanitizeId(id: string) {
if (id) {
id = Util.trim(id);
if (id.length > DataSanitizer.MAX_ID_LENGTH) {
id = id.substring(0, DataSanitizer.MAX_ID_LENGTH);
_InternalLogging.throwInternal(
LoggingSeverity.WARNING,
_InternalMessageId.UrlTooLong,
"id is too long, it has been truncated to " + DataSanitizer.MAX_URL_LENGTH + " characters.",
{ id: id },
true);
}
}
return id;
}
public static padNumber(num) {
var s = "00" + num;
return s.substr(s.length - 3);

Просмотреть файл

@ -25,7 +25,7 @@ module Microsoft.ApplicationInsights.Telemetry {
constructor(name?: string, url?: string, durationMs?: number, properties?: any, measurements?: any, id?: string) {
super();
this.id = Common.DataSanitizer.sanitizeString(id);
this.id = Common.DataSanitizer.sanitizeId(id);
this.url = Common.DataSanitizer.sanitizeUrl(url);
this.name = Common.DataSanitizer.sanitizeString(name) || Util.NotSpecified;
if (!isNaN(durationMs)) {