summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/couchdb/couch_file.erl25
-rwxr-xr-xtest/etap/031-doc-to-json.t3
-rwxr-xr-xtest/etap/050-stream.t6
-rwxr-xr-xtest/etap/080-config-get-set.t4
-rwxr-xr-xtest/etap/081-config-override.t4
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,