From 69b1511d01b442f0eba706e3384310b822990839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 19 Jul 2011 21:54:27 +0000 Subject: [PATCH] * Don't crash on invalid EDID modes. * This might fix #7847, as well as #7510. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42456 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/accelerants/common/dump_edid.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/add-ons/accelerants/common/dump_edid.c b/src/add-ons/accelerants/common/dump_edid.c index 5001c9225b..f1a3f1ed5d 100644 --- a/src/add-ons/accelerants/common/dump_edid.c +++ b/src/add-ons/accelerants/common/dump_edid.c @@ -35,7 +35,8 @@ edid_dump(edid1_info *edid) edid->version.revision); dprintf("Type: %s\n", edid->display.input_type ? "Digital" : "Analog"); - dprintf("Size: %d cm x %d cm\n", edid->display.h_size, edid->display.v_size); + dprintf("Size: %d cm x %d cm\n", edid->display.h_size, + edid->display.v_size); dprintf("Gamma=%.3f\n", (edid->display.gamma + 100) / 100.0); dprintf("White (X,Y)=(%.3f,%.3f)\n", edid->display.white_x / 1024.0, edid->display.white_y / 1024.0); @@ -151,21 +152,29 @@ edid_dump(edid1_info *edid) case EDID1_IS_DETAILED_TIMING: { edid1_detailed_timing *timing = &monitor->data.detailed_timing; + if (timing->h_active + timing->h_blank == 0 + || timing->v_active + timing->v_blank == 0) { + dprintf("Invalid video mode (%dx%d)\n", timing->h_active, + timing->v_active); + continue; + } dprintf("Additional Video Mode (%dx%d@%dHz):\n", timing->h_active, timing->v_active, (timing->pixel_clock * 10000 - / (timing->h_active + timing->h_blank) - / (timing->v_active + timing->v_blank))); + / (timing->h_active + timing->h_blank) + / (timing->v_active + timing->v_blank))); // Refresh rate = pixel clock in MHz / Htotal / Vtotal dprintf("clock=%f MHz\n", timing->pixel_clock / 100.0); dprintf("h: (%d, %d, %d, %d)\n", timing->h_active, timing->h_active + timing->h_sync_off, - timing->h_active + timing->h_sync_off + timing->h_sync_width, + timing->h_active + timing->h_sync_off + + timing->h_sync_width, timing->h_active + timing->h_blank); dprintf("v: (%d, %d, %d, %d)\n", timing->v_active, timing->v_active + timing->v_sync_off, - timing->v_active + timing->v_sync_off + timing->v_sync_width, + timing->v_active + timing->v_sync_off + + timing->v_sync_width, timing->v_active + timing->v_blank); dprintf("size: %.1f cm x %.1f cm\n", timing->h_size / 10.0, timing->v_size / 10.0);