diff options
| author | Drahflow <drahflow@gmx.de> | 2017-03-06 08:03:36 +0100 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2017-03-06 08:03:36 +0100 |
| commit | 54029d848bfd7bc0972da2ba46589997fa214238 (patch) | |
| tree | 72a09c599a45e8220dd05df205c1375fc0e8707a /elymas | |
| parent | 92ee378b02c8e28c04843d1c936d7aeb702766a8 (diff) | |
Handle POST requests more robustly
Diffstat (limited to 'elymas')
| -rw-r--r-- | elymas/lib/net/alg/http.ey | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/elymas/lib/net/alg/http.ey b/elymas/lib/net/alg/http.ey index 48b851f..2307b61 100644 --- a/elymas/lib/net/alg/http.ey +++ b/elymas/lib/net/alg/http.ey @@ -47,16 +47,26 @@ headers .?Content-Length not { requestParsed } { - headers .Content-Length txt .consume .u ==contentLength - - # FIXME: Must change *=in and =*end here to correctly process further incoming data - { body -01 cat =body - body len _ ::inputBufferLimit gt { "" =body :close } rep - contentLength eq { requestParsed } rep - "" - } =in - - inBuffer in =inBuffer + headers .Content-Length "^\\d+$" regex not { + "" =inBuffer :close + } { + headers .Content-Length txt .consume .u ==contentLength + + { body -01 cat =body + body len _ ::inputBufferLimit gt { "" =body :close } rep + contentLength ge { + contentLength body str .postfix ==afterBody + contentLength body str .prefix =body + requestParsed + + afterBody + } { + "" + } ? * + } =in + + inBuffer in =inBuffer + } ? * } ? * } { 1 } { |
