Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d92dec18da8e9098eb5c3f044dd28ae6dd3f7497
      
https://github.com/WebKit/WebKit/commit/d92dec18da8e9098eb5c3f044dd28ae6dd3f7497
  Author: Yusuke Suzuki <[email protected]>
  Date:   2026-04-15 (Wed, 15 Apr 2026)

  Changed paths:
    A JSTests/stress/module-loader-object-prototype-then-no-promise-tamper.js
    A JSTests/stress/module-loader-promise-then-reassigned-same-value.js
    A JSTests/stress/module-loader-promise-then-tampered-no-deps.js
    A JSTests/stress/module-loader-promise-then-tampered.js
    A JSTests/stress/resources/module-loader-promise-then-tampered-dep.js
    A JSTests/stress/resources/module-loader-promise-then-tampered-no-deps.js
    A JSTests/stress/resources/module-loader-promise-then-tampered-target.js
    M Source/JavaScriptCore/runtime/Completion.cpp
    M Source/JavaScriptCore/runtime/CyclicModuleRecord.cpp
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    M Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
    M Source/JavaScriptCore/runtime/JSMicrotask.cpp
    M Source/JavaScriptCore/runtime/JSModuleLoader.cpp
    M Source/JavaScriptCore/runtime/JSPromise.cpp
    M Source/JavaScriptCore/runtime/JSPromise.h
    M Source/JavaScriptCore/runtime/Microtask.h
    M Source/JavaScriptCore/runtime/ModuleRegistryEntry.cpp
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.h
    M Source/WebCore/bindings/js/ScriptModuleLoader.cpp

  Log Message:
  -----------
  [JSC] Avoid looking up "then" for internal module pipeline's JSPromise
https://bugs.webkit.org/show_bug.cgi?id=312368
rdar://174820983

Reviewed by Keith Miller.

Let's not use `resolve` for internal module pipeline's JSPromise as it
needs to look up "then". We need to make sure that they are not
observable as it happens to use JSPromise internally. Also, we make
things defensive by using jsSecureCast for module pipeline populated
values. We add JSPromise::pipeFrom which just connect an incoming JSPromise
to the resulted JSPromise without user-observable behavior.

Tests: JSTests/stress/module-loader-object-prototype-then-no-promise-tamper.js
       JSTests/stress/module-loader-promise-then-reassigned-same-value.js
       JSTests/stress/module-loader-promise-then-tampered-no-deps.js
       JSTests/stress/module-loader-promise-then-tampered.js

* JSTests/stress/module-loader-object-prototype-then-no-promise-tamper.js: 
Added.
(Object.prototype.then):
(import.string_appeared_here.then):
* JSTests/stress/module-loader-promise-then-reassigned-same-value.js: Added.
* JSTests/stress/module-loader-promise-then-tampered-no-deps.js: Added.
(Promise.prototype.then):
* JSTests/stress/module-loader-promise-then-tampered.js: Added.
(Promise.prototype.then):
* JSTests/stress/resources/module-loader-promise-then-tampered-dep.js: Added.
* JSTests/stress/resources/module-loader-promise-then-tampered-no-deps.js: 
Added.
* JSTests/stress/resources/module-loader-promise-then-tampered-target.js: Added.
* Source/JavaScriptCore/runtime/Completion.cpp:
(JSC::loadAndEvaluateModule):
* Source/JavaScriptCore/runtime/CyclicModuleRecord.cpp:
(JSC::CyclicModuleRecord::evaluate):
(JSC::CyclicModuleRecord::execute):
(JSC::CyclicModuleRecord::asyncExecutionFulfilled):
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
* Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/JSMicrotask.cpp:
(JSC::moduleRegistryFetchSettled):
(JSC::moduleRegistryModuleSettled):
(JSC::moduleLoadStep):
(JSC::moduleLoadTopSettled):
(JSC::moduleLoadTopRejected):
(JSC::moduleLoadSpecifierTransform):
(JSC::moduleLoadCombinedLoadSettled):
(JSC::moduleLoadCombinedStateSettled):
(JSC::moduleLoadLinkEvaluateSettled):
(JSC::moduleLoadReturnRecord):
(JSC::dynamicImportEvaluateSettled):
(JSC::importModuleNamespace):
(JSC::runInternalMicrotask):
* Source/JavaScriptCore/runtime/JSModuleLoader.cpp:
(JSC::JSModuleLoader::loadModule):
(JSC::JSModuleLoader::requestImportModule):
(JSC::JSModuleLoader::hostLoadImportedModule):
(JSC::JSModuleLoader::innerModuleLoading):
(JSC::JSModuleLoader::loadRequestedModules):
(JSC::JSModuleLoader::makeModule):
* Source/JavaScriptCore/runtime/JSPromise.cpp:
(JSC::JSPromise::pipeFrom):
* Source/JavaScriptCore/runtime/JSPromise.h:
* Source/JavaScriptCore/runtime/Microtask.h:
* Source/JavaScriptCore/runtime/ModuleRegistryEntry.cpp:
(JSC::ModuleRegistryEntry::ensureFetchPromise):
(JSC::ModuleRegistryEntry::ensureModulePromise):
(JSC::ModuleRegistryEntry::provideFetch):
* Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp:
(WebCore::DeferredPromise::callFunction):
* Source/WebCore/bindings/js/JSDOMPromiseDeferred.h:
(WebCore::DeferredPromise::fulfillWithCallback):
(WebCore::DeferredPromise::fulfillWithoutThenableCheck):
* Source/WebCore/bindings/js/ScriptModuleLoader.cpp:
(WebCore::ScriptModuleLoader::notifyFinished):

Canonical link: https://commits.webkit.org/311296@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to