Closed Bug 567758 Opened 14 years ago Closed 6 years ago

Objects derived from events (as __proto__) are subject to the same read-only policy for event properties

Categories

(Core :: XPConnect, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: lsmith, Unassigned)

References

()

Details

(Whiteboard: DUPEME)

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 Build Identifier: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 This may be a dup, but I couldn't find an original ticket. Wrapping an event either by var wrapper = {}; wrapper.__proto__ = e; or function F() {} F.prototype = e; var wrapper = new F(); creates an object that continues to throw "setting a property that has only a getter" for all own properties of the event. Reproducible: Always Steps to Reproduce: document.addEventListener('click', function (e) { var wrapper = {}; wrapper.__proto__ = e; e.type = "boom"; }, false); Actual Results: Exception thrown by type assignment line: "setting a property that has only a getter" Expected Results: Assignment should be applied. @kangax mentioned a "fix" from @dhtmlkitchen that applied to Gecko 1.8.1.22, suggesting this has been around for a while. http://github.com/GarrettS/ape-javascript-library/blob/master/test/yui-test/build/yuitest/yuitest-beta.js#L3457
Assignee: nobody → general
Component: General → JavaScript Engine
Product: Firefox → Core
QA Contact: general → general
The issue is that |e| has a setter for the "type" property and that that setter throws. So when you do the set, a property lookup for "type" finds that setter on the prototype chain and calls it... The existence of that setter is something we're considering changing; there are existing bugs on that.
Whiteboard: DUPEME
Oh, and given that the setter is there the js engine behavior is most certainly correct.
Assignee: general → nobody
Component: JavaScript Engine → XPConnect
QA Contact: general → xpconnect
Per policy at https://wiki.mozilla.org/Bug_Triage/Projects/Bug_Handling/Bug_Husbandry#Inactive_Bugs. If this bug is not an enhancement request or a bug not present in a supported release of Firefox, then it may be reopened.
Status: UNCONFIRMED → RESOLVED
Closed: 6 years ago
Resolution: --- → INACTIVE
Fixed with WebIDL bindings: the assignment is now a no-op in non-strict mode and an exception in strict mode, pe spec.
Depends on: 776864
Resolution: INACTIVE → FIXED
You need to log in before you can comment on or make changes to this bug.