Commit 4fea9cff by Edward Thomson

iterator: assert tree_iterator has a frame

Although a `tree_iterator` that failed to be properly created
does not have a frame, all other `tree_iterator`s should.  Do not
call `pop` in the failure case, but assert that in all other
cases there is a frame.
parent a218b2f6
...@@ -558,7 +558,9 @@ static bool tree_iterator__pop_frame(tree_iterator *ti, bool final) ...@@ -558,7 +558,9 @@ static bool tree_iterator__pop_frame(tree_iterator *ti, bool final)
{ {
tree_iterator_frame *tf = ti->head; tree_iterator_frame *tf = ti->head;
if (!tf || !tf->up) assert(tf);
if (!tf->up)
return false; return false;
ti->head = tf->up; ti->head = tf->up;
...@@ -581,7 +583,8 @@ static void tree_iterator__pop_all(tree_iterator *ti, bool to_end, bool final) ...@@ -581,7 +583,8 @@ static void tree_iterator__pop_all(tree_iterator *ti, bool to_end, bool final)
while (tree_iterator__pop_frame(ti, final)) /* pop to root */; while (tree_iterator__pop_frame(ti, final)) /* pop to root */;
if (!final) { if (!final) {
if(ti->head) assert(ti->head);
ti->head->current = to_end ? ti->head->n_entries : 0; ti->head->current = to_end ? ti->head->n_entries : 0;
ti->path_ambiguities = 0; ti->path_ambiguities = 0;
git_buf_clear(&ti->path); git_buf_clear(&ti->path);
...@@ -774,11 +777,12 @@ static void tree_iterator__free(git_iterator *self) ...@@ -774,11 +777,12 @@ static void tree_iterator__free(git_iterator *self)
{ {
tree_iterator *ti = (tree_iterator *)self; tree_iterator *ti = (tree_iterator *)self;
if (ti->head) {
tree_iterator__pop_all(ti, true, false); tree_iterator__pop_all(ti, true, false);
if(ti->head)
git_tree_free(ti->head->entries[0]->tree); git_tree_free(ti->head->entries[0]->tree);
git__free(ti->head); git__free(ti->head);
}
git_pool_clear(&ti->pool); git_pool_clear(&ti->pool);
git_buf_free(&ti->path); git_buf_free(&ti->path);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment