more fix_iterator() bugs
the fix_iterator() function moves an iterator so that it points to the predecessor of the searched-for name when that name doesn't exist in the database. the unit tests only checked the correctness of the top of the stack, however, and missed some cases where interior branches in the stack could be missing or duplicated. in these cases, the iterator would produce inconsistent results when walked.
in other cases, it was possible for fix_iterator() to enter an infinite loop.
both of these issues have been addressed, and the unit test has been updated to test for them.
Edited by Evan Hunt