anchor.diff:  
   
   %% @private
  -get_body_length(Key, #?METADATA{dsize = ObjectSize}, Range) ->
  +fix_range_end(Range, ObjectSize) ->
  +    fix_range_end_1(Range, ObjectSize, []).
  +
  +fix_range_end_1([], _, Acc) ->
  +    lists:reverse(Acc);
  +fix_range_end_1([{Start, End}|Rest], ObjectSize, Acc) when is_number(End),
  +                                                           End >= ObjectSize ->
  +    fix_range_end_1(Rest, ObjectSize, [{Start, ObjectSize - 1} | Acc]);
  +fix_range_end_1([Head|Rest], ObjectSize, Acc) ->
  +    fix_range_end_1(Rest, ObjectSize, [Head|Acc]).
  +
  +
  +%% @private
  +get_body_length(ObjectSize, Range) ->
       get_body_length_1(Range, ObjectSize, 0).
   
   %% @private
  
positive.code:                     Req2 = cowboy_req:set_resp_body_fun(
                               Length,
                               fun(Socket, Transport) ->
                                       get_range_object_1(Req, BucketName, Key, Range, undefined,
                                                          #transport_record{transport = Transport,
                                                                            socket = Socket,
                                                                            sending_chunked_obj_len = SendChunkLen})
  
negative.code:                     ?reply_partial_content(Headers2, Req2);
                  {error, bad_range} ->
                      ?access_log_get(BucketName, Key, 0, ?HTTP_ST_BAD_RANGE, BeginTime),
                      ?reply_bad_range([?SERVER_HEADER], Key, <<>>, Req)
              end;
          {ok, #?METADATA{del = 1}} ->
              ?access_log_get(BucketName, Key, 0, ?HTTP_ST_NOT_FOUND, BeginTime),
  