From 95ea105a150402042dcadb638675356daa74a6ca Mon Sep 17 00:00:00 2001 From: Anoop Saldanha Date: Thu, 29 Mar 2012 01:04:41 +0530 Subject: [PATCH] update util-print.c to use snprintf --- src/util-print.c | 94 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 21 deletions(-) diff --git a/src/util-print.c b/src/util-print.c index 0324d23a22..1424b8f2f5 100644 --- a/src/util-print.c +++ b/src/util-print.c @@ -38,13 +38,21 @@ */ 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; -- 2.47.2