Weird callback to Array.prototype.some reports an "error" in self-hosted code

RESOLVED FIXED

Status

()

RESOLVED FIXED
3 years ago
3 years ago

People

(Reporter: jruderman, Unassigned)

Tracking

(Blocks: 1 bug)

Trunk
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(firefox44 affected)

Details

Attachments

(1 attachment)

(Reporter)

Description

3 years ago
Created attachment 8676411 [details]
testcase

The testcase gets an exception:

[Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: self-hosted :: some :: line 192" data: no]

I'm not sure this is "wrong", but it tripped my fuzzer's heuristic that errors containing the string "self-hosted" are usually bugs. Should I keep that heuristic?
The string is created by some error handling mechanism on the Gecko side. That probably uses the wrong kind of frame iter to find the topmost content code on the stack.

I'll look into it.
Flags: needinfo?(till)
This ends up landing in Exception::Exception which does GetCurrentJSStack() which does JS::CaptureCurrentStack.  This last very intentionally includes self-hosted frames, I've been told.  See bug 1173638 comment 1, bug 1173638 comment 3, bug 1173638 comment 6.

Then later we end up in Exception::ToString, which calls StackFrame::ToString to produce that part of the string.  This calls GetFileName, which calls JS::GetSavedFrameSource which happily produces the topmost filename on the stack, which is the selfhosted code.

You can get there with a conceptually simpler testcase too, that doesn't even involve the weird Exception::Exception but the more prosaic and spec-required DOMException.  Try this in your console:

  try { 
    [1].some(document.querySelector.bind(document, ":::")) 
  } catch (e) { 
    console.log(e.filename) 
  }

Anyway, we would have this problem for Error as well, if it were not for the JS_ReportWhatever insanity; again see bug 1173638.

If JSAPI gave me a way to do JS::GetSavedFrameSource and company but skip self-hosted frames, I would totally be doing that in Gecko's StackFrame code.
(In reply to Boris Zbarsky [:bz] from comment #2)
> If JSAPI gave me a way to do JS::GetSavedFrameSource and company but skip
> self-hosted frames, I would totally be doing that in Gecko's StackFrame code.

I can whip up a patch.
I believe bug 1216819 fixed this.
(In reply to Boris Zbarsky [:bz] from comment #4)
> I believe bug 1216819 fixed this.

Yup.
Status: NEW → RESOLVED
Last Resolved: 3 years ago
Flags: needinfo?(till)
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.