diff options
author | David Benjamin <davidben@chromium.org> | 2015-02-11 14:16:28 -0500 |
---|---|---|
committer | Adam Langley <agl@google.com> | 2015-02-11 23:18:45 +0000 |
commit | 3bb4178206f63c92f0b417157d0874143da01f44 (patch) | |
tree | 385d93c87e50a199c0156e35509b77bb7d377b81 | |
parent | 491b9219a943f2538a650d26a864d10e1999713a (diff) | |
download | boringssl-3bb4178206f63c92f0b417157d0874143da01f44.zip boringssl-3bb4178206f63c92f0b417157d0874143da01f44.tar.gz boringssl-3bb4178206f63c92f0b417157d0874143da01f44.tar.bz2 |
Fix memory leak in pqueue_test.
pqueue_free requires the queue be empty.
Change-Id: I633e18fe71ddec51d6005210fcb6570ef53b9808
Reviewed-on: https://boringssl-review.googlesource.com/3410
Reviewed-by: Adam Langley <agl@google.com>
-rw-r--r-- | ssl/pqueue/pqueue.c | 3 | ||||
-rw-r--r-- | ssl/pqueue/pqueue_test.c | 15 |
2 files changed, 16 insertions, 2 deletions
diff --git a/ssl/pqueue/pqueue.c b/ssl/pqueue/pqueue.c index ecaa139..14bd9b6 100644 --- a/ssl/pqueue/pqueue.c +++ b/ssl/pqueue/pqueue.c @@ -56,6 +56,7 @@ #include <openssl/pqueue.h> +#include <assert.h> #include <string.h> #include <openssl/mem.h> @@ -104,6 +105,8 @@ void pqueue_free(pqueue_s *pq) { return; } + /* The queue must be empty. */ + assert(pq->items == NULL); OPENSSL_free(pq); } diff --git a/ssl/pqueue/pqueue_test.c b/ssl/pqueue/pqueue_test.c index c4b4b9d..cb688f7 100644 --- a/ssl/pqueue/pqueue_test.c +++ b/ssl/pqueue/pqueue_test.c @@ -19,6 +19,17 @@ #include <openssl/ssl.h> +static void clear_and_free_queue(pqueue q) { + for (;;) { + pitem *item = pqueue_pop(q); + if (item == NULL) { + break; + } + pitem_free(item); + } + pqueue_free(q); +} + static int trivial(void) { pqueue q = pqueue_new(); if (q == NULL) { @@ -37,7 +48,7 @@ static int trivial(void) { return 0; } pitem_free(item); - pqueue_free(q); + clear_and_free_queue(q); return 1; } @@ -101,7 +112,7 @@ static int fixed_random(void) { } curr = next; } - pqueue_free(q); + clear_and_free_queue(q); return 1; } |