xfree86: EDID Est III parsing can walk off end of array

Using -O3 gcc notes that m could reach beyound the end of the EstIIIModes array,
if the last bits of the 11s byte where set.
Fix this, by extending the array to cover all possible bits from est.

https://bugs.freedesktop.org/show_bug.cgi?id=45623

Signed-off-by: Torsten Kaiser <x11@ariolc.dyndns.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 0b3abacb64)
This commit is contained in:
Torsten Kaiser 2012-07-06 12:06:13 -07:00 committed by Peter Hutterer
parent e4497cd002
commit f27fcb81c4

View file

@ -723,7 +723,13 @@ static const struct {
1920, 1200, 75, 0}, {
1920, 1200, 85, 0}, {
1920, 1440, 60, 0}, {
1920, 1440, 75, 0},};
1920, 1440, 75, 0},
/* fill up last byte */
{
0,0,0,0}, {
0,0,0,0}, {
0,0,0,0}, {
0,0,0,0}, };
static DisplayModePtr
DDCModesFromEstIII(unsigned char *est)
@ -735,7 +741,8 @@ DDCModesFromEstIII(unsigned char *est)
for (j = 7; j > 0; j--) {
if (est[i] & (1 << j)) {
m = (i * 8) + (7 - j);
modes = xf86ModesAdd(modes,
if (EstIIIModes[m].w)
modes = xf86ModesAdd(modes,
FindDMTMode(EstIIIModes[m].w,
EstIIIModes[m].h,
EstIIIModes[m].r,