return;
char metafilename[PATH_MAX] = "";
- snprintf(metafilename, sizeof(metafilename), "%s.meta%s", base_filename,
- g_working_file_suffix);
+ if (snprintf(metafilename, sizeof(metafilename), "%s.meta%s", base_filename,
+ g_working_file_suffix) == sizeof(metafilename))
+ return;
+
FILE *fp = fopen(metafilename, "w+");
if (fp != NULL) {
char timebuf[64];
if (FileIncludePid())
snprintf(pid_expression, sizeof(pid_expression), ".%d", getpid());
char final_filename[PATH_MAX] = "";
- snprintf(final_filename, sizeof(final_filename), "%s/file%s.%u",
- g_logfile_base_dir, pid_expression, ff->file_store_id);
+ if (snprintf(final_filename, sizeof(final_filename), "%s/file%s.%u",
+ g_logfile_base_dir, pid_expression, ff->file_store_id) == sizeof(final_filename))
+ return;
char final_metafilename[PATH_MAX] = "";
- snprintf(final_metafilename, sizeof(final_metafilename),
- "%s.meta", final_filename);
+ if (snprintf(final_metafilename, sizeof(final_metafilename),
+ "%s.meta", final_filename) == sizeof(final_metafilename))
+ return;
char working_metafilename[PATH_MAX] = "";
- snprintf(working_metafilename, sizeof(working_metafilename),
- "%s%s", final_metafilename, g_working_file_suffix);
+ if (snprintf(working_metafilename, sizeof(working_metafilename),
+ "%s%s", final_metafilename, g_working_file_suffix) == sizeof(working_metafilename))
+ return;
+
FILE *fp = fopen(working_metafilename, "a");
if (fp != NULL) {
#ifdef HAVE_MAGIC
if (FileIncludePid())
snprintf(pid_expression, sizeof(pid_expression), ".%d", getpid());
char final_filename[PATH_MAX] = "";
- snprintf(final_filename, sizeof(final_filename), "%s/file%s.%u",
- g_logfile_base_dir, pid_expression, ff->file_store_id);
+ if (snprintf(final_filename, sizeof(final_filename), "%s/file%s.%u",
+ g_logfile_base_dir, pid_expression, ff->file_store_id) == sizeof(final_filename))
+ return;
char working_filename[PATH_MAX] = "";
- snprintf(working_filename, sizeof(working_filename), "%s%s",
- final_filename, g_working_file_suffix);
+ if (snprintf(working_filename, sizeof(working_filename), "%s%s",
+ final_filename, g_working_file_suffix) == sizeof(working_filename))
+ return;
+
if (rename(working_filename, final_filename) != 0) {
SCLogWarning(SC_WARN_RENAMING_FILE, "renaming file %s to %s failed",
working_filename, final_filename);
if (FileWriteMeta()) {
LogFilestoreLogCloseMetaFile(ff);
char final_metafilename[PATH_MAX] = "";
- snprintf(final_metafilename, sizeof(final_metafilename),
- "%s.meta", final_filename);
+ if (snprintf(final_metafilename, sizeof(final_metafilename),
+ "%s.meta", final_filename) == sizeof(final_metafilename))
+ return;
char working_metafilename[PATH_MAX] = "";
- snprintf(working_metafilename, sizeof(working_metafilename),
- "%s%s", final_metafilename, g_working_file_suffix);
+ if (snprintf(working_metafilename, sizeof(working_metafilename),
+ "%s%s", final_metafilename, g_working_file_suffix) == sizeof(working_metafilename))
+ return;
+
if (rename(working_metafilename, final_metafilename) != 0) {
SCLogWarning(SC_WARN_RENAMING_FILE,
"renaming metafile %s to %s failed", working_metafilename,
if (FileIncludePid())
snprintf(pid_expression, sizeof(pid_expression), ".%d", getpid());
char base_filename[PATH_MAX] = "";
- snprintf(base_filename, sizeof(base_filename), "%s/file%s.%u",
- g_logfile_base_dir, pid_expression, ff->file_store_id);
- snprintf(filename, sizeof(filename), "%s%s", base_filename,
- g_working_file_suffix);
+ if (snprintf(base_filename, sizeof(base_filename), "%s/file%s.%u",
+ g_logfile_base_dir, pid_expression, ff->file_store_id) == sizeof(base_filename))
+ return -1;
+ if (snprintf(filename, sizeof(filename), "%s%s", base_filename,
+ g_working_file_suffix) == sizeof(filename))
+ return -1;
if (flags & OUTPUT_FILEDATA_FLAG_OPEN) {
aft->file_cnt++;
goto fail;
}
char path[PATH_MAX];
- snprintf(path, PATH_MAX - 1, "%s/%s", pattern, entry->d_name);
+ if (snprintf(path, PATH_MAX, "%s/%s", pattern, entry->d_name) == PATH_MAX)
+ goto fail;
+
if ((pf->filename = SCStrdup(path)) == NULL) {
goto fail;
}
goto error;
}
+ int written;
if (pl->timestamp_format == TS_FORMAT_SEC) {
- snprintf(filename, PATH_MAX, "%s/%s.%" PRIu32, dirfull,
+ written = snprintf(filename, PATH_MAX, "%s/%s.%" PRIu32, dirfull,
pl->prefix, (uint32_t)ts.tv_sec);
} else {
- snprintf(filename, PATH_MAX, "%s/%s.%" PRIu32 ".%" PRIu32,
+ written = snprintf(filename, PATH_MAX, "%s/%s.%" PRIu32 ".%" PRIu32,
dirfull, pl->prefix, (uint32_t)ts.tv_sec, (uint32_t)ts.tv_usec);
}
-
+ if (written == PATH_MAX) {
+ SCLogError(SC_ERR_SPRINTF,"log-pcap path overflow");
+ goto error;
+ }
} else if (pl->mode == LOGMODE_NORMAL) {
int ret;
/* create the filename to use */
size_t enc_buf_len;
} LogTlsStoreLogThread;
-static int CreateFileName(const Packet *p, SSLState *state, char *filename)
+static int CreateFileName(const Packet *p, SSLState *state, char *filename, size_t filename_size)
{
-#define FILELEN 64 //filename len + extention + ending path / + some space
-
- int filenamelen = FILELEN + strlen(tls_logfile_base_dir);
+ char path[PATH_MAX];
int file_id = SC_ATOMIC_ADD(cert_id, 1);
- if (filenamelen + 1 > PATH_MAX) {
- return 0;
- }
-
/* Use format : packet time + incremental ID
* When running on same pcap it will overwrite
* On a live device, we will not be able to overwrite */
- snprintf(filename, filenamelen, "%s/%ld.%ld-%d.pem",
+ if (snprintf(path, sizeof(path), "%s/%ld.%ld-%d.pem",
tls_logfile_base_dir,
(long int)p->ts.tv_sec,
(long int)p->ts.tv_usec,
- file_id);
+ file_id) == sizeof(path))
+ return 0;
+
+ strlcpy(filename, path, filename_size);
return 1;
}
if (TAILQ_EMPTY(&state->server_connp.certs))
SCReturn;
- CreateFileName(p, state, filename);
+ CreateFileName(p, state, filename, sizeof(filename));
if (strlen(filename) == 0) {
SCLogWarning(SC_ERR_FOPEN, "Can't create PEM filename");
SCReturn;
*/
char *RunmodeAutoFpCreatePickupQueuesString(int n)
{
- char *queues = NULL;
+ if (n > 1024)
+ return NULL;
+
/* 13 because pickup12345, = 12 + \0 */
size_t queues_size = n * 13;
- int thread;
char qname[TM_QUEUE_NAME_MAX];
- queues = SCMalloc(queues_size);
+ char *queues = SCMalloc(queues_size);
if (unlikely(queues == NULL)) {
SCLogError(SC_ERR_MEM_ALLOC, "failed to alloc queues buffer: %s", strerror(errno));
return NULL;
}
memset(queues, 0x00, queues_size);
- for (thread = 0; thread < n; thread++) {
+ for (int thread = 0; thread < n; thread++) {
if (strlen(queues) > 0)
strlcat(queues, ",", queues_size);
- snprintf(qname, sizeof(qname), "pickup%d", thread+1);
+ snprintf(qname, sizeof(qname), "pickup%d", (int16_t)thread+1);
strlcat(queues, qname, queues_size);
}