diff options
author | Christophe Grenier <[email protected]> | 2019-10-12 12:52:54 +0200 |
---|---|---|
committer | Christophe Grenier <[email protected]> | 2019-10-12 12:52:54 +0200 |
commit | bd98447c9119d91f9e4745893609fd71859478aa (patch) | |
tree | 35256aaa5e7342977316f2c895e319699cb93ebb /src | |
parent | 6633316f9b3508080f2d0a358219adc10c058f08 (diff) |
file_doc.c: modify the "for" loops in ole_get_file_extension() and file_check_doc_aux()
Diffstat (limited to 'src')
-rw-r--r-- | src/file_doc.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/file_doc.c b/src/file_doc.c index f4281013..795ad9cb 100644 --- a/src/file_doc.c +++ b/src/file_doc.c @@ -137,26 +137,31 @@ static const char *ole_get_file_extension(const unsigned char *buffer, const uns return NULL; { unsigned int sid; - const struct OLE_DIR *dir_entry; + const struct OLE_DIR *dir_entries=(const struct OLE_DIR *)&buffer[offset_root_dir]; const char *ext=NULL; int is_db=0; - for(sid=0,dir_entry=(const struct OLE_DIR *)&buffer[offset_root_dir]; - sid<512/sizeof(struct OLE_DIR) && dir_entry->type!=NO_ENTRY; - sid++,dir_entry++) + for(sid=0; + sid<512/sizeof(struct OLE_DIR); + sid++) { + const struct OLE_DIR *dir_entry=&dir_entries[sid]; + if(dir_entry->type==NO_ENTRY) + break; #ifdef DEBUG_OLE - unsigned int j; - for(j=0;j<64 && j<le16(dir_entry->namsiz) && dir_entry->name[j]!='\0';j+=2) { - log_info("%c",dir_entry->name[j]); + unsigned int j; + for(j=0;j<64 && j<le16(dir_entry->namsiz) && dir_entry->name[j]!='\0';j+=2) + { + log_info("%c",dir_entry->name[j]); + } + for(;j<64;j+=2) + log_info(" "); + log_info(" namsiz=%u type %u", le16(dir_entry->namsiz), dir_entry->type); + log_info(" Flags=%s", (dir_entry->bflags==0?"Red ":"Black")); + log_info(" sector %u (%u bytes)\n", + (unsigned int)le32(dir_entry->start_block), + (unsigned int)le32(dir_entry->size)); } - for(;j<64;j+=2) - log_info(" "); - log_info(" namsiz=%u type %u", le16(dir_entry->namsiz), dir_entry->type); - log_info(" Flags=%s", (dir_entry->bflags==0?"Red ":"Black")); - log_info(" sector %u (%u bytes)\n", - (unsigned int)le32(dir_entry->start_block), - (unsigned int)le32(dir_entry->size)); #endif if(sid==1 && memcmp(&dir_entry->name, "1\0\0\0", 4)==0) is_db++; @@ -378,11 +383,14 @@ void file_check_doc_aux(file_recovery_t *file_recovery, const uint64_t offset) { unsigned int sid; struct OLE_DIR *dir_entry; - for(sid=0, dir_entry=dir_entries; - sid<(1<<uSectorShift)/sizeof(struct OLE_DIR) && dir_entry->type!=NO_ENTRY; - sid++,dir_entry++) + for(sid=0; + sid<(1<<uSectorShift)/sizeof(struct OLE_DIR); + sid++) { - if(offset + + const struct OLE_DIR *dir_entry=&dir_entries[sid]; + if(dir_entry->type==NO_ENTRY) + break; + if(offset + le32(dir_entry->start_block) > 0 && le32(dir_entry->size) > 0 && ((le32(dir_entry->size) >= le32(header->miniSectorCutoff) && le32(dir_entry->start_block) > fat_entries) || |