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 224d536..b45a7fd 100644
--- a/src/server.c
+++ b/src/server.c
@@ -2330,12 +2330,16 @@
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 @@
/* now we can proceed with server's state update */
srv_update_state(srv, version, srv_params);
}
+fileclose:
fclose(f);
}
}