diff options
author | Adam Jackson <ajax@benzedrine.nwnk.net> | 2007-03-28 12:03:19 -0400 |
---|---|---|
committer | Adam Jackson <ajax@benzedrine.nwnk.net> | 2007-03-28 12:03:19 -0400 |
commit | 5ba4d9eedf1b4ce4795bf910cd184872e2d9b3fc (patch) | |
tree | 351504051ffdbee57216feba76c4c82c4cd494c7 /hw/xfree86/ddc | |
parent | 85220446359a75ea2c359b418b4051c04eea739c (diff) |
Refuse to create tiny modes from EDID detailed timing.
Diffstat (limited to 'hw/xfree86/ddc')
-rw-r--r-- | hw/xfree86/ddc/edid_modes.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/hw/xfree86/ddc/edid_modes.c b/hw/xfree86/ddc/edid_modes.c index cfc8ddc13..926bc8921 100644 --- a/hw/xfree86/ddc/edid_modes.c +++ b/hw/xfree86/ddc/edid_modes.c @@ -107,6 +107,19 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing, { DisplayModePtr Mode; + /* + * Refuse to create modes that are insufficiently large. 64 is a random + * number, maybe the spec says something about what the minimum is. In + * particular I see this frequently with _old_ EDID, 1.0 or so, so maybe + * our parser is just being too aggresive there. + */ + if (timing->h_active < 64 || timing->v_active < 64) { + xf86DrvMsg(scrnIndex, X_INFO, + "%s: Ignoring tiny %dx%d mode\n", __func__, + timing->h_active, timing->v_active); + return NULL; + } + /* We don't do stereo */ if (timing->stereo) { xf86DrvMsg(scrnIndex, X_INFO, |