From 912c45c968416490ae1bb6d59849fd9d7380a174 Mon Sep 17 00:00:00 2001 From: Daniel_Cortez Date: Thu, 6 Sep 2018 22:33:36 +0700 Subject: [PATCH 1/2] amxaux.c: Don't forget to close the program file before returning --- source/amx/amxaux.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/source/amx/amxaux.c b/source/amx/amxaux.c index 0ff0f75..762b5b5 100644 --- a/source/amx/amxaux.c +++ b/source/amx/amxaux.c @@ -30,13 +30,15 @@ size_t AMXAPI aux_ProgramSize(char *filename) { FILE *fp; + size_t size; AMX_HEADER hdr; if ((fp=fopen(filename,"rb")) == NULL) return 0; - if (fread(&hdr, sizeof hdr, 1, fp) < 1) - return 0; + size = fread(&hdr, sizeof hdr, 1, fp); fclose(fp); + if (size < 1) + return 0; amx_Align16(&hdr.magic); amx_Align32((uint32_t *)&hdr.stp); @@ -46,21 +48,24 @@ size_t AMXAPI aux_ProgramSize(char *filename) int AMXAPI aux_LoadProgram(AMX *amx, char *filename, void *memblock) { FILE *fp; + size_t size; AMX_HEADER hdr; int result, didalloc; /* open the file, read and check the header */ if ((fp = fopen(filename, "rb")) == NULL) return AMX_ERR_NOTFOUND; - if (fread(&hdr, sizeof hdr, 1, fp) < 1) - return AMX_ERR_INIT; - amx_Align16(&hdr.magic); - amx_Align32((uint32_t *)&hdr.size); - amx_Align32((uint32_t *)&hdr.stp); - if (hdr.magic != AMX_MAGIC) { + size = fread(&hdr, sizeof hdr, 1, fp); + if (size < 1) { +err_format: fclose(fp); return AMX_ERR_FORMAT; } /* if */ + amx_Align16(&hdr.magic); + amx_Align32((uint32_t *)&hdr.size); + amx_Align32((uint32_t *)&hdr.stp); + if (hdr.magic != AMX_MAGIC) + goto err_format; /* allocate the memblock if it is NULL */ didalloc = 0; @@ -75,9 +80,10 @@ int AMXAPI aux_LoadProgram(AMX *amx, char *filename, void *memblock) /* read in the file */ rewind(fp); - if (fread(memblock, 1, (size_t)hdr.size, fp) < (size_t)hdr.size) - return AMX_ERR_INIT; + size = fread(memblock, 1, (size_t)hdr.size, fp); fclose(fp); + if (size < (size_t)hdr.size) + return AMX_ERR_FORMAT; /* initialize the abstract machine */ memset(amx, 0, sizeof *amx); From 9d5f82ed6c1b2545ccd6fb4a08c641136f0371db Mon Sep 17 00:00:00 2001 From: Daniel_Cortez Date: Fri, 7 Sep 2018 02:06:06 +0700 Subject: [PATCH 2/2] amxaux.c: Get rid of a goto statement --- source/amx/amxaux.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/amx/amxaux.c b/source/amx/amxaux.c index 762b5b5..10a92ea 100644 --- a/source/amx/amxaux.c +++ b/source/amx/amxaux.c @@ -57,15 +57,16 @@ int AMXAPI aux_LoadProgram(AMX *amx, char *filename, void *memblock) return AMX_ERR_NOTFOUND; size = fread(&hdr, sizeof hdr, 1, fp); if (size < 1) { -err_format: fclose(fp); return AMX_ERR_FORMAT; } /* if */ amx_Align16(&hdr.magic); amx_Align32((uint32_t *)&hdr.size); amx_Align32((uint32_t *)&hdr.stp); - if (hdr.magic != AMX_MAGIC) - goto err_format; + if (hdr.magic != AMX_MAGIC) { + fclose(fp); + return AMX_ERR_FORMAT; + } /* if */ /* allocate the memblock if it is NULL */ didalloc = 0;