diff options
author | Sam Wang <Sam647254@users.noreply.github.com> | 2019-12-29 08:37:22 -0800 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-12-29 17:37:22 +0100 |
commit | 441cacf70f6de5369f3fba5d8bda966277881a71 (patch) | |
tree | c5f166895d58d8c802045e66c30798fb88ffeb13 /lib/pure | |
parent | ee9ee297d8d79ae17438343a6cb590906609f734 (diff) | |
download | Nim-441cacf70f6de5369f3fba5d8bda966277881a71.tar.gz |
Added fix for handling TaintedStrings in streams and httpclient (#12969)
* Added fix for taint mode in streams and httpclient * Removed taintMode export from system.nim
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/httpclient.nim | 8 | ||||
-rw-r--r-- | lib/pure/streams.nim | 12 |
2 files changed, 14 insertions, 6 deletions
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim index a56539898..d9a6192a7 100644 --- a/lib/pure/httpclient.nim +++ b/lib/pure/httpclient.nim @@ -367,7 +367,7 @@ proc addFiles*(p: var MultipartData, xs: openArray[tuple[name, file: string]]): let (_, fName, ext) = splitFile(file) if ext.len > 0: contentType = m.getMimetype(ext[1..ext.high], "") - p.add(name, readFile(file), fName & ext, contentType) + p.add(name, readFile(file).string, fName & ext, contentType) result = p proc `[]=`*(p: var MultipartData, name, content: string) = @@ -634,7 +634,7 @@ proc parseChunks(client: HttpClient | AsyncHttpClient): Future[void] {.multisync.} = while true: var chunkSize = 0 - var chunkSizeStr = await client.socket.recvLine() + var chunkSizeStr = (await client.socket.recvLine()).string var i = 0 if chunkSizeStr == "": httpError("Server terminated connection prematurely") @@ -734,9 +734,9 @@ proc parseResponse(client: HttpClient | AsyncHttpClient, while true: linei = 0 when client is HttpClient: - line = await client.socket.recvLine(client.timeout) + line = (await client.socket.recvLine(client.timeout)).string else: - line = await client.socket.recvLine() + line = (await client.socket.recvLine()).string if line == "": # We've been disconnected. client.close() diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index c9547eee1..cdb881960 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -96,6 +96,8 @@ include "system/inclrtl" +const taintMode = compileOption("taintmode") + proc newEIO(msg: string): owned(ref IOError) = new(result) result.msg = msg @@ -901,7 +903,10 @@ proc readLine*(s: Stream, line: var TaintedString): bool = else: # fallback when nimvm: #Bug #12282 - line.setLen(0) + when taintMode: + line.string.setLen(0) + else: + line.setLen(0) else: line.string.setLen(0) while true: @@ -914,7 +919,10 @@ proc readLine*(s: Stream, line: var TaintedString): bool = if line.len > 0: break else: return false when nimvm: #Bug #12282 - line.add(c) + when taintMode: + line.string.add(c) + else: + line.add(c) else: line.string.add(c) result = true |