Skip to content

Commit 6d040a0

Browse files
authored
Merge pull request #4 from bengourley/null-caller
Handle case where function caller is null
2 parents 70155d4 + 3fe12d7 commit 6d040a0

4 files changed

Lines changed: 28 additions & 2 deletions

File tree

karma.conf.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ module.exports = function (config) {
66
'node_modules/stackframe/dist/stackframe.js',
77
'stack-generator.js',
88
'spec/spec-helper.js',
9-
'spec/*-spec.js'
9+
'spec/*-spec.js',
10+
{ pattern: 'spec/fixtures/**', included: false }
1011
],
1112
reporters: ['spec'],
1213
port: 9876,

spec/fixtures/a.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function a () {
2+
something_bad()
3+
}
4+
5+
a()

spec/stack-generator-spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
describe('StackGenerator', function() {
22
describe('#backtrace', function() {
3+
afterEach(function () {
4+
window.onerror = null;
5+
});
6+
37
it('should generate backtrace for function declarations', function() {
48
var stackFrames = null;
59

@@ -88,5 +92,21 @@ describe('StackGenerator', function() {
8892
}
8993
expect(stackFrames[0].functionName).toBe('StackGenerator$$backtrace');
9094
});
95+
96+
it('should handle "null" callees', function(done) {
97+
var errored = false;
98+
window.onerror = function () {
99+
try {
100+
StackGenerator.backtrace();
101+
} catch (e) {
102+
errored = true;
103+
}
104+
expect(errored).toBe(false);
105+
done();
106+
}
107+
var script = document.createElement('script');
108+
script.src = '/base/spec/fixtures/a.js';
109+
window.document.body.appendChild(script);
110+
});
91111
});
92112
});

stack-generator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
}
2222

2323
var curr = arguments.callee;
24-
while (curr && stack.length < maxStackSize) {
24+
while (curr && stack.length < maxStackSize && curr['arguments']) {
2525
// Allow V8 optimizations
2626
var args = new Array(curr['arguments'].length);
2727
for (var i = 0; i < args.length; ++i) {

0 commit comments

Comments
 (0)