Enforce content file CRC as terminal by rejecting trailing data and terminating parse loop

This commit is contained in:
Andrea Mazzoleni 2026-08-17 17:23:47 +02:00
parent 30aa997947
commit c0731582a5

View file

@ -3422,6 +3422,20 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
}
crc_checked = 1;
/* crc must be the end of the content file */
c = sgetc(f);
if (c != EOF) {
/* LCOV_EXCL_START */
log_fatal(ECONTENT, "Unexpected data after CRC in content file '%s' at offset %" PRIi64 "\n", path, stell(f));
log_fatal(ECONTENT, "The content file '%s' is damaged or corrupted!\n", path);
log_fatal(ECONTENT, "To recover, rename or delete it and rerun the command.\n");
log_fatal(ECONTENT, "SnapRAID will automatically fall back to the next healthy copy.\n");
exit(EXIT_FAILURE);
/* LCOV_EXCL_STOP */
}
break;
} else {
/* LCOV_EXCL_START */
decoding_error(path, f);