Calculating i could sometimes cause an unsigned integer overflow, which
led to runtime errors on integer sanitized builds.
runtime error: unsigned integer overflow: 0 - 1 cannot be represented in
type 'unsigned int'
This refactors the loop to avoid the overflow.
Bug:
30969751
Test: Compiles and device boots.
Change-Id: I468d064eda5213fd773a094412cd669fc23617dc
static int audio_route_update_path(struct audio_route *ar, const char *name, bool reverse)
{
struct mixer_path *path;
- int32_t i, end;
unsigned int j;
if (!ar) {
return -1;
}
- i = reverse ? (path->length - 1) : 0;
- end = reverse ? -1 : (int32_t)path->length;
- while (i != end) {
+ for (size_t i = 0; i < path->length; ++i) {
unsigned int ctl_index;
enum mixer_ctl_type type;
- ctl_index = path->setting[i].ctl_index;
+ ctl_index = path->setting[reverse ? path->length - 1 - i : i].ctl_index;
struct mixer_state * ms = &ar->mixer_state[ctl_index];
break;
}
}
-
- i = reverse ? (i - 1) : (i + 1);
}
return 0;
}