diff options
Diffstat (limited to '')
-rw-r--r-- | src/javascript/jsc/webcore/response.zig | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig index 8091d3c63..bea3d07d7 100644 --- a/src/javascript/jsc/webcore/response.zig +++ b/src/javascript/jsc/webcore/response.zig @@ -816,15 +816,16 @@ pub const Headers = struct { _: js.ExceptionRef, ) js.JSValueRef { var this = ref.leak(); - if (arguments.len == 0 or !js.JSValueIsString(ctx, arguments[0]) or js.JSStringIsEqual(arguments[0], Properties.Refs.empty_string)) { + if (arguments.len == 0 or !js.JSValueIsString(ctx, arguments[0]) or + js.JSStringIsEqual(arguments[0], Properties.Refs.empty_string)) + { return js.JSValueMakeNull(ctx); } - const key = ZigString.from(arguments[0], ctx); - if (key.is16Bit()) - return js.JSValueMakeNull(ctx); + const key_slice = ZigString.from(arguments[0], ctx).toSlice(bun.default_allocator); + defer key_slice.deinit(); - if (this.getHeaderIndex(key.slice())) |index| { + if (this.getHeaderIndex(key_slice.slice())) |index| { return ZigString.init(this.asStr(this.entries.items(.value)[index])) .toValue(ctx.ptr()).asObjectRef(); } else { @@ -1381,15 +1382,13 @@ pub const Headers = struct { } pub fn clone(this: *const Headers, to: *Headers) !void { + var buf = this.buf; to.* = Headers{ .entries = try this.entries.clone(this.allocator), - .buf = try @TypeOf(this.buf).initCapacity(this.allocator, this.buf.items.len), + .buf = try buf.clone(this.allocator), .allocator = this.allocator, .guard = Guard.none, }; - - to.buf.expandToCapacity(); - std.mem.copy(u8, to.buf.items, this.buf.items); } }; @@ -1616,11 +1615,11 @@ pub const Blob = struct { if (args_iter.nextEat()) |content_type_| { if (content_type_.isString()) { var zig_str = content_type_.getZigString(ctx.ptr()); - if (!zig_str.is16Bit()) { - var slice = zig_str.trimmedSlice(); - var content_type_buf = getAllocator(ctx).alloc(u8, slice.len) catch unreachable; - content_type = strings.copyLowercase(slice, content_type_buf); - } + var slicer = zig_str.toSlice(bun.default_allocator); + defer slicer.deinit(); + var slice = slicer.slice(); + var content_type_buf = getAllocator(ctx).alloc(u8, slice.len) catch unreachable; + content_type = strings.copyLowercase(slice, content_type_buf); } } @@ -2236,7 +2235,10 @@ pub const Body = struct { if (js.JSObjectGetProperty(ctx, init_ref, property_name_ref, null)) |header_prop| { switch (js.JSValueGetType(ctx, header_prop)) { js.JSType.kJSTypeObject => { - if (try Headers.JS.headersInit(ctx, header_prop)) |headers| { + if (JSC.JSValue.fromRef(header_prop).as(Headers.RefCountedHeaders)) |headers| { + result.headers = try Headers.RefCountedHeaders.init(undefined, allocator); + try headers.leak().clone(&result.headers.?.value); + } else if (try Headers.JS.headersInit(ctx, header_prop)) |headers| { result.headers = try Headers.RefCountedHeaders.init(headers, allocator); } }, |