auto& extent = (*extents)[i];
         auto& aligned_extent = aligned_extents[i];
         if (aligned_extent.extent_map.empty()) {
-          aligned_extent.bl.splice(extent.offset - aligned_extent.offset,
-                                   extent.length, &extent.bl);
+          uint64_t cut_offset = extent.offset - aligned_extent.offset;
+          int64_t padding_count =
+                  cut_offset + extent.length - aligned_extent.bl.length();
+          if (padding_count > 0) {
+            aligned_extent.bl.append_zero(padding_count);
+          }
+          aligned_extent.bl.splice(cut_offset, extent.length, &extent.bl);
         } else {
           for (auto [off, len]: aligned_extent.extent_map) {
             ceph::bufferlist tmp;