aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-17 18:29:23 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-17 18:29:23 -0700
commit7175422a2b6a451242423e9d5f191b20dd60dd14 (patch)
tree22799c6a255877c3be1dfdd2ff48288e4d71d207 /src
parent8fad34a29b71ec42ae4d9e0192e89dfba13d9c45 (diff)
downloadbun-7175422a2b6a451242423e9d5f191b20dd60dd14.tar.gz
bun-7175422a2b6a451242423e9d5f191b20dd60dd14.tar.zst
bun-7175422a2b6a451242423e9d5f191b20dd60dd14.zip
Ensure we handle unicode correctly when returning strings for node fs
Diffstat (limited to 'src')
-rw-r--r--src/javascript/jsc/node/types.zig9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/javascript/jsc/node/types.zig b/src/javascript/jsc/node/types.zig
index e4230068a..a66efdf04 100644
--- a/src/javascript/jsc/node/types.zig
+++ b/src/javascript/jsc/node/types.zig
@@ -139,8 +139,13 @@ pub const StringOrBuffer = union(Tag) {
pub fn toJS(this: StringOrBuffer, ctx: JSC.C.JSContextRef, exception: JSC.C.ExceptionRef) JSC.C.JSValueRef {
return switch (this) {
.string => {
- var external = JSC.C.JSStringCreateExternal(this.string.ptr, this.string.len, null, external_string_finalizer);
- return JSC.C.JSValueMakeString(ctx, external);
+ const input = this.string;
+ if (strings.toUTF16Alloc(bun.default_allocator, input, false) catch null) |utf16| {
+ bun.default_allocator.free(bun.constStrToU8(input));
+ return JSC.ZigString.toExternalU16(utf16.ptr, utf16.len, ctx.ptr()).asObjectRef();
+ }
+
+ return JSC.ZigString.init(input).toExternalValue(ctx.ptr()).asObjectRef();
},
.buffer => this.buffer.toJSObjectRef(ctx, exception),
};