Fix for infinite loop in cycle_competions, and potential issue in

fish_pager when given an empty completion list
This commit is contained in:
ridiculousfish 2013-09-10 21:13:47 -07:00
parent b993dce12f
commit 61c5b631f3
2 changed files with 9 additions and 5 deletions

View file

@ -1370,6 +1370,11 @@ int main(int argc, char **argv)
// debug( 3, L"prefix is '%ls'", prefix ); // debug( 3, L"prefix is '%ls'", prefix );
if (comp.empty())
{
exit_without_destructors(EXIT_FAILURE);
}
init(mangle_descriptors, result_fd); init(mangle_descriptors, result_fd);
mangle_descriptions(comp); mangle_descriptions(comp);

View file

@ -1702,18 +1702,17 @@ static const completion_t *cycle_competions(const std::vector<completion_t> &com
if (size == 0) if (size == 0)
return NULL; return NULL;
// note start_idx will be set to -1 initially, so that when it gets incremented we start at 0
const size_t start_idx = *inout_idx; const size_t start_idx = *inout_idx;
size_t idx = start_idx; size_t idx = start_idx;
const completion_t *result = NULL; const completion_t *result = NULL;
for (;;) size_t remaining = comp.size();
while (remaining--)
{ {
/* Bump the index */ /* Bump the index */
idx = (idx + 1) % size; idx = (idx + 1) % size;
/* Bail if we've looped */
if (idx == start_idx)
break;
/* Get the completion */ /* Get the completion */
const completion_t &c = comp.at(idx); const completion_t &c = comp.at(idx);