X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_headers_api.c;h=dbbf999040157b17fef8152baedd7f38ea77c0b1;hp=99eb1880ef41133e363b2ba453a86f2f34fead3c;hb=64b997ebfc4eab485a8ea04c633e3a5b6c32a1ff;hpb=b23b4edaebd71ff76579b97f3ee353f43e83bd25 diff --git a/http_headers_api.c b/http_headers_api.c index 99eb188..dbbf999 100644 --- a/http_headers_api.c +++ b/http_headers_api.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2006, Michael Wallner | + | Copyright (c) 2004-2007, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -156,7 +156,7 @@ PHP_HTTP_API HashTable *_http_negotiate_q(const char *header, HashTable *support while (*++ptr && !HTTP_IS_CTYPE(digit, *ptr) && '.' != *ptr); - quality = atof(ptr); + quality = zend_strtod(ptr, NULL); identifier = estrndup(Z_STRVAL_PP(entry), ident_len = separator - Z_STRVAL_PP(entry)); } else { quality = 1000.0 - i++; @@ -201,7 +201,7 @@ PHP_HTTP_API http_range_status _http_get_request_ranges(HashTable *ranges, size_ long begin = -1, end = -1, *ptr; if ( !(zrange = http_get_server_var("HTTP_RANGE", 1)) || - Z_STRLEN_P(zrange) < lenof("bytes=") || strncmp(Z_STRVAL_P(zrange), "bytes=", lenof("bytes="))) { + (size_t) Z_STRLEN_P(zrange) < lenof("bytes=") || strncmp(Z_STRVAL_P(zrange), "bytes=", lenof("bytes="))) { return RANGE_NO; } range = Z_STRVAL_P(zrange) + lenof("bytes="); @@ -253,13 +253,21 @@ PHP_HTTP_API http_range_status _http_get_request_ranges(HashTable *ranges, size_ switch (begin) { /* "0-12345" */ case -10: - /* "0-" */ - if (end == -1) { - return RANGE_NO; - } - /* "0-0" or overflow */ - if (end == -10 || length <= (size_t) end) { - return RANGE_ERR; + switch (end) { + /* "0-" */ + case -1: + return RANGE_NO; + + /* "0-0" */ + case -10: + end = 0; + break; + + default: + if (length <= (size_t) end) { + return RANGE_ERR; + } + break; } begin = 0; break;