Infinite loop in get_sector_list with damaged .doc file #11
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hi there. I've come across a problematic .doc file that is causing an infinite loop in
get_sector_list
.It looks like the 2nd half of this .doc file is all null, so it is definitely damaged & invalid, but it would be nice to avoid the infinite loop.
In this specific case, the loop starts off with
j = 0
, which results in the nextj
value being read fromsectors[312]
, which is all null bytes due to the file corruption. This results in an infinite loop with j = 0.I noticed that the
chkd
array is not being checked. Addingif (chkd[j]) break;
at the top of the loop avoids the infinite loop and results in a later exception. Perhaps it's better to throw immediately inside the loop?For the test suite, can you share an example file?
That code block was spun out of the
make_sector_list
function, which used thechkd
variable to note if we've already built a chain that used the block in question andseen
to note if we've already seen a given block when we build up a specific chain. If you'd like to submit a PR, remove thechkd
references inmake_sector_list
and copy over theseen
lines.PS: In general, half the file being null isn't necessarily a problem (if those are treated as empty FAT sectors).