From 38efda2a509ea7695cf9f4bb3d872213b650712f Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 8 Oct 2025 19:33:36 +0100 Subject: [PATCH] Add error handling for fseek in aaruf_read_sector to improve robustness --- src/read.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/read.c b/src/read.c index eff11fb..0f34d46 100644 --- a/src/read.c +++ b/src/read.c @@ -357,7 +357,15 @@ int32_t aaruf_read_sector(void *context, const uint64_t sector_address, bool neg } TRACE("Reading block header"); - fseek(ctx->imageStream, block_offset, SEEK_SET); + if(fseek(ctx->imageStream, block_offset, SEEK_SET) != 0) + { + FATAL("Could not seek to block header"); + free(block_header); + + TRACE("Exiting aaruf_read_sector() = AARUF_ERROR_CANNOT_READ_HEADER"); + return AARUF_ERROR_CANNOT_READ_HEADER; + } + read_bytes = fread(block_header, 1, sizeof(BlockHeader), ctx->imageStream); if(read_bytes != sizeof(BlockHeader)) @@ -371,8 +379,13 @@ int32_t aaruf_read_sector(void *context, const uint64_t sector_address, bool neg TRACE("Adding block header to cache"); add_to_cache_uint64(&ctx->blockHeaderCache, block_offset, block_header); } - else - fseek(ctx->imageStream, block_offset + sizeof(BlockHeader), SEEK_SET); // Advance as if reading the header + else if(fseek(ctx->imageStream, block_offset + sizeof(BlockHeader), SEEK_SET) != 0) + { + FATAL("Could not seek past cached block header"); + + TRACE("Exiting aaruf_read_sector() = AARUF_ERROR_CANNOT_READ_HEADER"); + return AARUF_ERROR_CANNOT_READ_HEADER; + } if(data == NULL || *length < block_header->sectorSize) {