From: Dragan Dosen Date: Wed, 4 Nov 2015 22:03:26 +0000 (+0100) Subject: BUG/MINOR: server: check return value of fgets() in apply_server_state() X-Git-Tag: v1.7-dev1~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf4fb036a47042c86c9e3138ef01a6136fd5db87;p=thirdparty%2Fhaproxy.git BUG/MINOR: server: check return value of fgets() in apply_server_state() fgets() can return NULL on error or when EOF occurs. This patch adds a check of fgets() return value and displays a warning if the first line of the server state file can not be read. Additionally, we make sure to close the previously opened file descriptor. --- diff --git a/src/server.c b/src/server.c index 224d536f19..b45a7fd9d7 100644 --- a/src/server.c +++ b/src/server.c @@ -2330,12 +2330,16 @@ void apply_server_state(void) version = 0; /* first character of first line of the file must contain the version of the export */ - fgets(mybuf, SRV_STATE_LINE_MAXLEN, f); + if (fgets(mybuf, SRV_STATE_LINE_MAXLEN, f) == NULL) { + Warning("Can't read first line of the server state file '%s'\n", filepath); + goto fileclose; + } + cur = mybuf; version = atoi(cur); if ((version < SRV_STATE_FILE_VERSION_MIN) || (version > SRV_STATE_FILE_VERSION_MAX)) - continue; + goto fileclose; while (fgets(mybuf, SRV_STATE_LINE_MAXLEN, f)) { int bk_f_forced_id = 0; @@ -2462,6 +2466,7 @@ void apply_server_state(void) /* now we can proceed with server's state update */ srv_update_state(srv, version, srv_params); } +fileclose: fclose(f); } }