Skip to content

Commit 42adaf5

Browse files
authored
fix: Add isArray util to prevent undefined stack.stack (#1140)
1 parent 2bd838d commit 42adaf5

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

src/raven.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var isErrorEvent = utils.isErrorEvent;
1111
var isUndefined = utils.isUndefined;
1212
var isFunction = utils.isFunction;
1313
var isString = utils.isString;
14+
var isArray = utils.isArray;
1415
var isEmptyObject = utils.isEmptyObject;
1516
var each = utils.each;
1617
var objectMerge = utils.objectMerge;
@@ -481,8 +482,7 @@ Raven.prototype = {
481482
var stack = TraceKit.computeStackTrace(ex);
482483

483484
// stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
484-
var initialCall = stack.stack[1];
485-
485+
var initialCall = isArray(stack.stack) && stack.stack[1];
486486
var fileurl = (initialCall && initialCall.url) || '';
487487

488488
if (

src/utils.js

+5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ function isString(what) {
3838
return Object.prototype.toString.call(what) === '[object String]';
3939
}
4040

41+
function isArray(what) {
42+
return Object.prototype.toString.call(what) === '[object Array]';
43+
}
44+
4145
function isEmptyObject(what) {
4246
for (var _ in what) {
4347
if (what.hasOwnProperty(_)) {
@@ -371,6 +375,7 @@ module.exports = {
371375
isUndefined: isUndefined,
372376
isFunction: isFunction,
373377
isString: isString,
378+
isArray: isArray,
374379
isEmptyObject: isEmptyObject,
375380
supportsErrorEvent: supportsErrorEvent,
376381
wrappedCallback: wrappedCallback,

test/utils.test.js

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var utils = require('../src/utils');
88
var isUndefined = utils.isUndefined;
99
var isFunction = utils.isFunction;
1010
var isString = utils.isString;
11+
var isArray = utils.isArray;
1112
var isObject = utils.isObject;
1213
var isEmptyObject = utils.isEmptyObject;
1314
var isError = utils.isError;
@@ -52,6 +53,17 @@ describe('utils', function() {
5253
});
5354
});
5455

56+
describe('isArray', function() {
57+
it('should do as advertised', function() {
58+
assert.isTrue(isArray([]));
59+
assert.isTrue(isArray(new Array(42)));
60+
assert.isFalse(isArray(''));
61+
assert.isFalse(isArray({}));
62+
assert.isFalse(isArray(undefined));
63+
assert.isFalse(isArray(function() {}));
64+
});
65+
});
66+
5567
describe('isObject', function() {
5668
it('should do as advertised', function() {
5769
assert.isTrue(isObject({}));

0 commit comments

Comments
 (0)