1
0
mirror of https://github.com/gophernicus/gophernicus.git synced 2024-09-22 04:35:56 -04: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 -h "^[a-z]" $(SOURCES) | \
grep -v "int main" | \ grep -v "int main" | \
grep -v "strlc" | \ grep -v "strlc" | \
grep -v "[a-z]:" | \ grep -vi "[a-z]:" | \
sed -e "s/ =.*$$//" -e "s/ *$$/;/" >> $@ sed -e "s/ =.*$$//" -e "s/ *$$/;/" >> $@
@echo @echo

View File

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