This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch remove-md5-more in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 2663bdc6bf3d7c512d6296026c11ef9d9f3c9465 Author: Robert Newson <[email protected]> AuthorDate: Sat May 6 14:28:26 2023 +0100 consolidate checksum verification --- src/couch/src/couch_file.erl | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/couch/src/couch_file.erl b/src/couch/src/couch_file.erl index f52417666..315f3a795 100644 --- a/src/couch/src/couch_file.erl +++ b/src/couch/src/couch_file.erl @@ -676,13 +676,7 @@ load_header(Fd, Pos, HeaderLen, RestBlock) -> end, <<Checksum:16/binary, HeaderBin/binary>> = iolist_to_binary(remove_block_prefixes(?PREFIX_SIZE, RawBin)), - case exxhash:xxhash128(HeaderBin) of - Checksum -> - ok; - <<_/binary>> -> - couch_stats:increment_counter([couch_file, old_checksums]), - Checksum = couch_hash:md5_hash(HeaderBin) - end, + true = verify_checksum(HeaderBin, Checksum), {ok, HeaderBin}. %% Read multiple block locations using a single file:pread/2. @@ -861,16 +855,25 @@ monitored_by_pids() -> verify_checksum(_Fd, _Pos, IoList, <<>>) -> IoList; verify_checksum(Fd, Pos, IoList, Checksum) -> - case exxhash:xxhash128(iolist_to_binary(IoList)) of - Checksum -> + case verify_checksum(IoList, Checksum) of + true -> IoList; - <<_/binary>> -> - case couch_hash:md5_hash(IoList) of - Checksum -> + false -> + report_checksum_error(Fd, Pos) + end. + +verify_checksum(Data, ExpectedChecksum) -> + Bin = iolist_to_binary(Data), + case ExpectedChecksum == exxhash:xxhash128(Bin) of + true -> + true; + false -> + case ExpectedChecksum == couch_hash:md5_hash(Data) of + true -> couch_stats:increment_counter([couch_file, old_checksums]), - IoList; - _ -> - report_checksum_error(Fd, Pos) + true; + false -> + false end end.
