]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
update util-print.c to use snprintf
authorAnoop Saldanha <poonaatsoc@gmail.com>
Wed, 28 Mar 2012 19:34:41 +0000 (01:04 +0530)
committerVictor Julien <victor@inliniac.net>
Mon, 2 Apr 2012 12:54:08 +0000 (14:54 +0200)
src/util-print.c

index 0324d23a227c1b89cf693a47a95b813d03bb2aca..1424b8f2f5d5e3ca1ee289a0c27433fddf91b880 100644 (file)
  */
 void PrintRawLineHexFp(FILE *fp, uint8_t *buf, uint32_t buflen)
 {
-    char nbuf[2048] = "";
-    char temp[5] = "";
+#define BUFFER_LENGTH 2048
+    char nbuf[BUFFER_LENGTH] = "";
+    uint32_t offset = 0;
     uint32_t u = 0;
 
     for (u = 0; u < buflen; u++) {
-        snprintf(temp, sizeof(temp), "%02X ", buf[u]);
-        strlcat(nbuf, temp, sizeof(nbuf));
+        int cw = snprintf(nbuf + offset, BUFFER_LENGTH - offset, "%02X ",
+                          buf[u]);
+        if (cw >= 0) {
+            if ((offset + cw) >= BUFFER_LENGTH) {
+                offset = BUFFER_LENGTH - 1;
+            } else {
+                offset += cw;
+            }
+        }
     }
     fprintf(fp, "%s", nbuf);
 }
@@ -61,57 +69,101 @@ void PrintRawLineHexFp(FILE *fp, uint8_t *buf, uint32_t buflen)
  */
 void PrintRawLineHexBuf(char *retbuf, uint32_t retbuflen, uint8_t *buf, uint32_t buflen)
 {
-    char temp[5] = "";
+    uint32_t offset = 0;
     uint32_t u = 0;
-    uint32_t written = 0;
 
     for (u = 0; u < buflen; u++) {
-        written += (uint32_t)snprintf(temp, sizeof(temp), "%02X ", buf[u]);
-        if (written < retbuflen) {
-            strlcat(retbuf, temp, retbuflen);
+        int cw = snprintf(retbuf + offset, retbuflen - offset, "%02X ",
+                          buf[u]);
+        if (cw >= 0) {
+            if ((offset + cw) >= retbuflen) {
+                offset = retbuflen - 1;
+            } else {
+                offset += cw;
+            }
         }
     }
 }
 
 void PrintRawJsonFp(FILE *fp, uint8_t *buf, uint32_t buflen)
 {
-    char nbuf[2048] = "";
-    char temp[5] = "";
+#define BUFFER_LENGTH 2048
+    char nbuf[BUFFER_LENGTH] = "";
+    uint32_t offset = 0;
     uint32_t u = 0;
 
     for (u = 0; u < buflen; u++) {
         if (buf[u] == '\\' || buf[u] == '/' || buf[u] == '\"') {
-            snprintf(temp, sizeof(temp), "\\%c", buf[u]);
+            int cw = snprintf(nbuf + offset, BUFFER_LENGTH - offset, "\\%c",
+                              buf[u]);
+            if (cw >= 0) {
+                if ((offset + cw) >= BUFFER_LENGTH) {
+                    offset = BUFFER_LENGTH - 1;
+                } else {
+                    offset += cw;
+                }
+            }
         } else if (isprint(buf[u])) {
-            snprintf(temp, sizeof(temp), "%c", buf[u]);
+            int cw = snprintf(nbuf + offset, BUFFER_LENGTH - offset, "%c",
+                              buf[u]);
+            if (cw >= 0) {
+                if ((offset + cw) >= BUFFER_LENGTH) {
+                    offset = BUFFER_LENGTH - 1;
+                } else {
+                    offset += cw;
+                }
+            }
         } else {
-            snprintf(temp, sizeof(temp), "\\\\x%02X", buf[u]);
+            int cw = snprintf(nbuf + offset, BUFFER_LENGTH - offset, "\\\\x%02X",
+                              buf[u]);
+            if (cw >= 0) {
+                if ((offset + cw) >= BUFFER_LENGTH) {
+                    offset = BUFFER_LENGTH - 1;
+                } else {
+                    offset += cw;
+                }
+            }
         }
-        strlcat(nbuf, temp, sizeof(nbuf));
     }
     fprintf(fp, "%s", nbuf);
 }
 
 void PrintRawUriFp(FILE *fp, uint8_t *buf, uint32_t buflen)
 {
-    char nbuf[2048] = "";
-    char temp[5] = "";
+#define BUFFER_LENGTH 2048
+    char nbuf[BUFFER_LENGTH] = "";
+    uint32_t offset = 0;
     uint32_t u = 0;
 
     for (u = 0; u < buflen; u++) {
         if (isprint(buf[u]) && buf[u] != '\"') {
-            snprintf(temp, sizeof(temp), "%c", buf[u]);
+            int cw = snprintf(nbuf + offset, BUFFER_LENGTH - offset, "%c",
+                              buf[u]);
+            if (cw >= 0) {
+                if ((offset + cw) >= BUFFER_LENGTH) {
+                    offset = BUFFER_LENGTH - 1;
+                } else {
+                    offset += cw;
+                }
+            }
         } else {
-            snprintf(temp, sizeof(temp), "\\x%02X", buf[u]);
+            int cw = snprintf(nbuf + offset, BUFFER_LENGTH - offset, "\\x%02X",
+                              buf[u]);
+            if (cw >= 0) {
+                if ((offset + cw) >= BUFFER_LENGTH) {
+                    offset = BUFFER_LENGTH - 1;
+                } else {
+                    offset += cw;
+                }
+            }
         }
-        strlcat(nbuf, temp, sizeof(nbuf));
     }
+
     fprintf(fp, "%s", nbuf);
 }
 
 void PrintRawUriBuf(char *retbuf, uint32_t retbuflen, uint8_t *buf, uint32_t buflen)
 {
-    char temp[5] = "";
     uint32_t u = 0;
     uint32_t offset = 0;