mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 19:24:40 +00:00
Skip LZMA properties when verifying compressed blocks.
This commit is contained in:
67
src/verify.c
67
src/verify.c
@@ -225,7 +225,7 @@ AARU_EXPORT int32_t AARU_CALL aaruf_verify_image(void *context)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
uint64_t crc_length;
|
||||||
const unsigned int entry_count = utarray_len(index_entries);
|
const unsigned int entry_count = utarray_len(index_entries);
|
||||||
|
|
||||||
for(unsigned int i = 0; i < entry_count; i++)
|
for(unsigned int i = 0; i < entry_count; i++)
|
||||||
@@ -259,8 +259,24 @@ AARU_EXPORT int32_t AARU_CALL aaruf_verify_image(void *context)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = update_crc64_from_stream(ctx->imageStream, block_header.cmpLength, buffer, VERIFY_SIZE,
|
// For LZMA compression, skip the 5-byte properties header
|
||||||
crc64_context, "data block");
|
crc_length = block_header.cmpLength;
|
||||||
|
if(block_header.compression == Lzma || block_header.compression == LzmaClauniaSubchannelTransform)
|
||||||
|
{
|
||||||
|
// Skip LZMA properties
|
||||||
|
uint8_t props[LZMA_PROPERTIES_LENGTH];
|
||||||
|
size_t read_props = fread(props, 1, LZMA_PROPERTIES_LENGTH, ctx->imageStream);
|
||||||
|
if(read_props != LZMA_PROPERTIES_LENGTH)
|
||||||
|
{
|
||||||
|
FATAL("Could not read LZMA properties");
|
||||||
|
status = AARUF_ERROR_CANNOT_READ_BLOCK;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
crc_length -= LZMA_PROPERTIES_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = update_crc64_from_stream(ctx->imageStream, crc_length, buffer, VERIFY_SIZE, crc64_context,
|
||||||
|
"data block");
|
||||||
if(status != AARUF_STATUS_OK) goto cleanup;
|
if(status != AARUF_STATUS_OK) goto cleanup;
|
||||||
|
|
||||||
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
||||||
@@ -299,8 +315,24 @@ AARU_EXPORT int32_t AARU_CALL aaruf_verify_image(void *context)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = update_crc64_from_stream(ctx->imageStream, ddt_header.cmpLength, buffer, VERIFY_SIZE,
|
// For LZMA compression, skip the 5-byte properties header
|
||||||
crc64_context, "DDT block");
|
crc_length = ddt_header.cmpLength;
|
||||||
|
if(ddt_header.compression == Lzma || ddt_header.compression == LzmaClauniaSubchannelTransform)
|
||||||
|
{
|
||||||
|
// Skip LZMA properties
|
||||||
|
uint8_t props[LZMA_PROPERTIES_LENGTH];
|
||||||
|
size_t read_props = fread(props, 1, LZMA_PROPERTIES_LENGTH, ctx->imageStream);
|
||||||
|
if(read_props != LZMA_PROPERTIES_LENGTH)
|
||||||
|
{
|
||||||
|
FATAL("Could not read LZMA properties");
|
||||||
|
status = AARUF_ERROR_CANNOT_READ_BLOCK;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
crc_length -= LZMA_PROPERTIES_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = update_crc64_from_stream(ctx->imageStream, crc_length, buffer, VERIFY_SIZE, crc64_context,
|
||||||
|
"data block");
|
||||||
if(status != AARUF_STATUS_OK) goto cleanup;
|
if(status != AARUF_STATUS_OK) goto cleanup;
|
||||||
|
|
||||||
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
||||||
@@ -339,8 +371,24 @@ AARU_EXPORT int32_t AARU_CALL aaruf_verify_image(void *context)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = update_crc64_from_stream(ctx->imageStream, ddt2_header.cmpLength, buffer, VERIFY_SIZE,
|
// For LZMA compression, skip the 5-byte properties header
|
||||||
crc64_context, "DDT2 block");
|
crc_length = ddt2_header.cmpLength;
|
||||||
|
if(ddt2_header.compression == Lzma || ddt2_header.compression == LzmaClauniaSubchannelTransform)
|
||||||
|
{
|
||||||
|
// Skip LZMA properties
|
||||||
|
uint8_t props[LZMA_PROPERTIES_LENGTH];
|
||||||
|
size_t read_props = fread(props, 1, LZMA_PROPERTIES_LENGTH, ctx->imageStream);
|
||||||
|
if(read_props != LZMA_PROPERTIES_LENGTH)
|
||||||
|
{
|
||||||
|
FATAL("Could not read LZMA properties");
|
||||||
|
status = AARUF_ERROR_CANNOT_READ_BLOCK;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
crc_length -= LZMA_PROPERTIES_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = update_crc64_from_stream(ctx->imageStream, crc_length, buffer, VERIFY_SIZE, crc64_context,
|
||||||
|
"data block");
|
||||||
if(status != AARUF_STATUS_OK) goto cleanup;
|
if(status != AARUF_STATUS_OK) goto cleanup;
|
||||||
|
|
||||||
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
||||||
@@ -386,8 +434,8 @@ AARU_EXPORT int32_t AARU_CALL aaruf_verify_image(void *context)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = update_crc64_from_stream(ctx->imageStream, tracks_bytes, buffer, VERIFY_SIZE,
|
status = update_crc64_from_stream(ctx->imageStream, tracks_bytes, buffer, VERIFY_SIZE, crc64_context,
|
||||||
crc64_context, "tracks block");
|
"tracks block");
|
||||||
if(status != AARUF_STATUS_OK) goto cleanup;
|
if(status != AARUF_STATUS_OK) goto cleanup;
|
||||||
|
|
||||||
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
if(aaruf_crc64_final(crc64_context, &crc64) != 0)
|
||||||
@@ -415,7 +463,6 @@ AARU_EXPORT int32_t AARU_CALL aaruf_verify_image(void *context)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
status = AARUF_STATUS_OK;
|
status = AARUF_STATUS_OK;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user