]> jfr.im git - solanum.git/commit
ircd: chmode: Avoid referencing beyond the end of the flags_list array in set_channel...
authorSimon Arlott <sa.me.uk>
Sat, 6 Feb 2016 15:50:17 +0000 (15:50 +0000)
committerWilliam Pitcock <redacted>
Tue, 9 Feb 2016 16:41:37 +0000 (10:41 -0600)
commit87c44482d0e859759813ad232227623cc9a5384b
tree05e6cda678269bf828e184c046033e008b125c2f
parent41aed6bbf74bce4689042fc89cd5324678ae92ee
ircd: chmode: Avoid referencing beyond the end of the flags_list array in set_channel_mode

We're setting flags to flags_list[3] at the end of the loop, but the
array only has 3 elements. Unless the compiler optimises this away
(because flags will not be used again) we're accessing memory beyond
the end of the array.

With gcc-4.9:
chmode.c: In function 'set_channel_mode':
chmode.c:1548:54: warning: iteration 2u invokes undefined behavior [-Waggressive-loop-optimizations]
  for(j = 0, flags = flags_list[0]; j < 3; j++, flags = flags_list[j])
                                                      ^
chmode.c:1548:2: note: containing loop
  for(j = 0, flags = flags_list[0]; j < 3; j++, flags = flags_list[j])

Explicitly set "flags = flags_list[j]" at the start of each loop
iteration, which will avoid referencing off the end of the array.
ircd/chmode.c