diff options
author | 2022-11-14 19:55:48 -0800 | |
---|---|---|
committer | 2022-11-14 19:55:48 -0800 | |
commit | 9c3b2f7ad6549f1c86832bb9027278fcce9b80b5 (patch) | |
tree | 4327980446f0fec4a2e15f77ceeedb7cac728e5f /src/bun.js/bindings/ZigGlobalObject.cpp | |
parent | 436b8e14611e346fdb2c581a7c137f1dde10f1b0 (diff) | |
download | bun-9c3b2f7ad6549f1c86832bb9027278fcce9b80b5.tar.gz bun-9c3b2f7ad6549f1c86832bb9027278fcce9b80b5.tar.zst bun-9c3b2f7ad6549f1c86832bb9027278fcce9b80b5.zip |
Fix crash in web crypto. caused by refptr
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 052295bd2..abf1ecb72 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -435,6 +435,9 @@ GlobalObject::GlobalObject(JSC::VM& vm, JSC::Structure* structure) GlobalObject::~GlobalObject() { + if (crypto) { + delete crypto; + } scriptExecutionContext()->removeFromContextsMap(); } @@ -2374,10 +2377,12 @@ void GlobalObject::finishCreation(VM& vm) m_subtleCryptoObject.initLater( [](const JSC::LazyProperty<JSC::JSGlobalObject, JSC::JSObject>::Initializer& init) { auto& global = *reinterpret_cast<Zig::GlobalObject*>(init.owner); - RefPtr<WebCore::SubtleCrypto> crypto = WebCore::SubtleCrypto::create(global.scriptExecutionContext()); + if (global.crypto == nullptr) { + global.crypto = WebCore::SubtleCrypto::createPtr(global.scriptExecutionContext()); + } init.set( - toJSNewlyCreated<IDLInterface<SubtleCrypto>>(*init.owner, global, WTFMove(crypto)).getObject()); + toJS<IDLInterface<SubtleCrypto>>(*init.owner, global, global.crypto).getObject()); }); m_primordialsObject.initLater( |