From: Pavel Tvrdik Date: Sat, 1 Oct 2016 10:50:29 +0000 (+0200) Subject: Tree/Trie: Check the end of buffer X-Git-Tag: v1.6.3~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c2564d34af9e01a828c24b0be7f269e5b036b5da;p=thirdparty%2Fbird.git 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. --- diff --git a/filter/tree.c b/filter/tree.c index 328c7184b..1196e630f 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 fba395d13..565ae82f6 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;