Skip to content

Commit c368a84

Browse files
committed
Fix traceback parsing under Safari.
Safari (possibly just Safari 6) ends up in the Firefox traceback parser. This actually works with two minor fixes: - Function arguments are not supplied so don't attempt to parse them out. - Tracebacks appear to end in a '[native code]' entry. Deal with this.
1 parent 96c90fa commit c368a84

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/raven.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@
160160
if (e.stack.indexOf('@') == -1) {
161161
traceback = this.chromeTraceback(e);
162162
} else {
163-
traceback = this.firefoxTraceback(e);
163+
traceback = this.firefoxOrSafariTraceback(e);
164164
}
165165
} else {
166166
traceback = [{"filename": fileurl, "lineno": lineno}];
@@ -234,7 +234,7 @@
234234
return traceback;
235235
};
236236

237-
Raven.firefoxTraceback = function(e) {
237+
Raven.firefoxOrSafariTraceback = function(e) {
238238
/*
239239
* Each line is a function with args and a filename, separated by an ampersand.
240240
* unsubstantiatedClaim("I am Batman")@http://raven-js.com/test/exception.js:7
@@ -252,7 +252,7 @@
252252
if (chunks[0]) {
253253
fn = chunks[0].split('(');
254254

255-
if (fn[1] != ')') {
255+
if (fn.length > 1 && fn[1] != ')') {
256256
args = fn[1].slice(0, -1).split(',');
257257
} else {
258258
args = undefined;
@@ -267,9 +267,16 @@
267267
fn = '(unknown)';
268268
}
269269

270-
filename = chunks[1].split(':');
271-
lineno = filename.slice(-1)[0];
272-
filename = filename.slice(0, -1).join(':');
270+
if (chunks.length > 1) {
271+
filename = chunks[1].split(':');
272+
lineno = filename.slice(-1)[0];
273+
filename = filename.slice(0, -1).join(':');
274+
} else if (chunks[0] == '[native code]') {
275+
fn = '(unknown)';
276+
filename = '[native code]';
277+
lineno = 0;
278+
args = undefined;
279+
}
273280

274281
traceback.push({
275282
'function': fn,

0 commit comments

Comments
 (0)