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] = ' ';