commit a2965dbecb29aa632bfb7346d3f970ae1545dde3 from: Stefan Sperling date: Fri Jun 22 07:52:27 2018 UTC fix got_object_idset_remove_random() for single-element set commit - 441e144cdc3b06bd194fd1e33f45a639cc9848f9 commit + a2965dbecb29aa632bfb7346d3f970ae1545dde3 blob - 234ba60855b9a639f224b01c1bc9999a99169602 blob + bfd13136b4b4d3a004ddfae210e37e3237e193e6 --- lib/object_idset.c +++ lib/object_idset.c @@ -199,10 +199,13 @@ got_object_idset_remove_random(void **data, struct got if (set->nelem == 0) return got_error(GOT_ERR_NO_OBJ); - n = arc4random_uniform(set->nelem); + if (set->nelem == 1) + n = 0; + else + n = arc4random_uniform(set->nelem); for (i = 0; i < nitems(set->entries); i++) { TAILQ_FOREACH_SAFE(entry, &set->entries[i], entry, tmp) { - if (--n == 0) { + if (n == 0) { TAILQ_REMOVE(&set->entries[i], entry, entry); if (data) *data = entry->data; @@ -210,8 +213,8 @@ got_object_idset_remove_random(void **data, struct got set->nelem--; return NULL; } + n--; } - } return got_error(GOT_ERR_NO_OBJ);