diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2018-04-29 01:18:26 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-04-29 01:18:26 +0200 |
commit | 39b81c836cf09912296799d66124db9b1efcedc8 (patch) | |
tree | f148d574c94cc8d4f4d6f211d9d3156efe639fcd /lib | |
parent | 7e0540ed80ac0685458e1ccf9e3f7ba38772d32c (diff) | |
download | Nim-39b81c836cf09912296799d66124db9b1efcedc8.tar.gz |
cgi module: don't depent on the terminating zero
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/cgi.nim | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/pure/cgi.nim b/lib/pure/cgi.nim index 5de6aa487..a5a404497 100644 --- a/lib/pure/cgi.nim +++ b/lib/pure/cgi.nim @@ -97,11 +97,10 @@ iterator decodeData*(data: string): tuple[key, value: TaintedString] = var name = "" var value = "" # decode everything in one pass: - while data[i] != '\0': + while i < data.len: setLen(name, 0) # reuse memory - while true: + while i < data.len: case data[i] - of '\0': break of '%': var x = 0 handleHexChar(data[i+1], x) @@ -112,15 +111,16 @@ iterator decodeData*(data: string): tuple[key, value: TaintedString] = of '=', '&': break else: add(name, data[i]) inc(i) - if data[i] != '=': cgiError("'=' expected") + if i >= data.len or data[i] != '=': cgiError("'=' expected") inc(i) # skip '=' setLen(value, 0) # reuse memory - while true: + while i < data.len: case data[i] of '%': var x = 0 - handleHexChar(data[i+1], x) - handleHexChar(data[i+2], x) + if i+2 < data.len: + handleHexChar(data[i+1], x) + handleHexChar(data[i+2], x) inc(i, 2) add(value, chr(x)) of '+': add(value, ' ') @@ -128,9 +128,9 @@ iterator decodeData*(data: string): tuple[key, value: TaintedString] = else: add(value, data[i]) inc(i) yield (name.TaintedString, value.TaintedString) - if data[i] == '&': inc(i) - elif data[i] == '\0': break - else: cgiError("'&' expected") + if i < data.len: + if data[i] == '&': inc(i) + else: cgiError("'&' expected") iterator decodeData*(allowedMethods: set[RequestMethod] = {methodNone, methodPost, methodGet}): tuple[key, value: TaintedString] = |