[haiku-commits] r42456 - haiku/trunk/src/add-ons/accelerants/common

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 19 Jul 2011 23:54:27 +0200 (CEST)

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);


Other related posts:

  • » [haiku-commits] r42456 - haiku/trunk/src/add-ons/accelerants/common - axeld