Author: axeld Date: 2011-07-19 23:54:27 +0200 (Tue, 19 Jul 2011) New Revision: 42456 Changeset: https://dev.haiku-os.org/changeset/42456 Ticket: https://dev.haiku-os.org/ticket/7510 Ticket: https://dev.haiku-os.org/ticket/7847 Modified: haiku/trunk/src/add-ons/accelerants/common/dump_edid.c Log: * Don't crash on invalid EDID modes. * This might fix #7847, as well as #7510. Modified: haiku/trunk/src/add-ons/accelerants/common/dump_edid.c =================================================================== --- haiku/trunk/src/add-ons/accelerants/common/dump_edid.c 2011-07-19 20:54:21 UTC (rev 42455) +++ haiku/trunk/src/add-ons/accelerants/common/dump_edid.c 2011-07-19 21:54:27 UTC (rev 42456) @@ -35,7 +35,8 @@ 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 @@ 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);