aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ModuleLoader.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-06 03:03:49 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-06 03:37:58 -0700
commit07e2c898c635c607a403017d18e54a72cd361706 (patch)
tree38d2d4a5978f149204b2b47c15580f11903c5c2e /src/bun.js/bindings/ModuleLoader.cpp
parentb9fad14f87899816cf021b0a7eea8c0de84a5190 (diff)
downloadbun-07e2c898c635c607a403017d18e54a72cd361706.tar.gz
bun-07e2c898c635c607a403017d18e54a72cd361706.tar.zst
bun-07e2c898c635c607a403017d18e54a72cd361706.zip
Fix crash in Buffer module
Diffstat (limited to 'src/bun.js/bindings/ModuleLoader.cpp')
-rw-r--r--src/bun.js/bindings/ModuleLoader.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/bun.js/bindings/ModuleLoader.cpp b/src/bun.js/bindings/ModuleLoader.cpp
index 1383c891d..19f4ad278 100644
--- a/src/bun.js/bindings/ModuleLoader.cpp
+++ b/src/bun.js/bindings/ModuleLoader.cpp
@@ -42,15 +42,14 @@ static JSC::JSInternalPromise* rejectedInternalPromise(JSC::JSGlobalObject* glob
{
JSC::VM& vm = globalObject->vm();
JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure());
- promise->internalField(JSC::JSPromise::Field::ReactionsOrResult).set(vm, promise, value);
- promise->internalField(JSC::JSPromise::Field::Flags).set(vm, promise, jsNumber(promise->internalField(JSC::JSPromise::Field::Flags).get().asUInt32AsAnyInt() | JSC::JSPromise::isFirstResolvingFunctionCalledFlag | static_cast<unsigned>(JSC::JSPromise::Status::Rejected)));
- return promise;
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ scope.throwException(globalObject, value);
+ return promise->rejectWithCaughtException(globalObject, scope);
}
static JSC::JSInternalPromise* resolvedInternalPromise(JSC::JSGlobalObject* globalObject, JSC::JSValue value)
{
JSC::VM& vm = globalObject->vm();
-
JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure());
promise->internalField(JSC::JSPromise::Field::ReactionsOrResult).set(vm, promise, value);
promise->internalField(JSC::JSPromise::Field::Flags).set(vm, promise, jsNumber(promise->internalField(JSC::JSPromise::Field::Flags).get().asUInt32AsAnyInt() | JSC::JSPromise::isFirstResolvingFunctionCalledFlag | static_cast<unsigned>(JSC::JSPromise::Status::Fulfilled)));
@@ -241,6 +240,7 @@ static JSValue handleVirtualModuleResult(
auto resolve = [&](JSValue code) -> JSValue {
res->success = true;
if constexpr (allowPromise) {
+ scope.release();
return resolvedInternalPromise(globalObject, code);
} else {
return code;
@@ -260,6 +260,7 @@ static JSValue handleVirtualModuleResult(
res->success = true;
if constexpr (allowPromise) {
+ scope.release();
return resolvedInternalPromise(globalObject, code);
} else {
return code;
@@ -340,7 +341,9 @@ static JSValue fetchSourceCode(
auto resolve = [&](JSValue code) -> JSValue {
if constexpr (allowPromise) {
- return resolvedInternalPromise(globalObject, code);
+ auto* ret = resolvedInternalPromise(globalObject, code);
+ scope.release();
+ return ret;
} else {
return code;
}
@@ -353,7 +356,9 @@ static JSValue fetchSourceCode(
}
if constexpr (allowPromise) {
- return resolvedInternalPromise(globalObject, code);
+ auto* ret = resolvedInternalPromise(globalObject, code);
+ scope.release();
+ return ret;
} else {
return code;
}
@@ -383,8 +388,6 @@ static JSValue fetchSourceCode(
JSC::SyntheticSourceProvider::create(generateBufferSourceCode,
JSC::SourceOrigin(), WTFMove(moduleKey)));
- auto sourceCode = JSSourceCode::create(vm, WTFMove(source));
-
return rejectOrResolve(JSSourceCode::create(vm, WTFMove(source)));
}
case SyntheticModuleType::Process: {