DARWIN: Use NSUInteger for indexGreaterThanIndex return value

The indexGreaterThanIndex function returns the closest index from the
index set that is greater than a specified index. This function is
typically used in a loop to iterate through a list of items until it
returns NSNotFound, indicating the end of the list.

In AFSCommanderPref.m, the following pattern is being used:

int index = 0;
do {
    ...
} while((index = [... indexGreaterThanIndex:index]) != NSNotFound);

The issue arises because indexGreaterThanIndex returns an NSUInteger,
while the loop uses an int for index. If NSNotFound is cast to an int,
it becomes -1, causing the loop to never terminate and leading to a
crash.

To fix this problem, change the type of index from int to NSUInteger to
ensure proper comparison and termination of the loop when NSNotFound is
returned.

Change-Id: I0b8b38d201b500c2d6d7778f0132ce17f7c04ac8
Reviewed-on: https://gerrit.openafs.org/15961
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
This commit is contained in:
Marcio Barbosa 2024-11-21 06:05:12 -08:00 committed by Andrew Deason
parent e45d0bd1e1
commit d76df7cb24

View File

@ -569,7 +569,7 @@
case REMOVE_CELL_CONTROL_TAG: case REMOVE_CELL_CONTROL_TAG:
{ {
int index = 0; NSUInteger index;
NSIndexSet *selectedIndex = [(NSTableView*)cellList selectedRowIndexes]; NSIndexSet *selectedIndex = [(NSTableView*)cellList selectedRowIndexes];
if( [selectedIndex count] > 0) { if( [selectedIndex count] > 0) {
index = [selectedIndex firstIndex]; index = [selectedIndex firstIndex];
@ -697,7 +697,7 @@
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
- (IBAction) unlog:(id) sender - (IBAction) unlog:(id) sender
{ {
int index = -1; NSUInteger index;
NSIndexSet *selectedIndex = [tokensTable selectedRowIndexes]; NSIndexSet *selectedIndex = [tokensTable selectedRowIndexes];
if( [selectedIndex count] > 0) { if( [selectedIndex count] > 0) {
index = [selectedIndex firstIndex]; index = [selectedIndex firstIndex];
@ -941,14 +941,14 @@
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
- (IBAction) removeLink:(id) sender { - (IBAction) removeLink:(id) sender {
if(!linkConfiguration) return; if(!linkConfiguration) return;
int index = 0; NSUInteger index;
NSArray *keys = [linkConfiguration allKeys]; NSArray *keys = [linkConfiguration allKeys];
NSIndexSet *linkToRemove = [tableViewLink selectedRowIndexes]; NSIndexSet *linkToRemove = [tableViewLink selectedRowIndexes];
if( [linkToRemove count] > 0) { if( [linkToRemove count] > 0) {
index = [linkToRemove firstIndex]; index = [linkToRemove firstIndex];
do { do {
[linkConfiguration removeObjectForKey:[keys objectAtIndex:index]]; [linkConfiguration removeObjectForKey:[keys objectAtIndex:index]];
} while ((index = [linkToRemove indexGreaterThanIndex:index]) != -1); } while ((index = [linkToRemove indexGreaterThanIndex:index]) != NSNotFound);
} }
//write the new configuration //write the new configuration