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