Closed
Bug 1056611
Opened 12 years ago
Closed 5 years ago
SearchSuggestionController.jsm's NS_ASSERT(this._searchString !== null, ...) can fail, resulting in "'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions"
Categories
(Firefox :: Search, defect, P5)
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: Waldo, Unassigned)
Details
(Whiteboard: [fxsearch])
From the terminal window that spawned the nightly I'm using:
*************************
A coding exception was thrown in a Promise resolution callback.
See https://developer.mozilla.org/Mozilla/JavaScript_code_modules/Promise.jsm/Promise
Full message: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
Full stack: NS_ASSERT@resource://gre/modules/debug.js:67:23
this.SearchSuggestionController.prototype._dedupeAndReturnResults@resource://gre/modules/SearchSuggestionController.jsm:319:5
Handler.prototype.process@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:866:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:745:7
*************************
The error is a bit of a red herring. The means NS_ASSERT uses to compute a stack trace doesn't work if any calling function is strict mode, and the error reported here is due to that. (Haven't searched for a bug on this yet, if you were wondering.)
But if NS_ASSERT is throwing because of a stack-walk into strict mode code, it's because the asserted condition didn't hold. Tracing back into the caller, that means this must have failed:
314 /**
315 * @param {Array} suggestResults - an array of result objects from different sources (local or remote)
316 * @return {Object}
317 */
318 _dedupeAndReturnResults: function(suggestResults) {
319 NS_ASSERT(this._searchString !== null, "this._searchString shouldn't be null when returning results");
I don't know how this happened, but fooling around typing in the search bar using prefixes of past searches, with occasional backspacing, seems to trigger it...somehow. So I don't have exact steps, but this appears reproducible with some manual fiddling.
Looking at the code, I suspect a race condition of some sort between the stop method (calling _reset) and the resolution of the promise created by fetch. Maybe _reset is aborting the request, but the (presumably?) async callback to notify about that doesn't happen until after the promise has been settled?
| Reporter | ||
Updated•12 years ago
|
Summary: SearchSuggestionController.jsm's NS_ASSERT(this._searchString !== null, ...) can fail → SearchSuggestionController.jsm's NS_ASSERT(this._searchString !== null, ...) can fail, resulting in "'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions"
Updated•11 years ago
|
Priority: -- → P5
Whiteboard: [fxsearch]
Updated•11 years ago
|
Rank: 55
Comment 1•5 years ago
|
||
This assert was removed in bug 1088660.
Status: NEW → RESOLVED
Closed: 5 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•