aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-16 04:01:42 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-16 04:01:42 -0800
commitd00fe1f8aff707d77bb859582582767713712140 (patch)
treeaa38856eba377e83e8698c0fc5b830214447dc65
parent5a80a2e216ded1d37c18ff54d9d3fa44e1bacc77 (diff)
downloadbun-d00fe1f8aff707d77bb859582582767713712140.tar.gz
bun-d00fe1f8aff707d77bb859582582767713712140.tar.zst
bun-d00fe1f8aff707d77bb859582582767713712140.zip
[bun.js] Handle UTF-16 strings in `StringOrBuffer`
-rw-r--r--src/javascript/jsc/node/node_fs.zig4
-rw-r--r--src/javascript/jsc/node/types.zig14
2 files changed, 5 insertions, 13 deletions
diff --git a/src/javascript/jsc/node/node_fs.zig b/src/javascript/jsc/node/node_fs.zig
index 444480d2c..42058f1d3 100644
--- a/src/javascript/jsc/node/node_fs.zig
+++ b/src/javascript/jsc/node/node_fs.zig
@@ -1179,7 +1179,7 @@ const Arguments = struct {
if (exception.* != null) return null;
- const buffer = StringOrBuffer.fromJS(ctx.ptr(), arguments.next() orelse {
+ const buffer = StringOrBuffer.fromJS(ctx.ptr(), arguments.arena.allocator(), arguments.next() orelse {
if (exception.* == null) {
JSC.throwInvalidArguments(
"data is required",
@@ -1490,7 +1490,7 @@ const Arguments = struct {
if (exception.* != null) return null;
- const data = StringOrBuffer.fromJS(ctx.ptr(), arguments.next() orelse {
+ const data = StringOrBuffer.fromJS(ctx.ptr(), arguments.arena.allocator(), arguments.next() orelse {
if (exception.* == null) {
JSC.throwInvalidArguments(
"data is required",
diff --git a/src/javascript/jsc/node/types.zig b/src/javascript/jsc/node/types.zig
index b02d5ef89..e5d905363 100644
--- a/src/javascript/jsc/node/types.zig
+++ b/src/javascript/jsc/node/types.zig
@@ -146,19 +146,11 @@ pub const StringOrBuffer = union(Tag) {
};
}
- pub fn fromJS(global: *JSC.JSGlobalObject, value: JSC.JSValue, exception: JSC.C.ExceptionRef) ?StringOrBuffer {
+ pub fn fromJS(global: *JSC.JSGlobalObject, allocator: std.mem.Allocator, value: JSC.JSValue, exception: JSC.C.ExceptionRef) ?StringOrBuffer {
return switch (value.jsType()) {
JSC.JSValue.JSType.String, JSC.JSValue.JSType.StringObject, JSC.JSValue.JSType.DerivedStringObject, JSC.JSValue.JSType.Object => {
- var zig_str = JSC.ZigString.init("");
- value.toZigString(&zig_str, global);
- // if (zig_str.len == 0) {
- // JSC.throwInvalidArguments("Expected string to have length > 0", .{}, global.ref(), exception);
- // return null;
- // }
-
- return StringOrBuffer{
- .string = zig_str.slice(),
- };
+ var zig_str = value.toSlice(global, allocator);
+ return StringOrBuffer{ .string = zig_str.slice() };
},
JSC.JSValue.JSType.ArrayBuffer => StringOrBuffer{
.buffer = Buffer.fromArrayBuffer(global.ref(), value, exception),