From 210e20858a72eb5f4ba6d44596c009638dff15f6 Mon Sep 17 00:00:00 2001 From: Jan Kasiak Date: Mon, 2 Oct 2017 18:45:06 -0400 Subject: [PATCH] NULL terminate empty and malformed inputs --- mini-printf.c | 4 ++++ test1.c | 12 ++++++++++++ test1.gold | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/mini-printf.c b/mini-printf.c index 53cfe99..5c0e3d2 100644 --- a/mini-printf.c +++ b/mini-printf.c @@ -137,6 +137,10 @@ mini_vsnprintf(char *buffer, unsigned int buffer_len, const char *fmt, va_list v b.pbuffer = buffer; b.buffer_len = buffer_len; + if (buffer_len > 0) { + *buffer = 0; + } + while ((ch=*(fmt++))) { if ((unsigned int)((b.pbuffer - b.buffer) + 1) >= b.buffer_len) break; diff --git a/test1.c b/test1.c index f98287a..37b1dd7 100644 --- a/test1.c +++ b/test1.c @@ -14,5 +14,17 @@ int main(void) puts(buff); mini_snprintf(buff, sizeof buff, "%d %u %d %u", 50, 50, -50, -50); puts(buff); + mini_snprintf(buff, sizeof buff, "%0"); + puts(buff); + mini_snprintf(buff, sizeof buff, "a%0"); + puts(buff); + mini_snprintf(buff, sizeof buff, "%"); + puts(buff); + mini_snprintf(buff, sizeof buff, "b%"); + puts(buff); + mini_snprintf(buff, 0, "%s", "hello"); + puts(buff); + mini_snprintf(buff, sizeof buff, ""); + puts(buff); return 0; } diff --git a/test1.gold b/test1.gold index 3a0c347..d393b78 100644 --- a/test1.gold +++ b/test1.gold @@ -3,3 +3,9 @@ faster and "cheaper" deadf00d % DEADF00D 00000000100000000200000000300 50 50 -50 4294967246 + +a + +b +b +