From c2564d34af9e01a828c24b0be7f269e5b036b5da Mon Sep 17 00:00:00 2001 From: Pavel Tvrdik Date: Sat, 1 Oct 2016 12:50:29 +0200 Subject: Tree/Trie: Check the end of buffer We set buffer->pos to buffer->end in function buffer_print() when bvsnprintf() failed, so there would be uninitialized memory between the old buffer->pos and the current buffer->pos. --- filter/tree.c | 3 +++ filter/trie.c | 3 +++ 2 files changed, 6 insertions(+) (limited to 'filter') diff --git a/filter/tree.c b/filter/tree.c index 328c7184..1196e630 100644 --- a/filter/tree.c +++ b/filter/tree.c @@ -165,6 +165,9 @@ tree_format(struct f_tree *t, buffer *buf) tree_node_format(t, buf); + if (buf->pos == buf->end) + return; + /* Undo last separator */ if (buf->pos[-1] != '[') buf->pos -= 2; diff --git a/filter/trie.c b/filter/trie.c index fba395d1..565ae82f 100644 --- a/filter/trie.c +++ b/filter/trie.c @@ -300,6 +300,9 @@ trie_format(struct f_trie *t, buffer *buf) buffer_print(buf, "%I/%d, ", IPA_NONE, 0); trie_node_format(t->root, buf); + if (buf->pos == buf->end) + return; + /* Undo last separator */ if (buf->pos[-1] != '[') buf->pos -= 2; -- cgit v1.2.3