From 666feb3b7e3fdfaa9e1cb7ece39095a83df09fd1 Mon Sep 17 00:00:00 2001 From: Jarred SUmner Date: Tue, 11 Jul 2023 20:52:10 -0700 Subject: Fix crash on linux when throwing SystemError from C++ --- src/bun.js/bindings/helpers.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/bun.js/bindings/helpers.cpp (limited to 'src/bun.js/bindings/helpers.cpp') diff --git a/src/bun.js/bindings/helpers.cpp b/src/bun.js/bindings/helpers.cpp new file mode 100644 index 000000000..88f2a5be2 --- /dev/null +++ b/src/bun.js/bindings/helpers.cpp @@ -0,0 +1,25 @@ +#include "root.h" +#include "helpers.h" +#include "BunClientData.h" + +JSC::JSValue createSystemError(JSC::JSGlobalObject* global, ASCIILiteral message, ASCIILiteral syscall, int err) +{ + auto* instance = JSC::createError(global, String(message)); + auto& vm = global->vm(); + auto& builtinNames = WebCore::builtinNames(vm); + instance->putDirect(vm, builtinNames.syscallPublicName(), jsString(vm, String(syscall)), 0); + instance->putDirect(vm, builtinNames.errnoPublicName(), JSC::jsNumber(err), 0); + instance->putDirect(vm, vm.propertyNames->name, jsString(vm, String("SystemError"_s)), JSC::PropertyAttribute::DontEnum | 0); + return instance; +} + +JSC::JSValue createSystemError(JSC::JSGlobalObject* global, ASCIILiteral syscall, int err) +{ + auto* instance = JSC::createError(global, makeString(String(syscall), "() failed"_s)); + auto& vm = global->vm(); + auto& builtinNames = WebCore::builtinNames(vm); + instance->putDirect(vm, builtinNames.syscallPublicName(), jsString(vm, String(syscall)), 0); + instance->putDirect(vm, builtinNames.errnoPublicName(), JSC::jsNumber(err), 0); + instance->putDirect(vm, vm.propertyNames->name, jsString(vm, String("SystemError"_s)), JSC::PropertyAttribute::DontEnum | 0); + return instance; +} \ No newline at end of file -- cgit v1.2.3