]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
neorados: Do not try to decode an empty response in notify
authorAdam C. Emerson <aemerson@redhat.com>
Wed, 26 Nov 2025 03:15:13 +0000 (22:15 -0500)
committerAdam C. Emerson <aemerson@redhat.com>
Mon, 16 Mar 2026 15:55:50 +0000 (11:55 -0400)
The response can be empty on some errors. Attempting to decode an
empty one loses the error value on valid errors. Also swallow any
decode errors.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/neorados/RADOS.cc

index 69d5bc4cd256d25ccd8f54eef9bbaead51242d55..3cd8fcc50b09d218e1c10c7cb01c331e80fa9f2d 100644 (file)
@@ -1721,11 +1721,16 @@ struct NotifyHandler : std::enable_shared_from_this<NotifyHandler> {
       ceph_assert(c);
       bc::flat_map<std::pair<uint64_t, uint64_t>, buffer::list> reply_map;
       bc::flat_set<std::pair<uint64_t, uint64_t>> missed_set;
-      auto p = rbl.cbegin();
-      decode(reply_map, p);
-      decode(missed_set, p);
-      asio::dispatch(asio::append(std::move(c), res, std::move(reply_map),
-                                 std::move(missed_set)));
+      if (rbl.length() > 0) try {
+          auto p = rbl.cbegin();
+          decode(reply_map, p);
+          decode(missed_set, p);
+      } catch (const std::exception&) {
+        // Swallowing the decode error.
+      }
+      asio::dispatch(
+          asio::append(
+              std::move(c), res, std::move(reply_map), std::move(missed_set)));
     }
   }
 };