anchor.diff:  
   read_sub_chunks(Length, _MaxChunkSize, Fun, FunState) ->
       Fun({Length, read_chunk(Length)}, FunState).
  -    
  +
   %% @spec serve_file(Path, DocRoot) -> Response
   %% @doc Serve a file relative to DocRoot.
   serve_file(Path, DocRoot) ->
  
positive.code: recv_body(MaxBody) ->
      % we could use a sane constant for max chunk size
      Body = stream_body(?MAX_RECV_BODY, fun
          ({0, _ChunkedFooter}, {_LengthAcc, BinAcc}) -> 
              iolist_to_binary(lists:reverse(BinAcc));
          ({Length, Bin}, {LengthAcc, BinAcc}) ->
              NewLength = Length + LengthAcc,
              if NewLength > MaxBody ->
                  exit({body_too_large, chunked});
              true -> 
                  {NewLength, [Bin | BinAcc]}
              end
          end, {0, []}, MaxBody),
  
negative.code: 
  stream_body(MaxChunkSize, ChunkFun, FunState) ->
      stream_body(MaxChunkSize, ChunkFun, FunState, undefined).
  
  stream_body(MaxChunkSize, ChunkFun, FunState, MaxBodyLength) ->
      Expect = case get_header_value("expect") of
                   undefined ->
                       undefined;
                   Value when is_list(Value) ->
                       string:to_lower(Value)
               end,
      case Expect of
          "100-continue" ->
              start_raw_response({100, gb_trees:empty()});
          _Else ->
  