[gtk-vnc] Fix framebuffer update boundary check
- From: Daniel P. Berrange <dberrange src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-vnc] Fix framebuffer update boundary check
- Date: Mon, 29 Nov 2010 11:12:20 +0000 (UTC)
commit f3fc5e57a78d4be9872f1394f697b9929873a737
Author: Daniel P. Berrange <dan berrange com>
Date: Tue Nov 23 22:59:37 2010 +0000
Fix framebuffer update boundary check
Framebuffer boundary checks need to take into account offset,
in addition to width/height
* src/vncconnection.c: Fix boundary check
src/vncconnection.c | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
---
diff --git a/src/vncconnection.c b/src/vncconnection.c
index 433256a..165a5f1 100644
--- a/src/vncconnection.c
+++ b/src/vncconnection.c
@@ -2653,13 +2653,14 @@ static void vnc_connection_ext_key_event(VncConnection *conn)
static gboolean vnc_connection_validate_boundary(VncConnection *conn,
+ guint16 x, guint16 y,
guint16 width, guint16 height)
{
VncConnectionPrivate *priv = conn->priv;
- if (width > priv->width || height > priv->height) {
- VNC_DEBUG("Framebuffer update %dx%d outside boundary %dx%d",
- width, height, priv->width, priv->height);
+ if ((x + width) > priv->width || (y + height) > priv->height) {
+ VNC_DEBUG("Framebuffer update %dx%d at %d,%d outside boundary %dx%d",
+ width, height, x, y, priv->width, priv->height);
priv->has_error = TRUE;
}
@@ -2681,37 +2682,37 @@ static gboolean vnc_connection_framebuffer_update(VncConnection *conn, gint32 et
switch (etype) {
case VNC_CONNECTION_ENCODING_RAW:
- if (!vnc_connection_validate_boundary(conn, width, height))
+ if (!vnc_connection_validate_boundary(conn, x, y, width, height))
break;
vnc_connection_raw_update(conn, x, y, width, height);
vnc_connection_update(conn, x, y, width, height);
break;
case VNC_CONNECTION_ENCODING_COPY_RECT:
- if (!vnc_connection_validate_boundary(conn, width, height))
+ if (!vnc_connection_validate_boundary(conn, x, y, width, height))
break;
vnc_connection_copyrect_update(conn, x, y, width, height);
vnc_connection_update(conn, x, y, width, height);
break;
case VNC_CONNECTION_ENCODING_RRE:
- if (!vnc_connection_validate_boundary(conn, width, height))
+ if (!vnc_connection_validate_boundary(conn, x, y, width, height))
break;
vnc_connection_rre_update(conn, x, y, width, height);
vnc_connection_update(conn, x, y, width, height);
break;
case VNC_CONNECTION_ENCODING_HEXTILE:
- if (!vnc_connection_validate_boundary(conn, width, height))
+ if (!vnc_connection_validate_boundary(conn, x, y, width, height))
break;
vnc_connection_hextile_update(conn, x, y, width, height);
vnc_connection_update(conn, x, y, width, height);
break;
case VNC_CONNECTION_ENCODING_ZRLE:
- if (!vnc_connection_validate_boundary(conn, width, height))
+ if (!vnc_connection_validate_boundary(conn, x, y, width, height))
break;
vnc_connection_zrle_update(conn, x, y, width, height);
vnc_connection_update(conn, x, y, width, height);
break;
case VNC_CONNECTION_ENCODING_TIGHT:
- if (!vnc_connection_validate_boundary(conn, width, height))
+ if (!vnc_connection_validate_boundary(conn, x, y, width, height))
break;
vnc_connection_tight_update(conn, x, y, width, height);
vnc_connection_update(conn, x, y, width, height);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]