diff options
author | 2023-07-09 22:36:24 -0700 | |
---|---|---|
committer | 2023-07-09 22:36:24 -0700 | |
commit | 963d4311e614ac197427104b9cf265bbe2a890af (patch) | |
tree | 4c912420b7ec13e5c2aabbbb51157a0cac0c98ca /src/string.zig | |
parent | 2f5e4fffe9554fcc7afa6980b3af6b33bc3a3a5e (diff) | |
download | bun-963d4311e614ac197427104b9cf265bbe2a890af.tar.gz bun-963d4311e614ac197427104b9cf265bbe2a890af.tar.zst bun-963d4311e614ac197427104b9cf265bbe2a890af.zip |
Fixes #3530 (#3587)
* Fixes #3530
* Handle OOM
* Add test
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/string.zig')
-rw-r--r-- | src/string.zig | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/string.zig b/src/string.zig index 166a0a6f7..5f107197f 100644 --- a/src/string.zig +++ b/src/string.zig @@ -257,6 +257,8 @@ pub const String = extern struct { extern fn BunString__fromLatin1(bytes: [*]const u8, len: usize) String; extern fn BunString__fromBytes(bytes: [*]const u8, len: usize) String; + extern fn BunString__fromLatin1Unitialized(len: usize) String; + extern fn BunString__fromUTF16Unitialized(len: usize) String; pub fn toOwnedSlice(this: String, allocator: std.mem.Allocator) ![]u8 { switch (this.tag) { @@ -278,6 +280,30 @@ pub const String = extern struct { } } + pub fn createUninitializedLatin1(len: usize) String { + JSC.markBinding(@src()); + return BunString__fromLatin1Unitialized(len); + } + + pub fn createUninitializedUTF16(len: usize) String { + JSC.markBinding(@src()); + return BunString__fromUTF16Unitialized(len); + } + + pub fn createUninitialized(comptime kind: @Type(.EnumLiteral), len: usize) ?String { + const without_check = switch (comptime kind) { + .latin1 => createUninitializedLatin1(len), + .utf16 => createUninitializedUTF16(len), + else => @compileError("Invalid string kind"), + }; + + if (without_check.tag == .Dead) { + return null; + } + + return without_check; + } + pub fn createLatin1(bytes: []const u8) String { JSC.markBinding(@src()); return BunString__fromLatin1(bytes.ptr, bytes.len); |