summaryrefslogtreecommitdiff
path: root/core/static.c
diff options
context:
space:
mode:
authorUnbit <info@unbit.it>2015-01-05 13:53:13 +0100
committerUnbit <info@unbit.it>2015-01-05 13:53:33 +0100
commit165d7201ecfbb34a78844a01bb3829ff9e661754 (patch)
treef2973612be724e5b4eabd30d9c74436459e25969 /core/static.c
parent606dc8bb1fd67b15864ef0b10b0ffe71810e273e (diff)
downloaduwsgi-165d7201ecfbb34a78844a01bb3829ff9e661754.tar.gz
another range header improvement
Diffstat (limited to 'core/static.c')
-rw-r--r--core/static.c19
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)) {