]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: fix key num handling in PGBackend::omap_get_keys().
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 14 May 2020 10:17:05 +0000 (12:17 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 14 May 2020 11:21:36 +0000 (13:21 +0200)
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>
src/crimson/osd/pg_backend.cc

index 0e67167d3ae14f8e1ac32d7728ca46a111641d3e..a5deceb08924ee788c43f751258599238f1f0fef 100644 (file)
@@ -528,12 +528,13 @@ seastar::future<> PGBackend::omap_get_keys(
       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);