[PATCH] edid-decode: Avoid division by zero

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



There are some weird monitors that returns invalid data, as zeroed
Horizontal/Vertical Active/Blanking.

This causes edid-decode to crash with a divsion by error exception. This
simple patch avoids so, checking for the divisor before proceeding.

Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx>
---
 edid-decode.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/edid-decode.c b/edid-decode.c
index 7442f8a..4b2cef8 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -1022,6 +1022,17 @@ static int detailed_block(const unsigned char *x,
int in_extension)
 		break;
 	}

+	if ((ha + hbl) == 0 ||
+	    (va + vbl) == 0) {
+		printf("Invalid data. Refusing to continue.\n"
+		       "Horizontal Active %4d\n"
+		       "Horizontal Blanking %4d\n"
+		       "Vertical Active %4d\n"
+		       "Vertical Blanking %4d\n",
+		       ha, hbl, va, vbl);
+		return 0;
+	}
+
 	pixclk_khz = (x[0] + (x[1] << 8)) * 10;
 	refresh = (pixclk_khz * 1000) / ((ha + hbl) * (va + vbl));
 	printf("Detailed mode: Clock %.3f MHz, %d mm x %d mm\n"
-- 
2.17.1





[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux