diff options
author | megamage <none@none> | 2009-03-09 17:46:50 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-09 17:46:50 -0600 |
commit | 209f24d7e09785878abd8e3b94be4e2dff07b0f7 (patch) | |
tree | a48fa1ae01ba539b9cda4f8f6f69a03a278625d8 | |
parent | 0a6ef039b2586707c0fcc6a6cf5a601ad1c341d9 (diff) |
[7421] Check fread result at DBC file loading. Author: VladimirMangos
This is more safe in general and prevent "warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result"
--HG--
branch : trunk
-rw-r--r-- | src/shared/Database/dbcfile.cpp | 33 | ||||
-rw-r--r-- | src/shared/revision_nr.h | 2 |
2 files changed, 25 insertions, 10 deletions
diff --git a/src/shared/Database/dbcfile.cpp b/src/shared/Database/dbcfile.cpp index c40c8b223e1..1de121bb17d 100644 --- a/src/shared/Database/dbcfile.cpp +++ b/src/shared/Database/dbcfile.cpp @@ -39,23 +39,35 @@ bool DBCFile::Load(const char *filename, const char *fmt) delete [] data; data=NULL; } + FILE * f=fopen(filename,"rb"); if(!f)return false; - fread(&header,4,1,f); // Number of records + if(fread(&header,4,1,f)!=1) // Number of records + return false; + EndianConvert(header); if(header!=0x43424457) - { - //printf("not dbc file"); return false; //'WDBC' - } - fread(&recordCount,4,1,f); // Number of records + + if(fread(&recordCount,4,1,f)!=1) // Number of records + return false; + EndianConvert(recordCount); - fread(&fieldCount,4,1,f); // Number of fields + + if(fread(&fieldCount,4,1,f)!=1) // Number of fields + return false; + EndianConvert(fieldCount); - fread(&recordSize,4,1,f); // Size of a record + + if(fread(&recordSize,4,1,f)!=1) // Size of a record + return false; + EndianConvert(recordSize); - fread(&stringSize,4,1,f); // String size + + if(fread(&stringSize,4,1,f)!=1) // String size + return false; + EndianConvert(stringSize); fieldsOffset = new uint32[fieldCount]; @@ -71,7 +83,10 @@ bool DBCFile::Load(const char *filename, const char *fmt) data = new unsigned char[recordSize*recordCount+stringSize]; stringTable = data + recordSize*recordCount; - fread(data,recordSize*recordCount+stringSize,1,f); + + if(fread(data,recordSize*recordCount+stringSize,1,f)!=1) + return false; + fclose(f); return true; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8c833b0df4a..6af72ad25e0 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7420" + #define REVISION_NR "7421" #endif // __REVISION_NR_H__ |