summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Goldstein <cardoe@gentoo.org>2011-01-14 23:03:42 +0000
committerDoug Goldstein <cardoe@gentoo.org>2011-01-14 23:03:42 +0000
commit383823cbdd07d03c613b8b7b270f160672fd4f58 (patch)
tree166b81c6464d6d91061d02fa0763ec2c3f8bc94d /net-libs
parentStable on amd64 wrt bug #349877 (diff)
downloadgentoo-2-383823cbdd07d03c613b8b7b270f160672fd4f58.tar.gz
gentoo-2-383823cbdd07d03c613b8b7b270f160672fd4f58.tar.bz2
gentoo-2-383823cbdd07d03c613b8b7b270f160672fd4f58.zip
Fix several more upstream discovered crashers and interaction bugs.
(Portage version: 2.1.9.31/cvs/Linux x86_64)
Diffstat (limited to 'net-libs')
-rw-r--r--net-libs/gtk-vnc/ChangeLog11
-rw-r--r--net-libs/gtk-vnc/files/gtk-vnc-0.4.2-fb-bounds-fix.patch78
-rw-r--r--net-libs/gtk-vnc/files/gtk-vnc-0.4.2-gnutls-crash-fix.patch62
-rw-r--r--net-libs/gtk-vnc/files/gtk-vnc-0.4.2-pre-conn-crash-fix.patch36
-rw-r--r--net-libs/gtk-vnc/files/gtk-vnc-0.4.2-shared-flag.patch34
-rw-r--r--net-libs/gtk-vnc/gtk-vnc-0.4.2-r2.ebuild66
6 files changed, 286 insertions, 1 deletions
diff --git a/net-libs/gtk-vnc/ChangeLog b/net-libs/gtk-vnc/ChangeLog
index 56199fc65ec3..429d8d351c71 100644
--- a/net-libs/gtk-vnc/ChangeLog
+++ b/net-libs/gtk-vnc/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for net-libs/gtk-vnc
# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-libs/gtk-vnc/ChangeLog,v 1.55 2011/01/13 22:08:01 cardoe Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-libs/gtk-vnc/ChangeLog,v 1.56 2011/01/14 23:03:42 cardoe Exp $
+
+*gtk-vnc-0.4.2-r2 (14 Jan 2011)
+
+ 14 Jan 2011; Doug Goldstein <cardoe@gentoo.org> +gtk-vnc-0.4.2-r2.ebuild,
+ +files/gtk-vnc-0.4.2-fb-bounds-fix.patch,
+ +files/gtk-vnc-0.4.2-gnutls-crash-fix.patch,
+ +files/gtk-vnc-0.4.2-pre-conn-crash-fix.patch,
+ +files/gtk-vnc-0.4.2-shared-flag.patch:
+ Fix several more upstream discovered crashers and interaction bugs.
*gtk-vnc-0.4.2-r1 (13 Jan 2011)
diff --git a/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-fb-bounds-fix.patch b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-fb-bounds-fix.patch
new file mode 100644
index 000000000000..c983456dcbf4
--- /dev/null
+++ b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-fb-bounds-fix.patch
@@ -0,0 +1,78 @@
+From f3fc5e57a78d4be9872f1394f697b9929873a737 Mon Sep 17 00:00:00 2001
+From: Daniel P. Berrange <dan@berrange.com>
+Date: Tue, 23 Nov 2010 22:59:37 +0000
+Subject: 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
+---
+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);
+--
+cgit v0.8.3.1
diff --git a/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-gnutls-crash-fix.patch b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-gnutls-crash-fix.patch
new file mode 100644
index 000000000000..d9dff3e80d34
--- /dev/null
+++ b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-gnutls-crash-fix.patch
@@ -0,0 +1,62 @@
+From 5760a2a28d85cb79e39063cfd8ee8aee975caf24 Mon Sep 17 00:00:00 2001
+From: Daniel P. Berrange <dan@berrange.com>
+Date: Mon, 22 Nov 2010 21:44:56 +0000
+Subject: Avoid crash in TLS cleanup code on shutdown
+
+The gnutls_bye() method may try to send data on the socket todo
+graceful TLS shutdown. The priv->sock variable is possibly
+already NULL at this point if the close was triggered via the
+vnc_connection_shutdown() method. Change the latter so that
+it only calls g_socket_close, not actually free'ing the
+priv->sock object immediately. Also put sanity check code in
+the TLS push/pull functions to catch future bugs in this area
+---
+diff --git a/src/vncconnection.c b/src/vncconnection.c
+index 4a0c53c..433256a 100644
+--- a/src/vncconnection.c
++++ b/src/vncconnection.c
+@@ -939,6 +939,12 @@ static ssize_t vnc_connection_tls_push(gnutls_transport_ptr_t transport,
+ int ret;
+ GError *error = NULL;
+
++ if (!priv->sock) {
++ VNC_DEBUG("Unexpected TLS push on closed socket");
++ errno = EBADF;
++ return -1;
++ }
++
+ ret = g_socket_send(priv->sock, data, len, NULL, &error);
+ if (ret < 0) {
+ if (error) {
+@@ -962,6 +968,12 @@ static ssize_t vnc_connection_tls_pull(gnutls_transport_ptr_t transport,
+ int ret;
+ GError *error = NULL;
+
++ if (!priv->sock) {
++ VNC_DEBUG("Unexpected TLS pull on closed socket");
++ errno = EBADF;
++ return -1;
++ }
++
+ ret = g_socket_receive(priv->sock, data, len, NULL, &error);
+ if (ret < 0) {
+ if (error) {
+@@ -4461,11 +4473,12 @@ void vnc_connection_shutdown(VncConnection *conn)
+ VNC_DEBUG("Waking up couroutine to shutdown gracefully");
+ g_io_wakeup(&priv->wait);
+
+- if (priv->sock) {
++ /* Closing the socket triggers an I/O error in the
++ * event loop resulting...eventually.. in a call
++ * to vnc_connection_close for full cleanup
++ */
++ if (priv->sock)
+ g_socket_close(priv->sock, NULL);
+- g_object_unref(priv->sock);
+- priv->sock = NULL;
+- }
+ }
+
+ gboolean vnc_connection_is_open(VncConnection *conn)
+--
+cgit v0.8.3.1
diff --git a/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-pre-conn-crash-fix.patch b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-pre-conn-crash-fix.patch
new file mode 100644
index 000000000000..e3a77c11886e
--- /dev/null
+++ b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-pre-conn-crash-fix.patch
@@ -0,0 +1,36 @@
+From f23f0ebf1b659208d5036e10ab1f32249a2e1a4c Mon Sep 17 00:00:00 2001
+From: Daniel P. Berrange <dan@berrange.com>
+Date: Mon, 22 Nov 2010 21:18:29 +0000
+Subject: Avoid crash in motion event & vnc_display_get_pixbuf
+
+If a mouse event occurs before a connection completes setup
+priv->fb will be NULL and a crash can occur. Likewise if
+vnc_display_get_pixbuf() is called before priv->fb is set,
+then a crash occurs. Add checks for NULL in both cases
+---
+diff --git a/src/vncdisplay.c b/src/vncdisplay.c
+index 55fbcf4..0b7e800 100644
+--- a/src/vncdisplay.c
++++ b/src/vncdisplay.c
+@@ -557,6 +557,9 @@ static gboolean motion_event(GtkWidget *widget, GdkEventMotion *motion)
+ if (priv->conn == NULL || !vnc_connection_is_initialized(priv->conn))
+ return FALSE;
+
++ if (!priv->fb)
++ return FALSE;
++
+ fbw = vnc_framebuffer_get_width(VNC_FRAMEBUFFER(priv->fb));
+ fbh = vnc_framebuffer_get_height(VNC_FRAMEBUFFER(priv->fb));
+
+@@ -2050,6 +2053,9 @@ GdkPixbuf *vnc_display_get_pixbuf(VncDisplay *obj)
+ !vnc_connection_is_initialized(priv->conn))
+ return NULL;
+
++ if (!priv->fb)
++ return NULL;
++
+ fb = VNC_FRAMEBUFFER(priv->fb);
+ surface = vnc_cairo_framebuffer_get_surface(priv->fb);
+ content = cairo_surface_get_content(surface) | CAIRO_CONTENT_COLOR;
+--
+cgit v0.8.3.1
diff --git a/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-shared-flag.patch b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-shared-flag.patch
new file mode 100644
index 000000000000..16d5cd9017f7
--- /dev/null
+++ b/net-libs/gtk-vnc/files/gtk-vnc-0.4.2-shared-flag.patch
@@ -0,0 +1,34 @@
+From ba169973b875f90bf787158588ee4258b71a6ba6 Mon Sep 17 00:00:00 2001
+From: Sébastien Granjoux <seb.sfo@free.fr>
+Date: Thu, 13 Jan 2011 16:36:33 +0000
+Subject: Fix setup of 'shared flag' when opening connection
+
+The VncDisplay class forgot to pass the 'shared flag' onto
+the VncConnection class when establishing a connection
+---
+diff --git a/src/vncdisplay.c b/src/vncdisplay.c
+index deab4d8..f8ee9ea 100644
+--- a/src/vncdisplay.c
++++ b/src/vncdisplay.c
+@@ -1407,6 +1407,9 @@ gboolean vnc_display_open_fd(VncDisplay *obj, int fd)
+ if (vnc_connection_is_open(priv->conn))
+ return FALSE;
+
++ if (!vnc_connection_set_shared(priv->conn, priv->shared_flag))
++ return FALSE;
++
+ if (!vnc_connection_open_fd(priv->conn, fd))
+ return FALSE;
+
+@@ -1422,6 +1425,9 @@ gboolean vnc_display_open_host(VncDisplay *obj, const char *host, const char *po
+ if (vnc_connection_is_open(priv->conn))
+ return FALSE;
+
++ if (!vnc_connection_set_shared(priv->conn, priv->shared_flag))
++ return FALSE;
++
+ if (!vnc_connection_open_host(priv->conn, host, port))
+ return FALSE;
+
+--
+cgit v0.8.3.1
diff --git a/net-libs/gtk-vnc/gtk-vnc-0.4.2-r2.ebuild b/net-libs/gtk-vnc/gtk-vnc-0.4.2-r2.ebuild
new file mode 100644
index 000000000000..6fe192f30f58
--- /dev/null
+++ b/net-libs/gtk-vnc/gtk-vnc-0.4.2-r2.ebuild
@@ -0,0 +1,66 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-libs/gtk-vnc/gtk-vnc-0.4.2-r2.ebuild,v 1.1 2011/01/14 23:03:42 cardoe Exp $
+
+EAPI="2"
+PYTHON_DEPEND="python? 2:2.4"
+
+inherit base gnome.org python
+
+DESCRIPTION="VNC viewer widget for GTK."
+HOMEPAGE="http://live.gnome.org/gtk-vnc"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+IUSE="examples +introspection python sasl"
+
+# libview is used in examples/gvncviewer -- no need
+# TODO: review nsplugin when it will be considered less experimental
+
+RDEPEND=">=dev-libs/glib-2.10:2
+ >=net-libs/gnutls-1.4
+ >=x11-libs/cairo-1.2
+ >=x11-libs/gtk+-2.18:2
+ x11-libs/libX11
+ introspection? ( >=dev-libs/gobject-introspection-0.9.4 )
+ python? ( >=dev-python/pygtk-2:2 )
+ sasl? ( dev-libs/cyrus-sasl )"
+DEPEND="${RDEPEND}
+ >=dev-lang/perl-5
+ dev-perl/Text-CSV
+ dev-util/pkgconfig
+ sys-devel/gettext
+ >=dev-util/intltool-0.40"
+
+pkg_setup() {
+ python_set_active_version 2
+}
+
+src_prepare() {
+ epatch "${FILESDIR}"/${P}-pre-conn-crash-fix.patch
+ epatch "${FILESDIR}"/${P}-gnutls-crash-fix.patch
+ epatch "${FILESDIR}"/${P}-fb-bounds-fix.patch
+ epatch "${FILESDIR}"/${P}-memory-leak-fix.patch
+ epatch "${FILESDIR}"/${P}-shared-flag.patch
+}
+
+src_configure() {
+ econf \
+ $(use_with examples) \
+ $(use_enable introspection) \
+ $(use_with python) \
+ $(use_with sasl) \
+ --with-coroutine=gthread \
+ --without-libview \
+ --with-gtk=2.0 \
+ --disable-static
+}
+
+src_install() {
+ # bug #328273
+ MAKEOPTS="${MAKEOPTS} -j1" \
+ base_src_install
+ python_clean_installation_image
+ dodoc AUTHORS ChangeLog NEWS README || die
+}