aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-27 23:48:22 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-27 23:48:22 -0700
commit7a97f62c72dc04e011cc646707ab2b894fade477 (patch)
tree66956be26ea09f37a8b284d94eeac75bf193ee8b
parent8bbcb5006ebf77a7944472eb2e4a0604f7bbc733 (diff)
downloadbun-7a97f62c72dc04e011cc646707ab2b894fade477.tar.gz
bun-7a97f62c72dc04e011cc646707ab2b894fade477.tar.zst
bun-7a97f62c72dc04e011cc646707ab2b894fade477.zip
Safer error handling
-rw-r--r--src/javascript/jsc/bindings/bindings.cpp28
-rw-r--r--src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h4
2 files changed, 19 insertions, 13 deletions
diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp
index 24a8c9625..a91f4ff95 100644
--- a/src/javascript/jsc/bindings/bindings.cpp
+++ b/src/javascript/jsc/bindings/bindings.cpp
@@ -2083,7 +2083,7 @@ void exceptionFromString(ZigException* except, JSC::JSValue value, JSC::JSGlobal
// ErrorInstance
if (JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(global->vm(), value)) {
if (obj->hasProperty(global, global->vm().propertyNames->name)) {
- auto name_str = obj->getDirect(global->vm(), global->vm().propertyNames->name).toWTFString(global);
+ auto name_str = obj->getIfPropertyExists(global, global->vm().propertyNames->name).toWTFString(global);
except->name = Zig::toZigString(name_str);
if (name_str == "Error"_s) {
except->code = JSErrorCodeError;
@@ -2104,20 +2104,26 @@ void exceptionFromString(ZigException* except, JSC::JSValue value, JSC::JSGlobal
}
}
- if (obj->hasProperty(global, global->vm().propertyNames->message)) {
- except->message = Zig::toZigString(
- obj->getDirect(global->vm(), global->vm().propertyNames->message).toWTFString(global));
+ if (JSC::JSValue message = obj->getIfPropertyExists(global, global->vm().propertyNames->message)) {
+ if (message) {
+ except->message = Zig::toZigString(
+ message.toWTFString(global));
+ }
}
- if (obj->hasProperty(global, global->vm().propertyNames->sourceURL)) {
- except->stack.frames_ptr[0].source_url = Zig::toZigString(
- obj->getDirect(global->vm(), global->vm().propertyNames->sourceURL).toWTFString(global));
- except->stack.frames_len = 1;
+ if (JSC::JSValue sourceURL = obj->getIfPropertyExists(global, global->vm().propertyNames->sourceURL)) {
+ if (sourceURL) {
+ except->stack.frames_ptr[0].source_url = Zig::toZigString(
+ sourceURL.toWTFString(global));
+ except->stack.frames_len = 1;
+ }
}
- if (obj->hasProperty(global, global->vm().propertyNames->line)) {
- except->stack.frames_ptr[0].position.line = obj->getDirect(global->vm(), global->vm().propertyNames->line).toInt32(global);
- except->stack.frames_len = 1;
+ if (JSC::JSValue line = obj->getIfPropertyExists(global, global->vm().propertyNames->line)) {
+ if (line) {
+ except->stack.frames_ptr[0].position.line = line.toInt32(global);
+ except->stack.frames_len = 1;
+ }
}
return;
diff --git a/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h b/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h
index dd1a665a4..36564a926 100644
--- a/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h
+++ b/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h
@@ -866,8 +866,8 @@ public:
std::unique_ptr<IsoSubspace> m_subspaceForURLSearchParamsIterator;
std::unique_ptr<IsoSubspace> m_subspaceForDOMException;
- std::unique_ptr<IsoSubspace> m_subspaceForDOMFormData;
- std::unique_ptr<IsoSubspace> m_subspaceForDOMFormDataIterator;
+ // std::unique_ptr<IsoSubspace> m_subspaceForDOMFormData;
+ // std::unique_ptr<IsoSubspace> m_subspaceForDOMFormDataIterator;
std::unique_ptr<IsoSubspace> m_subspaceForDOMURL;
};
} // namespace WebCore