Commit Diff


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);