summaryrefslogtreecommitdiff
path: root/src/libimcv/imc/imc_os_info.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libimcv/imc/imc_os_info.c')
-rw-r--r--src/libimcv/imc/imc_os_info.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libimcv/imc/imc_os_info.c b/src/libimcv/imc/imc_os_info.c
index 0a094eb23..55e152af5 100644
--- a/src/libimcv/imc/imc_os_info.c
+++ b/src/libimcv/imc/imc_os_info.c
@@ -383,6 +383,7 @@ static bool extract_platform_info(os_type_t *type, chunk_t *name,
FILE *file;
u_char buf[BUF_LEN], *pos = buf;
int len = BUF_LEN - 1;
+ long file_len;
os_type_t os_type = OS_TYPE_UNKNOWN;
chunk_t os_name = chunk_empty;
chunk_t os_version = chunk_empty;
@@ -425,15 +426,22 @@ static bool extract_platform_info(os_type_t *type, chunk_t *name,
/* read release file into buffer */
fseek(file, 0, SEEK_END);
- len = min(ftell(file), len);
+ file_len = ftell(file);
+ if (file_len < 0)
+ {
+ DBG1(DBG_IMC, "failed to determine size of \"%s\"", releases[i]);
+ fclose(file);
+ return FALSE;
+ }
+ len = min(file_len, len);
rewind(file);
- buf[len] = '\0';
if (fread(buf, 1, len, file) != len)
{
DBG1(DBG_IMC, "failed to read file \"%s\"", releases[i]);
fclose(file);
return FALSE;
}
+ buf[len] = '\0';
fclose(file);
DBG1(DBG_IMC, "processing \"%s\" file", releases[i]);