]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
Fix SIGFPE for vnc display of width/height = 1
authorChris Webb <chris@arachsys.com>
Mon, 8 Mar 2010 14:34:49 +0000 (14:34 +0000)
committerAurelien Jarno <aurelien@aurel32.net>
Sun, 11 Apr 2010 11:34:43 +0000 (13:34 +0200)
During boot, the screen gets resized to height 1 and a mouse click at this
point will cause a division by zero when calculating the absolute pointer
position from the pixel (x, y). Return a click in the middle of the screen
instead in this case.

Signed-off-by: Chris Webb <chris@arachsys.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
(cherry picked from commit cc39a92cbfc80c70d2b83708a4c9b309c3126ac3)

vnc.c

diff --git a/vnc.c b/vnc.c
index a1f9c9293e8ce7012656069f81e140f635d2a2e1..8566a4ba1b2432b39d9c620419b25ddc1b40cfd4 100644 (file)
--- a/vnc.c
+++ b/vnc.c
@@ -1421,8 +1421,10 @@ static void pointer_event(VncState *vs, int button_mask, int x, int y)
         dz = 1;
 
     if (vs->absolute) {
-        kbd_mouse_event(x * 0x7FFF / (ds_get_width(vs->ds) - 1),
-                        y * 0x7FFF / (ds_get_height(vs->ds) - 1),
+        kbd_mouse_event(ds_get_width(vs->ds) > 1 ?
+                          x * 0x7FFF / (ds_get_width(vs->ds) - 1) : 0x4000,
+                        ds_get_height(vs->ds) > 1 ?
+                          y * 0x7FFF / (ds_get_height(vs->ds) - 1) : 0x4000,
                         dz, buttons);
     } else if (vnc_has_feature(vs, VNC_FEATURE_POINTER_TYPE_CHANGE)) {
         x -= 0x7FFF;