diff options
author | Unbit <info@unbit.it> | 2015-01-05 13:53:13 +0100 |
---|---|---|
committer | Unbit <info@unbit.it> | 2015-01-05 13:53:33 +0100 |
commit | 165d7201ecfbb34a78844a01bb3829ff9e661754 (patch) | |
tree | f2973612be724e5b4eabd30d9c74436459e25969 /core/static.c | |
parent | 606dc8bb1fd67b15864ef0b10b0ffe71810e273e (diff) | |
download | uwsgi-165d7201ecfbb34a78844a01bb3829ff9e661754.tar.gz |
another range header improvement
Diffstat (limited to 'core/static.c')
-rw-r--r-- | core/static.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/core/static.c b/core/static.c index 73e6e6bc..ac820482 100644 --- a/core/static.c +++ b/core/static.c @@ -466,22 +466,21 @@ int uwsgi_real_file_serve(struct wsgi_request *wsgi_req, char *real_filename, si wsgi_req->do_not_account_avg_rt = 1; size_t fsize = st->st_size; + // security check + if (wsgi_req->range_from > fsize) { + wsgi_req->range_from = 0; + wsgi_req->range_to = 0; + } + else { + fsize -= wsgi_req->range_from; + } + if (wsgi_req->range_to) { fsize = (wsgi_req->range_to - wsgi_req->range_from)+1; if (fsize + wsgi_req->range_from > (size_t) (st->st_size)) { fsize = st->st_size - wsgi_req->range_from; } } - else { - // reset in case of inconsistent size - if (wsgi_req->range_from > fsize) { - wsgi_req->range_from = 0; - fsize = 0; - } - else { - fsize -= wsgi_req->range_from; - } - } // HTTP status if (fsize > 0 && (wsgi_req->range_from || wsgi_req->range_to)) { |