mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(ext/node): prevent panic in http2.connect with uppercase header names (#24780)
Closes https://github.com/denoland/deno/issues/24678
This commit is contained in:
parent
ad5cec27d3
commit
8bab761bcc
2 changed files with 34 additions and 2 deletions
|
@ -247,7 +247,7 @@ pub async fn op_http2_send_response(
|
|||
}
|
||||
for (name, value) in headers {
|
||||
response.headers_mut().append(
|
||||
HeaderName::from_lowercase(&name).unwrap(),
|
||||
HeaderName::from_bytes(&name).unwrap(),
|
||||
HeaderValue::from_bytes(&value).unwrap(),
|
||||
);
|
||||
}
|
||||
|
@ -317,7 +317,7 @@ pub async fn op_http2_client_request(
|
|||
|
||||
for (name, value) in headers {
|
||||
req.headers_mut().unwrap().append(
|
||||
HeaderName::from_lowercase(&name).unwrap(),
|
||||
HeaderName::from_bytes(&name).unwrap(),
|
||||
HeaderValue::from_bytes(&value).unwrap(),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -243,3 +243,35 @@ Deno.test("[node/http2 client] write 512kb buffer on request stream works", asyn
|
|||
await endPromise.promise;
|
||||
assertEquals(receivedData!, buffer);
|
||||
});
|
||||
|
||||
// https://github.com/denoland/deno/issues/24678
|
||||
Deno.test("[node/http2 client] deno doesn't panic on uppercase headers", async () => {
|
||||
const url = "http://127.0.0.1:4246";
|
||||
const client = http2.connect(url);
|
||||
client.on("error", (err) => console.error(err));
|
||||
|
||||
// The "User-Agent" header has uppercase characters to test the panic.
|
||||
const req = client.request({
|
||||
":method": "POST",
|
||||
":path": "/",
|
||||
"User-Agent": "http2",
|
||||
});
|
||||
const endPromise = Promise.withResolvers<void>();
|
||||
|
||||
let receivedData = "";
|
||||
|
||||
req.write("hello");
|
||||
req.setEncoding("utf8");
|
||||
|
||||
req.on("data", (chunk) => {
|
||||
receivedData += chunk;
|
||||
});
|
||||
req.on("end", () => {
|
||||
req.close();
|
||||
client.close();
|
||||
endPromise.resolve();
|
||||
});
|
||||
req.end();
|
||||
await endPromise.promise;
|
||||
assertEquals(receivedData, "hello world\n");
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue