From 2aa48e4f1a5955b3577cd26d9a63a5efdaed368f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Malo?= Date: Tue, 25 May 2004 17:13:07 +0000 Subject: [PATCH] use new apr_strtoff function to parse PUT ranges correctly. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@103762 13f79535-47bb-0310-9956-ffa450edef68 --- modules/dav/main/mod_dav.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c index 0c0886d8fb..38d67b0bf5 100644 --- a/modules/dav/main/mod_dav.c +++ b/modules/dav/main/mod_dav.c @@ -767,6 +767,7 @@ static int dav_parse_range(request_rec *r, char *range; char *dash; char *slash; + char *errp; range_c = apr_table_get(r->headers_in, "content-range"); if (range_c == NULL) @@ -780,17 +781,28 @@ static int dav_parse_range(request_rec *r, return 0; } - *dash = *slash = '\0'; + *dash++ = *slash++ = '\0'; - *range_start = apr_atoi64(range + 6); - *range_end = apr_atoi64(dash + 1); + /* ignore invalid ranges. (per S14.16 of RFC2616) */ + if (apr_strtoff(range_start, range + 6, &errp, 10) + || *errp || *range_start < 0) { + return 0; + } - if (*range_end < *range_start - || (slash[1] != '*' && apr_atoi64(slash + 1) <= *range_end)) { - /* invalid range. ignore it (per S14.16 of RFC2616) */ + if (apr_strtoff(range_end, dash, &errp, 10) + || *errp || *range_end < 0 || *range_end < *range_start) { return 0; } + if (*slash != '*') { + apr_off_t dummy; + + if (apr_strtoff(&dummy, slash, &errp, 10) + || *errp || dummy <= *range_end) { + return 0; + } + } + /* we now have a valid range */ return 1; } -- 2.40.0