From cdd722038441784fe1265f2b2fa2136bc0f88465 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 29 May 2026 20:08:22 +0200 Subject: [PATCH] block: qcow: Test rejection when backing file end exceeds cluster Cover the case where backing_file_offset lies inside the first cluster but backing_file_offset + backing_file_size crosses the cluster boundary, so the end of the name spills outside. Assisted-by: Claude:Opus-4.7 Signed-off-by: Anatol Belski --- block/src/formats/qcow/internal/mod.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/block/src/formats/qcow/internal/mod.rs b/block/src/formats/qcow/internal/mod.rs index e383e3d81..4afa17747 100644 --- a/block/src/formats/qcow/internal/mod.rs +++ b/block/src/formats/qcow/internal/mod.rs @@ -2737,6 +2737,16 @@ mod unit_tests { )); } + #[test] + fn backing_file_end_past_cluster() { + let cluster_size = 1u64 << DEFAULT_CLUSTER_BITS; + let err = read_header_with_patched_backing(cluster_size - 4, 16).unwrap_err(); + assert!(matches!( + err, + Error::BackingFileOutsideFirstCluster(_, _, _) + )); + } + /// Helper to create a test file with header extensions fn create_header_with_extension(ext_type: u32, ext_data: &[u8]) -> (RawFile, QcowHeader) { let header = QcowHeader::create_for_size_and_path(3, 0x10_0000, None)