aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-18 20:54:09 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-18 20:54:09 -0700
commitd87ea9c88a30938306052b25eddf7dd906f3cab9 (patch)
tree07bd4b5b3f2379c9eda41bf3ccb7148dc9ddf9af /src
parent7dc76bf70902de10cb4f4752dae4c7e90cfc1027 (diff)
downloadbun-d87ea9c88a30938306052b25eddf7dd906f3cab9.tar.gz
bun-d87ea9c88a30938306052b25eddf7dd906f3cab9.tar.zst
bun-d87ea9c88a30938306052b25eddf7dd906f3cab9.zip
Fix JSON parsing failure
Diffstat (limited to 'src')
-rw-r--r--src/javascript/jsc/bindings/bindings.cpp9
-rw-r--r--src/javascript/jsc/bindings/bindings.zig7
-rw-r--r--src/javascript/jsc/webcore/response.zig3
3 files changed, 18 insertions, 1 deletions
diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp
index aaff3102c..112ca81b7 100644
--- a/src/javascript/jsc/bindings/bindings.cpp
+++ b/src/javascript/jsc/bindings/bindings.cpp
@@ -249,7 +249,14 @@ unsigned char JSC__JSValue__jsType(JSC__JSValue JSValue0)
JSC__JSValue JSC__JSValue__parseJSON(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1)
{
JSC::JSValue jsValue = JSC::JSValue::decode(JSValue0);
- return JSC::JSValue::encode(JSC::JSONParse(arg1, jsValue.toWTFString(arg1)));
+
+ JSC::JSValue result = JSC::JSONParse(arg1, jsValue.toWTFString(arg1));
+
+ if (!result) {
+ result = JSC::JSValue(JSC::createSyntaxError(arg1->globalObject(), "Failed to parse JSON"));
+ }
+
+ return JSC::JSValue::encode(result);
}
void JSC__JSGlobalObject__deleteModuleRegistryEntry(JSC__JSGlobalObject* global, ZigString* arg1)
diff --git a/src/javascript/jsc/bindings/bindings.zig b/src/javascript/jsc/bindings/bindings.zig
index 3b3182809..88ecb6bfe 100644
--- a/src/javascript/jsc/bindings/bindings.zig
+++ b/src/javascript/jsc/bindings/bindings.zig
@@ -2007,6 +2007,13 @@ pub const JSValue = enum(u64) {
else => false,
};
}
+ /// Empty as in "JSValue {}" rather than an empty string
+ pub fn isEmpty(this: JSValue) bool {
+ return switch (@enumToInt(this)) {
+ 0 => true,
+ else => false,
+ };
+ }
pub fn isBoolean(this: JSValue) bool {
return cppFn("isBoolean", .{this});
}
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig
index 721ffc5ca..c907c4b0f 100644
--- a/src/javascript/jsc/webcore/response.zig
+++ b/src/javascript/jsc/webcore/response.zig
@@ -1708,6 +1708,9 @@ pub const Blob = struct {
value: JSC.JSValue,
global: *JSGlobalObject,
) JSC.JSValue {
+ if (value.isError()) {
+ return JSC.JSPromise.rejectedPromiseValue(global, value);
+ }
return JSC.JSPromise.resolvedPromiseValue(global, value);
}