Merge pull request #363 from Daniel-Cortez/fix-amxaux

amxaux.c: Don't forget to close the program file before returning
This commit is contained in:
Zeex 2018-09-07 23:51:33 +06:00 committed by GitHub
commit 26e3fd56e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,13 +30,15 @@
size_t AMXAPI aux_ProgramSize(char *filename) size_t AMXAPI aux_ProgramSize(char *filename)
{ {
FILE *fp; FILE *fp;
size_t size;
AMX_HEADER hdr; AMX_HEADER hdr;
if ((fp=fopen(filename,"rb")) == NULL) if ((fp=fopen(filename,"rb")) == NULL)
return 0; return 0;
if (fread(&hdr, sizeof hdr, 1, fp) < 1) size = fread(&hdr, sizeof hdr, 1, fp);
return 0;
fclose(fp); fclose(fp);
if (size < 1)
return 0;
amx_Align16(&hdr.magic); amx_Align16(&hdr.magic);
amx_Align32((uint32_t *)&hdr.stp); amx_Align32((uint32_t *)&hdr.stp);
@ -46,14 +48,18 @@ size_t AMXAPI aux_ProgramSize(char *filename)
int AMXAPI aux_LoadProgram(AMX *amx, char *filename, void *memblock) int AMXAPI aux_LoadProgram(AMX *amx, char *filename, void *memblock)
{ {
FILE *fp; FILE *fp;
size_t size;
AMX_HEADER hdr; AMX_HEADER hdr;
int result, didalloc; int result, didalloc;
/* open the file, read and check the header */ /* open the file, read and check the header */
if ((fp = fopen(filename, "rb")) == NULL) if ((fp = fopen(filename, "rb")) == NULL)
return AMX_ERR_NOTFOUND; return AMX_ERR_NOTFOUND;
if (fread(&hdr, sizeof hdr, 1, fp) < 1) size = fread(&hdr, sizeof hdr, 1, fp);
return AMX_ERR_INIT; if (size < 1) {
fclose(fp);
return AMX_ERR_FORMAT;
} /* if */
amx_Align16(&hdr.magic); amx_Align16(&hdr.magic);
amx_Align32((uint32_t *)&hdr.size); amx_Align32((uint32_t *)&hdr.size);
amx_Align32((uint32_t *)&hdr.stp); amx_Align32((uint32_t *)&hdr.stp);
@ -75,9 +81,10 @@ int AMXAPI aux_LoadProgram(AMX *amx, char *filename, void *memblock)
/* read in the file */ /* read in the file */
rewind(fp); rewind(fp);
if (fread(memblock, 1, (size_t)hdr.size, fp) < (size_t)hdr.size) size = fread(memblock, 1, (size_t)hdr.size, fp);
return AMX_ERR_INIT;
fclose(fp); fclose(fp);
if (size < (size_t)hdr.size)
return AMX_ERR_FORMAT;
/* initialize the abstract machine */ /* initialize the abstract machine */
memset(amx, 0, sizeof *amx); memset(amx, 0, sizeof *amx);