From: David Zafman Date: Thu, 18 Dec 2014 00:59:09 +0000 (-0800) Subject: osd: build_push_op() handle short reads so recipient doesn't crash X-Git-Tag: v0.80.10~69^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9235d781bf860c1ecef5af600431f1619b56fbc1;p=ceph.git osd: build_push_op() handle short reads so recipient doesn't crash Fixes: #8121 Signed-off-by: David Zafman (cherry picked from commit b9a04846d18e1c6621d7f2794ec1fae02875bed2) --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index f1911c13f947..fbb1f10dab70 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -8616,8 +8616,19 @@ int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info, dout(10) << " extent " << p.get_start() << "~" << p.get_len() << " is actually " << p.get_start() << "~" << bit.length() << dendl; - p.set_len(bit.length()); + interval_set::iterator save = p++; + if (bit.length() == 0) + out_op->data_included.erase(save); //Remove this empty interval + else + save.set_len(bit.length()); + // Remove any other intervals present + while (p != out_op->data_included.end()) { + interval_set::iterator save = p++; + out_op->data_included.erase(save); + } new_progress.data_complete = true; + out_op->data.claim_append(bit); + break; } out_op->data.claim_append(bit); }