cgi module: don't depent on the terminating zero

This commit is contained in:
Andreas Rumpf 2018-04-29 01:18:26 +02:00
commit 39b81c836c

View file

@ -97,11 +97,10 @@ iterator decodeData*(data: string): tuple[key, value: TaintedString] =
var name = "" var name = ""
var value = "" var value = ""
# decode everything in one pass: # decode everything in one pass:
while data[i] != '\0': while i < data.len:
setLen(name, 0) # reuse memory setLen(name, 0) # reuse memory
while true: while i < data.len:
case data[i] case data[i]
of '\0': break
of '%': of '%':
var x = 0 var x = 0
handleHexChar(data[i+1], x) handleHexChar(data[i+1], x)
@ -112,13 +111,14 @@ iterator decodeData*(data: string): tuple[key, value: TaintedString] =
of '=', '&': break of '=', '&': break
else: add(name, data[i]) else: add(name, data[i])
inc(i) inc(i)
if data[i] != '=': cgiError("'=' expected") if i >= data.len or data[i] != '=': cgiError("'=' expected")
inc(i) # skip '=' inc(i) # skip '='
setLen(value, 0) # reuse memory setLen(value, 0) # reuse memory
while true: while i < data.len:
case data[i] case data[i]
of '%': of '%':
var x = 0 var x = 0
if i+2 < data.len:
handleHexChar(data[i+1], x) handleHexChar(data[i+1], x)
handleHexChar(data[i+2], x) handleHexChar(data[i+2], x)
inc(i, 2) inc(i, 2)
@ -128,8 +128,8 @@ iterator decodeData*(data: string): tuple[key, value: TaintedString] =
else: add(value, data[i]) else: add(value, data[i])
inc(i) inc(i)
yield (name.TaintedString, value.TaintedString) yield (name.TaintedString, value.TaintedString)
if i < data.len:
if data[i] == '&': inc(i) if data[i] == '&': inc(i)
elif data[i] == '\0': break
else: cgiError("'&' expected") else: cgiError("'&' expected")
iterator decodeData*(allowedMethods: set[RequestMethod] = iterator decodeData*(allowedMethods: set[RequestMethod] =