[gtk-vnc] Add preconditions to VncDisplay public methods
- From: Daniel P. Berrange <dberrange src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-vnc] Add preconditions to VncDisplay public methods
- Date: Wed, 8 Feb 2017 12:37:35 +0000 (UTC)
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]