diff options
-rw-r--r-- | src/loader/data.nim | 10 | ||||
-rw-r--r-- | src/utils/twtstr.nim | 4 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/loader/data.nim b/src/loader/data.nim index effd9ce9..532ee123 100644 --- a/src/loader/data.nim +++ b/src/loader/data.nim @@ -7,6 +7,7 @@ import loader/headers import loader/loaderhandle import loader/request import types/url +import utils/twtstr proc loadData*(handle: LoaderHandle, request: Request) = template t(body: untyped) = @@ -20,17 +21,17 @@ proc loadData*(handle: LoaderHandle, request: Request) = break ct &= str[i] let sd = si + ct.len + 1 # data start + let s = percentDecode(str, sd) if ct.endsWith(";base64"): try: - let d = base64.decode(str[sd .. ^1]) # decode from ct end + 1 + let d = base64.decode(s) # decode from ct end + 1 t handle.sendResult(0) t handle.sendStatus(200) ct.setLen(ct.len - ";base64".len) # remove base64 indicator t handle.sendHeaders(newHeaders({ "Content-Type": ct }.toTable())) - if d.len > 0: - t handle.sendData(d) + t handle.sendData(d) except ValueError: discard handle.sendResult(ERROR_INVALID_DATA_URL) else: @@ -39,5 +40,4 @@ proc loadData*(handle: LoaderHandle, request: Request) = t handle.sendHeaders(newHeaders({ "Content-Type": ct }.toTable())) - if ct.len + 1 < str.len: - t handle.sendData(addr str[sd], str.len - sd) + t handle.sendData(s) diff --git a/src/utils/twtstr.nim b/src/utils/twtstr.nim index 257bdc66..f146b445 100644 --- a/src/utils/twtstr.nim +++ b/src/utils/twtstr.nim @@ -535,8 +535,8 @@ func percentEncode*(c: char, set: set[char], spaceAsPlus = false): string {.inli func percentEncode*(s: string, set: set[char], spaceAsPlus = false): string = result.percentEncode(s, set, spaceAsPlus) -func percentDecode*(input: string): string = - var i = 0 +func percentDecode*(input: string, si = 0): string = + var i = si while i < input.len: let c = input[i] if c != '%' or i + 2 >= input.len: |