qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 3/5] vmware-vga: use vmsvga_verify_rect in vmsvg


From: BALATON Zoltan
Subject: Re: [Qemu-devel] [PATCH 3/5] vmware-vga: use vmsvga_verify_rect in vmsvga_update_rect
Date: Tue, 14 Oct 2014 11:29:13 +0200 (CEST)
User-agent: Alpine 2.02 (LMD 1266 2009-07-14)

On Tue, 14 Oct 2014, Gerd Hoffmann wrote:
Switch vmsvga_update_rect over to use vmsvga_verify_rect.  Slight change
in behavior:  We don't try to automatically fixup rectangles any more.
Invalid update requests will be ignored instead.

Are you sure this won't break clients? I remember that maybe Windows drivers did produce requests with partially off screen rectangles for objects that are partially visible. I don't recall if this was for windows dragged off screen or mouse pointer near the screen but there was a reason this fixup was added. Did you test this?

Regards,
BALATON Zoltan


Cc: address@hidden
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/display/vmware_vga.c | 32 ++------------------------------
1 file changed, 2 insertions(+), 30 deletions(-)

diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c
index fc0a2a7..7564f88 100644
--- a/hw/display/vmware_vga.c
+++ b/hw/display/vmware_vga.c
@@ -356,36 +356,8 @@ static inline void vmsvga_update_rect(struct 
vmsvga_state_s *s,
    uint8_t *src;
    uint8_t *dst;

-    if (x < 0) {
-        fprintf(stderr, "%s: update x was < 0 (%d)\n", __func__, x);
-        w += x;
-        x = 0;
-    }
-    if (w < 0) {
-        fprintf(stderr, "%s: update w was < 0 (%d)\n", __func__, w);
-        w = 0;
-    }
-    if (x + w > surface_width(surface)) {
-        fprintf(stderr, "%s: update width too large x: %d, w: %d\n",
-                __func__, x, w);
-        x = MIN(x, surface_width(surface));
-        w = surface_width(surface) - x;
-    }
-
-    if (y < 0) {
-        fprintf(stderr, "%s: update y was < 0 (%d)\n",  __func__, y);
-        h += y;
-        y = 0;
-    }
-    if (h < 0) {
-        fprintf(stderr, "%s: update h was < 0 (%d)\n",  __func__, h);
-        h = 0;
-    }
-    if (y + h > surface_height(surface)) {
-        fprintf(stderr, "%s: update height too large y: %d, h: %d\n",
-                __func__, y, h);
-        y = MIN(y, surface_height(surface));
-        h = surface_height(surface) - y;
+    if (!vmsvga_verify_rect(surface, __func__, x, y, w, h)) {
+        return;
    }

    bypl = surface_stride(surface);
--
1.8.3.1






reply via email to

[Prev in Thread] Current Thread [Next in Thread]