From d10d677ba4f44dbe653e0dc41d6389db69d75e2e Mon Sep 17 00:00:00 2001 From: bptato Date: Thu, 14 Mar 2024 13:43:57 +0100 Subject: loader: fix crash on malformed CGI headers Setting istream to nil was preventing finishCycle from unregistering & closing it. --- src/loader/cgi.nim | 3 +-- src/loader/loader.nim | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/loader/cgi.nim b/src/loader/cgi.nim index 5bc22b6a..f7922224 100644 --- a/src/loader/cgi.nim +++ b/src/loader/cgi.nim @@ -238,7 +238,6 @@ proc killHandle(handle: LoaderHandle) = handle.sendHeaders(newHeaders()) const msg = "Error: malformed header in CGI script" discard handle.output.ostream.sendData(msg) - handle.istream = nil handle.parser = nil proc parseHeaders*(handle: LoaderHandle; buffer: LoaderBuffer): int = @@ -248,7 +247,7 @@ proc parseHeaders*(handle: LoaderHandle; buffer: LoaderBuffer): int = for i in 0 ..< L: template die = handle.killHandle() - return i + return -1 let c = if buffer != nil: char(buffer.page[i]) else: diff --git a/src/loader/loader.nim b/src/loader/loader.nim index c4b497ac..cb59a714 100644 --- a/src/loader/loader.nim +++ b/src/loader/loader.nim @@ -259,7 +259,7 @@ proc handleRead(ctx: LoaderContext; handle: LoaderHandle; var si = 0 if handle.parser != nil: si = handle.parseHeaders(buffer) - if handle.istream == nil: # died while parsing headers; unregister + if si == -1: # died while parsing headers; unregister return hrrUnregister if si == n: # parsed the entire buffer as headers; skip output handling continue -- cgit 1.4.1-2-gfad0