Mercurial > prosody-hg
comparison plugins/mod_http_file_share.lua @ 11323:a853a018eede
mod_http_file_share: Validate file size early in HTTP PUT request
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 27 Jan 2021 17:47:04 +0100 |
| parents | 4ade9810ce35 |
| children | 494761f5d7da |
comparison
equal
deleted
inserted
replaced
| 11322:4ade9810ce35 | 11323:a853a018eede |
|---|---|
| 163 end | 163 end |
| 164 if not path or upload_info.slot ~= path:match("^[^/]+") then | 164 if not path or upload_info.slot ~= path:match("^[^/]+") then |
| 165 module:log("debug", "Invalid upload slot: %q, path: %q", upload_info.slot, path); | 165 module:log("debug", "Invalid upload slot: %q, path: %q", upload_info.slot, path); |
| 166 return 400; | 166 return 400; |
| 167 end | 167 end |
| 168 if request.headers.content_length and tonumber(request.headers.content_length) ~= upload_info.filesize then | |
| 169 return 413; | |
| 170 -- Note: We don't know the size if the upload is streamed in chunked encoding, | |
| 171 -- so we also check the final file size on completion. | |
| 172 end | |
| 168 | 173 |
| 169 local filename = dm.getpath(upload_info.slot, module.host, module.name, nil, true); | 174 local filename = dm.getpath(upload_info.slot, module.host, module.name, nil, true); |
| 170 | 175 |
| 171 if not request.body_sink then | 176 if not request.body_sink then |
| 172 module:log("debug", "Preparing to receive upload into %q, expecting %s", filename, B(upload_info.filesize)); | 177 module:log("debug", "Preparing to receive upload into %q, expecting %s", filename, B(upload_info.filesize)); |
