diff --git a/mongoose.c b/mongoose.c index fed4145b4bd4413dbcb90ecd04d8e74e592996d4..681eacba9df209830d97b5b6342e7077c7e57922 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2264,11 +2264,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); @@ -2278,6 +2280,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] = ' ';