RESOLVED FIXED 176810
for..in on a Proxy loops over non enumerable properties
https://bugs.webkit.org/show_bug.cgi?id=176810
Summary for..in on a Proxy loops over non enumerable properties
JF Paradis
Reported 2017-09-12 14:55:11 PDT
* Steps to reproduce: var foo = new Proxy(['a', 'b'],{ ownKeys: function(target) { return Reflect.ownKeys(target); } }); for (var p in foo) console.log(p); * Actual results (nightly): // 0 // 1 // length * Expected results: // 0 // 1 This works as expected in Chrome and FF. * Discussion: The getOwnPropertyDescriptor trap is called, but it seems like the results are ignored (we loop even if enumerable is forced to false): var foo = new Proxy(["a", "b"],{ getOwnPropertyDescriptor: function(target, prop) { var desc = Reflect.getOwnPropertyDescriptor(target, prop); desc.enumerable=false; return desc; }, ownKeys: function(target) { return Reflect.ownKeys(target); } }) This is correct: Object.keys(foo) // [] This is incorrect: for (var p in foo) console.log(p) // 0 // 1 // length
Attachments
Fix for bug (3.88 KB, patch)
2018-10-02 08:44 PDT, Xan Lopez
no flags
Archive of layout-test-results from ews100 for mac-sierra (2.33 MB, application/zip)
2018-10-02 09:49 PDT, EWS Watchlist
no flags
Archive of layout-test-results from ews104 for mac-sierra-wk2 (2.85 MB, application/zip)
2018-10-02 09:59 PDT, EWS Watchlist
no flags
Archive of layout-test-results from ews115 for mac-sierra (3.73 MB, application/zip)
2018-10-02 10:24 PDT, EWS Watchlist
no flags
Archive of layout-test-results from ews124 for ios-simulator-wk2 (2.65 MB, application/zip)
2018-10-02 19:32 PDT, EWS Watchlist
no flags
Archive of layout-test-results from ews122 for ios-simulator-wk2 (2.43 MB, application/zip)
2018-10-02 20:44 PDT, EWS Watchlist
no flags
(1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys (1.75 KB, patch)
2019-01-23 11:23 PST, Caitlin Potter (:caitp)
ews-watchlist: commit-queue-
(2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (6.73 KB, patch)
2019-01-23 11:27 PST, Caitlin Potter (:caitp)
no flags
(3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord (2.81 KB, patch)
2019-01-23 11:28 PST, Caitlin Potter (:caitp)
no flags
Archive of layout-test-results from ews100 for mac-highsierra (2.79 MB, application/zip)
2019-01-23 12:23 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews106 for mac-highsierra-wk2 (2.80 MB, application/zip)
2019-01-23 12:57 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews117 for mac-highsierra (2.23 MB, application/zip)
2019-01-23 13:11 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews122 for ios-simulator-wk2 (9.49 MB, application/zip)
2019-01-23 13:26 PST, EWS Watchlist
no flags
(1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys (3.78 KB, patch)
2019-01-23 14:27 PST, Caitlin Potter (:caitp)
ews-watchlist: commit-queue-
(3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord (1.99 KB, patch)
2019-01-23 15:23 PST, Caitlin Potter (:caitp)
no flags
(2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (6.70 KB, patch)
2019-01-23 15:25 PST, Caitlin Potter (:caitp)
no flags
Archive of layout-test-results from ews101 for mac-highsierra (2.43 MB, application/zip)
2019-01-23 15:28 PST, EWS Watchlist
no flags
(1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys (3.78 KB, patch)
2019-01-23 15:34 PST, Caitlin Potter (:caitp)
ews-watchlist: commit-queue-
(3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord (2.54 KB, patch)
2019-01-23 15:44 PST, Caitlin Potter (:caitp)
ews-watchlist: commit-queue-
Archive of layout-test-results from ews100 for mac-highsierra (2.56 MB, application/zip)
2019-01-23 17:02 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews112 for mac-highsierra (2.15 MB, application/zip)
2019-01-23 18:00 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews121 for ios-simulator-wk2 (2.94 MB, application/zip)
2019-01-23 18:25 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews106 for mac-highsierra-wk2 (2.72 MB, application/zip)
2019-01-23 19:49 PST, EWS Watchlist
no flags
(1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys (13.02 KB, patch)
2019-01-24 04:31 PST, Caitlin Potter (:caitp)
mark.lam: review+
(3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord (4.45 KB, patch)
2019-01-24 13:46 PST, Caitlin Potter (:caitp)
no flags
(2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (10.98 KB, patch)
2019-02-22 10:44 PST, Caitlin Potter (:caitp)
no flags
[JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (11.00 KB, patch)
2019-02-22 14:00 PST, Caitlin Potter (:caitp)
no flags
Archive of layout-test-results from ews123 for ios-simulator-wk2 (2.54 MB, application/zip)
2019-02-22 19:01 PST, EWS Watchlist
no flags
[JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (11.04 KB, patch)
2019-02-25 05:46 PST, Caitlin Potter (:caitp)
no flags
Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (15.58 KB, patch)
2019-04-08 11:35 PDT, Caitlin Potter (:caitp)
no flags
Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() (15.75 KB, patch)
2019-04-12 09:32 PDT, Caitlin Potter (:caitp)
no flags
Radar WebKit Bug Importer
Comment 1 2017-09-14 10:13:01 PDT
Xan Lopez
Comment 2 2018-10-02 08:44:19 PDT
Created attachment 351389 [details] Fix for bug
Caio Lima
Comment 3 2018-10-02 09:01:18 PDT
Do you mind to add the other test case forcing the enumerable to false as well?
Saam Barati
Comment 4 2018-10-02 09:01:56 PDT
Comment on attachment 351389 [details] Fix for bug View in context: https://bugs.webkit.org/attachment.cgi?id=351389&action=review > Source/JavaScriptCore/runtime/ProxyObject.cpp:952 > + bool isPropertyDefined = target->getOwnPropertyDescriptor(exec, ident.impl(), descriptor); Is this actually what the spec says to do? This is observable behavior
Xan Lopez
Comment 5 2018-10-02 09:48:23 PDT
(In reply to Saam Barati from comment #4) > Comment on attachment 351389 [details] > Fix for bug > > View in context: > https://bugs.webkit.org/attachment.cgi?id=351389&action=review > > > Source/JavaScriptCore/runtime/ProxyObject.cpp:952 > > + bool isPropertyDefined = target->getOwnPropertyDescriptor(exec, ident.impl(), descriptor); > > Is this actually what the spec says to do? This is observable behavior So the issue is this being called more than once basically? Because it's already called a bit further below in that method. If that's the thing then we need a way to get this information without it being user observable (or a completely different approach), yeah.
EWS Watchlist
Comment 6 2018-10-02 09:49:01 PDT
Comment on attachment 351389 [details] Fix for bug Attachment 351389 [details] did not pass mac-ews (mac): Output: https://webkit-queues.webkit.org/results/9427839 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 7 2018-10-02 09:49:03 PDT
Created attachment 351402 [details] Archive of layout-test-results from ews100 for mac-sierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-sierra Platform: Mac OS X 10.12.6
EWS Watchlist
Comment 8 2018-10-02 09:59:03 PDT
Comment on attachment 351389 [details] Fix for bug Attachment 351389 [details] did not pass mac-wk2-ews (mac-wk2): Output: https://webkit-queues.webkit.org/results/9427866 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 9 2018-10-02 09:59:05 PDT
Created attachment 351405 [details] Archive of layout-test-results from ews104 for mac-sierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews104 Port: mac-sierra-wk2 Platform: Mac OS X 10.12.6
EWS Watchlist
Comment 10 2018-10-02 10:24:26 PDT
Comment on attachment 351389 [details] Fix for bug Attachment 351389 [details] did not pass mac-debug-ews (mac): Output: https://webkit-queues.webkit.org/results/9427781 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 11 2018-10-02 10:24:28 PDT
Created attachment 351412 [details] Archive of layout-test-results from ews115 for mac-sierra The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews115 Port: mac-sierra Platform: Mac OS X 10.12.6
Caio Lima
Comment 12 2018-10-02 10:31:15 PDT
Comment on attachment 351389 [details] Fix for bug View in context: https://bugs.webkit.org/attachment.cgi?id=351389&action=review >>> Source/JavaScriptCore/runtime/ProxyObject.cpp:952 >>> + bool isPropertyDefined = target->getOwnPropertyDescriptor(exec, ident.impl(), descriptor); >> >> Is this actually what the spec says to do? This is observable behavior > > So the issue is this being called more than once basically? Because it's already called a bit further below in that method. If that's the thing then we need a way to get this information without it being user observable (or a completely different approach), yeah. Maybe one way to check if the property is enumerable without observable behaviour is: ``` PropertySlot slot(target, PropertySlot::InternalMethodType::VMInquiry); target->methodTable(vm)->getOwnPropertySlot(this, exec, ident, slot); DefinePropertyAttributes property = DefinePropertyAttributes(slot.attributes()) std::optional<bool> maybeEnumerable = attr.enumerable(); ``` I'm not sure if that is the correct way to perform this check.
EWS Watchlist
Comment 13 2018-10-02 19:32:36 PDT
Comment on attachment 351389 [details] Fix for bug Attachment 351389 [details] did not pass ios-sim-ews (ios-simulator-wk2): Output: https://webkit-queues.webkit.org/results/9434013 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 14 2018-10-02 19:32:38 PDT
Created attachment 351468 [details] Archive of layout-test-results from ews124 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews124 Port: ios-simulator-wk2 Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 15 2018-10-02 20:44:15 PDT
Comment on attachment 351389 [details] Fix for bug Attachment 351389 [details] did not pass ios-sim-ews (ios-simulator-wk2): Output: https://webkit-queues.webkit.org/results/9435067 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 16 2018-10-02 20:44:17 PDT
Created attachment 351472 [details] Archive of layout-test-results from ews122 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews122 Port: ios-simulator-wk2 Platform: Mac OS X 10.13.6
Saam Barati
Comment 17 2019-01-20 14:32:24 PST
Is this still an issue? r- because EWS is unhappy.
Caitlin Potter (:caitp)
Comment 18 2019-01-22 09:00:33 PST
So there are a few issues at the moment. The spec compliant fix for this particular issue, would be to filter the PropertyNameArray after getOwnPropertyNames() is completed. This ensures that it doesn't interfere with the invariant validation at the end. There are a few other compliance issues, which are maybe less of an issue: Duplicate property names. Currently, PropertyNameArray does not account for duplicates. Unfortunately, in the case of ProxyObject, duplicates are observable. However, there would be a performance penalty if PropertyNameArray were changed to support duplicates for all JSCell types --- So probably the thing to do is special case `getOwnPropertyNames` for ProxyObjects where needed. There's a third failure in the WPT regression, which I believe is related to JSDOMConvertRecord not handling Symbol-named properties, which the test seems to expect. This looks like it should be simple enough to fix with ```diff - JSC::PropertyNameArray keys(&vm, JSC::PropertyNameMode::Strings, JSC::PrivateSymbolMode::Exclude); + JSC::PropertyNameArray keys(&vm, JSC::PropertyNameMode::StringsAndSymbols, JSC::PrivateSymbolMode::Exclude); object->methodTable(vm)->getOwnPropertyNames(object, &state, keys, JSC::EnumerationMode()); ``` --- So, I'm happy to provide fixes for 0-3 of these problems, but it's important to keep in mind that each one very likely will negatively impact performance in some way, for the sake of improved spec compliance in less common cases.
Caitlin Potter (:caitp)
Comment 19 2019-01-22 12:21:22 PST
(In reply to Caitlin Potter (:caitp) from comment #18) > So there are a few issues at the moment. > > The spec compliant fix for this particular issue, would be to filter the > PropertyNameArray after getOwnPropertyNames() is completed. This ensures > that it doesn't interfere with the invariant validation at the end. > > There are a few other compliance issues, which are maybe less of an issue: > > Duplicate property names. Currently, PropertyNameArray does not account for > duplicates. Unfortunately, in the case of ProxyObject, duplicates are > observable. However, there would be a performance penalty if > PropertyNameArray were changed to support duplicates for all JSCell types > --- So probably the thing to do is special case `getOwnPropertyNames` for > ProxyObjects where needed. > > There's a third failure in the WPT regression, which I believe is related to > JSDOMConvertRecord not handling Symbol-named properties, which the test > seems to expect. This looks like it should be simple enough to fix with > > ```diff > - JSC::PropertyNameArray keys(&vm, JSC::PropertyNameMode::Strings, > JSC::PrivateSymbolMode::Exclude); > + JSC::PropertyNameArray keys(&vm, > JSC::PropertyNameMode::StringsAndSymbols, JSC::PrivateSymbolMode::Exclude); > object->methodTable(vm)->getOwnPropertyNames(object, &state, keys, > JSC::EnumerationMode()); > ``` > > --- > > So, I'm happy to provide fixes for 0-3 of these problems, but it's important > to keep in mind that each one very likely will negatively impact performance > in some way, for the sake of improved spec compliance in less common cases. It looks like https://github.com/tc39/ecma262/pull/833 will incur a bit more work here, too
Saam Barati
Comment 20 2019-01-22 14:15:23 PST
Thanks for volunteering to look into this Caitlin. We should find a way to do this that does not slow doesn't for..in for things that aren't a Proxy. It'd be great if we could also not slow down code operating on Proxy.
Caitlin Potter (:caitp)
Comment 21 2019-01-23 11:23:34 PST
Created attachment 359910 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys
Caitlin Potter (:caitp)
Comment 22 2019-01-23 11:27:43 PST
Created attachment 359911 [details] (2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
Caitlin Potter (:caitp)
Comment 23 2019-01-23 11:28:50 PST
Created attachment 359912 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord
Caitlin Potter (:caitp)
Comment 24 2019-01-23 11:32:40 PST
Ok --- So 3 patches uploaded, #2 is the one relevant to this bug, and the others fix other issues that show up in the WPT regression from Xan's patch. Please take a look --- I haven't done a full test run yet, so I'm sure this will require updating test expectations here and there.
EWS Watchlist
Comment 25 2019-01-23 12:23:38 PST
Comment on attachment 359910 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys Attachment 359910 [details] did not pass mac-ews (mac): Output: https://webkit-queues.webkit.org/results/10861624 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 26 2019-01-23 12:23:40 PST
Created attachment 359922 [details] Archive of layout-test-results from ews100 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-highsierra Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 27 2019-01-23 12:57:26 PST
Comment on attachment 359910 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys Attachment 359910 [details] did not pass mac-wk2-ews (mac-wk2): Output: https://webkit-queues.webkit.org/results/10861860 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 28 2019-01-23 12:57:28 PST
Created attachment 359930 [details] Archive of layout-test-results from ews106 for mac-highsierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-highsierra-wk2 Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 29 2019-01-23 13:11:18 PST
Comment on attachment 359910 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys Attachment 359910 [details] did not pass mac-debug-ews (mac): Output: https://webkit-queues.webkit.org/results/10861793 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 30 2019-01-23 13:11:20 PST
Created attachment 359935 [details] Archive of layout-test-results from ews117 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews117 Port: mac-highsierra Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 31 2019-01-23 13:13:39 PST
Comment on attachment 359910 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys Attachment 359910 [details] did not pass jsc-ews (mac): Output: https://webkit-queues.webkit.org/results/10861669 New failing tests: stress/proxy-own-keys.js.no-cjit-collect-continuously stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-eager stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-eager-no-cjit stress/proxy-own-keys.js.bytecode-cache stress/proxy-own-keys.js.no-ftl stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-no-put-stack-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-small-pool stress/proxy-own-keys.js.ftl-eager-no-cjit-b3o1 stress/proxy-own-keys.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-own-keys.js.no-llint stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-llint stress/proxy-own-keys.js.ftl-no-cjit-no-inline-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-b3o1 stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-cjit-collect-continuously stress/proxy-own-keys.js.dfg-eager stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.dfg-maximal-flush-validate-no-cjit stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.default stress/proxy-own-keys.js.no-cjit-validate-phases stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-ftl stress/proxy-own-keys.js.ftl-no-cjit-small-pool stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.dfg-eager-no-cjit-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-eager-no-cjit-b3o1 stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.bytecode-cache stress/proxy-own-keys.js.ftl-eager stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-own-keys.js.dfg-maximal-flush-validate-no-cjit es6.yaml/es6/Proxy_ownKeys_duplicates.js.default stress/proxy-own-keys.js.ftl-no-cjit-b3o1 stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-cjit-validate-phases stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.dfg-eager stress/proxy-own-keys.js.default stress/proxy-own-keys.js.ftl-no-cjit-no-put-stack-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-no-inline-validate stress/proxy-own-keys.js.dfg-eager-no-cjit-validate stress/proxy-own-keys.js.ftl-eager-no-cjit apiTests
EWS Watchlist
Comment 32 2019-01-23 13:26:37 PST
Comment on attachment 359910 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys Attachment 359910 [details] did not pass ios-sim-ews (ios-simulator-wk2): Output: https://webkit-queues.webkit.org/results/10861941 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 33 2019-01-23 13:26:40 PST
Created attachment 359937 [details] Archive of layout-test-results from ews122 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews122 Port: ios-simulator-wk2 Platform: Mac OS X 10.13.6
Caitlin Potter (:caitp)
Comment 34 2019-01-23 14:27:13 PST
Created attachment 359941 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys
Caitlin Potter (:caitp)
Comment 35 2019-01-23 15:23:13 PST
Created attachment 359952 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord
Caitlin Potter (:caitp)
Comment 36 2019-01-23 15:25:33 PST
Created attachment 359953 [details] (2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
EWS Watchlist
Comment 37 2019-01-23 15:28:04 PST
Comment on attachment 359941 [details] (1) [JSC] throw if ownKeys Proxy trap result contains duplicate keys Attachment 359941 [details] did not pass mac-ews (mac): Output: https://webkit-queues.webkit.org/results/10863905 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 38 2019-01-23 15:28:07 PST
Created attachment 359955 [details] Archive of layout-test-results from ews101 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews101 Port: mac-highsierra Platform: Mac OS X 10.13.6
Caitlin Potter (:caitp)
Comment 39 2019-01-23 15:34:09 PST
Created attachment 359959 [details] (1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys
Caitlin Potter (:caitp)
Comment 40 2019-01-23 15:39:48 PST
Comment on attachment 359952 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord View in context: https://bugs.webkit.org/attachment.cgi?id=359952&action=review > Source/WebCore/bindings/js/JSDOMConvertRecord.h:107 > + // ToString(key) should fail in this case. This branch is never actually taken in this patchset by itself --- It depends on the change on line 88 to use JSC::PropertyNameMode::StringsAndSymbols. I'll fix that up.
Caitlin Potter (:caitp)
Comment 41 2019-01-23 15:44:18 PST
Created attachment 359961 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord
EWS Watchlist
Comment 42 2019-01-23 17:02:20 PST
Comment on attachment 359961 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord Attachment 359961 [details] did not pass mac-ews (mac): Output: https://webkit-queues.webkit.org/results/10865613 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 43 2019-01-23 17:02:23 PST
Created attachment 359975 [details] Archive of layout-test-results from ews100 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-highsierra Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 44 2019-01-23 18:00:09 PST
Comment on attachment 359961 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord Attachment 359961 [details] did not pass mac-debug-ews (mac): Output: https://webkit-queues.webkit.org/results/10866169 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 45 2019-01-23 18:00:11 PST
Created attachment 359979 [details] Archive of layout-test-results from ews112 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews112 Port: mac-highsierra Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 46 2019-01-23 18:25:54 PST
Comment on attachment 359961 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord Attachment 359961 [details] did not pass ios-sim-ews (ios-simulator-wk2): Output: https://webkit-queues.webkit.org/results/10866315 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 47 2019-01-23 18:25:56 PST
Created attachment 359980 [details] Archive of layout-test-results from ews121 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews121 Port: ios-simulator-wk2 Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 48 2019-01-23 18:33:08 PST
Comment on attachment 359959 [details] (1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys Attachment 359959 [details] did not pass jsc-ews (mac): Output: https://webkit-queues.webkit.org/results/10866449 New failing tests: stress/proxy-own-keys.js.no-cjit-collect-continuously stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-eager stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-eager-no-cjit stress/proxy-own-keys.js.bytecode-cache stress/proxy-own-keys.js.no-ftl stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-no-put-stack-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-small-pool stress/proxy-own-keys.js.ftl-eager-no-cjit-b3o1 stress/proxy-own-keys.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-own-keys.js.no-llint stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-llint stress/proxy-own-keys.js.ftl-no-cjit-no-inline-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-b3o1 stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-cjit-collect-continuously stress/proxy-own-keys.js.dfg-eager stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.dfg-maximal-flush-validate-no-cjit stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.default stress/proxy-own-keys.js.no-cjit-validate-phases stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-ftl stress/proxy-own-keys.js.ftl-no-cjit-small-pool stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.dfg-eager-no-cjit-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-eager-no-cjit-b3o1 stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.bytecode-cache stress/proxy-own-keys.js.ftl-eager stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-own-keys.js.dfg-maximal-flush-validate-no-cjit es6.yaml/es6/Proxy_ownKeys_duplicates.js.default stress/proxy-own-keys.js.ftl-no-cjit-b3o1 stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.no-cjit-validate-phases stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.dfg-eager stress/proxy-own-keys.js.default stress/proxy-own-keys.js.ftl-no-cjit-no-put-stack-validate stress/Object_static_methods_Object.getOwnPropertyDescriptors-proxy.js.ftl-no-cjit-no-inline-validate stress/proxy-own-keys.js.dfg-eager-no-cjit-validate stress/proxy-own-keys.js.ftl-eager-no-cjit apiTests
EWS Watchlist
Comment 49 2019-01-23 19:49:10 PST
Comment on attachment 359961 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord Attachment 359961 [details] did not pass mac-wk2-ews (mac-wk2): Output: https://webkit-queues.webkit.org/results/10867540 New failing tests: imported/w3c/web-platform-tests/fetch/api/headers/headers-record.html
EWS Watchlist
Comment 50 2019-01-23 19:49:13 PST
Created attachment 359988 [details] Archive of layout-test-results from ews106 for mac-highsierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-highsierra-wk2 Platform: Mac OS X 10.13.6
Caitlin Potter (:caitp)
Comment 51 2019-01-24 04:31:38 PST
Created attachment 360004 [details] (1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys
Caitlin Potter (:caitp)
Comment 52 2019-01-24 09:36:19 PST
With parts 1 & 2 passing EWS, a review of those would be good. I will have part 3 passing tomorrow
Caitlin Potter (:caitp)
Comment 53 2019-01-24 13:46:41 PST
Created attachment 360032 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord
Caitlin Potter (:caitp)
Comment 54 2019-01-28 03:27:30 PST
In the case of patch (1), v8 is also in the process of implementing the spec change https://chromium-review.googlesource.com/c/v8/v8/+/1419779
Caitlin Potter (:caitp)
Comment 55 2019-01-29 09:45:05 PST
Ping :)
Mark Lam
Comment 56 2019-02-14 23:30:46 PST
Comment on attachment 360004 [details] (1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys The ownKeys Proxy trap patch LGTM.
Saam Barati
Comment 57 2019-02-22 01:12:03 PST
Caitlin, can you make a bugzilla per patch?
Saam Barati
Comment 58 2019-02-22 01:15:55 PST
Comment on attachment 359953 [details] (2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() View in context: https://bugs.webkit.org/attachment.cgi?id=359953&action=review LGTM but this should have its own bugzilla > Source/JavaScriptCore/runtime/ProxyObject.cpp:999 > + throwVMTypeError(exec, scope, makeString("Proxy object's non-extensible 'target' has configurable property '", String(impl), "' that was not in the result from the 'ownKeys' trap")); Can you add tests for this? > Source/JavaScriptCore/runtime/ProxyObject.cpp:1005 > + throwVMTypeError(exec, scope, "Proxy handler's 'ownKeys' method returned a key that was not present in its non-extensible target"_s); Can you add tests for this? > Source/JavaScriptCore/runtime/ProxyObject.cpp:1011 > + // Filtering DontEnum properties is observable in proxies and must occur following the invariant checks above. Can you add tests for this?
Saam Barati
Comment 59 2019-02-22 01:19:17 PST
Comment on attachment 360032 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord View in context: https://bugs.webkit.org/attachment.cgi?id=360032&action=review > Source/WebCore/bindings/js/JSDOMConvertRecord.h:107 > + // ToString(key) should fail in this case. Is key always supposed to be converted to a string here?
Caitlin Potter (:caitp)
Comment 60 2019-02-22 10:44:35 PST
Created attachment 362731 [details] (2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
Caitlin Potter (:caitp)
Comment 61 2019-02-22 10:47:12 PST
Comment on attachment 359953 [details] (2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() View in context: https://bugs.webkit.org/attachment.cgi?id=359953&action=review This bug is specifically about patch (2), so there's no need to file a new bug for that one. I'll file separate bugs for (1) and (3) >> Source/JavaScriptCore/runtime/ProxyObject.cpp:999 >> + throwVMTypeError(exec, scope, makeString("Proxy object's non-extensible 'target' has configurable property '", String(impl), "' that was not in the result from the 'ownKeys' trap")); > > Can you add tests for this? Done (though I haven't run it yet, will see if EWS is happy with it) >> Source/JavaScriptCore/runtime/ProxyObject.cpp:1005 >> + throwVMTypeError(exec, scope, "Proxy handler's 'ownKeys' method returned a key that was not present in its non-extensible target"_s); > > Can you add tests for this? Ditto >> Source/JavaScriptCore/runtime/ProxyObject.cpp:1011 >> + // Filtering DontEnum properties is observable in proxies and must occur following the invariant checks above. > > Can you add tests for this? Done
Caitlin Potter (:caitp)
Comment 62 2019-02-22 11:01:36 PST
Comment on attachment 360004 [details] (1) [JSC] throw if 'ownKeys' Proxy trap result contains duplicate keys mlam: can we carry the R+ over to https://bugs.webkit.org/show_bug.cgi?id=185211 ? :) Sorry it took so long to do anything with this, been busy.
Caitlin Potter (:caitp)
Comment 63 2019-02-22 11:20:46 PST
Comment on attachment 360032 [details] (3) Fix [[OwnPropertyKeys]] algorithm in JSDOMConvertRecord View in context: https://bugs.webkit.org/attachment.cgi?id=360032&action=review >> Source/WebCore/bindings/js/JSDOMConvertRecord.h:107 >> + // ToString(key) should fail in this case. > > Is key always supposed to be converted to a string here? For all current uses of record<> in the tree (and there aren't that many), the IDLType is a String type. Unfortunately, this isn't enforced in the template signature, so it isn't guaranteed, but as far as the current codebase is concerned it's a guarantee.
EWS Watchlist
Comment 64 2019-02-22 13:27:34 PST
Comment on attachment 362731 [details] (2) [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() Attachment 362731 [details] did not pass jsc-ews (mac): Output: https://webkit-queues.webkit.org/results/11249180 New failing tests: stress/proxy-own-keys.js.no-cjit-collect-continuously stress/proxy-own-keys.js.no-ftl stress/proxy-own-keys.js.ftl-no-cjit-b3o0 stress/proxy-own-keys.js.bytecode-cache stress/proxy-own-keys.js.ftl-eager-no-cjit stress/proxy-own-keys.js.ftl-no-cjit-small-pool stress/proxy-own-keys.js.default stress/proxy-own-keys.js.dfg-eager stress/proxy-own-keys.js.ftl-eager-no-cjit-b3o1 stress/proxy-own-keys.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-own-keys.js.ftl-eager stress/proxy-own-keys.js.ftl-no-cjit-no-put-stack-validate stress/proxy-own-keys.js.no-llint stress/proxy-own-keys.js.ftl-no-cjit-no-inline-validate stress/proxy-own-keys.js.dfg-eager-no-cjit-validate stress/proxy-own-keys.js.no-cjit-validate-phases stress/proxy-own-keys.js.dfg-maximal-flush-validate-no-cjit
Caitlin Potter (:caitp)
Comment 65 2019-02-22 14:00:36 PST
Created attachment 362762 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
EWS Watchlist
Comment 66 2019-02-22 19:01:53 PST
Comment on attachment 362762 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() Attachment 362762 [details] did not pass ios-sim-ews (ios-simulator-wk2): Output: https://webkit-queues.webkit.org/results/11254939 New failing tests: fast/viewport/ios/device-width-viewport-after-changing-view-scale.html
EWS Watchlist
Comment 67 2019-02-22 19:01:56 PST
Created attachment 362812 [details] Archive of layout-test-results from ews123 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews123 Port: ios-simulator-wk2 Platform: Mac OS X 10.13.6
Caitlin Potter (:caitp)
Comment 68 2019-02-25 05:46:56 PST
Created attachment 362896 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
Saam Barati
Comment 69 2019-02-25 12:06:46 PST
Comment on attachment 362896 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() View in context: https://bugs.webkit.org/attachment.cgi?id=362896&action=review r=me > Source/WebCore/ChangeLog:15 > + This patch adds DontEnum filtering for ProxyObjects, however we continue > + to explicitly filter them in JSDOMConvertRecord, which needs to use the > + property descriptor after filtering. This change prevents observably > + fetching the property descriptor twice per property. Can you add tests for this?
Caitlin Potter (:caitp)
Comment 70 2019-02-25 12:14:23 PST
Comment on attachment 362896 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() View in context: https://bugs.webkit.org/attachment.cgi?id=362896&action=review >> Source/WebCore/ChangeLog:15 >> + fetching the property descriptor twice per property. > > Can you add tests for this? This is covered by some existing web-platform-tests cases --- do we need extra coverage outside of WPT?
Saam Barati
Comment 71 2019-02-25 15:13:13 PST
(In reply to Caitlin Potter (:caitp) from comment #70) > Comment on attachment 362896 [details] > [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() > > View in context: > https://bugs.webkit.org/attachment.cgi?id=362896&action=review > > >> Source/WebCore/ChangeLog:15 > >> + fetching the property descriptor twice per property. > > > > Can you add tests for this? > > This is covered by some existing web-platform-tests cases --- do we need > extra coverage outside of WPT? Does this LOC: "object->methodTable(vm)->getOwnPropertyNames(object, &state, keys, JSC::EnumerationMode(JSC::DontEnumPropertiesMode::Include));" make that test pass?
Caitlin Potter (:caitp)
Comment 72 2019-02-25 15:27:08 PST
Comment on attachment 362896 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() View in context: https://bugs.webkit.org/attachment.cgi?id=362896&action=review >>>> Source/WebCore/ChangeLog:15 >>>> + fetching the property descriptor twice per property. >>> >>> Can you add tests for this? >> >> This is covered by some existing web-platform-tests cases --- do we need extra coverage outside of WPT? > > Does this LOC: > "object->methodTable(vm)->getOwnPropertyNames(object, &state, keys, JSC::EnumerationMode(JSC::DontEnumPropertiesMode::Include));" > make that test pass? Yes and no --- The change to ProxyObject.cpp, in conjunction with the unchanged JSDOMConvertRecord.h breaks some tests (because it causes some observable extra getOwnPropertyDescriptor checks on Proxies), which are fixed by the change you mentioned. The reason is pretty straight forward: JSDOMConvertRecord was previously doing its own DontEnum filtering (with a FIXME asking if it was necessary --- which it was, in the case of Proxies). Now, Proxy getOwnPropertyNames can do its own DontEnum filtering. To avoid filtering twice (which results in extra observable gOPD calls), we can turn off the filtering for one of those cases. Because JSDOMConvertRecord does other things with the property descriptor than just filtering DontEnums, I've opted to turn off the filtering from ProxyObject::getOwnPropertyNames() for that particular use case.
Saam Barati
Comment 73 2019-02-25 15:30:45 PST
(In reply to Caitlin Potter (:caitp) from comment #72) > Comment on attachment 362896 [details] > [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() > > View in context: > https://bugs.webkit.org/attachment.cgi?id=362896&action=review > > >>>> Source/WebCore/ChangeLog:15 > >>>> + fetching the property descriptor twice per property. > >>> > >>> Can you add tests for this? > >> > >> This is covered by some existing web-platform-tests cases --- do we need extra coverage outside of WPT? > > > > Does this LOC: > > "object->methodTable(vm)->getOwnPropertyNames(object, &state, keys, JSC::EnumerationMode(JSC::DontEnumPropertiesMode::Include));" > > make that test pass? > > Yes and no --- The change to ProxyObject.cpp, in conjunction with the > unchanged JSDOMConvertRecord.h breaks some tests (because it causes some > observable extra getOwnPropertyDescriptor checks on Proxies), which are > fixed by the change you mentioned. > > The reason is pretty straight forward: JSDOMConvertRecord was previously > doing its own DontEnum filtering (with a FIXME asking if it was necessary > --- which it was, in the case of Proxies). Now, Proxy getOwnPropertyNames > can do its own DontEnum filtering. To avoid filtering twice (which results > in extra observable gOPD calls), we can turn off the filtering for one of > those cases. Because JSDOMConvertRecord does other things with the property > descriptor than just filtering DontEnums, I've opted to turn off the > filtering from ProxyObject::getOwnPropertyNames() for that particular use > case. It sounds like the there could be a test that would have done an extra GOPD call that this fixes?
Caitlin Potter (:caitp)
Comment 74 2019-02-25 15:33:22 PST
Comment on attachment 362896 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() View in context: https://bugs.webkit.org/attachment.cgi?id=362896&action=review >>>>>> Source/WebCore/ChangeLog:15 >>>>>> + fetching the property descriptor twice per property. >>>>> >>>>> Can you add tests for this? >>>> >>>> This is covered by some existing web-platform-tests cases --- do we need extra coverage outside of WPT? >>> >>> Does this LOC: >>> "object->methodTable(vm)->getOwnPropertyNames(object, &state, keys, JSC::EnumerationMode(JSC::DontEnumPropertiesMode::Include));" >>> make that test pass? >> >> Yes and no --- The change to ProxyObject.cpp, in conjunction with the unchanged JSDOMConvertRecord.h breaks some tests (because it causes some observable extra getOwnPropertyDescriptor checks on Proxies), which are fixed by the change you mentioned. >> >> The reason is pretty straight forward: JSDOMConvertRecord was previously doing its own DontEnum filtering (with a FIXME asking if it was necessary --- which it was, in the case of Proxies). Now, Proxy getOwnPropertyNames can do its own DontEnum filtering. To avoid filtering twice (which results in extra observable gOPD calls), we can turn off the filtering for one of those cases. Because JSDOMConvertRecord does other things with the property descriptor than just filtering DontEnums, I've opted to turn off the filtering from ProxyObject::getOwnPropertyNames() for that particular use case. > > It sounds like the there could be a test that would have done an extra GOPD call that this fixes? There are :) https://github.com/web-platform-tests/wpt/blob/master/fetch/api/headers/headers-record.html looks at the ordering of observable trap calls and was failing without the fix due to GOPD firing twice instead of once.
Caitlin Potter (:caitp)
Comment 75 2019-04-05 08:10:09 PDT
Is this still good to go? I've tested locally and it merges clean and passes `run-javascriptcore-tests`.
Saam Barati
Comment 76 2019-04-05 14:01:07 PDT
(In reply to Caitlin Potter (:caitp) from comment #75) > Is this still good to go? I've tested locally and it merges clean and passes > `run-javascriptcore-tests`. LGTM
WebKit Commit Bot
Comment 77 2019-04-05 14:28:16 PDT
Comment on attachment 362896 [details] [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() Clearing flags on attachment: 362896 Committed r243943: <https://trac.webkit.org/changeset/243943>
WebKit Commit Bot
Comment 78 2019-04-05 14:28:19 PDT
All reviewed patches have been landed. Closing bug.
Ryan Haddad
Comment 79 2019-04-05 15:51:45 PDT
This change has causes two test262 failures: ---------------NEW FAILING TESTS SUMMARY--------------- FAIL test/built-ins/Object/keys/proxy-keys.js (default) Full Output: Exception: Test262Error: Expected SameValue(«12», «10») to be true FAIL test/built-ins/Object/keys/proxy-keys.js (strict mode) Full Output: Exception: Test262Error: Expected SameValue(«12», «10») to be true https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20Test262%20%28Tests%29/builds/2262
Ryan Haddad
Comment 80 2019-04-08 08:51:26 PDT
Reverted r243943 for reason: Caused test262 failures. Committed r244020: <https://trac.webkit.org/changeset/244020>
Ryan Haddad
Comment 81 2019-04-08 08:54:31 PDT
stress/proxy-own-keys.js was also failing an assertion on the debug JSC queue due to an unchecked exception: ERROR: Unchecked JS exception: This scope can throw a JS exception: getOwnPropertySlotCommon @ ./runtime/ProxyObject.cpp:376 (ExceptionScope::m_recursionDepth was 7) But the exception was unchecked as of this scope: getOwnPropertySlotCommon @ ./runtime/ProxyObject.cpp:376 (ExceptionScope::m_recursionDepth was 7) Unchecked exception detected at: 1 0x1080bbc53 JSC::VM::verifyExceptionCheckNeedIsSatisfied(unsigned int, JSC::ExceptionEventLocation&) 2 0x10808f9ea JSC::ThrowScope::ThrowScope(JSC::VM&, JSC::ExceptionEventLocation) 3 0x10808fa33 JSC::ThrowScope::ThrowScope(JSC::VM&, JSC::ExceptionEventLocation) 4 0x108011e47 JSC::ProxyObject::getOwnPropertySlotCommon(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&) 5 0x108017280 JSC::ProxyObject::performGetOwnPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode) 6 0x10800f2c2 JSC::ProxyObject::getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode) 7 0x107fd7442 JSC::ownPropertyKeys(JSC::ExecState*, JSC::JSObject*, JSC::PropertyNameMode, JSC::DontEnumPropertiesMode) 8 0x107fd8870 JSC::objectConstructorKeys(JSC::ExecState*) 9 0x2967d48c16b 10 0x2967d4b9f37 11 0x106e53369 vmEntryToJavaScript 12 0x107acda1e JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) 13 0x107accfa0 JSC::Interpreter::executeProgram(JSC::SourceCode const&, JSC::ExecState*, JSC::JSObject*) 14 0x107dfc8e5 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&, JSC::JSValue, WTF::NakedPtr<JSC::Exception>&) 15 0x10570a4c7 runWithOptions(GlobalObject*, CommandLine&, bool&) 16 0x1056e00ca jscmain(int, char**)::$_6::operator()(JSC::VM&, GlobalObject*, bool&) const 17 0x1056c19f4 int runJSC<jscmain(int, char**)::$_6>(CommandLine const&, bool, jscmain(int, char**)::$_6 const&) 18 0x1056c0121 jscmain(int, char**) 19 0x1056bff8e main 20 0x7fff57f7f015 start https://build.webkit.org/builders/Apple%20High%20Sierra%20Debug%20JSC%20%28Tests%29/builds/2517
Caitlin Potter (:caitp)
Comment 82 2019-04-08 11:35:03 PDT
Created attachment 366956 [details] Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() There was some redundant DontEnum filtering code in ObjectConstructor.cpp's ownPropertyKeys() function, which I've removed (and verified that it compiles and passes test262). It may still be slightly broken, I'll see shortly.
Caitlin Potter (:caitp)
Comment 83 2019-04-08 14:58:09 PDT
(In reply to Ryan Haddad from comment #81) > stress/proxy-own-keys.js was also failing an assertion on the debug JSC > queue due to an unchecked exception: > > ERROR: Unchecked JS exception: > This scope can throw a JS exception: getOwnPropertySlotCommon @ > ./runtime/ProxyObject.cpp:376 > (ExceptionScope::m_recursionDepth was 7) > But the exception was unchecked as of this scope: > getOwnPropertySlotCommon @ ./runtime/ProxyObject.cpp:376 > (ExceptionScope::m_recursionDepth was 7) > > Unchecked exception detected at: > 1 0x1080bbc53 JSC::VM::verifyExceptionCheckNeedIsSatisfied(unsigned > int, JSC::ExceptionEventLocation&) > 2 0x10808f9ea JSC::ThrowScope::ThrowScope(JSC::VM&, > JSC::ExceptionEventLocation) > 3 0x10808fa33 JSC::ThrowScope::ThrowScope(JSC::VM&, > JSC::ExceptionEventLocation) > 4 0x108011e47 > JSC::ProxyObject::getOwnPropertySlotCommon(JSC::ExecState*, > JSC::PropertyName, JSC::PropertySlot&) > 5 0x108017280 > JSC::ProxyObject::performGetOwnPropertyNames(JSC::ExecState*, > JSC::PropertyNameArray&, JSC::EnumerationMode) > 6 0x10800f2c2 JSC::ProxyObject::getOwnPropertyNames(JSC::JSObject*, > JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode) > 7 0x107fd7442 JSC::ownPropertyKeys(JSC::ExecState*, JSC::JSObject*, > JSC::PropertyNameMode, JSC::DontEnumPropertiesMode) > 8 0x107fd8870 JSC::objectConstructorKeys(JSC::ExecState*) > 9 0x2967d48c16b > 10 0x2967d4b9f37 > 11 0x106e53369 vmEntryToJavaScript > 12 0x107acda1e JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) > 13 0x107accfa0 JSC::Interpreter::executeProgram(JSC::SourceCode const&, > JSC::ExecState*, JSC::JSObject*) > 14 0x107dfc8e5 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&, > JSC::JSValue, WTF::NakedPtr<JSC::Exception>&) > 15 0x10570a4c7 runWithOptions(GlobalObject*, CommandLine&, bool&) > 16 0x1056e00ca jscmain(int, char**)::$_6::operator()(JSC::VM&, > GlobalObject*, bool&) const > 17 0x1056c19f4 int runJSC<jscmain(int, char**)::$_6>(CommandLine > const&, bool, jscmain(int, char**)::$_6 const&) > 18 0x1056c0121 jscmain(int, char**) > 19 0x1056bff8e main > 20 0x7fff57f7f015 start > > https://build.webkit.org/builders/ > Apple%20High%20Sierra%20Debug%20JSC%20%28Tests%29/builds/2517 I wasn't able to reproduce this with the reland patch, with ENABLE_EXCEPTION_SCOPE_VERIFICATION defined to 1 in cmakeconfig.h --- I can see if I can reproduce it without the changes, but otherwise I could use some guidance on building with all the checks enabled, if you (or anyone else) can spare the time to provide that.
Caitlin Potter (:caitp)
Comment 84 2019-04-08 15:13:33 PDT
(In reply to Caitlin Potter (:caitp) from comment #83) > (In reply to Ryan Haddad from comment #81) > > stress/proxy-own-keys.js was also failing an assertion on the debug JSC > > queue due to an unchecked exception: > > > > ERROR: Unchecked JS exception: > > This scope can throw a JS exception: getOwnPropertySlotCommon @ > > ./runtime/ProxyObject.cpp:376 > > (ExceptionScope::m_recursionDepth was 7) > > But the exception was unchecked as of this scope: > > getOwnPropertySlotCommon @ ./runtime/ProxyObject.cpp:376 > > (ExceptionScope::m_recursionDepth was 7) > > > > Unchecked exception detected at: > > 1 0x1080bbc53 JSC::VM::verifyExceptionCheckNeedIsSatisfied(unsigned > > int, JSC::ExceptionEventLocation&) > > 2 0x10808f9ea JSC::ThrowScope::ThrowScope(JSC::VM&, > > JSC::ExceptionEventLocation) > > 3 0x10808fa33 JSC::ThrowScope::ThrowScope(JSC::VM&, > > JSC::ExceptionEventLocation) > > 4 0x108011e47 > > JSC::ProxyObject::getOwnPropertySlotCommon(JSC::ExecState*, > > JSC::PropertyName, JSC::PropertySlot&) > > 5 0x108017280 > > JSC::ProxyObject::performGetOwnPropertyNames(JSC::ExecState*, > > JSC::PropertyNameArray&, JSC::EnumerationMode) > > 6 0x10800f2c2 JSC::ProxyObject::getOwnPropertyNames(JSC::JSObject*, > > JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode) > > 7 0x107fd7442 JSC::ownPropertyKeys(JSC::ExecState*, JSC::JSObject*, > > JSC::PropertyNameMode, JSC::DontEnumPropertiesMode) > > 8 0x107fd8870 JSC::objectConstructorKeys(JSC::ExecState*) > > 9 0x2967d48c16b > > 10 0x2967d4b9f37 > > 11 0x106e53369 vmEntryToJavaScript > > 12 0x107acda1e JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) > > 13 0x107accfa0 JSC::Interpreter::executeProgram(JSC::SourceCode const&, > > JSC::ExecState*, JSC::JSObject*) > > 14 0x107dfc8e5 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&, > > JSC::JSValue, WTF::NakedPtr<JSC::Exception>&) > > 15 0x10570a4c7 runWithOptions(GlobalObject*, CommandLine&, bool&) > > 16 0x1056e00ca jscmain(int, char**)::$_6::operator()(JSC::VM&, > > GlobalObject*, bool&) const > > 17 0x1056c19f4 int runJSC<jscmain(int, char**)::$_6>(CommandLine > > const&, bool, jscmain(int, char**)::$_6 const&) > > 18 0x1056c0121 jscmain(int, char**) > > 19 0x1056bff8e main > > 20 0x7fff57f7f015 start > > > > https://build.webkit.org/builders/ > > Apple%20High%20Sierra%20Debug%20JSC%20%28Tests%29/builds/2517 > > I wasn't able to reproduce this with the reland patch, with > ENABLE_EXCEPTION_SCOPE_VERIFICATION defined to 1 in cmakeconfig.h --- I can > see if I can reproduce it without the changes, but otherwise I could use > some guidance on building with all the checks enabled, if you (or anyone > else) can spare the time to provide that. Yeah, I am unable to reproduce the crash with the fixed version or original version.
Caitlin Potter (:caitp)
Comment 85 2019-04-12 08:42:03 PDT
Ok, I've managed to reproduce it, should have this fixed in the next patch version.
Caitlin Potter (:caitp)
Comment 86 2019-04-12 09:32:12 PDT
Created attachment 367326 [details] Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() fix the exception check failure
Caio Lima
Comment 87 2019-04-12 10:00:15 PDT
Comment on attachment 367326 [details] Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() LGTM
Caitlin Potter (:caitp)
Comment 88 2019-04-15 09:53:23 PDT
Saam, can you re-sign off on this when you get the chance?
Saam Barati
Comment 89 2019-04-15 15:13:34 PDT
Comment on attachment 367326 [details] Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() r=me. LGTM too
Caitlin Potter (:caitp)
Comment 90 2019-04-16 08:31:34 PDT
Comment on attachment 367326 [details] Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() Thanks, here goes
WebKit Commit Bot
Comment 91 2019-04-16 08:59:05 PDT
Comment on attachment 367326 [details] Reland [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames() Clearing flags on attachment: 367326 Committed r244330: <https://trac.webkit.org/changeset/244330>
WebKit Commit Bot
Comment 92 2019-04-16 08:59:08 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.