diff --git a/src/or/buffers.c b/src/or/buffers.c
index 1d80f88ea4e4ec384ac5d59383cd6fd9b987c9f3..26a5b9683c32dd1dd439dac4f1252906ae839be8 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -468,6 +468,7 @@ buf_free(buf_t *buf)
   assert_buf_ok(buf);
   buf->magic = 0xDEADBEEF;
   if (buf->len == MIN_LAZY_SHRINK_SIZE) {
+    buf->datalen = 0; /* Avoid assert in add_buf_mem_to_freelist. */
     add_buf_mem_to_freelist(buf);
   } else if (buf->mem) {
     oldmem = RAW_MEM(buf->mem);