diff options
author | 2022-03-17 18:29:23 -0700 | |
---|---|---|
committer | 2022-03-17 18:29:23 -0700 | |
commit | 7175422a2b6a451242423e9d5f191b20dd60dd14 (patch) | |
tree | 22799c6a255877c3be1dfdd2ff48288e4d71d207 /src | |
parent | 8fad34a29b71ec42ae4d9e0192e89dfba13d9c45 (diff) | |
download | bun-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.zig | 9 |
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), }; |