diff --git a/src/peer_digest.cc b/src/peer_digest.cc index 1b81fe7..25a18e0 100644 --- a/src/peer_digest.cc +++ b/src/peer_digest.cc @@ -469,6 +469,15 @@ peerDigestHandleReply(void *data, StoreIOBuffer receivedData) } while (cbdataReferenceValid(fetch) && prevstate != fetch->state && fetch->bufofs > 0); + // Check for EOF here, thus giving the parser one extra run. We could avoid this overhead by + // checking at the beginning of this function. However, in this case, we would have to require + // that the parser does not regard EOF as a special condition (it is true now but may change + // in the future). + if (!receivedData.length) { // EOF + peerDigestFetchAbort(fetch, fetch->buf, "premature end of digest reply"); + return; + } + /* Update the copy offset */ fetch->offset += receivedData.length;