[gtk-vnc] Add preconditions to VncDisplay public methods



commit 2b8283883ee666603fc654944975e41540859648
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Fri Dec 9 16:29:16 2016 +0100

    Add preconditions to VncDisplay public methods
    
    This should catch invalid arguments being passed to these. This required
    moving the VncDisplayPrivate *priv = display->priv; assignment as the
    VNC_IS_DISPLAY(display) check is also a NULL check which we want to
    happen before dereferencing it.

 src/vncdisplay.c |   43 ++++++++++++++++++++++++++++++++++---------
 1 files changed, 34 insertions(+), 9 deletions(-)
---
diff --git a/src/vncdisplay.c b/src/vncdisplay.c
index e4c2dc7..ba84296 100644
--- a/src/vncdisplay.c
+++ b/src/vncdisplay.c
@@ -1778,8 +1778,11 @@ static void on_disconnected(VncConnection *conn G_GNUC_UNUSED,
  */
 gboolean vnc_display_open_fd(VncDisplay *obj, int fd)
 {
-    VncDisplayPrivate *priv = obj->priv;
+    VncDisplayPrivate *priv;
+
+    g_return_val_if_fail(VNC_IS_DISPLAY(obj), FALSE);
 
+    priv = obj->priv;
     if (vnc_connection_is_open(priv->conn))
         return FALSE;
 
@@ -1811,8 +1814,11 @@ gboolean vnc_display_open_fd(VncDisplay *obj, int fd)
  */
 gboolean vnc_display_open_fd_with_hostname(VncDisplay *obj, int fd, const char *hostname)
 {
-    VncDisplayPrivate *priv = obj->priv;
+    VncDisplayPrivate *priv;
+
+    g_return_val_if_fail(VNC_IS_DISPLAY(obj), FALSE);
 
+    priv = obj->priv;
     if (vnc_connection_is_open(priv->conn))
         return FALSE;
 
@@ -1849,8 +1855,12 @@ gboolean vnc_display_open_fd_with_hostname(VncDisplay *obj, int fd, const char *
  */
 gboolean vnc_display_open_addr(VncDisplay *obj, GSocketAddress *addr, const char *hostname)
 {
-    VncDisplayPrivate *priv = obj->priv;
+    VncDisplayPrivate *priv;
+
+    g_return_val_if_fail(VNC_IS_DISPLAY(obj), FALSE);
+    g_return_val_if_fail(addr != NULL, FALSE);
 
+    priv = obj->priv;
     if (vnc_connection_is_open(priv->conn))
         return FALSE;
 
@@ -1879,8 +1889,13 @@ gboolean vnc_display_open_addr(VncDisplay *obj, GSocketAddress *addr, const char
  */
 gboolean vnc_display_open_host(VncDisplay *obj, const char *host, const char *port)
 {
-    VncDisplayPrivate *priv = obj->priv;
+    VncDisplayPrivate *priv;
 
+    g_return_val_if_fail(VNC_IS_DISPLAY(obj), FALSE);
+    g_return_val_if_fail(host != NULL, FALSE);
+    g_return_val_if_fail(port != NULL, FALSE);
+
+    priv = obj->priv;
     if (vnc_connection_is_open(priv->conn))
         return FALSE;
 
@@ -1906,9 +1921,9 @@ gboolean vnc_display_open_host(VncDisplay *obj, const char *host, const char *po
  */
 gboolean vnc_display_is_open(VncDisplay *obj)
 {
-    VncDisplayPrivate *priv = obj->priv;
+    g_return_val_if_fail(VNC_IS_DISPLAY(obj), FALSE);
 
-    return vnc_connection_is_open(priv->conn);
+    return vnc_connection_is_open(obj->priv->conn);
 }
 
 
@@ -1923,9 +1938,12 @@ gboolean vnc_display_is_open(VncDisplay *obj)
  */
 void vnc_display_close(VncDisplay *obj)
 {
-    VncDisplayPrivate *priv = obj->priv;
+    VncDisplayPrivate *priv;
     GtkWidget *widget = GTK_WIDGET(obj);
 
+    g_return_if_fail(VNC_IS_DISPLAY(obj));
+
+    priv = obj->priv;
     if (vnc_connection_is_open(priv->conn)) {
         VNC_DEBUG("Requesting graceful shutdown of connection");
         vnc_connection_shutdown(priv->conn);
@@ -1951,8 +1969,9 @@ void vnc_display_close(VncDisplay *obj)
  */
 VncConnection * vnc_display_get_connection(VncDisplay *obj)
 {
-    VncDisplayPrivate *priv = obj->priv;
-    return priv->conn;
+    g_return_val_if_fail(VNC_IS_DISPLAY(obj), NULL);
+
+    return obj->priv->conn;
 }
 
 
@@ -1970,6 +1989,8 @@ VncConnection * vnc_display_get_connection(VncDisplay *obj)
  */
 void vnc_display_send_keys(VncDisplay *obj, const guint *keyvals, int nkeyvals)
 {
+    g_return_if_fail(VNC_IS_DISPLAY(obj));
+
     vnc_display_send_keys_ex(obj, keyvals,
                              nkeyvals, VNC_DISPLAY_KEY_EVENT_CLICK);
 }
@@ -2013,6 +2034,8 @@ void vnc_display_send_keys_ex(VncDisplay *obj, const guint *keyvals,
 {
     int i;
 
+    g_return_if_fail(VNC_IS_DISPLAY(obj));
+
     if (obj->priv->conn == NULL || !vnc_connection_is_open(obj->priv->conn) || obj->priv->read_only)
         return;
 
@@ -2046,6 +2069,8 @@ void vnc_display_send_pointer(VncDisplay *obj, gint x, gint y, int button_mask)
 {
     VncDisplayPrivate *priv = obj->priv;
 
+    g_return_if_fail(VNC_IS_DISPLAY(obj));
+
     if (priv->conn == NULL || !vnc_connection_is_open(obj->priv->conn))
         return;
 


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