[libvirt] [libvirt-glib] Check arguments to public libvirt-gobject methods

Christophe Fergeau cfergeau at redhat.com
Tue May 22 09:12:20 UTC 2012


Some public methods in libvirt-gobject don't have g_return_if_fail
checks on their arguments. It happens that GNOME Boxes tries to call
gvir_connection_find_storage_pool_by_name with a NULL GVirConnection
causing a crash https://bugzilla.gnome.org/show_bug.cgi?id=676216 While
GNOME Boxes needs to be fixed not to pass an invalid value to this
function, it's better if libvirt-object sanity checks the argument it is
passed by the caller before using them.  In this commit, I've went over
all libvirt-gobject public functions to add g_return_if_fail checks
where needed.
---
 libvirt-gobject/libvirt-gobject-connection.c       |  122 +++++++++++++++++---
 libvirt-gobject/libvirt-gobject-domain-device.c    |    4 +
 libvirt-gobject/libvirt-gobject-domain-disk.c      |    1 +
 libvirt-gobject/libvirt-gobject-domain-interface.c |    1 +
 libvirt-gobject/libvirt-gobject-domain-snapshot.c  |    7 +-
 libvirt-gobject/libvirt-gobject-domain.c           |   70 +++++++++--
 libvirt-gobject/libvirt-gobject-interface.c        |   13 ++-
 libvirt-gobject/libvirt-gobject-manager.c          |   27 +++--
 libvirt-gobject/libvirt-gobject-network-filter.c   |   14 ++-
 libvirt-gobject/libvirt-gobject-network.c          |   13 ++-
 libvirt-gobject/libvirt-gobject-node-device.c      |   14 ++-
 libvirt-gobject/libvirt-gobject-secret.c           |    6 +-
 libvirt-gobject/libvirt-gobject-storage-pool.c     |   61 ++++++++--
 libvirt-gobject/libvirt-gobject-storage-vol.c      |   33 ++++--
 libvirt-gobject/libvirt-gobject-stream.c           |    6 +
 15 files changed, 321 insertions(+), 71 deletions(-)

diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c
index b12669d..3a99034 100644
--- a/libvirt-gobject/libvirt-gobject-connection.c
+++ b/libvirt-gobject/libvirt-gobject-connection.c
@@ -407,7 +407,14 @@ gboolean gvir_connection_open(GVirConnection *conn,
                               GCancellable *cancellable,
                               GError **err)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable),
+                         FALSE);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), FALSE);
+
+    priv = conn->priv;
 
     if (g_cancellable_set_error_if_cancelled(cancellable, err))
         return FALSE;
@@ -486,6 +493,9 @@ void gvir_connection_open_async(GVirConnection *conn,
 {
     GSimpleAsyncResult *res;
 
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     res = g_simple_async_result_new(G_OBJECT(conn),
                                     callback,
                                     user_data,
@@ -521,8 +531,12 @@ gboolean gvir_connection_open_finish(GVirConnection *conn,
 
 gboolean gvir_connection_is_open(GVirConnection *conn)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     gboolean open = TRUE;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     if (!priv->conn)
         open = FALSE;
@@ -532,7 +546,12 @@ gboolean gvir_connection_is_open(GVirConnection *conn)
 
 void gvir_connection_close(GVirConnection *conn)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
+
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
+
+    priv = conn->priv;
+
     g_debug("Close GVirConnection=%p", conn);
 
     g_mutex_lock(priv->lock);
@@ -613,7 +632,7 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
                                        GCancellable *cancellable,
                                        GError **err)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GHashTable *doms;
     gchar **inactive = NULL;
     gint ninactive = 0;
@@ -624,6 +643,12 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
     virConnectPtr vconn = NULL;
     GError *lerr = NULL;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable),
+                         FALSE);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), FALSE);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     if (!priv->conn) {
         g_set_error_literal(err, GVIR_CONNECTION_ERROR,
@@ -742,7 +767,7 @@ gboolean gvir_connection_fetch_storage_pools(GVirConnection *conn,
                                              GCancellable *cancellable,
                                              GError **err)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GHashTable *pools;
     gchar **inactive = NULL;
     gint ninactive = 0;
@@ -753,6 +778,12 @@ gboolean gvir_connection_fetch_storage_pools(GVirConnection *conn,
     virConnectPtr vconn = NULL;
     GError *lerr = NULL;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable),
+                         FALSE);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), FALSE);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     if (!priv->conn) {
         g_set_error_literal(err, GVIR_CONNECTION_ERROR,
@@ -891,6 +922,9 @@ void gvir_connection_fetch_domains_async(GVirConnection *conn,
 {
     GSimpleAsyncResult *res;
 
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     res = g_simple_async_result_new(G_OBJECT(conn),
                                     callback,
                                     user_data,
@@ -950,6 +984,9 @@ void gvir_connection_fetch_storage_pools_async(GVirConnection *conn,
 {
     GSimpleAsyncResult *res;
 
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     res = g_simple_async_result_new(G_OBJECT(conn),
                                     callback,
                                     user_data,
@@ -983,8 +1020,9 @@ gboolean gvir_connection_fetch_storage_pools_finish(GVirConnection *conn,
 
 const gchar *gvir_connection_get_uri(GVirConnection *conn)
 {
-    GVirConnectionPrivate *priv = conn->priv;
-    return priv->uri;
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+
+    return conn->priv->uri;
 }
 
 static void gvir_domain_ref(gpointer obj, gpointer ignore G_GNUC_UNUSED)
@@ -1004,9 +1042,12 @@ static void gvir_domain_ref(gpointer obj, gpointer ignore G_GNUC_UNUSED)
  */
 GList *gvir_connection_get_domains(GVirConnection *conn)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GList *domains = NULL;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     if (priv->domains != NULL) {
         domains = g_hash_table_get_values(priv->domains);
@@ -1030,9 +1071,12 @@ GList *gvir_connection_get_domains(GVirConnection *conn)
  */
 GList *gvir_connection_get_storage_pools(GVirConnection *conn)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GList *pools = NULL;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     if (priv->pools != NULL) {
         pools = g_hash_table_get_values(priv->pools);
@@ -1054,8 +1098,13 @@ GList *gvir_connection_get_storage_pools(GVirConnection *conn)
 GVirDomain *gvir_connection_get_domain(GVirConnection *conn,
                                        const gchar *uuid)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GVirDomain *dom;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(uuid != NULL, NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     dom = g_hash_table_lookup(priv->domains, uuid);
     if (dom)
@@ -1075,9 +1124,13 @@ GVirDomain *gvir_connection_get_domain(GVirConnection *conn,
 GVirStoragePool *gvir_connection_get_storage_pool(GVirConnection *conn,
                                                   const gchar *uuid)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GVirStoragePool *pool;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(uuid != NULL, NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     pool = g_hash_table_lookup(priv->pools, uuid);
     if (pool)
@@ -1098,10 +1151,13 @@ GVirStoragePool *gvir_connection_get_storage_pool(GVirConnection *conn,
 GVirDomain *gvir_connection_find_domain_by_id(GVirConnection *conn,
                                               gint id)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GHashTableIter iter;
     gpointer key, value;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     g_hash_table_iter_init(&iter, priv->domains);
 
@@ -1132,10 +1188,14 @@ GVirDomain *gvir_connection_find_domain_by_id(GVirConnection *conn,
 GVirDomain *gvir_connection_find_domain_by_name(GVirConnection *conn,
                                                 const gchar *name)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GHashTableIter iter;
     gpointer key, value;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(name != NULL, NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     g_hash_table_iter_init(&iter, priv->domains);
 
@@ -1168,10 +1228,14 @@ GVirDomain *gvir_connection_find_domain_by_name(GVirConnection *conn,
 GVirStoragePool *gvir_connection_find_storage_pool_by_name(GVirConnection *conn,
                                                            const gchar *name)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     GHashTableIter iter;
     gpointer key, value;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(name != NULL, NULL);
+
+    priv = conn->priv;
     g_mutex_lock(priv->lock);
     g_hash_table_iter_init(&iter, priv->pools);
 
@@ -1253,12 +1317,17 @@ GVirDomain *gvir_connection_create_domain(GVirConnection *conn,
 {
     gchar *xml;
     virDomainPtr handle;
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN(conf), NULL);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), NULL);
 
     xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
 
     g_return_val_if_fail(xml != NULL, NULL);
 
+    priv = conn->priv;
     handle = virDomainDefineXML(priv->conn, xml);
     g_free(xml);
     if (!handle) {
@@ -1302,12 +1371,17 @@ GVirDomain *gvir_connection_start_domain(GVirConnection *conn,
 {
     gchar *xml;
     virDomainPtr handle;
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN(conf), NULL);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), NULL);
 
     xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
 
     g_return_val_if_fail(xml != NULL, NULL);
 
+    priv = conn->priv;
     handle = virDomainCreateXML(priv->conn, xml, flags);
     g_free(xml);
     if (!handle) {
@@ -1350,12 +1424,17 @@ GVirStoragePool *gvir_connection_create_storage_pool
                                  GError **err) {
     const gchar *xml;
     virStoragePoolPtr handle;
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail(GVIR_CONFIG_IS_STORAGE_POOL(conf), NULL);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), NULL);
 
     xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
 
     g_return_val_if_fail(xml != NULL, NULL);
 
+    priv = conn->priv;
     if (!(handle = virStoragePoolDefineXML(priv->conn, xml, flags))) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                flags,
@@ -1390,10 +1469,14 @@ GVirStoragePool *gvir_connection_create_storage_pool
 GVirNodeInfo *gvir_connection_get_node_info(GVirConnection *conn,
                                             GError **err)
 {
-    GVirConnectionPrivate *priv = conn->priv;
+    GVirConnectionPrivate *priv;
     virNodeInfo info;
     GVirNodeInfo *ret;
 
+    g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), NULL);
+
+    priv = conn->priv;
     if (virNodeGetInfo(priv->conn, &info) < 0) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                0,
@@ -1480,6 +1563,9 @@ void gvir_connection_get_capabilities_async(GVirConnection *conn,
 {
     GSimpleAsyncResult *res;
 
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     res = g_simple_async_result_new(G_OBJECT(conn),
                                     callback,
                                     user_data,
diff --git a/libvirt-gobject/libvirt-gobject-domain-device.c b/libvirt-gobject/libvirt-gobject-domain-device.c
index 9a65468..f2f3dfc 100644
--- a/libvirt-gobject/libvirt-gobject-domain-device.c
+++ b/libvirt-gobject/libvirt-gobject-domain-device.c
@@ -167,6 +167,8 @@ virDomainPtr gvir_domain_device_get_domain_handle(GVirDomainDevice *self)
  */
 GVirDomain *gvir_domain_device_get_domain(GVirDomainDevice *device)
 {
+    g_return_val_if_fail(GVIR_IS_DOMAIN_DEVICE(device), NULL);
+
     return g_object_ref (device->priv->domain);
 }
 
@@ -180,6 +182,8 @@ GVirDomain *gvir_domain_device_get_domain(GVirDomainDevice *device)
  */
 GVirConfigDomainDevice *gvir_domain_device_get_config(GVirDomainDevice *device)
 {
+    g_return_val_if_fail(GVIR_IS_DOMAIN_DEVICE(device), NULL);
+
     return g_object_ref (device->priv->config);
 }
 
diff --git a/libvirt-gobject/libvirt-gobject-domain-disk.c b/libvirt-gobject/libvirt-gobject-domain-disk.c
index 607e26c..46b47fd 100644
--- a/libvirt-gobject/libvirt-gobject-domain-disk.c
+++ b/libvirt-gobject/libvirt-gobject-domain-disk.c
@@ -124,6 +124,7 @@ GVirDomainDiskStats *gvir_domain_disk_get_stats(GVirDomainDisk *self, GError **e
     const gchar *path;
 
     g_return_val_if_fail(GVIR_IS_DOMAIN_DISK(self), NULL);
+    g_return_val_if_fail((err == NULL) || (*err == NULL), NULL);
 
     handle = gvir_domain_device_get_domain_handle(GVIR_DOMAIN_DEVICE(self));
     path = gvir_domain_disk_get_path (self);
diff --git a/libvirt-gobject/libvirt-gobject-domain-interface.c b/libvirt-gobject/libvirt-gobject-domain-interface.c
index 7087cbc..3ae9a46 100644
--- a/libvirt-gobject/libvirt-gobject-domain-interface.c
+++ b/libvirt-gobject/libvirt-gobject-domain-interface.c
@@ -126,6 +126,7 @@ GVirDomainInterfaceStats *gvir_domain_interface_get_stats(GVirDomainInterface *s
     const gchar *path;
 
     g_return_val_if_fail(GVIR_IS_DOMAIN_INTERFACE(self), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
 
     handle = gvir_domain_device_get_domain_handle(GVIR_DOMAIN_DEVICE(self));
     path = gvir_domain_interface_get_path (self);
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index d06d4d5..11a073c 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -161,6 +161,7 @@ G_DEFINE_BOXED_TYPE(GVirDomainSnapshotHandle, gvir_domain_snapshot_handle,
 
 const gchar *gvir_domain_snapshot_get_name(GVirDomainSnapshot *snapshot)
 {
+    g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), NULL);
 #if 0
     GVirDomainSnapshotPrivate *priv = snapshot->priv;
     const char *name;
@@ -194,9 +195,13 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
                                  guint flags,
                                  GError **err)
 {
-    GVirDomainSnapshotPrivate *priv = snapshot->priv;
+    GVirDomainSnapshotPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = snapshot->priv;
     if (!(xml = virDomainSnapshotGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_DOMAIN_SNAPSHOT_ERROR,
                                0,
diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
index 9be568a..59af63f 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -274,9 +274,12 @@ G_DEFINE_BOXED_TYPE(GVirDomainInfo, gvir_domain_info,
 
 const gchar *gvir_domain_get_name(GVirDomain *dom)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     const char *name;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+
+    priv = dom->priv;
     if (!(name = virDomainGetName(priv->handle))) {
         g_warning("Failed to get domain name on %p", priv->handle);
         return NULL;
@@ -296,9 +299,13 @@ const gchar *gvir_domain_get_uuid(GVirDomain *dom)
 gint gvir_domain_get_id(GVirDomain *dom,
                         GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     gint ret;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), -1);
+    g_return_val_if_fail(err == NULL || *err == NULL, -1);
+
+    priv = dom->priv;
     if ((ret = virDomainGetID(priv->handle)) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
                                0,
@@ -317,9 +324,13 @@ gboolean gvir_domain_start(GVirDomain *dom,
                            guint flags,
                            GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     int ret;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
+    priv = dom->priv;
     if (flags)
         ret = virDomainCreateWithFlags(priv->handle, flags);
     else
@@ -344,8 +355,12 @@ gboolean gvir_domain_start(GVirDomain *dom,
 gboolean gvir_domain_resume(GVirDomain *dom,
                             GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
+    priv = dom->priv;
     if (virDomainResume(priv->handle) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
                                0,
@@ -365,9 +380,13 @@ gboolean gvir_domain_stop(GVirDomain *dom,
                           guint flags,
                           GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     int ret;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
+    priv = dom->priv;
     if (flags)
         ret = virDomainDestroyFlags(priv->handle, flags);
     else
@@ -391,9 +410,13 @@ gboolean gvir_domain_delete(GVirDomain *dom,
                             guint flags,
                             GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     int ret;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
+    priv = dom->priv;
     if (flags)
         ret = virDomainUndefineFlags(priv->handle, flags);
     else
@@ -417,8 +440,12 @@ gboolean gvir_domain_shutdown(GVirDomain *dom,
                               guint flags G_GNUC_UNUSED,
                               GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
+    priv = dom->priv;
     if (virDomainShutdown(priv->handle) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
                                0,
@@ -438,8 +465,12 @@ gboolean gvir_domain_reboot(GVirDomain *dom,
                             guint flags,
                             GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
+    priv = dom->priv;
     if (virDomainReboot(priv->handle, flags) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
                                0,
@@ -462,9 +493,13 @@ GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom,
                                          guint flags,
                                          GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = dom->priv;
     if (!(xml = virDomainGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
                                0,
@@ -501,12 +536,13 @@ gboolean gvir_domain_set_config(GVirDomain *domain,
     virConnectPtr conn;
     virDomainPtr handle;
     gchar uuid[VIR_UUID_STRING_BUFLEN];
-    GVirDomainPrivate *priv = domain->priv;
+    GVirDomainPrivate *priv;
 
     g_return_val_if_fail(GVIR_IS_DOMAIN (domain), FALSE);
     g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN (conf), FALSE);
     g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
+    priv = domain->priv;
     xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
 
     g_return_val_if_fail(xml != NULL, FALSE);
@@ -556,10 +592,14 @@ gboolean gvir_domain_set_config(GVirDomain *domain,
 GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
                                      GError **err)
 {
-    GVirDomainPrivate *priv = dom->priv;
+    GVirDomainPrivate *priv;
     virDomainInfo info;
     GVirDomainInfo *ret;
 
+    g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = dom->priv;
     if (virDomainGetInfo(priv->handle, &info) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
                                0,
@@ -613,6 +653,7 @@ void gvir_domain_get_info_async(GVirDomain *dom,
     GSimpleAsyncResult *res;
 
     g_return_if_fail(GVIR_IS_DOMAIN(dom));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
 
     res = g_simple_async_result_new(G_OBJECT(dom),
                                     callback,
@@ -679,6 +720,7 @@ gchar *gvir_domain_screenshot(GVirDomain *dom,
 
     g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
     g_return_val_if_fail(GVIR_IS_STREAM(stream), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
 
     priv = dom->priv;
     g_object_get(stream, "handle", &st, NULL);
@@ -725,6 +767,7 @@ gboolean gvir_domain_open_console(GVirDomain *dom,
 
     g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
     g_return_val_if_fail(GVIR_IS_STREAM(stream), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     priv = dom->priv;
     g_object_get(stream, "handle", &st, NULL);
@@ -769,6 +812,7 @@ gboolean gvir_domain_open_graphics(GVirDomain *dom,
     gboolean ret = FALSE;
 
     g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     priv = dom->priv;
 
@@ -804,6 +848,7 @@ gboolean gvir_domain_suspend (GVirDomain *dom,
     gboolean ret = FALSE;
 
     g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     if (virDomainSuspend(dom->priv->handle) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
@@ -834,6 +879,7 @@ gboolean gvir_domain_save (GVirDomain *dom,
                            GError **err)
 {
     g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     if (virDomainManagedSave(dom->priv->handle, flags) < 0) {
         gvir_set_error_literal(err, GVIR_DOMAIN_ERROR,
@@ -889,6 +935,7 @@ void gvir_domain_save_async (GVirDomain *dom,
     DomainSaveData *data;
 
     g_return_if_fail(GVIR_IS_DOMAIN(dom));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
 
     data = g_slice_new0(DomainSaveData);
     data->flags = flags;
@@ -923,6 +970,7 @@ gboolean gvir_domain_save_finish (GVirDomain *dom,
     g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(dom),
                                                         gvir_domain_save_async),
                          FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result), err))
         return FALSE;
diff --git a/libvirt-gobject/libvirt-gobject-interface.c b/libvirt-gobject/libvirt-gobject-interface.c
index 883cf92..ecabb41 100644
--- a/libvirt-gobject/libvirt-gobject-interface.c
+++ b/libvirt-gobject/libvirt-gobject-interface.c
@@ -159,11 +159,12 @@ G_DEFINE_BOXED_TYPE(GVirInterfaceHandle, gvir_interface_handle,
 
 const gchar *gvir_interface_get_name(GVirInterface *iface)
 {
-    GVirInterfacePrivate *priv = iface->priv;
     const char *name;
 
-    if (!(name = virInterfaceGetName(priv->handle))) {
-        g_warning("Failed to get interface name on %p", priv->handle);
+    g_return_val_if_fail(GVIR_IS_INTERFACE(iface), NULL);
+
+    if (!(name = virInterfaceGetName(iface->priv->handle))) {
+        g_warning("Failed to get interface name on %p", iface->priv->handle);
         return NULL;
     }
 
@@ -184,9 +185,13 @@ GVirConfigInterface *gvir_interface_get_config(GVirInterface *iface,
                                                guint flags,
                                                GError **err)
 {
-    GVirInterfacePrivate *priv = iface->priv;
+    GVirInterfacePrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_INTERFACE(iface), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = iface->priv;
     if (!(xml = virInterfaceGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_INTERFACE_ERROR,
                                0,
diff --git a/libvirt-gobject/libvirt-gobject-manager.c b/libvirt-gobject/libvirt-gobject-manager.c
index c44e711..d0a2839 100644
--- a/libvirt-gobject/libvirt-gobject-manager.c
+++ b/libvirt-gobject/libvirt-gobject-manager.c
@@ -131,8 +131,12 @@ GVirManager *gvir_manager_new(void)
 void gvir_manager_add_connection(GVirManager *man,
                                  GVirConnection *conn)
 {
-    GVirManagerPrivate *priv = man->priv;
+    GVirManagerPrivate *priv;
+
+    g_return_if_fail(GVIR_IS_MANAGER(man));
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
 
+    priv = man->priv;
     g_mutex_lock(priv->lock);
     g_object_ref(conn);
     priv->connections = g_list_append(priv->connections, conn);
@@ -147,8 +151,12 @@ void gvir_manager_add_connection(GVirManager *man,
 void gvir_manager_remove_connection(GVirManager *man,
                                     GVirConnection *conn)
 {
-    GVirManagerPrivate *priv = man->priv;
+    GVirManagerPrivate *priv;
+
+    g_return_if_fail(GVIR_IS_MANAGER(man));
+    g_return_if_fail(GVIR_IS_CONNECTION(conn));
 
+    priv = man->priv;
     g_mutex_lock(priv->lock);
     priv->connections = g_list_remove(priv->connections, conn);
     g_mutex_unlock(priv->lock);
@@ -167,16 +175,18 @@ void gvir_manager_remove_connection(GVirManager *man,
  */
 GList *gvir_manager_get_connections(GVirManager *man)
 {
-    GVirManagerPrivate *priv = man->priv;
+    GList *tmp;
 
-    GList *tmp = priv->connections;
+    g_return_val_if_fail(GVIR_IS_MANAGER(man), NULL);
+
+    tmp = man->priv->connections;
     while (tmp) {
         GVirConnection *conn = tmp->data;
         g_object_ref(conn);
         tmp = tmp->next;
     }
 
-    return g_list_copy(priv->connections);
+    return g_list_copy(man->priv->connections);
 }
 
 
@@ -190,9 +200,12 @@ GList *gvir_manager_get_connections(GVirManager *man)
 GVirConnection *gvir_manager_find_connection_by_uri(GVirManager *man,
                                                     const gchar *uri)
 {
-    GVirManagerPrivate *priv = man->priv;
+    GList *tmp;
 
-    GList *tmp = priv->connections;
+    g_return_val_if_fail(GVIR_IS_MANAGER(man), NULL);
+    g_return_val_if_fail(uri != NULL, NULL);
+
+    tmp = man->priv->connections;
     while (tmp) {
         GVirConnection *conn = tmp->data;
         if (g_strcmp0(gvir_connection_get_uri(conn), uri) == 0)
diff --git a/libvirt-gobject/libvirt-gobject-network-filter.c b/libvirt-gobject/libvirt-gobject-network-filter.c
index b3db236..00b1ed2 100644
--- a/libvirt-gobject/libvirt-gobject-network-filter.c
+++ b/libvirt-gobject/libvirt-gobject-network-filter.c
@@ -182,11 +182,13 @@ G_DEFINE_BOXED_TYPE(GVirNetworkFilterHandle, gvir_network_filter_handle,
 
 const gchar *gvir_network_filter_get_name(GVirNetworkFilter *filter)
 {
-    GVirNetworkFilterPrivate *priv = filter->priv;
     const char *name;
 
-    if (!(name = virNWFilterGetName(priv->handle))) {
-        g_warning("Failed to get network_filter name on %p", priv->handle);
+    g_return_val_if_fail(GVIR_IS_NETWORK_FILTER(filter), NULL);
+
+    if (!(name = virNWFilterGetName(filter->priv->handle))) {
+        g_warning("Failed to get network_filter name on %p",
+                  filter->priv->handle);
         return NULL;
     }
 
@@ -217,9 +219,13 @@ GVirConfigNetworkFilter *gvir_network_filter_get_config
                                  guint flags,
                                  GError **err)
 {
-    GVirNetworkFilterPrivate *priv = filter->priv;
+    GVirNetworkFilterPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_NETWORK_FILTER(filter), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = filter->priv;
     if (!(xml = virNWFilterGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_NETWORK_FILTER_ERROR,
                                0,
diff --git a/libvirt-gobject/libvirt-gobject-network.c b/libvirt-gobject/libvirt-gobject-network.c
index 17378ec..9625ece 100644
--- a/libvirt-gobject/libvirt-gobject-network.c
+++ b/libvirt-gobject/libvirt-gobject-network.c
@@ -180,11 +180,12 @@ G_DEFINE_BOXED_TYPE(GVirNetworkHandle, gvir_network_handle,
 
 const gchar *gvir_network_get_name(GVirNetwork *network)
 {
-    GVirNetworkPrivate *priv = network->priv;
     const char *name;
 
-    if (!(name = virNetworkGetName(priv->handle))) {
-        g_warning("Failed to get network name on %p", priv->handle);
+    g_return_val_if_fail(GVIR_IS_NETWORK(network), NULL);
+
+    if (!(name = virNetworkGetName(network->priv->handle))) {
+        g_warning("Failed to get network name on %p", network->priv->handle);
         return NULL;
     }
 
@@ -212,9 +213,13 @@ GVirConfigNetwork *gvir_network_get_config(GVirNetwork *network,
                                            guint flags,
                                            GError **err)
 {
-    GVirNetworkPrivate *priv = network->priv;
+    GVirNetworkPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_NETWORK(network), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = network->priv;
     if (!(xml = virNetworkGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_NETWORK_ERROR,
                                0,
diff --git a/libvirt-gobject/libvirt-gobject-node-device.c b/libvirt-gobject/libvirt-gobject-node-device.c
index 0a4b6a6..eb314ed 100644
--- a/libvirt-gobject/libvirt-gobject-node-device.c
+++ b/libvirt-gobject/libvirt-gobject-node-device.c
@@ -159,11 +159,13 @@ G_DEFINE_BOXED_TYPE(GVirNodeDeviceHandle, gvir_node_device_handle,
 
 const gchar *gvir_node_device_get_name(GVirNodeDevice *device)
 {
-    GVirNodeDevicePrivate *priv = device->priv;
     const char *name;
 
-    if (!(name = virNodeDeviceGetName(priv->handle))) {
-        g_warning("Failed to get node_device name on %p", priv->handle);
+    g_return_val_if_fail(GVIR_IS_NODE_DEVICE(device), NULL);
+
+    if (!(name = virNodeDeviceGetName(device->priv->handle))) {
+        g_warning("Failed to get node_device name on %p",
+                  device->priv->handle);
         return NULL;
     }
 
@@ -185,9 +187,13 @@ GVirConfigNodeDevice *gvir_node_device_get_config(GVirNodeDevice *device,
                                                   guint flags,
                                                   GError **err)
 {
-    GVirNodeDevicePrivate *priv = device->priv;
+    GVirNodeDevicePrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_NODE_DEVICE(device), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = device->priv;
     if (!(xml = virNodeDeviceGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_NODE_DEVICE_ERROR,
                                0,
diff --git a/libvirt-gobject/libvirt-gobject-secret.c b/libvirt-gobject/libvirt-gobject-secret.c
index b0aff13..8bfee88 100644
--- a/libvirt-gobject/libvirt-gobject-secret.c
+++ b/libvirt-gobject/libvirt-gobject-secret.c
@@ -201,9 +201,13 @@ GVirConfigSecret *gvir_secret_get_config(GVirSecret *secret,
                                          guint flags,
                                          GError **err)
 {
-    GVirSecretPrivate *priv = secret->priv;
+    GVirSecretPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_SECRET(secret), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = secret->priv;
     if (!(xml = virSecretGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_SECRET_ERROR,
                                0,
diff --git a/libvirt-gobject/libvirt-gobject-storage-pool.c b/libvirt-gobject/libvirt-gobject-storage-pool.c
index e79c8e5..7f50037 100644
--- a/libvirt-gobject/libvirt-gobject-storage-pool.c
+++ b/libvirt-gobject/libvirt-gobject-storage-pool.c
@@ -211,11 +211,12 @@ G_DEFINE_BOXED_TYPE(GVirStoragePoolInfo, gvir_storage_pool_info,
 
 const gchar *gvir_storage_pool_get_name(GVirStoragePool *pool)
 {
-    GVirStoragePoolPrivate *priv = pool->priv;
     const char *name;
 
-    if (!(name = virStoragePoolGetName(priv->handle))) {
-        g_warning("Failed to get storage_pool name on %p", priv->handle);
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
+
+    if (!(name = virStoragePoolGetName(pool->priv->handle))) {
+        g_warning("Failed to get storage_pool name on %p", pool->priv->handle);
         return NULL;
     }
 
@@ -244,9 +245,13 @@ GVirConfigStoragePool *gvir_storage_pool_get_config(GVirStoragePool *pool,
                                                     guint flags,
                                                     GError **err)
 {
-    GVirStoragePoolPrivate *priv = pool->priv;
+    GVirStoragePoolPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = pool->priv;
     if (!(xml = virStoragePoolGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_STORAGE_POOL_ERROR,
                                0,
@@ -271,10 +276,14 @@ GVirConfigStoragePool *gvir_storage_pool_get_config(GVirStoragePool *pool,
 GVirStoragePoolInfo *gvir_storage_pool_get_info(GVirStoragePool *pool,
                                                 GError **err)
 {
-    GVirStoragePoolPrivate *priv = pool->priv;
+    GVirStoragePoolPrivate *priv;
     virStoragePoolInfo info;
     GVirStoragePoolInfo *ret;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = pool->priv;
     if (virStoragePoolGetInfo(priv->handle, &info) < 0) {
         if (err)
             *err = gvir_error_new_literal(GVIR_STORAGE_POOL_ERROR,
@@ -346,7 +355,7 @@ gboolean gvir_storage_pool_refresh(GVirStoragePool *pool,
                                    GCancellable *cancellable,
                                    GError **err)
 {
-    GVirStoragePoolPrivate *priv = pool->priv;
+    GVirStoragePoolPrivate *priv;
     GHashTable *vol_hash;
     gchar **volumes = NULL;
     gint nvolumes = 0;
@@ -355,6 +364,12 @@ gboolean gvir_storage_pool_refresh(GVirStoragePool *pool,
     virStoragePoolPtr vpool = NULL;
     GError *lerr = NULL;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), FALSE);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable),
+                         FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
+    priv = pool->priv;
     vpool = priv->handle;
 
     if (virStoragePoolRefresh(vpool, 0) < 0) {
@@ -447,6 +462,9 @@ void gvir_storage_pool_refresh_async(GVirStoragePool *pool,
 {
     GSimpleAsyncResult *res;
 
+    g_return_if_fail(GVIR_IS_STORAGE_POOL(pool));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     res = g_simple_async_result_new(G_OBJECT(pool),
                                     callback,
                                     user_data,
@@ -495,9 +513,12 @@ static void gvir_storage_vol_ref(gpointer obj, gpointer ignore G_GNUC_UNUSED)
  */
 GList *gvir_storage_pool_get_volumes(GVirStoragePool *pool)
 {
-    GVirStoragePoolPrivate *priv = pool->priv;
+    GVirStoragePoolPrivate *priv;
     GList *volumes = NULL;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
+
+    priv = pool->priv;
     g_mutex_lock(priv->lock);
     if (priv->volumes != NULL) {
         volumes = g_hash_table_get_values(priv->volumes);
@@ -520,9 +541,12 @@ GList *gvir_storage_pool_get_volumes(GVirStoragePool *pool)
 GVirStorageVol *gvir_storage_pool_get_volume(GVirStoragePool *pool,
                                              const gchar *name)
 {
-    GVirStoragePoolPrivate *priv = pool->priv;
+    GVirStoragePoolPrivate *priv;
     GVirStorageVol *volume;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
+
+    priv = pool->priv;
     g_mutex_lock(priv->lock);
     volume = g_hash_table_lookup(priv->volumes, name);
     if (volume)
@@ -548,12 +572,17 @@ GVirStorageVol *gvir_storage_pool_create_volume
 {
     const gchar *xml;
     virStorageVolPtr handle;
-    GVirStoragePoolPrivate *priv = pool->priv;
+    GVirStoragePoolPrivate *priv;
+
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL);
+    g_return_val_if_fail(GVIR_CONFIG_IS_STORAGE_VOL(conf), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
 
     xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
 
     g_return_val_if_fail(xml != NULL, NULL);
 
+    priv = pool->priv;
     if (!(handle = virStorageVolCreateXML(priv->handle, xml, 0))) {
         gvir_set_error_literal(err, GVIR_STORAGE_POOL_ERROR,
                                0,
@@ -593,6 +622,9 @@ gboolean gvir_storage_pool_build (GVirStoragePool *pool,
                                   guint flags,
                                   GError **err)
 {
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
     if (virStoragePoolBuild(pool->priv->handle, flags)) {
         gvir_set_error_literal(err, GVIR_STORAGE_POOL_ERROR,
                                0,
@@ -644,6 +676,9 @@ void gvir_storage_pool_build_async (GVirStoragePool *pool,
     GSimpleAsyncResult *res;
     StoragePoolBuildData *data;
 
+    g_return_if_fail(GVIR_IS_STORAGE_POOL(pool));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     data = g_slice_new0(StoragePoolBuildData);
     data->flags = flags;
 
@@ -675,6 +710,7 @@ gboolean gvir_storage_pool_build_finish(GVirStoragePool *pool,
     g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(pool),
                                                         gvir_storage_pool_build_async),
                          FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result),
                                               err))
@@ -695,6 +731,9 @@ gboolean gvir_storage_pool_start (GVirStoragePool *pool,
                                   guint flags,
                                   GError **err)
 {
+    g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
     if (virStoragePoolCreate(pool->priv->handle, flags)) {
         gvir_set_error_literal(err, GVIR_STORAGE_POOL_ERROR,
                                0,
@@ -742,6 +781,9 @@ void gvir_storage_pool_start_async (GVirStoragePool *pool,
     GSimpleAsyncResult *res;
     StoragePoolBuildData *data;
 
+    g_return_if_fail(GVIR_IS_STORAGE_POOL(pool));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
     data = g_slice_new0(StoragePoolBuildData);
     data->flags = flags;
 
@@ -773,6 +815,7 @@ gboolean gvir_storage_pool_start_finish(GVirStoragePool *pool,
     g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(pool),
                                                         gvir_storage_pool_start_async),
                          FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
 
     if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result),
                                               err))
diff --git a/libvirt-gobject/libvirt-gobject-storage-vol.c b/libvirt-gobject/libvirt-gobject-storage-vol.c
index 9e59576..6f60fcd 100644
--- a/libvirt-gobject/libvirt-gobject-storage-vol.c
+++ b/libvirt-gobject/libvirt-gobject-storage-vol.c
@@ -195,11 +195,12 @@ G_DEFINE_BOXED_TYPE(GVirStorageVolInfo, gvir_storage_vol_info,
 
 const gchar *gvir_storage_vol_get_name(GVirStorageVol *vol)
 {
-    GVirStorageVolPrivate *priv = vol->priv;
     const char *name;
 
-    if (!(name = virStorageVolGetName(priv->handle))) {
-        g_warning("Failed to get storage_vol name on %p", priv->handle);
+    g_return_val_if_fail(GVIR_IS_STORAGE_VOL(vol), NULL);
+
+    if (!(name = virStorageVolGetName(vol->priv->handle))) {
+        g_warning("Failed to get storage_vol name on %p", vol->priv->handle);
         return NULL;
     }
 
@@ -208,13 +209,15 @@ const gchar *gvir_storage_vol_get_name(GVirStorageVol *vol)
 
 const gchar *gvir_storage_vol_get_path(GVirStorageVol *vol, GError **error)
 {
-    GVirStorageVolPrivate *priv = vol->priv;
     const char *path;
 
-    if (!(path = virStorageVolGetPath(priv->handle))) {
+    g_return_val_if_fail(GVIR_IS_STORAGE_VOL(vol), NULL);
+    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
+
+    if (!(path = virStorageVolGetPath(vol->priv->handle))) {
         gvir_set_error(error, GVIR_STORAGE_VOL_ERROR, 0,
                        "Failed to get storage_vol path on %p",
-                       priv->handle);
+                       vol->priv->handle);
         return NULL;
     }
 
@@ -234,9 +237,13 @@ GVirConfigStorageVol *gvir_storage_vol_get_config(GVirStorageVol *vol,
                                                   guint flags,
                                                   GError **err)
 {
-    GVirStorageVolPrivate *priv = vol->priv;
+    GVirStorageVolPrivate *priv;
     gchar *xml;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_VOL(vol), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = vol->priv;
     if (!(xml = virStorageVolGetXMLDesc(priv->handle, flags))) {
         gvir_set_error_literal(err, GVIR_STORAGE_VOL_ERROR,
                                0,
@@ -261,10 +268,14 @@ GVirConfigStorageVol *gvir_storage_vol_get_config(GVirStorageVol *vol,
 GVirStorageVolInfo *gvir_storage_vol_get_info(GVirStorageVol *vol,
                                               GError **err)
 {
-    GVirStorageVolPrivate *priv = vol->priv;
+    GVirStorageVolPrivate *priv;
     virStorageVolInfo info;
     GVirStorageVolInfo *ret;
 
+    g_return_val_if_fail(GVIR_IS_STORAGE_VOL(vol), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+
+    priv = vol->priv;
     if (virStorageVolGetInfo(priv->handle, &info) < 0) {
         if (err)
             *err = gvir_error_new_literal(GVIR_STORAGE_VOL_ERROR,
@@ -295,6 +306,9 @@ gboolean gvir_storage_vol_delete(GVirStorageVol *vol,
                                  guint flags,
                                  GError **err)
 {
+    g_return_val_if_fail(GVIR_IS_STORAGE_VOL(vol), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
     if (virStorageVolDelete(vol->priv->handle, flags) < 0) {
         gvir_set_error_literal(err,
                                GVIR_STORAGE_VOL_ERROR,
@@ -322,6 +336,9 @@ gboolean gvir_storage_vol_resize(GVirStorageVol *vol,
                                  guint flags,
                                  GError **err)
 {
+    g_return_val_if_fail(GVIR_IS_STORAGE_VOL(vol), FALSE);
+    g_return_val_if_fail(err == NULL || *err == NULL, FALSE);
+
     if (virStorageVolResize(vol->priv->handle, capacity, flags) < 0) {
         gvir_set_error_literal(err,
                                GVIR_STORAGE_VOL_ERROR,
diff --git a/libvirt-gobject/libvirt-gobject-stream.c b/libvirt-gobject/libvirt-gobject-stream.c
index 60da4bc..3b98023 100644
--- a/libvirt-gobject/libvirt-gobject-stream.c
+++ b/libvirt-gobject/libvirt-gobject-stream.c
@@ -379,7 +379,9 @@ gvir_stream_receive_all(GVirStream *self,
     int r;
 
     g_return_val_if_fail(GVIR_IS_STREAM(self), -1);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable), -1);
     g_return_val_if_fail(func != NULL, -1);
+    g_return_val_if_fail(error == NULL || *error == NULL, -1);
 
     r = virStreamRecvAll(self->priv->handle, stream_sink, &helper);
     if (r < 0) {
@@ -424,6 +426,8 @@ gssize gvir_stream_send(GVirStream *self,
 
     g_return_val_if_fail(GVIR_IS_STREAM(self), -1);
     g_return_val_if_fail(buffer != NULL, -1);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable), -1);
+    g_return_val_if_fail(error == NULL || *error == NULL, -1);
 
     if (g_cancellable_set_error_if_cancelled (cancellable, error))
         return -1;
@@ -491,7 +495,9 @@ gvir_stream_send_all(GVirStream *self,
     int r;
 
     g_return_val_if_fail(GVIR_IS_STREAM(self), -1);
+    g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable), -1);
     g_return_val_if_fail(func != NULL, -1);
+    g_return_val_if_fail(error == NULL || *error == NULL, -1);
 
     r = virStreamSendAll(self->priv->handle, stream_source, &helper);
     if (r < 0) {
-- 
1.7.10.1




More information about the libvir-list mailing list