Fix debug header size miscalculation

This commit is contained in:
Zeex 2015-04-05 01:33:06 +06:00
parent 568c277b03
commit a2a8039e69
2 changed files with 10 additions and 5 deletions

View File

@ -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 */

View File

@ -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)<sizeof symname);
dbghdr.size+=sizeof(AMX_DBG_SYMBOL)+(str-name);
if ((prevstr=strchr(name,'['))!=NULL)
while ((prevstr=strchr(prevstr+1,':'))!=NULL)
dbghdr.size+=sizeof(AMX_DBG_SYMDIM);