output/filestore: improve path handling

** CID 1666422:       Error handling issues  (CHECKED_RETURN)
/src/output-filestore.c: 350           in GetLogDirectory()

_____________________________________________________________________________________________
*** CID 1666422:         Error handling issues  (CHECKED_RETURN)
/src/output-filestore.c: 350             in GetLogDirectory()
344             log_base_dir = default_log_dir;
345         }
346         if (PathIsAbsolute(log_base_dir)) {
347             strlcpy(out, log_base_dir, out_size);
348         } else {
349             const char *default_log_prefix = SCConfigGetLogDirectory();
>>>     CID 1666422:         Error handling issues  (CHECKED_RETURN)
>>>     Calling "PathMerge" without checking return value (as is done elsewhere 19 out of 21 times).
350             PathMerge(out, out_size, default_log_prefix, log_base_dir);
351         }
352     }
353
354     static bool InitFilestoreDirectory(const char *dir)
355     {
pull/13939/head
Victor Julien 2 months ago committed by Victor Julien
parent 178f3baf4a
commit 6d8fc10b8f

@ -336,7 +336,7 @@ static void OutputFilestoreLogDeInitCtx(OutputCtx *output_ctx)
SCFree(output_ctx);
}
static void GetLogDirectory(const SCConfNode *conf, char *out, size_t out_size)
static int GetLogDirectory(const SCConfNode *conf, char *out, size_t out_size)
{
const char *log_base_dir = SCConfNodeLookupChildValue(conf, "dir");
if (log_base_dir == NULL) {
@ -344,11 +344,15 @@ static void GetLogDirectory(const SCConfNode *conf, char *out, size_t out_size)
log_base_dir = default_log_dir;
}
if (PathIsAbsolute(log_base_dir)) {
strlcpy(out, log_base_dir, out_size);
size_t r = strlcpy(out, log_base_dir, out_size);
if (r >= out_size)
return -1;
} else {
const char *default_log_prefix = SCConfigGetLogDirectory();
PathMerge(out, out_size, default_log_prefix, log_base_dir);
if (PathMerge(out, out_size, default_log_prefix, log_base_dir) < 0)
return -1;
}
return 0;
}
static bool InitFilestoreDirectory(const char *dir)
@ -420,7 +424,10 @@ static OutputInitResult OutputFilestoreLogInitCtx(SCConfNode *conf)
}
char log_directory[PATH_MAX] = "";
GetLogDirectory(conf, log_directory, sizeof(log_directory));
if (GetLogDirectory(conf, log_directory, sizeof(log_directory)) < 0) {
SCLogError("File-store output path too long.");
return result;
}
if (!InitFilestoreDirectory(log_directory)) {
return result;
}

Loading…
Cancel
Save