Fix a memory leak when appending/prepending to a buffer with unused space.
authorNick Mathewson <nickm@torproject.org>
Wed, 31 Mar 2010 16:03:43 +0000 (12:03 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 31 Mar 2010 16:53:20 +0000 (12:53 -0400)
buffer.c

index 22a377364f6bd09dfeb39c648d08a3e63e2533dd..6376e9cda0f10dedcc3d06cc3c1b5fde2ad63c0d 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -701,7 +701,9 @@ evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf)
        }
 
        if (out_total_len == 0) {
-               /* XXX need to free old outbuf chains */
+               /* There might be an empty chain at the start of outbuf; free
+                * it. */
+               evbuffer_free_all_chains(outbuf->first);
                COPY_CHAIN(outbuf, inbuf);
        } else {
                APPEND_CHAIN(outbuf, inbuf);
@@ -740,7 +742,9 @@ evbuffer_prepend_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf)
        }
 
        if (out_total_len == 0) {
-               /* XXX need to free old outbuf chains */
+               /* There might be an empty chain at the start of outbuf; free
+                * it. */
+               evbuffer_free_all_chains(outbuf->first);
                COPY_CHAIN(outbuf, inbuf);
        } else {
                PREPEND_CHAIN(outbuf, inbuf);