couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Newson <rnew...@apache.org>
Subject Re: svn commit: r1168196 - in /couchdb/trunk: share/www/script/test/attachment_ranges.js src/couchdb/couch_httpd_db.erl
Date Sun, 11 Sep 2011 21:28:14 GMT
10 is an even number.

B.

On 11 September 2011 22:22, Paul Davis <paul.joseph.davis@gmail.com> wrote:
> "or that contains more than 10 byte ranges"
>
> That's an odd number. Is it specified in 2616 or something?
>
> On Sun, Sep 11, 2011 at 10:50 AM,  <rnewson@apache.org> wrote:
>> Author: rnewson
>> Date: Sun Sep 11 10:50:11 2011
>> New Revision: 1168196
>>
>> URL: http://svn.apache.org/viewvc?rev=1168196&view=rev
>> Log:
>> Reject large Range requests
>>
>> Return a 200 response for any Range request that covers the entire entity
>> or that contains more than 10 byte ranges.
>>
>> Modified:
>>    couchdb/trunk/share/www/script/test/attachment_ranges.js
>>    couchdb/trunk/src/couchdb/couch_httpd_db.erl
>>
>> Modified: couchdb/trunk/share/www/script/test/attachment_ranges.js
>> URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/attachment_ranges.js?rev=1168196&r1=1168195&r2=1168196&view=diff
>> ==============================================================================
>> --- couchdb/trunk/share/www/script/test/attachment_ranges.js (original)
>> +++ couchdb/trunk/share/www/script/test/attachment_ranges.js Sun Sep 11 10:50:11
2011
>> @@ -32,7 +32,7 @@ couchTests.attachment_ranges = function(
>>     T(save_response.ok);
>>
>>     // Fetching the whole entity is a 206.
>> -    var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt", {
>> +    var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt?bar=0", {
>>         headers: {
>>             "Range": "bytes=0-28"
>>         }
>> @@ -43,7 +43,7 @@ couchTests.attachment_ranges = function(
>>     TEquals("29", xhr.getResponseHeader("Content-Length"));
>>
>>     // Fetch the whole entity without an end offset is a 200.
>> -    var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt", {
>> +    var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt?bar=1", {
>>         headers: {
>>             "Range": "bytes=0-"
>>         }
>> @@ -53,6 +53,14 @@ couchTests.attachment_ranges = function(
>>     TEquals(null, xhr.getResponseHeader("Content-Range"));
>>     TEquals("29", xhr.getResponseHeader("Content-Length"));
>>
>> +    // Even if you ask multiple times.
>> +    var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt", {
>> +        headers: {
>> +            "Range": "bytes=0-,0-,0-"
>> +        }
>> +    });
>> +    TEquals(200, xhr.status, "multiple 0-'s");
>> +
>>     // Badly formed range header is a 200.
>>     var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt", {
>>         headers: {
>> @@ -131,4 +139,12 @@ couchTests.attachment_ranges = function(
>>     });
>>     TEquals(416, xhr.status, "fetch 300-310");
>>
>> +    // We ignore a Range header with too many ranges
>> +    var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc/foo.txt", {
>> +        headers: {
>> +            "Range": "bytes=0-1,0-1,0-1,0-1,0-1,0-1,0-1,0-1,0-1,0-1"
>> +        }
>> +    });
>> +    TEquals(200, xhr.status, "too many ranges");
>> +
>>  };
>>
>> Modified: couchdb/trunk/src/couchdb/couch_httpd_db.erl
>> URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_db.erl?rev=1168196&r1=1168195&r2=1168196&view=diff
>> ==============================================================================
>> --- couchdb/trunk/src/couchdb/couch_httpd_db.erl (original)
>> +++ couchdb/trunk/src/couchdb/couch_httpd_db.erl Sun Sep 11 10:50:11 2011
>> @@ -1029,7 +1029,7 @@ db_attachment_req(#httpd{method='GET',mo
>>                             {ok, Resp} = start_response_length(Req,
206, Headers1, To - From + 1),
>>                             couch_doc:range_att_foldl(Att, From, To
+ 1,
>>                                 fun(Seg, _) -> send(Resp, Seg)
end, {ok, Resp});
>> -                        {identity, Ranges} when is_list(Ranges) ->
>> +                        {identity, Ranges} when is_list(Ranges) andalso
length(Ranges) < 10 ->
>>                             send_ranges_multipart(Req, Type, Len, Att,
Ranges);
>>                         _ ->
>>                             Headers1 = Headers ++
>> @@ -1168,6 +1168,8 @@ parse_ranges(Ranges, Len) ->
>>
>>  parse_ranges([], _Len, Acc) ->
>>     lists:reverse(Acc);
>> +parse_ranges([{0, none}|_], _Len, _Acc) ->
>> +    undefined;
>>  parse_ranges([{From, To}|_], _Len, _Acc) when is_integer(From) andalso is_integer(To)
andalso To < From ->
>>     throw(requested_range_not_satisfiable);
>>  parse_ranges([{From, To}|Rest], Len, Acc) when is_integer(To) andalso To >=
Len ->
>>
>>
>>
>

Mime
View raw message