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.
This commit is contained in:
Dragan Dosen 2015-11-04 23:03:26 +01:00 committed by Willy Tarreau
parent e9544935e8
commit cf4fb036a4

View File

@ -2330,12 +2330,16 @@ void apply_server_state(void)
version = 0; version = 0;
/* first character of first line of the file must contain the version of the export */ /* 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; cur = mybuf;
version = atoi(cur); version = atoi(cur);
if ((version < SRV_STATE_FILE_VERSION_MIN) || if ((version < SRV_STATE_FILE_VERSION_MIN) ||
(version > SRV_STATE_FILE_VERSION_MAX)) (version > SRV_STATE_FILE_VERSION_MAX))
continue; goto fileclose;
while (fgets(mybuf, SRV_STATE_LINE_MAXLEN, f)) { while (fgets(mybuf, SRV_STATE_LINE_MAXLEN, f)) {
int bk_f_forced_id = 0; int bk_f_forced_id = 0;
@ -2462,6 +2466,7 @@ void apply_server_state(void)
/* now we can proceed with server's state update */ /* now we can proceed with server's state update */
srv_update_state(srv, version, srv_params); srv_update_state(srv, version, srv_params);
} }
fileclose:
fclose(f); fclose(f);
} }
} }