1
0
mirror of https://github.com/gophernicus/gophernicus.git synced 2024-11-03 04:27:17 -05:00

Fix memory leak in gophermap parsing

FILE pointer `fp' was not closed when the gophermap parsing returned
early.
This commit is contained in:
Augustin Fabre 2020-03-31 22:50:53 +02:00
parent 394176e222
commit 5acd7854cc
No known key found for this signature in database
GPG Key ID: 99A01AA293FDA435
2 changed files with 11 additions and 5 deletions

View File

@ -72,7 +72,7 @@ src/functions.h:
grep -h "^[a-z]" $(SOURCES) | \
grep -v "int main" | \
grep -v "strlc" | \
grep -v "[a-z]:" | \
grep -vi "[a-z]:" | \
sed -e "s/ =.*$$//" -e "s/ *$$/;/" >> $@
@echo

View File

@ -283,6 +283,7 @@ int gophermap(state *st, char *mapfile, int depth)
char type;
int port;
int exe;
int return_val = QUIT;
/* Prevent include loops */
if (depth > 4) return OK;
@ -343,8 +344,13 @@ int gophermap(state *st, char *mapfile, int depth)
if (type == '#') continue;
/* Stop handling gophermap? */
if (type == '*') return OK;
if (type == '.') return QUIT;
if (type == '*') {
return_val = OK;
goto CLOSE_FP;
}
if (type == '.')
goto CLOSE_FP;
/* Print a list of users with public_gopher */
if (type == '~' && st->opt_personal_spaces) {
@ -435,14 +441,14 @@ int gophermap(state *st, char *mapfile, int depth)
}
}
/* Clean up & return */
CLOSE_FP:
#ifdef HAVE_POPEN
if (exe & st->opt_exec) pclose(fp);
else
#endif
fclose(fp);
return QUIT;
return return_val;
}