Skip to content

Commit 622021e

Browse files
authored
fix: Check inputs type before doing truncation (#1299)
1 parent 4fb4ca3 commit 622021e

File tree

3 files changed

+78
-62
lines changed

3 files changed

+78
-62
lines changed

src/utils.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,13 @@ function objectFrozen(obj) {
160160
}
161161

162162
function truncate(str, max) {
163-
return !max || str.length <= max ? str : str.substr(0, max) + '\u2026';
163+
if (typeof max !== 'number') {
164+
throw new Error('2nd argument to `truncate` function should be a number');
165+
}
166+
if (typeof str !== 'string' || max === 0) {
167+
return str;
168+
}
169+
return str.length <= max ? str : str.substr(0, max) + '\u2026';
164170
}
165171

166172
/**
@@ -459,10 +465,9 @@ function jsonSize(value) {
459465
}
460466

461467
function serializeValue(value) {
462-
var maxLength = 40;
463-
464468
if (typeof value === 'string') {
465-
return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\u2026';
469+
var maxLength = 40;
470+
return truncate(value, maxLength);
466471
} else if (
467472
typeof value === 'number' ||
468473
typeof value === 'boolean' ||

test/raven.test.js

Lines changed: 41 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -828,10 +828,10 @@ describe('globals', function() {
828828
});
829829

830830
Raven._globalProject = '2';
831-
Raven._globalOptions = {
831+
Object.assign(Raven._globalOptions, {
832832
logger: 'javascript',
833833
maxMessageLength: 100
834-
};
834+
});
835835
Raven._breadcrumbs = [
836836
{
837837
type: 'request',
@@ -875,13 +875,13 @@ describe('globals', function() {
875875
});
876876

877877
Raven._globalProject = '2';
878-
Raven._globalOptions = {
878+
Object.assign(Raven._globalOptions, {
879879
logger: 'javascript',
880880
maxMessageLength: 100,
881881
autoBreadcrumbs: {
882882
sentry: true
883883
}
884-
};
884+
});
885885
Raven._breadcrumbs = [
886886
{
887887
type: 'http',
@@ -979,11 +979,11 @@ describe('globals', function() {
979979
});
980980

981981
Raven._globalProject = '2';
982-
Raven._globalOptions = {
982+
Object.assign(Raven._globalOptions, {
983983
logger: 'javascript',
984984
maxMessageLength: 100,
985985
autoBreadcrumbs: false
986-
};
986+
});
987987

988988
Raven._send({message: 'bar'});
989989

@@ -1014,10 +1014,10 @@ describe('globals', function() {
10141014
});
10151015

10161016
Raven._globalProject = '2';
1017-
Raven._globalOptions = {
1017+
Object.assign(Raven._globalOptions, {
10181018
logger: 'javascript',
10191019
maxMessageLength: 100
1020-
};
1020+
});
10211021
Raven._globalContext = {user: {name: 'Matt'}};
10221022

10231023
Raven._send({message: 'bar'});
@@ -1049,10 +1049,6 @@ describe('globals', function() {
10491049
});
10501050

10511051
Raven._globalProject = '2';
1052-
Raven._globalOptions = {
1053-
logger: 'javascript',
1054-
maxMessageLength: 100
1055-
};
10561052
Raven._globalContext = {tags: {tag1: 'value1'}};
10571053

10581054
Raven._send({message: 'bar', tags: {tag2: 'value2'}});
@@ -1072,10 +1068,6 @@ describe('globals', function() {
10721068
extra: {'session:duration': 100}
10731069
});
10741070

1075-
assert.deepEqual(Raven._globalOptions, {
1076-
logger: 'javascript',
1077-
maxMessageLength: 100
1078-
});
10791071
assert.deepEqual(Raven._globalContext, {
10801072
tags: {tag1: 'value1'}
10811073
});
@@ -1090,10 +1082,6 @@ describe('globals', function() {
10901082
});
10911083

10921084
Raven._globalProject = '2';
1093-
Raven._globalOptions = {
1094-
logger: 'javascript',
1095-
maxMessageLength: 100
1096-
};
10971085
Raven._globalContext = {extra: {key1: 'value1'}};
10981086

10991087
Raven._send({message: 'bar', extra: {key2: 'value2'}});
@@ -1113,10 +1101,6 @@ describe('globals', function() {
11131101
extra: {key1: 'value1', key2: 'value2', 'session:duration': 100}
11141102
});
11151103

1116-
assert.deepEqual(Raven._globalOptions, {
1117-
logger: 'javascript',
1118-
maxMessageLength: 100
1119-
});
11201104
assert.deepEqual(Raven._globalContext, {
11211105
extra: {key1: 'value1'}
11221106
});
@@ -1126,14 +1110,14 @@ describe('globals', function() {
11261110
this.sinon.stub(Raven, 'isSetup').returns(true);
11271111
this.sinon.stub(Raven, '_makeRequest');
11281112

1129-
Raven._globalOptions = {
1113+
Object.assign(Raven._globalOptions, {
11301114
projectId: 2,
11311115
logger: 'javascript',
11321116
maxMessageLength: 100,
11331117
dataCallback: function() {
11341118
return {message: 'ibrokeit'};
11351119
}
1136-
};
1120+
});
11371121
Raven._globalContext = {user: {name: 'Matt'}};
11381122

11391123
Raven._send({message: 'bar'});
@@ -1152,13 +1136,13 @@ describe('globals', function() {
11521136
});
11531137

11541138
Raven._globalProject = '2';
1155-
Raven._globalOptions = {
1139+
Object.assign(Raven._globalOptions, {
11561140
logger: 'javascript',
11571141
maxMessageLength: 100,
11581142
dataCallback: function() {
11591143
return;
11601144
}
1161-
};
1145+
});
11621146

11631147
Raven._send({message: 'bar'});
11641148
assert.deepEqual(Raven._makeRequest.lastCall.args[0].data, {
@@ -1207,13 +1191,13 @@ describe('globals', function() {
12071191
headers: {'User-Agent': 'lolbrowser'}
12081192
});
12091193

1210-
Raven._globalOptions = {
1194+
Object.assign(Raven._globalOptions, {
12111195
projectId: 2,
12121196
logger: 'javascript',
12131197
maxMessageLength: 100,
12141198
tags: {},
12151199
extra: {}
1216-
};
1200+
});
12171201

12181202
Raven._send({
12191203
message: 'bar',
@@ -1247,12 +1231,12 @@ describe('globals', function() {
12471231
headers: {'User-Agent': 'lolbrowser'}
12481232
});
12491233

1250-
Raven._globalOptions = {
1234+
Object.assign(Raven._globalOptions, {
12511235
projectId: 2,
12521236
logger: 'javascript',
12531237
maxMessageLength: 100,
12541238
environment: 'abc123'
1255-
};
1239+
});
12561240

12571241
Raven._send({message: 'bar'});
12581242
assert.deepEqual(Raven._makeRequest.lastCall.args[0].data, {
@@ -1280,12 +1264,12 @@ describe('globals', function() {
12801264
headers: {'User-Agent': 'lolbrowser'}
12811265
});
12821266

1283-
Raven._globalOptions = {
1267+
Object.assign(Raven._globalOptions, {
12841268
projectId: 2,
12851269
logger: 'javascript',
12861270
maxMessageLength: 100,
12871271
release: 'abc123'
1288-
};
1272+
});
12891273

12901274
Raven._send({message: 'bar'});
12911275
assert.deepEqual(Raven._makeRequest.lastCall.args[0].data, {
@@ -1313,12 +1297,12 @@ describe('globals', function() {
13131297
headers: {'User-Agent': 'lolbrowser'}
13141298
});
13151299

1316-
Raven._globalOptions = {
1300+
Object.assign(Raven._globalOptions, {
13171301
projectId: 2,
13181302
logger: 'javascript',
13191303
maxMessageLength: 100,
13201304
serverName: 'abc123'
1321-
};
1305+
});
13221306

13231307
Raven._send({message: 'bar'});
13241308
assert.deepEqual(Raven._makeRequest.lastCall.args[0].data, {
@@ -1346,14 +1330,15 @@ describe('globals', function() {
13461330
headers: {'User-Agent': 'lolbrowser'}
13471331
});
13481332

1349-
var globalOptions = {
1333+
var globalOptions = Object.assign({}, Raven._globalOptions, {
13501334
projectId: 2,
13511335
logger: 'javascript',
13521336
maxMessageLength: 100,
13531337
release: 'abc123'
1354-
};
1355-
Raven._globalEndpoint = 'http://localhost/store/';
1338+
});
1339+
13561340
Raven._globalOptions = globalOptions;
1341+
Raven._globalEndpoint = 'http://localhost/store/';
13571342

13581343
Raven._send({message: 'bar'});
13591344
var args = Raven._makeRequest.lastCall.args;
@@ -1394,12 +1379,12 @@ describe('globals', function() {
13941379
});
13951380

13961381
Raven._globalEndpoint = 'http://localhost/store/';
1397-
Raven._globalOptions = {
1382+
Object.assign(Raven._globalOptions, {
13981383
projectId: 2,
13991384
logger: 'javascript',
14001385
maxMessageLength: 100,
14011386
release: 'abc123'
1402-
};
1387+
});
14031388
Raven._globalSecret = 'def'; // <-- secret
14041389

14051390
Raven._send({message: 'bar'});
@@ -1437,14 +1422,14 @@ describe('globals', function() {
14371422
headers: {'User-Agent': 'lolbrowser'}
14381423
});
14391424

1440-
var globalOptions = {
1425+
var globalOptions = Object.assign({}, Raven._globalOptions, {
14411426
logger: 'javascript',
14421427
maxMessageLength: 100,
14431428
transport: sinon.stub()
1444-
};
1429+
});
14451430

1446-
Raven._globalProject = '2';
14471431
Raven._globalOptions = globalOptions;
1432+
Raven._globalProject = '2';
14481433

14491434
Raven._send({message: 'bar'});
14501435
assert.deepEqual(globalOptions.transport.lastCall.args[0].data, {
@@ -1468,13 +1453,13 @@ describe('globals', function() {
14681453
this.sinon.stub(window, 'fetch').resolves(true);
14691454

14701455
Raven._globalProject = '2';
1471-
Raven._globalOptions = {
1456+
Object.assign(Raven._globalOptions, {
14721457
logger: 'javascript',
14731458
maxMessageLength: 100,
14741459
headers: {
14751460
'custom-header': 'value'
14761461
}
1477-
};
1462+
});
14781463

14791464
Raven._send({message: 'bar'});
14801465

@@ -1487,15 +1472,15 @@ describe('globals', function() {
14871472
this.sinon.stub(window, 'fetch').resolves(true);
14881473

14891474
Raven._globalProject = '2';
1490-
Raven._globalOptions = {
1475+
Object.assign(Raven._globalOptions, {
14911476
logger: 'javascript',
14921477
maxMessageLength: 100,
14931478
headers: {
14941479
'custom-header': function() {
14951480
return 'computed-header-value';
14961481
}
14971482
}
1498-
};
1483+
});
14991484

15001485
Raven._send({message: 'bar'});
15011486

@@ -1516,14 +1501,14 @@ describe('globals', function() {
15161501
requests.push(xhr);
15171502
};
15181503

1519-
Raven._globalOptions = {
1504+
Object.assign(Raven._globalOptions, {
15201505
headers: {
15211506
'custom-string-header': 'pickle-rick',
15221507
'custom-function-header': function() {
15231508
return 'morty';
15241509
}
15251510
}
1526-
};
1511+
});
15271512

15281513
Raven._send({message: 'bar'});
15291514

@@ -1713,10 +1698,10 @@ describe('globals', function() {
17131698
});
17141699

17151700
Raven._globalProject = '2';
1716-
Raven._globalOptions = {
1701+
Object.assign(Raven._globalOptions, {
17171702
logger: 'javascript',
17181703
maxMessageLength: 100
1719-
};
1704+
});
17201705
Raven._globalOptions.maxUrlLength = 30;
17211706

17221707
var longUrl = new Array(50).join('a');
@@ -1758,10 +1743,10 @@ describe('globals', function() {
17581743
});
17591744

17601745
Raven._globalProject = '2';
1761-
Raven._globalOptions = {
1746+
Object.assign(Raven._globalOptions, {
17621747
logger: 'javascript',
17631748
maxMessageLength: 100
1764-
};
1749+
});
17651750
Raven._globalOptions.maxUrlLength = 35;
17661751

17671752
var longUrl = new Array(50).join('a');
@@ -1809,10 +1794,10 @@ describe('globals', function() {
18091794
});
18101795

18111796
Raven._globalProject = '2';
1812-
Raven._globalOptions = {
1797+
Object.assign(Raven._globalOptions, {
18131798
logger: 'javascript',
18141799
maxMessageLength: 100
1815-
};
1800+
});
18161801
Raven._globalOptions.maxUrlLength = 35;
18171802

18181803
var obj = {method: 'POST', url: undefined};

0 commit comments

Comments
 (0)