diff --git a/mongoose.c b/mongoose.c index a417be80c013684140145f340ec36cce0100f16f..22c4d3b192d6a63f11355f10af29984b0262274b 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2262,11 +2262,13 @@ 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; - int len, n; + int len, n, iolen; char *p; terminate_headers(c); + // Remember original io->len + iolen = io->len; // Write the placeholder for the chunk size p = io->buf + io->len; iobuf_append(io, " \r\n", 10); @@ -2276,6 +2278,9 @@ void mg_printf_data(struct mg_connection *c, const char *fmt, ...) { len = ns_vprintf(conn->ns_conn, fmt, ap); va_end(ap); + // Recalculate pointer p because of potential realloc within iobuf_append + p = io->buf + iolen; + // Record size n = mg_snprintf(p, 7, "%X", len); p[n] = ' ';