Fixes #6973

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
This commit is contained in:
Jarred Sumner
2023-11-08 01:42:25 +01:00
committed by GitHub
parent e581f732d7
commit b52e503ce4
3 changed files with 7 additions and 8 deletions

View File

@@ -264,8 +264,7 @@ JSC_DEFINE_HOST_FUNCTION(jsHTTPAssignHeaders, (JSGlobalObject * globalObject, Ca
auto scope = DECLARE_THROW_SCOPE(vm);
JSValue requestValue = callFrame->argument(0);
JSObject* prototype = callFrame->argument(1).getObject();
JSObject* objectValue = callFrame->argument(2).getObject();
JSObject* objectValue = callFrame->argument(1).getObject();
JSC::InternalFieldTuple* tuple = JSC::InternalFieldTuple::create(vm, globalObject->m_internalFieldTupleStructure.get());
@@ -273,7 +272,7 @@ JSC_DEFINE_HOST_FUNCTION(jsHTTPAssignHeaders, (JSGlobalObject * globalObject, Ca
JSValue urlValue = JSValue();
if (auto* jsRequest = jsDynamicCast<WebCore::JSRequest*>(requestValue)) {
if (uWS::HttpRequest* request = Request__getUWSRequest(jsRequest->wrapped())) {
return assignHeadersFromUWebSockets(request, prototype, objectValue, tuple, globalObject, vm);
return assignHeadersFromUWebSockets(request, globalObject->objectPrototype(), objectValue, tuple, globalObject, vm);
}
if (jsRequest->m_headers) {
@@ -317,7 +316,7 @@ JSC_DEFINE_HOST_FUNCTION(jsHTTPAssignHeaders, (JSGlobalObject * globalObject, Ca
RETURN_IF_EXCEPTION(scope, {});
}
return assignHeadersFromFetchHeaders(impl, prototype, objectValue, tuple, globalObject, vm);
return assignHeadersFromFetchHeaders(impl, globalObject->objectPrototype(), objectValue, tuple, globalObject, vm);
}
}
}

View File

@@ -610,13 +610,10 @@ function assignHeadersSlow(object, req) {
object.headers = outHeaders;
object.rawHeaders = rawHeaders;
}
// This is the prototype for the req.headers object.
// It must not be exposed
const kEmptyObjectInternal = Object.create(null);
function assignHeaders(object, req) {
// This fast path is an 8% speedup for a "hello world" node:http server, and a 7% speedup for a "hello world" express server
const tuple = assignHeadersFast(req, kEmptyObjectInternal, object);
const tuple = assignHeadersFast(req, object);
if (tuple !== null) {
object.headers = $getInternalField(tuple, 0);
object.rawHeaders = $getInternalField(tuple, 1);

View File

@@ -157,6 +157,9 @@ describe("node:http", () => {
function runTest(done: Function, callback: (server: Server, port: number, done: (err?: Error) => void) => void) {
var timer;
var server = createServer((req, res) => {
if (req.headers.__proto__ !== {}.__proto__) {
throw new Error("Headers should inherit from Object.prototype");
}
const reqUrl = new URL(req.url!, `http://${req.headers.host}`);
if (reqUrl.pathname) {
if (reqUrl.pathname === "/redirect") {