Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
cirospaciari committed Oct 18, 2024
1 parent eb9afb9 commit 57fde38
Showing 1 changed file with 31 additions and 12 deletions.
43 changes: 31 additions & 12 deletions src/bun.js/api/bun/h2_frame_parser.zig
Original file line number Diff line number Diff line change
Expand Up @@ -1758,11 +1758,13 @@ pub const H2FrameParser = struct {
const globalObject = this.handlers.globalObject;

const stream_id = stream.id;
const headers = JSC.JSValue.createEmptyArray(globalObject, 0);
// almost sure that we have between 5-32 headers
const headers = JSC.JSValue.createEmptyArray(globalObject, 32);
headers.ensureStillAlive();

var sensitiveHeaders = JSC.JSValue.jsUndefined();
var count: usize = 0;
var i: u32 = 0;

while (true) {
const header = this.decode(payload[offset..]) catch break;
Expand All @@ -1785,7 +1787,7 @@ pub const H2FrameParser = struct {
if (this.streams.getEntry(stream_id)) |entry| return entry.value_ptr;
return null;
}

const output = brk: {
if (header.never_index) {
if (sensitiveHeaders.isUndefined()) {
Expand All @@ -1796,22 +1798,38 @@ pub const H2FrameParser = struct {
} else break :brk headers;
};

if (getHTTP2CommonString(globalObject, header.well_know)) |header_info| {
output.push(globalObject, header_info);
var header_value = bun.String.fromUTF8(header.value);
output.push(globalObject, header_value.transferToJS(globalObject));
if(i < 63) {
if (getHTTP2CommonString(globalObject, header.well_know)) |header_info| {
output.putIndex(globalObject, i, header_info);
var header_value = bun.String.fromUTF8(header.value);
output.putIndex(globalObject, i + 1,header_value.transferToJS(globalObject));
} else {
var header_name = bun.String.fromUTF8(header.name);
output.putIndex(globalObject, i, header_name.transferToJS(globalObject));
var header_value = bun.String.fromUTF8(header.value);
output.putIndex(globalObject, i + 1, header_value.transferToJS(globalObject));
}
} else {
var header_name = bun.String.fromUTF8(header.name);
output.push(globalObject, header_name.transferToJS(globalObject));
var header_value = bun.String.fromUTF8(header.value);
output.push(globalObject, header_value.transferToJS(globalObject));
if (getHTTP2CommonString(globalObject, header.well_know)) |header_info| {
output.push(globalObject, header_info);
var header_value = bun.String.fromUTF8(header.value);
output.push(globalObject, header_value.transferToJS(globalObject));
} else {
var header_name = bun.String.fromUTF8(header.name);
output.push(globalObject, header_name.transferToJS(globalObject));
var header_value = bun.String.fromUTF8(header.value);
output.push(globalObject, header_value.transferToJS(globalObject));
}
}
i += 2;

if (offset >= payload.len) {
break;
}
}

if(i < 64) {
headers.put(globalObject, JSC.ZigString.static("length"), JSC.JSValue.jsNumber(count));
}
this.dispatchWith3Extra(.onStreamHeaders, stream.getIdentifier(), headers, sensitiveHeaders, JSC.JSValue.jsNumber(flags));
// callbacks can change the Stream ptr in this case we always return the new one
if (this.streams.getEntry(stream_id)) |entry| return entry.value_ptr;
Expand Down Expand Up @@ -3890,9 +3908,10 @@ pub const H2FrameParser = struct {
stream.freeResources(this, finalizing);
}
var streams = this.streams;
// TODO: we can use a pool for this
// TODO: we can use a pool for this
this.streams = bun.U32HashMap(Stream).init(bun.default_allocator);
streams.deinit();

}

pub fn deinit(this: *H2FrameParser) void {
Expand Down

0 comments on commit 57fde38

Please sign in to comment.