aa796f
diff --git a/libsoup/soup-address.c b/libsoup/soup-address.c
aa796f
index 0351db50..9c0b0a45 100644
aa796f
--- a/libsoup/soup-address.c
aa796f
+++ b/libsoup/soup-address.c
aa796f
@@ -1183,10 +1183,10 @@ got_addresses (SoupAddress *addr, guint status, gpointer user_data)
aa796f
 	if (error)
aa796f
 		g_task_return_error (task, g_error_copy (error));
aa796f
 	else {
aa796f
-		GSocketAddress *addr;
aa796f
+		GSocketAddress *socket_addr;
aa796f
 
aa796f
-		addr = next_address (g_task_get_source_object (task));
aa796f
-		g_task_return_pointer (task, addr, g_object_unref);
aa796f
+		socket_addr = next_address (g_task_get_source_object (task));
aa796f
+		g_task_return_pointer (task, socket_addr, g_object_unref);
aa796f
 	}
aa796f
 	g_object_unref (task);
aa796f
 }
21ead5
diff --git a/libsoup/soup-auth-basic.c b/libsoup/soup-auth-basic.c
aa796f
index 5f1e7186..d8b32264 100644
21ead5
--- a/libsoup/soup-auth-basic.c
21ead5
+++ b/libsoup/soup-auth-basic.c
21ead5
@@ -74,7 +74,7 @@ soup_auth_basic_get_protection_space (SoupAuth *auth, SoupURI *source_uri)
21ead5
 
21ead5
 	/* Strip filename component */
21ead5
 	p = strrchr (space, '/');
21ead5
-	if (p == space && p[1])
21ead5
+	if (p && p == space && p[1])
21ead5
 		p[1] = '\0';
21ead5
 	else if (p && p[1])
21ead5
 		*p = '\0';
aa796f
diff --git a/libsoup/soup-auth-digest.c b/libsoup/soup-auth-digest.c
aa796f
index eda2a93c..45dd35be 100644
aa796f
--- a/libsoup/soup-auth-digest.c
aa796f
+++ b/libsoup/soup-auth-digest.c
aa796f
@@ -343,7 +343,7 @@ soup_auth_digest_compute_response (const char        *method,
aa796f
 	g_checksum_update (checksum, (guchar *)method, strlen (method));
aa796f
 	g_checksum_update (checksum, (guchar *)":", 1);
aa796f
 	g_checksum_update (checksum, (guchar *)uri, strlen (uri));
aa796f
-	strncpy (hex_a2, g_checksum_get_string (checksum), 33);
aa796f
+	memcpy (hex_a2, g_checksum_get_string (checksum), sizeof (char) * 33);
aa796f
 	g_checksum_free (checksum);
aa796f
 
aa796f
 	/* compute KD */
21ead5
diff --git a/libsoup/soup-auth-negotiate.c b/libsoup/soup-auth-negotiate.c
aa796f
index 1fdf142d..941e49be 100644
21ead5
--- a/libsoup/soup-auth-negotiate.c
21ead5
+++ b/libsoup/soup-auth-negotiate.c
aa796f
@@ -200,9 +200,9 @@ soup_auth_negotiate_get_connection_authorization (SoupConnectionAuth *auth,
21ead5
 			/* FIXME: report further upward via
21ead5
 			 * soup_message_get_error_message  */
aa796f
 			if (conn->initialized)
aa796f
-				g_warning ("gssapi step failed: %s", err->message);
aa796f
+				g_warning ("gssapi step failed: %s", err ? err->message : "Internal error");
aa796f
 			else
aa796f
-				g_warning ("gssapi init failed: %s", err->message);
aa796f
+				g_warning ("gssapi init failed: %s", err ? err->message : "Internal error");
aa796f
 			conn->state = SOUP_NEGOTIATE_FAILED;
aa796f
 			g_clear_error (&err;;
aa796f
 
aa796f
@@ -274,9 +274,9 @@ soup_auth_negotiate_update_connection (SoupConnectionAuth *auth, SoupMessage *ms
aa796f
 			/* FIXME: report further upward via
aa796f
 			 * soup_message_get_error_message  */
aa796f
 			if (conn->initialized)
aa796f
-				g_warning ("gssapi step failed: %s", err->message);
aa796f
+				g_warning ("gssapi step failed: %s", err ? err->message : "Internal error");
aa796f
 			else
aa796f
-				g_warning ("gssapi init failed: %s", err->message);
aa796f
+				g_warning ("gssapi init failed: %s", err ? err->message : "Internal error");
21ead5
 			success = FALSE;
21ead5
 		}
21ead5
 	} else if (!strncmp (header, "Negotiate ", 10)) {
aa796f
diff --git a/libsoup/soup-auth-ntlm.c b/libsoup/soup-auth-ntlm.c
aa796f
index 19a551ee..f4009aa8 100644
aa796f
--- a/libsoup/soup-auth-ntlm.c
aa796f
+++ b/libsoup/soup-auth-ntlm.c
aa796f
@@ -810,7 +810,7 @@ soup_ntlm_response (const char *nonce,
aa796f
 	ntlm_set_string (&resp.nt_resp, &offset, sizeof (nt_resp));
aa796f
 
aa796f
 	out = g_malloc (((offset + 3) * 4) / 3 + 6);
aa796f
-	strncpy (out, "NTLM ", 5);
aa796f
+	memcpy (out, "NTLM ", 5);
aa796f
 	p = out + 5;
aa796f
 
aa796f
 	state = save = 0;
aa796f
diff --git a/libsoup/soup-auth.c b/libsoup/soup-auth.c
aa796f
index 00aa405e..48f39359 100644
aa796f
--- a/libsoup/soup-auth.c
aa796f
+++ b/libsoup/soup-auth.c
aa796f
@@ -107,13 +107,9 @@ soup_auth_get_property (GObject *object, guint prop_id,
aa796f
 		g_value_set_string (value, soup_auth_get_scheme_name (auth));
aa796f
 		break;
aa796f
 	case PROP_REALM:
aa796f
-		if (auth->realm)
aa796f
-			g_free (auth->realm);
aa796f
 		g_value_set_string (value, soup_auth_get_realm (auth));
aa796f
 		break;
aa796f
 	case PROP_HOST:
aa796f
-		if (priv->host)
aa796f
-			g_free (priv->host);
aa796f
 		g_value_set_string (value, soup_auth_get_host (auth));
aa796f
 		break;
aa796f
 	case PROP_IS_FOR_PROXY:
aa796f
@@ -349,10 +345,12 @@ soup_auth_authenticate (SoupAuth *auth, const char *username, const char *passwo
aa796f
 gboolean
aa796f
 soup_auth_is_for_proxy (SoupAuth *auth)
aa796f
 {
aa796f
-	SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
aa796f
+	SoupAuthPrivate *priv;
aa796f
 
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), FALSE);
aa796f
 
aa796f
+	priv = soup_auth_get_instance_private (auth);
aa796f
+
aa796f
 	return priv->proxy;
aa796f
 }
aa796f
 
aa796f
@@ -367,9 +365,14 @@ soup_auth_is_for_proxy (SoupAuth *auth)
aa796f
 const char *
aa796f
 soup_auth_get_scheme_name (SoupAuth *auth)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
aa796f
 
aa796f
-	return SOUP_AUTH_GET_CLASS (auth)->scheme_name;
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
+	return klass->scheme_name;
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -383,10 +386,12 @@ soup_auth_get_scheme_name (SoupAuth *auth)
aa796f
 const char *
aa796f
 soup_auth_get_host (SoupAuth *auth)
aa796f
 {
aa796f
-	SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
aa796f
+	SoupAuthPrivate *priv;
aa796f
 
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
aa796f
 
aa796f
+	priv = soup_auth_get_instance_private (auth);
aa796f
+
aa796f
 	return priv->host;
aa796f
 }
aa796f
 
aa796f
@@ -423,13 +428,18 @@ soup_auth_get_realm (SoupAuth *auth)
aa796f
 char *
aa796f
 soup_auth_get_info (SoupAuth *auth)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
aa796f
 
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
 	if (SOUP_IS_CONNECTION_AUTH (auth))
aa796f
-		return g_strdup (SOUP_AUTH_GET_CLASS (auth)->scheme_name);
aa796f
+		return g_strdup (klass->scheme_name);
aa796f
 	else {
aa796f
 		return g_strdup_printf ("%s:%s",
aa796f
-					SOUP_AUTH_GET_CLASS (auth)->scheme_name,
aa796f
+					klass->scheme_name,
aa796f
 					auth->realm);
aa796f
 	}
aa796f
 }
aa796f
@@ -445,9 +455,14 @@ soup_auth_get_info (SoupAuth *auth)
aa796f
 gboolean
aa796f
 soup_auth_is_authenticated (SoupAuth *auth)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), TRUE);
aa796f
 
aa796f
-	return SOUP_AUTH_GET_CLASS (auth)->is_authenticated (auth);
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, TRUE);
aa796f
+
aa796f
+	return klass->is_authenticated (auth);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -464,10 +479,15 @@ soup_auth_is_authenticated (SoupAuth *auth)
aa796f
 char *
aa796f
 soup_auth_get_authorization (SoupAuth *auth, SoupMessage *msg)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
aa796f
 	g_return_val_if_fail (msg != NULL, NULL);
aa796f
 
aa796f
-	return SOUP_AUTH_GET_CLASS (auth)->get_authorization (auth, msg);
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
+	return klass->get_authorization (auth, msg);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -488,13 +508,18 @@ gboolean
aa796f
 soup_auth_is_ready (SoupAuth    *auth,
aa796f
 		    SoupMessage *msg)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), TRUE);
aa796f
 	g_return_val_if_fail (SOUP_IS_MESSAGE (msg), TRUE);
aa796f
 
aa796f
-	if (SOUP_AUTH_GET_CLASS (auth)->is_ready)
aa796f
-		return SOUP_AUTH_GET_CLASS (auth)->is_ready (auth, msg);
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, TRUE);
aa796f
+
aa796f
+	if (klass->is_ready)
aa796f
+		return klass->is_ready (auth, msg);
aa796f
 	else
aa796f
-		return SOUP_AUTH_GET_CLASS (auth)->is_authenticated (auth);
aa796f
+		return klass->is_authenticated (auth);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -511,9 +536,14 @@ soup_auth_is_ready (SoupAuth    *auth,
aa796f
 gboolean
aa796f
 soup_auth_can_authenticate (SoupAuth *auth)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), FALSE);
aa796f
 
aa796f
-	return SOUP_AUTH_GET_CLASS (auth)->can_authenticate (auth);
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, FALSE);
aa796f
+
aa796f
+	return klass->can_authenticate (auth);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -533,10 +563,15 @@ soup_auth_can_authenticate (SoupAuth *auth)
aa796f
 GSList *
aa796f
 soup_auth_get_protection_space (SoupAuth *auth, SoupURI *source_uri)
aa796f
 {
aa796f
+	SoupAuthClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
aa796f
 	g_return_val_if_fail (source_uri != NULL, NULL);
aa796f
 
aa796f
-	return SOUP_AUTH_GET_CLASS (auth)->get_protection_space (auth, source_uri);
aa796f
+	klass = SOUP_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
+	return klass->get_protection_space (auth, source_uri);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
diff --git a/libsoup/soup-body-output-stream.c b/libsoup/soup-body-output-stream.c
aa796f
index 314d7ee9..58e9b3ee 100644
aa796f
--- a/libsoup/soup-body-output-stream.c
aa796f
+++ b/libsoup/soup-body-output-stream.c
aa796f
@@ -162,7 +162,6 @@ again:
aa796f
 	case SOUP_BODY_OUTPUT_STREAM_STATE_CHUNK_SIZE:
aa796f
 		g_snprintf (buf, sizeof (bostream->priv->buf),
aa796f
 			    "%lx\r\n", (gulong)count);
aa796f
-		len = strlen (buf);
aa796f
 
aa796f
 		if (count > 0)
aa796f
 			bostream->priv->chunked_state = SOUP_BODY_OUTPUT_STREAM_STATE_CHUNK;
aa796f
@@ -182,13 +181,11 @@ again:
aa796f
 
aa796f
 	case SOUP_BODY_OUTPUT_STREAM_STATE_CHUNK_END:
aa796f
 		strncpy (buf, "\r\n", sizeof (bostream->priv->buf));
aa796f
-		len = 2;
aa796f
 		bostream->priv->chunked_state = SOUP_BODY_OUTPUT_STREAM_STATE_DONE;
aa796f
 		break;
aa796f
 
aa796f
 	case SOUP_BODY_OUTPUT_STREAM_STATE_TRAILERS:
aa796f
 		strncpy (buf, "\r\n", sizeof (bostream->priv->buf));
aa796f
-		len = 2;
aa796f
 		bostream->priv->chunked_state = SOUP_BODY_OUTPUT_STREAM_STATE_DONE;
aa796f
 		break;
aa796f
 
aa796f
diff --git a/libsoup/soup-cache.c b/libsoup/soup-cache.c
aa796f
index 682625e6..63c13121 100644
aa796f
--- a/libsoup/soup-cache.c
aa796f
+++ b/libsoup/soup-cache.c
aa796f
@@ -822,6 +822,9 @@ soup_cache_content_processor_wrap_input (SoupContentProcessor *processor,
aa796f
 	StreamHelper *helper;
aa796f
 	time_t request_time, response_time;
aa796f
 
aa796f
+	g_return_val_if_fail (SOUP_IS_CACHE (cache), NULL);
aa796f
+	g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
aa796f
+
aa796f
 	/* First of all, check if we should cache the resource. */
aa796f
 	cacheability = soup_cache_get_cacheability (cache, msg);
aa796f
 	entry = soup_cache_entry_lookup (cache, msg);
aa796f
@@ -1075,6 +1078,9 @@ soup_cache_has_response (SoupCache *cache, SoupMessage *msg)
aa796f
 	int max_age, max_stale, min_fresh;
aa796f
 	GList *lru_item, *item;
aa796f
 
aa796f
+	g_return_val_if_fail (SOUP_IS_CACHE (cache), SOUP_CACHE_RESPONSE_STALE);
aa796f
+	g_return_val_if_fail (SOUP_IS_MESSAGE (msg), SOUP_CACHE_RESPONSE_STALE);
aa796f
+
aa796f
 	entry = soup_cache_entry_lookup (cache, msg);
aa796f
 
aa796f
 	/* 1. The presented Request-URI and that of stored response
aa796f
@@ -1226,10 +1232,15 @@ soup_cache_has_response (SoupCache *cache, SoupMessage *msg)
aa796f
 SoupCacheability
aa796f
 soup_cache_get_cacheability (SoupCache *cache, SoupMessage *msg)
aa796f
 {
aa796f
+	SoupCacheClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_CACHE (cache), SOUP_CACHE_UNCACHEABLE);
aa796f
 	g_return_val_if_fail (SOUP_IS_MESSAGE (msg), SOUP_CACHE_UNCACHEABLE);
aa796f
 
aa796f
-	return SOUP_CACHE_GET_CLASS (cache)->get_cacheability (cache, msg);
aa796f
+	klass = SOUP_CACHE_GET_CLASS (cache);
aa796f
+	g_return_val_if_fail (klass != NULL, SOUP_CACHE_UNCACHEABLE);
aa796f
+
aa796f
+	return klass->get_cacheability (cache, msg);
aa796f
 }
aa796f
 
aa796f
 static gboolean
aa796f
@@ -1404,6 +1415,9 @@ soup_cache_cancel_conditional_request (SoupCache   *cache,
aa796f
 {
aa796f
 	SoupCacheEntry *entry;
aa796f
 
aa796f
+	g_return_if_fail (SOUP_IS_CACHE (cache));
aa796f
+	g_return_if_fail (SOUP_IS_MESSAGE (msg));
aa796f
+
aa796f
 	entry = soup_cache_entry_lookup (cache, msg);
aa796f
 	if (entry)
aa796f
 		entry->being_validated = FALSE;
aa796f
@@ -1415,7 +1429,12 @@ void
aa796f
 soup_cache_update_from_conditional_request (SoupCache   *cache,
aa796f
 					    SoupMessage *msg)
aa796f
 {
aa796f
-	SoupCacheEntry *entry = soup_cache_entry_lookup (cache, msg);
aa796f
+	SoupCacheEntry *entry;
aa796f
+
aa796f
+	g_return_if_fail (SOUP_IS_CACHE (cache));
aa796f
+	g_return_if_fail (SOUP_IS_MESSAGE (msg));
aa796f
+
aa796f
+	entry = soup_cache_entry_lookup (cache, msg);
aa796f
 	if (!entry)
aa796f
 		return;
aa796f
 
aa796f
diff --git a/libsoup/soup-connection-auth.c b/libsoup/soup-connection-auth.c
aa796f
index f55cfe6b..a44013e3 100644
aa796f
--- a/libsoup/soup-connection-auth.c
aa796f
+++ b/libsoup/soup-connection-auth.c
aa796f
@@ -39,8 +39,14 @@ soup_connection_auth_free_connection_state (SoupConnectionAuth *auth,
aa796f
 					    SoupConnection     *conn,
aa796f
 					    gpointer            state)
aa796f
 {
aa796f
+	SoupConnectionAuthClass *klass;
aa796f
+
aa796f
 	g_signal_handlers_disconnect_by_func (conn, G_CALLBACK (connection_disconnected), auth);
aa796f
-	SOUP_CONNECTION_AUTH_GET_CLASS (auth)->free_connection_state (auth, state);
aa796f
+
aa796f
+	klass = SOUP_CONNECTION_AUTH_GET_CLASS (auth);
aa796f
+	g_return_if_fail (klass != NULL);
aa796f
+
aa796f
+	klass->free_connection_state (auth, state);
aa796f
 }
aa796f
 
aa796f
 static void
aa796f
@@ -91,6 +97,7 @@ soup_connection_auth_get_connection_state_for_message (SoupConnectionAuth *auth,
aa796f
 						       SoupMessage *msg)
aa796f
 {
aa796f
 	SoupConnection *conn;
aa796f
+	SoupConnectionAuthClass *klass;
aa796f
 	gpointer state;
aa796f
 
aa796f
 	g_return_val_if_fail (SOUP_IS_CONNECTION_AUTH (auth), NULL);
aa796f
@@ -101,7 +108,10 @@ soup_connection_auth_get_connection_state_for_message (SoupConnectionAuth *auth,
aa796f
 	if (state)
aa796f
 		return state;
aa796f
 
aa796f
-	state = SOUP_CONNECTION_AUTH_GET_CLASS (auth)->create_connection_state (auth);
aa796f
+	klass = SOUP_CONNECTION_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
+	state = klass->create_connection_state (auth);
aa796f
 	if (conn) {
aa796f
 		g_signal_connect (conn, "disconnected",
aa796f
 				  G_CALLBACK (connection_disconnected), auth);
aa796f
@@ -117,12 +127,15 @@ soup_connection_auth_update (SoupAuth    *auth,
aa796f
 			     GHashTable  *auth_params)
aa796f
 {
aa796f
 	SoupConnectionAuth *cauth = SOUP_CONNECTION_AUTH (auth);
aa796f
+	SoupConnectionAuthClass *klass = SOUP_CONNECTION_AUTH_GET_CLASS (auth);
aa796f
 	gpointer conn = soup_connection_auth_get_connection_state_for_message (cauth, msg);
aa796f
 	GHashTableIter iter;
aa796f
 	GString *auth_header;
aa796f
 	gpointer key, value;
aa796f
 	gboolean result;
aa796f
 
aa796f
+	g_return_val_if_fail (klass != NULL, FALSE);
aa796f
+
aa796f
 	/* Recreate @auth_header out of @auth_params. If the
aa796f
 	 * base64 data ended with 1 or more "="s, then it
aa796f
 	 * will have been parsed as key=value. Otherwise
aa796f
@@ -147,8 +160,7 @@ soup_connection_auth_update (SoupAuth    *auth,
aa796f
 		}
aa796f
 	}
aa796f
 
aa796f
-	result = SOUP_CONNECTION_AUTH_GET_CLASS (auth)->
aa796f
-		update_connection (cauth, msg, auth_header->str, conn);
aa796f
+	result = klass->update_connection (cauth, msg, auth_header->str, conn);
aa796f
 
aa796f
 	g_string_free (auth_header, TRUE);
aa796f
 	return result;
aa796f
@@ -159,10 +171,13 @@ soup_connection_auth_get_authorization (SoupAuth    *auth,
aa796f
 					SoupMessage *msg)
aa796f
 {
aa796f
 	SoupConnectionAuth *cauth = SOUP_CONNECTION_AUTH (auth);
aa796f
+	SoupConnectionAuthClass *klass;
aa796f
 	gpointer conn = soup_connection_auth_get_connection_state_for_message (cauth, msg);
aa796f
 
aa796f
-	return SOUP_CONNECTION_AUTH_GET_CLASS (auth)->
aa796f
-		get_connection_authorization (cauth, msg, conn);
aa796f
+	klass = SOUP_CONNECTION_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
+	return klass->get_connection_authorization (cauth, msg, conn);
aa796f
 }
aa796f
 
aa796f
 static gboolean
aa796f
@@ -170,10 +185,13 @@ soup_connection_auth_is_ready (SoupAuth    *auth,
aa796f
 			       SoupMessage *msg)
aa796f
 {
aa796f
 	SoupConnectionAuth *cauth = SOUP_CONNECTION_AUTH (auth);
aa796f
+	SoupConnectionAuthClass *klass;
aa796f
 	gpointer conn = soup_connection_auth_get_connection_state_for_message (cauth, msg);
aa796f
 
aa796f
-	return SOUP_CONNECTION_AUTH_GET_CLASS (auth)->
aa796f
-		is_connection_ready (SOUP_CONNECTION_AUTH (auth), msg, conn);
aa796f
+	klass = SOUP_CONNECTION_AUTH_GET_CLASS (auth);
aa796f
+	g_return_val_if_fail (klass != NULL, FALSE);
aa796f
+
aa796f
+	return klass->is_connection_ready (SOUP_CONNECTION_AUTH (auth), msg, conn);
aa796f
 }
aa796f
 
aa796f
 static void
aa796f
diff --git a/libsoup/soup-content-sniffer-stream.c b/libsoup/soup-content-sniffer-stream.c
aa796f
index b8a8c97e..7f74c705 100644
aa796f
--- a/libsoup/soup-content-sniffer-stream.c
aa796f
+++ b/libsoup/soup-content-sniffer-stream.c
aa796f
@@ -167,7 +167,8 @@ read_internal (GInputStream  *stream,
aa796f
 
aa796f
 	if (sniffer->priv->buffer) {
aa796f
 		nread = MIN (count, sniffer->priv->buffer_nread);
aa796f
-		memcpy (buffer, sniffer->priv->buffer, nread);
aa796f
+		if (buffer)
aa796f
+			memcpy (buffer, sniffer->priv->buffer, nread);
aa796f
 		if (nread == sniffer->priv->buffer_nread) {
aa796f
 			g_free (sniffer->priv->buffer);
aa796f
 			sniffer->priv->buffer = NULL;
aa796f
diff --git a/libsoup/soup-content-sniffer.c b/libsoup/soup-content-sniffer.c
aa796f
index 7573fde5..20e10d71 100644
aa796f
--- a/libsoup/soup-content-sniffer.c
aa796f
+++ b/libsoup/soup-content-sniffer.c
aa796f
@@ -925,11 +925,16 @@ soup_content_sniffer_sniff (SoupContentSniffer *sniffer,
aa796f
 			    SoupMessage *msg, SoupBuffer *buffer,
aa796f
 			    GHashTable **params)
aa796f
 {
aa796f
+	SoupContentSnifferClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_CONTENT_SNIFFER (sniffer), NULL);
aa796f
 	g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
aa796f
 	g_return_val_if_fail (buffer != NULL, NULL);
aa796f
 
aa796f
-	return SOUP_CONTENT_SNIFFER_GET_CLASS (sniffer)->sniff (sniffer, msg, buffer, params);
aa796f
+	klass = SOUP_CONTENT_SNIFFER_GET_CLASS (sniffer);
aa796f
+	g_return_val_if_fail (klass != NULL, NULL);
aa796f
+
aa796f
+	return klass->sniff (sniffer, msg, buffer, params);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -946,7 +951,12 @@ soup_content_sniffer_sniff (SoupContentSniffer *sniffer,
aa796f
 gsize
aa796f
 soup_content_sniffer_get_buffer_size (SoupContentSniffer *sniffer)
aa796f
 {
aa796f
+	SoupContentSnifferClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_CONTENT_SNIFFER (sniffer), 0);
aa796f
 
aa796f
-	return SOUP_CONTENT_SNIFFER_GET_CLASS (sniffer)->get_buffer_size (sniffer);
aa796f
+	klass = SOUP_CONTENT_SNIFFER_GET_CLASS (sniffer);
aa796f
+	g_return_val_if_fail (klass != NULL, 0);
aa796f
+
aa796f
+	return klass->get_buffer_size (sniffer);
aa796f
 }
aa796f
diff --git a/libsoup/soup-cookie-jar.c b/libsoup/soup-cookie-jar.c
aa796f
index 2369c8a7..3996c62f 100644
aa796f
--- a/libsoup/soup-cookie-jar.c
aa796f
+++ b/libsoup/soup-cookie-jar.c
aa796f
@@ -888,7 +888,12 @@ soup_cookie_jar_set_accept_policy (SoupCookieJar *jar,
aa796f
 gboolean
aa796f
 soup_cookie_jar_is_persistent (SoupCookieJar *jar)
aa796f
 {
aa796f
+	SoupCookieJarClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_COOKIE_JAR (jar), FALSE);
aa796f
 
aa796f
-	return SOUP_COOKIE_JAR_GET_CLASS (jar)->is_persistent (jar);
aa796f
+	klass = SOUP_COOKIE_JAR_GET_CLASS (jar);
aa796f
+	g_return_val_if_fail (klass != NULL, FALSE);
aa796f
+
aa796f
+	return klass->is_persistent (jar);
aa796f
 }
21ead5
diff --git a/libsoup/soup-message-headers.c b/libsoup/soup-message-headers.c
aa796f
index a180c6ee..abef34cb 100644
21ead5
--- a/libsoup/soup-message-headers.c
21ead5
+++ b/libsoup/soup-message-headers.c
21ead5
@@ -1324,7 +1324,7 @@ content_type_setter (SoupMessageHeaders *hdrs, const char *value)
21ead5
 {
21ead5
 	g_free (hdrs->content_type);
21ead5
 	if (value) {
21ead5
-		char *content_type, *p;
21ead5
+		char *content_type = NULL, *p;
21ead5
 
21ead5
 		parse_content_foo (hdrs, "Content-Type", &content_type, NULL);
21ead5
 		p = strpbrk (content_type, " /");
aa796f
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
aa796f
index ae340b9c..42f38889 100644
aa796f
--- a/libsoup/soup-session.c
aa796f
+++ b/libsoup/soup-session.c
aa796f
@@ -2175,11 +2175,15 @@ void
aa796f
 soup_session_queue_message (SoupSession *session, SoupMessage *msg,
aa796f
 			    SoupSessionCallback callback, gpointer user_data)
aa796f
 {
aa796f
+	SoupSessionClass *klass;
aa796f
+
aa796f
 	g_return_if_fail (SOUP_IS_SESSION (session));
aa796f
 	g_return_if_fail (SOUP_IS_MESSAGE (msg));
aa796f
 
aa796f
-	SOUP_SESSION_GET_CLASS (session)->queue_message (session, msg,
aa796f
-							 callback, user_data);
aa796f
+	klass = SOUP_SESSION_GET_CLASS (session);
aa796f
+	g_return_if_fail (klass != NULL);
aa796f
+
aa796f
+	klass->queue_message (session, msg, callback, user_data);
aa796f
 	/* The SoupMessageQueueItem will hold a ref on @msg until it is
aa796f
 	 * finished, so we can drop the ref adopted from the caller now.
aa796f
 	 */
aa796f
@@ -2219,10 +2223,15 @@ soup_session_real_requeue_message (SoupSession *session, SoupMessage *msg)
aa796f
 void
aa796f
 soup_session_requeue_message (SoupSession *session, SoupMessage *msg)
aa796f
 {
aa796f
+	SoupSessionClass *klass;
aa796f
+
aa796f
 	g_return_if_fail (SOUP_IS_SESSION (session));
aa796f
 	g_return_if_fail (SOUP_IS_MESSAGE (msg));
aa796f
 
aa796f
-	SOUP_SESSION_GET_CLASS (session)->requeue_message (session, msg);
aa796f
+	klass = SOUP_SESSION_GET_CLASS (session);
aa796f
+	g_return_if_fail (klass != NULL);
aa796f
+
aa796f
+	klass->requeue_message (session, msg);
aa796f
 }
aa796f
 
aa796f
 static guint
aa796f
@@ -2266,10 +2275,15 @@ soup_session_real_send_message (SoupSession *session, SoupMessage *msg)
aa796f
 guint
aa796f
 soup_session_send_message (SoupSession *session, SoupMessage *msg)
aa796f
 {
aa796f
+	SoupSessionClass *klass;
aa796f
+
aa796f
 	g_return_val_if_fail (SOUP_IS_SESSION (session), SOUP_STATUS_MALFORMED);
aa796f
 	g_return_val_if_fail (SOUP_IS_MESSAGE (msg), SOUP_STATUS_MALFORMED);
aa796f
 
aa796f
-	return SOUP_SESSION_GET_CLASS (session)->send_message (session, msg);
aa796f
+	klass = SOUP_SESSION_GET_CLASS (session);
aa796f
+	g_return_val_if_fail (klass != NULL, SOUP_STATUS_MALFORMED);
aa796f
+
aa796f
+	return klass->send_message (session, msg);
aa796f
 }
aa796f
 
aa796f
 
aa796f
@@ -2350,7 +2364,14 @@ soup_session_real_kick_queue (SoupSession *session)
aa796f
 void
aa796f
 soup_session_kick_queue (SoupSession *session)
aa796f
 {
aa796f
-	SOUP_SESSION_GET_CLASS (session)->kick (session);
aa796f
+	SoupSessionClass *klass;
aa796f
+
aa796f
+	g_return_if_fail (SOUP_IS_SESSION (session));
aa796f
+
aa796f
+	klass = SOUP_SESSION_GET_CLASS (session);
aa796f
+	g_return_if_fail (klass != NULL);
aa796f
+
aa796f
+	klass->kick (session);
aa796f
 }
aa796f
 
aa796f
 /**
aa796f
@@ -2450,11 +2471,15 @@ soup_session_cancel_message (SoupSession *session, SoupMessage *msg,
aa796f
 			     guint status_code)
aa796f
 {
aa796f
 	SoupSessionPrivate *priv;
aa796f
+	SoupSessionClass *klass;
aa796f
 	SoupMessageQueueItem *item;
aa796f
 
aa796f
 	g_return_if_fail (SOUP_IS_SESSION (session));
aa796f
 	g_return_if_fail (SOUP_IS_MESSAGE (msg));
aa796f
 
aa796f
+	klass = SOUP_SESSION_GET_CLASS (session);
aa796f
+	g_return_if_fail (klass != NULL);
aa796f
+
aa796f
 	priv = soup_session_get_instance_private (session);
aa796f
 	item = soup_message_queue_lookup (priv->queue, msg);
aa796f
 	/* If the message is already ending, don't do anything */
aa796f
@@ -2465,7 +2490,7 @@ soup_session_cancel_message (SoupSession *session, SoupMessage *msg,
aa796f
 		return;
aa796f
 	}
aa796f
 
aa796f
-	SOUP_SESSION_GET_CLASS (session)->cancel_message (session, msg, status_code);
aa796f
+	klass->cancel_message (session, msg, status_code);
aa796f
 	soup_message_queue_item_unref (item);
aa796f
 }
aa796f
 
aa796f
@@ -2538,15 +2563,20 @@ soup_session_real_flush_queue (SoupSession *session)
aa796f
 void
aa796f
 soup_session_abort (SoupSession *session)
aa796f
 {
aa796f
+	SoupSessionClass *klass;
aa796f
 	SoupSessionPrivate *priv;
aa796f
 	GSList *conns, *c;
aa796f
 	GHashTableIter iter;
aa796f
 	gpointer conn, host;
aa796f
 
aa796f
 	g_return_if_fail (SOUP_IS_SESSION (session));
aa796f
+
aa796f
+	klass = SOUP_SESSION_GET_CLASS (session);
aa796f
+	g_return_if_fail (klass != NULL);
aa796f
+
aa796f
 	priv = soup_session_get_instance_private (session);
aa796f
 
aa796f
-	SOUP_SESSION_GET_CLASS (session)->flush_queue (session);
aa796f
+	klass->flush_queue (session);
aa796f
 
aa796f
 	/* Close all idle connections */
aa796f
 	g_mutex_lock (&priv->conn_lock);
aa796f
diff --git a/libsoup/soup-status.h b/libsoup/soup-status.h
aa796f
index 28d481db..514dfc31 100644
aa796f
--- a/libsoup/soup-status.h
aa796f
+++ b/libsoup/soup-status.h
aa796f
@@ -8,7 +8,7 @@
aa796f
 #ifndef SOUP_STATUS_H
aa796f
 #define SOUP_STATUS_H 1
aa796f
 
aa796f
-#include <libsoup/soup-types.h>
aa796f
+#include <libsoup/soup-version.h>
aa796f
 
aa796f
 G_BEGIN_DECLS
aa796f
 
aa796f
diff --git a/libsoup/soup-uri.c b/libsoup/soup-uri.c
aa796f
index be778d6c..74c362e9 100644
aa796f
--- a/libsoup/soup-uri.c
aa796f
+++ b/libsoup/soup-uri.c
aa796f
@@ -1348,7 +1348,7 @@ soup_uri_is_http (SoupURI *uri, char **aliases)
aa796f
 			return TRUE;
aa796f
 	}
aa796f
 
aa796f
-	if (!aliases[1] && !strcmp (aliases[0], "*"))
aa796f
+	if (aliases[0] && !aliases[1] && !strcmp (aliases[0], "*"))
aa796f
 		return TRUE;
aa796f
 	else
aa796f
 		return FALSE;
21ead5
diff --git a/libsoup/soup-xmlrpc.c b/libsoup/soup-xmlrpc.c
aa796f
index 42dcda9c..60fb814c 100644
21ead5
--- a/libsoup/soup-xmlrpc.c
21ead5
+++ b/libsoup/soup-xmlrpc.c
21ead5
@@ -588,7 +588,7 @@ signature_get_next_complete_type (const char **signature)
21ead5
 
21ead5
 			(*signature)++;
21ead5
 
21ead5
-			if ( (*signature)[0] == stack[stack_len - 1])
aa796f
+			if (stack_len > 0 && (*signature)[0] == stack[stack_len - 1])
21ead5
 				stack_len--;
21ead5
 		} while (stack_len > 0);
21ead5
 
21ead5
diff --git a/tests/test-utils.c b/tests/test-utils.c
aa796f
index 9c742060..7a21fa02 100644
21ead5
--- a/tests/test-utils.c
21ead5
+++ b/tests/test-utils.c
aa796f
@@ -676,9 +676,11 @@ soup_test_request_read_all (SoupRequest   *req,
21ead5
 
21ead5
 	if (!SOUP_IS_SESSION_SYNC (soup_request_get_session (req)))
21ead5
 		data.loop = g_main_loop_new (g_main_context_get_thread_default (), FALSE);
21ead5
+	else
21ead5
+		data.loop = NULL;
21ead5
 
21ead5
 	do {
aa796f
-		if (SOUP_IS_SESSION_SYNC (soup_request_get_session (req))) {
aa796f
+		if (!data.loop) {
aa796f
 			nread = g_input_stream_read (stream, buf, sizeof (buf),
aa796f
 						     cancellable, error);
aa796f
 		} else {
aa796f
@@ -691,7 +693,7 @@ soup_test_request_read_all (SoupRequest   *req,
21ead5
 		}
21ead5
 	} while (nread > 0);
21ead5
 
21ead5
-	if (!SOUP_IS_SESSION_SYNC (soup_request_get_session (req)))
21ead5
+	if (data.loop)
21ead5
 		g_main_loop_unref (data.loop);
21ead5
 
21ead5
 	return nread == 0;