]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: NObjectIteratorImpl takes care about NUL in obj name.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 4 Feb 2021 17:35:24 +0000 (17:35 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 5 Feb 2021 19:32:37 +0000 (19:32 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit 22bb1498c93b1e1419920fe928e91885504f1f16)

src/librados/librados_cxx.cc

index bc3f65f2842f4c9d7c9c4974383908fe76c0b9be..22eb81b4bbaaca7d8f25ef3bd69fbb2bd80376c6 100644 (file)
@@ -755,22 +755,24 @@ void librados::NObjectIteratorImpl::set_filter(const bufferlist &bl)
 void librados::NObjectIteratorImpl::get_next()
 {
   const char *entry, *key, *nspace;
+  size_t entry_size, key_size, nspace_size;
   if (ctx->nlc->at_end())
     return;
-  int ret = rados_nobjects_list_next(ctx.get(), &entry, &key, &nspace);
+  int ret = rados_nobjects_list_next2(ctx.get(), &entry, &key, &nspace,
+                                      &entry_size, &key_size, &nspace_size);
   if (ret == -ENOENT) {
     return;
   }
   else if (ret) {
     throw std::system_error(-ret, std::system_category(),
-                            "rados_nobjects_list_next");
+                            "rados_nobjects_list_next2");
   }
 
   if (cur_obj.impl == NULL)
     cur_obj.impl = new ListObjectImpl();
-  cur_obj.impl->nspace = nspace;
-  cur_obj.impl->oid = entry;
-  cur_obj.impl->locator = key ? key : string();
+  cur_obj.impl->nspace = string{nspace, nspace_size};
+  cur_obj.impl->oid = string{entry, entry_size};
+  cur_obj.impl->locator = key ? string(key, key_size) : string();
 }
 
 uint32_t librados::NObjectIteratorImpl::get_pg_hash_position() const