cgi module: don't depent on the terminating zero
This commit is contained in:
parent
7e0540ed80
commit
39b81c836c
1 changed files with 10 additions and 10 deletions
|
|
@ -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,15 +111,16 @@ 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
|
||||||
handleHexChar(data[i+1], x)
|
if i+2 < data.len:
|
||||||
handleHexChar(data[i+2], x)
|
handleHexChar(data[i+1], x)
|
||||||
|
handleHexChar(data[i+2], x)
|
||||||
inc(i, 2)
|
inc(i, 2)
|
||||||
add(value, chr(x))
|
add(value, chr(x))
|
||||||
of '+': add(value, ' ')
|
of '+': add(value, ' ')
|
||||||
|
|
@ -128,9 +128,9 @@ 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 data[i] == '&': inc(i)
|
if i < data.len:
|
||||||
elif data[i] == '\0': break
|
if data[i] == '&': inc(i)
|
||||||
else: cgiError("'&' expected")
|
else: cgiError("'&' expected")
|
||||||
|
|
||||||
iterator decodeData*(allowedMethods: set[RequestMethod] =
|
iterator decodeData*(allowedMethods: set[RequestMethod] =
|
||||||
{methodNone, methodPost, methodGet}): tuple[key, value: TaintedString] =
|
{methodNone, methodPost, methodGet}): tuple[key, value: TaintedString] =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue