The patch fixes running-out-of-buffer when decoding the data
from `omap_get_keys()`. In some cases, the declared number
of encoded keys is greater by 1 from the actual causing execption
`buffer::end_of_buffer` to be thrown at decoder.
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
bool truncated = false;
uint32_t num = 0;
for (auto& [key, val] : std::get<1>(ret)) {
- if (num++ >= max_return ||
+ if (num >= max_return ||
result.length() >= local_conf()->osd_max_omap_bytes_per_request) {
truncated = true;
break;
}
encode(key, result);
+ ++num;
}
encode(num, osd_op.outdata);
osd_op.outdata.claim_append(result);