Fix SIGSEGV in httpclient response body (#16766)

* initialize httpclient response bodyStream; prevent SIGSEGV when getBody is false

* Update lib/pure/httpclient.nim

* Update lib/pure/httpclient.nim

Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
Daehee
2021-01-22 07:04:52 -07:00
committed by GitHub
parent bebfbaa439
commit 2d0cb18b9f
2 changed files with 12 additions and 4 deletions

View File

@@ -832,14 +832,16 @@ proc parseResponse(client: HttpClient | AsyncHttpClient,
if not fullyRead:
httpError("Connection was closed before full request has been made")
when client is HttpClient:
result.bodyStream = newStringStream()
else:
result.bodyStream = newFutureStream[string]("parseResponse")
if getBody and result.code != Http204:
client.bodyStream = result.bodyStream
when client is HttpClient:
client.bodyStream = newStringStream()
result.bodyStream = client.bodyStream
parseBody(client, result.headers, result.version)
else:
client.bodyStream = newFutureStream[string]("parseResponse")
result.bodyStream = client.bodyStream
assert(client.parseBodyFut.isNil or client.parseBodyFut.finished)
# do not wait here for the body request to complete
client.parseBodyFut = parseBody(client, result.headers, result.version)

View File

@@ -148,6 +148,12 @@ proc syncTest() =
client.close()
# SIGSEGV on HEAD body read: issue #16743
block:
let client = newHttpClient()
let resp = client.head("http://httpbin.org/head")
doAssert(resp.body == "")
when false:
# Disabled for now because it causes troubles with AppVeyor
# Timeout test.