diff options
-rw-r--r-- | src/couchdb/couch_file.erl | 25 | ||||
-rwxr-xr-x | test/etap/031-doc-to-json.t | 3 | ||||
-rwxr-xr-x | test/etap/050-stream.t | 6 | ||||
-rwxr-xr-x | test/etap/080-config-get-set.t | 4 | ||||
-rwxr-xr-x | test/etap/081-config-override.t | 4 |
5 files changed, 20 insertions, 22 deletions
diff --git a/src/couchdb/couch_file.erl b/src/couchdb/couch_file.erl index e8b37aa5..2dfc5403 100644 --- a/src/couchdb/couch_file.erl +++ b/src/couchdb/couch_file.erl @@ -116,26 +116,23 @@ pread_binary(Fd, Pos) -> {ok, L} = pread_iolist(Fd, Pos), {ok, iolist_to_binary(L)}. + pread_iolist(Fd, Pos) -> - {ok, LenIolist, NextPos} =read_raw_iolist(Fd, Pos, 20), + {ok, LenIolist, NextPos} = read_raw_iolist(Fd, Pos, 4), case iolist_to_binary(LenIolist) of - <<1:1/integer,Len:31/integer,Md5/binary>> -> - {ok, Iolist, _} = read_raw_iolist(Fd, NextPos, Len), - case erlang:md5(Iolist) of + <<1:1/integer,Len:31/integer>> -> + {ok, Md5List, ValPos} = read_raw_iolist(Fd, NextPos, 16), + Md5 = iolist_to_binary(Md5List), + {ok, IoList, _} = read_raw_iolist(Fd,ValPos,Len), + case erlang:md5(IoList) of Md5 -> ok; _ -> throw(file_corruption) end, - {ok, Iolist}; - <<0:1/integer,Len:31/integer,First16Bytes/binary>> -> - if Len =< 16 -> - <<Final:Len/binary,_/binary>> = First16Bytes, - {ok, Final}; - true -> - {ok, Iolist, _} = read_raw_iolist(Fd, NextPos, Len - 16), - {ok, [First16Bytes, Iolist]} - end + {ok, IoList}; + <<0:1/integer,Len:31/integer>> -> + {ok, Iolist, _} = read_raw_iolist(Fd, NextPos, Len), + {ok, Iolist} end. - read_raw_iolist(Fd, Pos, Len) -> diff --git a/test/etap/031-doc-to-json.t b/test/etap/031-doc-to-json.t index 7d2ca065..86b3920e 100755 --- a/test/etap/031-doc-to-json.t +++ b/test/etap/031-doc-to-json.t @@ -120,7 +120,8 @@ test_to_json_success() -> #att{ name = <<"fast.json">>, type = <<"json/ftw">>, - data = <<"{\"so\": \"there!\"}">> + data = <<"{\"so\": \"there!\"}">>, + len = 16 } ]}, {[ diff --git a/test/etap/050-stream.t b/test/etap/050-stream.t index aa4c839a..7ed64608 100755 --- a/test/etap/050-stream.t +++ b/test/etap/050-stream.t @@ -42,7 +42,7 @@ test() -> etap:is(ok, couch_stream:write(Stream, <<>>), "Writing an empty binary does nothing."), - {Ptrs, Length} = couch_stream:close(Stream), + {Ptrs, Length, _} = couch_stream:close(Stream), etap:is(Ptrs, [0], "Close returns the file pointers."), etap:is(Length, 8, "Close also returns the number of bytes written."), etap:is(<<"foodfoob">>, read_all(Fd, Ptrs), "Returned pointers are valid."), @@ -58,7 +58,7 @@ test() -> etap:is(ok, couch_stream:write(Stream2, ZeroBits), "Successfully wrote 80 0 bits."), - {Ptrs2, Length2} = couch_stream:close(Stream2), + {Ptrs2, Length2, _} = couch_stream:close(Stream2), etap:is(Ptrs2, [ExpPtr], "Closing stream returns the file pointers."), etap:is(Length2, 20, "Length written is 160 bytes."), @@ -73,7 +73,7 @@ test() -> couch_stream:write(Stream3, Data), [Data | Acc] end, [], lists:seq(1, 1024)), - {Ptrs3, Length3} = couch_stream:close(Stream3), + {Ptrs3, Length3, _} = couch_stream:close(Stream3), % 4095 because of 5 * 4096 rem 5 (last write before exceeding threshold) % + 5 puts us over the threshold diff --git a/test/etap/080-config-get-set.t b/test/etap/080-config-get-set.t index 9507cf05..f97ad5e2 100755 --- a/test/etap/080-config-get-set.t +++ b/test/etap/080-config-get-set.t @@ -105,7 +105,7 @@ test() -> ok = couch_config:delete("new_section", "bizzle", false), etap:is( couch_config:get("new_section", "bizzle"), - "", + undefined, "Deleting sets the value to \"\"" ), @@ -121,7 +121,7 @@ test() -> ok = couch_config:delete(<<"foo">>, <<"bar">>, false), etap:is( couch_config:get(<<"foo">>, <<"bar">>), - "", + undefined, "Deleting with binary section/key pairs sets the value to \"\"" ), diff --git a/test/etap/081-config-override.t b/test/etap/081-config-override.t index 7813702c..12d41b8a 100755 --- a/test/etap/081-config-override.t +++ b/test/etap/081-config-override.t @@ -167,7 +167,7 @@ test() -> etap:is( couch_config:get("httpd", "bind_address"), - "", + undefined, "{httpd, bind_address} was actually deleted." ) end, @@ -202,7 +202,7 @@ test() -> etap:is( couch_config:get("httpd", "bind_address"), - "", + undefined, "{httpd, bind_address} is still \"\" after reopening." ) end, |