Bug 138859 - global function declaration should be throwing a TypeError if trying to override a readonly property
Summary: global function declaration should be throwing a TypeError if trying to overr...
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Macintosh Intel OS X 10.9
: P2 Normal
Assignee: Nobody
URL:
Keywords: EasyFix, InRadar
Depends on:
Blocks:
 
Reported: 2014-11-18 19:10 PST by Daejun Park
Modified: 2014-11-19 11:17 PST (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Daejun Park 2014-11-18 19:10:45 PST
According to ES5, Section 10.5 Declaration Binding Instantiation, Step 5.e.iv,
http://es5.github.io/#x10.5

a duplicate global function declaration throws a TypeError exception,
when the existing property is not configurable and:
- an accessor descriptor,
- or, not writable,
- or, not enumerable.

For example, the following code is supposed to throw a TypeError exception for each duplicate function declaration, "f0", "f1", "f2", and "f3":

Object.defineProperty(this, "f0", { "get" : undefined, "set" : undefined, "enumerable" : false, "configurable" : false });
eval(" function f0() { return 0; } "); // TypeError

Object.defineProperty(this, "f1", { "value" : 0,      "writable" : false, "enumerable" : false, "configurable" : false });
eval(" function f1() { return 0; } "); // TypeError

Object.defineProperty(this, "f2", { "value" : 0,      "writable" : true,  "enumerable" : false, "configurable" : false });
eval(" function f2() { return 0; } "); // TypeError

Object.defineProperty(this, "f3", { "value" : 0,      "writable" : false, "enumerable" : true,  "configurable" : false });
eval(" function f3() { return 0; } "); // TypeError


However, Safari does not report any exception, while Chrome and Firefox correctly throw the TypeError exceptions.

I've tested this using the Web Inspector console of Safari 7.0.4.

Thanks,
Daejun
Comment 1 Oliver Hunt 2014-11-19 08:51:54 PST
Retitling to reflect actual bug - it's not due to a duplicate function. We're short circuiting creation of a new global property when we decide to shadow and that means we skip the readonly check on the existing property. Whoops.
Comment 2 Radar WebKit Bug Importer 2014-11-19 11:17:52 PST
<rdar://problem/19032865>