]> granicus.if.org Git - libevent/commitdiff
unit test for remove_buffer bug
authorGreg Hazel <ghazel@gmail.com>
Tue, 1 Nov 2011 20:44:40 +0000 (13:44 -0700)
committerNick Mathewson <nickm@torproject.org>
Wed, 2 Nov 2011 17:40:16 +0000 (13:40 -0400)
test/regress_buffer.c

index e68b24fe6234d89f4a79b5b1cc5b4609a10d8086..22a922b7eea3932b91c76e895c4cdb808d625e2d 100644 (file)
@@ -284,6 +284,42 @@ test_evbuffer(void *ptr)
        evbuffer_free(evb_two);
 }
 
+static void
+no_cleanup(const void *data, size_t datalen, void *extra)
+{
+}
+
+static void
+test_evbuffer_remove_buffer_with_empty(void *ptr)
+{
+    struct evbuffer *src = evbuffer_new();
+    struct evbuffer *dst = evbuffer_new();
+    char buf[2];
+
+    evbuffer_validate(src);
+    evbuffer_validate(dst);
+
+    /* setup the buffers */
+    /* we need more data in src than we will move later */
+    evbuffer_add(src, buf, sizeof(buf));
+    /* we need one buffer in dst and one empty buffer at the end */
+    evbuffer_add(dst, buf, sizeof(buf));
+    evbuffer_add_reference(dst, buf, 0, no_cleanup, NULL);
+
+    evbuffer_validate(src);
+    evbuffer_validate(dst);
+
+    /* move one byte over */
+    evbuffer_remove_buffer(src, dst, 1);
+
+    evbuffer_validate(src);
+    evbuffer_validate(dst);
+
+end:
+    evbuffer_free(src);
+    evbuffer_free(dst);
+}
+
 static void
 test_evbuffer_reserve2(void *ptr)
 {
@@ -1594,6 +1630,7 @@ static const struct testcase_setup_t nil_setup = {
 
 struct testcase_t evbuffer_testcases[] = {
        { "evbuffer", test_evbuffer, 0, NULL, NULL },
+       { "remove_buffer_with_empty", test_evbuffer_remove_buffer_with_empty, 0, NULL, NULL },
        { "reserve2", test_evbuffer_reserve2, 0, NULL, NULL },
        { "reserve_many", test_evbuffer_reserve_many, 0, NULL, NULL },
        { "reserve_many2", test_evbuffer_reserve_many, 0, &nil_setup, (void*)"add" },