47 lines
1.9 KiB
Diff
47 lines
1.9 KiB
Diff
From b6c01a2031944125b8cc6974f598c2cd66f0cee4 Mon Sep 17 00:00:00 2001
|
|
From: Alex Rousskov <rousskov@measurement-factory.com>
|
|
Date: Mon, 20 Nov 2023 23:05:00 +0000
|
|
Subject: [PATCH] Bug 5318: peer_digest.cc:399: "fetch->pd &&
|
|
receivedData.data" (#1584)
|
|
|
|
Recent commit 122a6e3 removed HTTP response headers from store_client
|
|
responses. That removal created the possibility of an empty
|
|
StoreIOBuffer at the beginning of the feeding sequence. Pending Bug 5317
|
|
fix will make such buffers even more frequent. Existing store_client
|
|
recipients have varying requirements with regard to empty response
|
|
buffers, as documented in store_client::finishCallback(). We missed this
|
|
requirement conflict in Cache Digest code. This fix adjusts Cache
|
|
Digests code to be compatible with empty StoreIOBuffer representation in
|
|
current store_client code.
|
|
---
|
|
src/peer_digest.cc | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/peer_digest.cc b/src/peer_digest.cc
|
|
index e29614afd2c..7d290cc9013 100644
|
|
--- a/src/peer_digest.cc
|
|
+++ b/src/peer_digest.cc
|
|
@@ -349,11 +349,11 @@ peerDigestHandleReply(void *data, StoreIOBuffer receivedData)
|
|
return;
|
|
}
|
|
|
|
- assert(fetch->pd && receivedData.data);
|
|
+ assert(fetch->pd);
|
|
/* The existing code assumes that the received pointer is
|
|
* where we asked the data to be put
|
|
*/
|
|
- assert(fetch->buf + fetch->bufofs == receivedData.data);
|
|
+ assert(!receivedData.data || fetch->buf + fetch->bufofs == receivedData.data);
|
|
|
|
/* Update the buffer size */
|
|
fetch->bufofs += receivedData.length;
|
|
@@ -635,7 +635,7 @@ peerDigestFetchedEnough(DigestFetchState * fetch, char *buf, ssize_t size, const
|
|
}
|
|
|
|
/* continue checking (maybe-successful eof case) */
|
|
- if (!reason && !size) {
|
|
+ if (!reason && !size && fetch->state != DIGEST_READ_REPLY) {
|
|
if (!pd->cd)
|
|
reason = "null digest?!";
|
|
else if (fetch->mask_offset != pd->cd->mask_size)
|