From a2a8039e69f5a697794b15dfa81220e82f9d31e8 Mon Sep 17 00:00:00 2001 From: Zeex Date: Sun, 5 Apr 2015 01:33:06 +0600 Subject: [PATCH] Fix debug header size miscalculation --- source/amx/amxdbg.c | 4 +++- source/compiler/sc6.c | 11 +++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/source/amx/amxdbg.c b/source/amx/amxdbg.c index 224d1c7..d7b8ff9 100644 --- a/source/amx/amxdbg.c +++ b/source/amx/amxdbg.c @@ -54,6 +54,7 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp) { AMX_HEADER amxhdr; AMX_DBG_HDR dbghdr; + size_t size; unsigned char *ptr; int index, dim; AMX_DBG_LINE *line; @@ -121,7 +122,8 @@ int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, FILE *fp) /* load the entire symbolic information block into memory */ memcpy(amxdbg->hdr, &dbghdr, sizeof dbghdr); - if (fread(amxdbg->hdr + 1, 1, (size_t)(dbghdr.size - sizeof dbghdr), fp) == 0) { + size=(size_t)(dbghdr.size - sizeof dbghdr); + if (fread(amxdbg->hdr + 1, 1, size, fp) < size) { dbg_FreeInfo(amxdbg); return AMX_ERR_FORMAT; } /* if */ diff --git a/source/compiler/sc6.c b/source/compiler/sc6.c index df6b61a..026b1ee 100644 --- a/source/compiler/sc6.c +++ b/source/compiler/sc6.c @@ -1119,7 +1119,7 @@ static void append_dbginfo(FILE *fout) if (prevstr!=NULL) { assert(prevname!=NULL); dbghdr.files++; - dbghdr.size+=sizeof(cell)+strlen(prevname)+1; + dbghdr.size+=sizeof(AMX_DBG_FILE)+strlen(prevname); } /* if */ previdx=codeidx; } /* if */ @@ -1130,7 +1130,7 @@ static void append_dbginfo(FILE *fout) if (prevstr!=NULL) { assert(prevname!=NULL); dbghdr.files++; - dbghdr.size+=sizeof(cell)+strlen(prevname)+1; + dbghdr.size+=sizeof(AMX_DBG_FILE)+strlen(prevname); } /* if */ /* line number table */ @@ -1149,9 +1149,12 @@ static void append_dbginfo(FILE *fout) assert(str[0]!='\0' && str[1]==':'); if (str[0]=='S') { dbghdr.symbols++; - name=strchr(str+2,':'); + name=skipwhitespace(strchr(str+2,':')+1); assert(name!=NULL); - dbghdr.size+=sizeof(AMX_DBG_SYMBOL)+strlen(skipwhitespace(name+1)); + str=strchr(name,' '); + assert(str!=NULL); + assert((int)(str-name)