From d0700d5430af9c52f6844922b73d9448de7621fd Mon Sep 17 00:00:00 2001 From: rousskov <> Date: Thu, 12 Mar 1998 04:10:57 +0000 Subject: [PATCH] - Fixed Join bug (extracting specs from recepient Range rather than from the donor). --- src/HttpHdrRange.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/HttpHdrRange.cc b/src/HttpHdrRange.cc index 23ea2e30bd..87cd399e1a 100644 --- a/src/HttpHdrRange.cc +++ b/src/HttpHdrRange.cc @@ -1,6 +1,6 @@ /* - * $Id: HttpHdrRange.cc,v 1.3 1998/03/08 21:02:08 rousskov Exp $ + * $Id: HttpHdrRange.cc,v 1.4 1998/03/11 21:10:57 rousskov Exp $ * * DEBUG: section 64 HTTP Range Header * AUTHOR: Alex Rousskov @@ -89,11 +89,11 @@ httpHdrRangeSpecParseCreate(const char *field, int flen) return NULL; } else /* must have a '-' somewhere in _this_ field */ - if (!((p = strchr(field, '-')) && (p-field < flen))) { - debug(64, 2) ("ignoring invalid range-spec near: '%s'\n", field); + if (!((p = strchr(field, '-')) || (p-field >= flen))) { + debug(64, 2) ("ignoring invalid (missing '-') range-spec near: '%s'\n", field); return NULL; } else { - if (!httpHeaderParseSize(field+1, &spec.offset)) + if (!httpHeaderParseSize(field, &spec.offset)) return NULL; p++; /* do we have last-pos ? */ @@ -101,12 +101,12 @@ httpHdrRangeSpecParseCreate(const char *field, int flen) size_t last_pos; if (!httpHeaderParseSize(p, &last_pos)) return NULL; - spec.length = size_diff(last_pos, spec.offset); + spec.length = size_diff(last_pos+1, spec.offset); } } /* we managed to parse, check if the result makes sence */ if (known_spec(spec.length) && !spec.length) { - debug(64, 2) ("ignoring invalid range-spec near: '%s'\n", field); + debug(64, 2) ("ignoring invalid (zero length) range-spec near: '%s'\n", field); return NULL; } return httpHdrRangeSpecDup(&spec); @@ -193,6 +193,11 @@ httpHdrRangeParseInit(HttpHdrRange *range, const char *str) int ilen; assert(range && str); RangeParsedCount++; + debug(64, 8) ("parsing range field: '%s'\n", str); + /* check range type */ + if (strncasecmp(str, "bytes=", 6)) + return 0; + str += 6; /* iterate through comma separated list */ while (strListGetItem(str, ',', &item, &ilen, &pos)) { HttpHdrRangeSpec *spec = httpHdrRangeSpecParseCreate(item, ilen); @@ -203,6 +208,7 @@ httpHdrRangeParseInit(HttpHdrRange *range, const char *str) if (spec) stackPush(&range->specs, spec); } + debug(68, 8) ("parsed range range count: %d\n", range->specs.count); return range->specs.count; } @@ -250,7 +256,7 @@ httpHdrRangeJoinWith(HttpHdrRange * range, const HttpHdrRange * new_range) HttpHdrRangeSpec spec; assert(range && new_range); stackPrePush(&range->specs, new_range->specs.count); - while (httpHdrRangeGetSpec(range, &spec, &pos)) + while (httpHdrRangeGetSpec(new_range, &spec, &pos)) stackPush(&range->specs, httpHdrRangeSpecDup(&spec)); } -- 2.47.3