]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
gcc8: fix format truncation warnings
authorVictor Julien <victor@inliniac.net>
Tue, 24 Apr 2018 10:01:40 +0000 (12:01 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 1 Nov 2018 14:46:10 +0000 (15:46 +0100)
src/app-layer-dcerpc.c
src/log-filestore.c
src/log-pcap.c
src/log-tlsstore.c
src/util-runmodes.c

index 2692c251998de2247a604be18e653be75c4f9907..3fc0d9b6d6df237b5de192ab1e6c880ec2d1aa92 100644 (file)
@@ -92,7 +92,7 @@ void hexdump(/*Flow *f,*/ const void *buf, size_t len)
     unsigned char c;
     size_t n;
     char bytestr[4] = {0};
-    char addrstr[10] = {0};
+    char addrstr[17] = {0};
     char hexstr[ 16*3 + 5] = {0};
     char charstr[16*1 + 5] = {0};
     for (n=1; n<=len; n++) {
index aa94ddeeddcb4325965d6c0182a12be1019491f0..07effdf15986ec6db8d301e4e6a702656d405817 100644 (file)
@@ -208,7 +208,10 @@ static void LogFilestoreLogCreateMetaFile(const Packet *p, const File *ff, char
         return;
 
     char metafilename[PATH_MAX] = "";
-    snprintf(metafilename, sizeof(metafilename), "%s.meta", filename);
+    if (snprintf(metafilename, sizeof(metafilename), "%s.meta",
+                filename) == sizeof(metafilename))
+        return;
+
     FILE *fp = fopen(metafilename, "w+");
     if (fp != NULL) {
         char timebuf[64];
@@ -283,10 +286,13 @@ static void LogFilestoreLogCloseMetaFile(const File *ff)
         return;
 
     char filename[PATH_MAX] = "";
-    snprintf(filename, sizeof(filename), "%s/file.%u",
-            g_logfile_base_dir, ff->file_store_id);
+    if (snprintf(filename, sizeof(filename), "%s/file.%u",
+            g_logfile_base_dir, ff->file_store_id) == sizeof(filename))
+        return;
     char metafilename[PATH_MAX] = "";
-    snprintf(metafilename, sizeof(metafilename), "%s.meta", filename);
+    if (snprintf(metafilename, sizeof(metafilename), "%s.meta",
+                filename) == sizeof(metafilename))
+        return;
     FILE *fp = fopen(metafilename, "a");
     if (fp != NULL) {
 #ifdef HAVE_MAGIC
@@ -365,8 +371,9 @@ static int LogFilestoreLogger(ThreadVars *tv, void *thread_data, const Packet *p
 
     SCLogDebug("ff %p, data %p, data_len %u", ff, data, data_len);
 
-    snprintf(filename, sizeof(filename), "%s/file.%u",
-            g_logfile_base_dir, ff->file_store_id);
+    if (snprintf(filename, sizeof(filename), "%s/file.%u",
+            g_logfile_base_dir, ff->file_store_id) == sizeof(filename))
+        return -1;
 
     if (flags & OUTPUT_FILEDATA_FLAG_OPEN) {
         aft->file_cnt++;
index 642b7d9425390f56677e0b771f4a0c4a954000a5..e87a1575d0a531d6ae45c21892f85687cebfa169 100644 (file)
@@ -618,7 +618,9 @@ static TmEcode PcapLogInitRingBuffer(PcapLogData *pl)
             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;
         }
@@ -1245,14 +1247,18 @@ static int PcapLogOpenFileCtx(PcapLogData *pl)
             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 */
index 79f3c881f618ad4587631435573e9a1c79304604..a93ddcce8142f75bc7002a23cb0514d90622f749 100644 (file)
@@ -69,25 +69,22 @@ typedef struct LogTlsStoreLogThread_ {
     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;
 }
 
@@ -108,7 +105,7 @@ static void LogTlsLogPem(LogTlsStoreLogThread *aft, const Packet *p, SSLState *s
     if ((state->server_connp.cert_input == NULL) || (state->server_connp.cert_input_len == 0))
         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;
index d9a7c86a38cdb97da5aeb644069e33824325048b..826af1863d0080e5966863a8643fd3d2ed379737 100644 (file)
  */
 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);
     }