From 9bbf4c838461e3999d181412c082dce0e30be5a1 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka <valenok@gmail.com> Date: Sat, 22 Feb 2014 16:11:47 +0000 Subject: [PATCH] Fixed problem with mg_printf_data() --- mongoose.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/mongoose.c b/mongoose.c index ab2380c34..78bab4abd 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2256,19 +2256,26 @@ void mg_printf_data(struct mg_connection *c, const char *fmt, ...) { struct connection *conn = MG_CONN_2_CONN(c); struct iobuf *io = &conn->ns_conn->send_iobuf; va_list ap; - static const char chunk_len[] = " \r\n"; - int len, n, cl = sizeof(chunk_len) - 1; - char *p, buf[9]; + int len, n; + char *p; terminate_headers(c); + // Write the placeholder for the chunk size + p = io->buf + io->len; + iobuf_append(io, " \r\n", 10); + + // Write chunk itself va_start(ap, fmt); - ns_send(conn->ns_conn, chunk_len, cl); - p = io->buf + io->len - cl; len = ns_vprintf(conn->ns_conn, fmt, ap); - n = mg_snprintf(buf, sizeof(buf), "%X", len); - memcpy(p, buf, n < 9 ? n : 8); va_end(ap); + + // Record size + n = mg_snprintf(p, 7, "%X", len); + p[n] = ' '; + + // Write terminating new line + mg_write(c, "\r\n", 2); } #if !defined(MONGOOSE_NO_WEBSOCKET) || !defined(MONGOOSE_NO_AUTH) -- GitLab