diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c00574f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libsoup-2.62.2.tar.xz diff --git a/.libsoup.metadata b/.libsoup.metadata new file mode 100644 index 0000000..ffb840d --- /dev/null +++ b/.libsoup.metadata @@ -0,0 +1 @@ +d4efdf3f5a3767b11aa60883b9a3a01b2dc6d97d SOURCES/libsoup-2.62.2.tar.xz diff --git a/SOURCES/0001-cookie-jar-bail-if-hostname-is-an-empty-string.patch b/SOURCES/0001-cookie-jar-bail-if-hostname-is-an-empty-string.patch new file mode 100644 index 0000000..843b2e6 --- /dev/null +++ b/SOURCES/0001-cookie-jar-bail-if-hostname-is-an-empty-string.patch @@ -0,0 +1,29 @@ +From db2b0d5809d5f8226d47312b40992cadbcde439f Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Sun, 24 Jun 2018 19:46:19 -0500 +Subject: [PATCH] cookie-jar: bail if hostname is an empty string + +There are several other ways to fix the problem with this function, but +skipping over all of the code is probably the simplest. + +Fixes #3 +--- + libsoup/soup-cookie-jar.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libsoup/soup-cookie-jar.c b/libsoup/soup-cookie-jar.c +index 2369c8a..b2b7890 100644 +--- a/libsoup/soup-cookie-jar.c ++++ b/libsoup/soup-cookie-jar.c +@@ -307,7 +307,7 @@ get_cookies (SoupCookieJar *jar, SoupURI *uri, gboolean for_http, gboolean copy_ + + priv = soup_cookie_jar_get_instance_private (jar); + +- if (!uri->host) ++ if (!uri->host || !uri->host[0]) + return NULL; + + /* The logic here is a little weird, but the plan is that if +-- +2.17.1 + diff --git a/SOURCES/coverity-scan-issues.patch b/SOURCES/coverity-scan-issues.patch new file mode 100644 index 0000000..16fe807 --- /dev/null +++ b/SOURCES/coverity-scan-issues.patch @@ -0,0 +1,710 @@ +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 ++#include + + 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; diff --git a/SOURCES/libsoup-python2.patch b/SOURCES/libsoup-python2.patch new file mode 100644 index 0000000..35a39a0 --- /dev/null +++ b/SOURCES/libsoup-python2.patch @@ -0,0 +1,8 @@ +--- libsoup-2.62.1/libsoup/tld-parser.py.orig 2018-04-26 19:29:27.318600263 +0200 ++++ libsoup-2.62.1/libsoup/tld-parser.py 2018-04-26 19:29:39.761593669 +0200 +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python3 ++#!/usr/bin/env python + + # Generate tld rules + # Copyright (C) 2012 Red Hat, Inc. diff --git a/SPECS/libsoup.spec b/SPECS/libsoup.spec new file mode 100644 index 0000000..5d7a20c --- /dev/null +++ b/SPECS/libsoup.spec @@ -0,0 +1,740 @@ +%define glib2_version 2.38.0 + +Name: libsoup +Version: 2.62.2 +Release: 2%{?dist} +Summary: Soup, an HTTP library implementation + +License: LGPLv2 +URL: https://wiki.gnome.org/Projects/libsoup +Source0: https://download.gnome.org/sources/%{name}/2.62/%{name}-%{version}.tar.xz + +Patch01: coverity-scan-issues.patch +# Downstream patch to support Python 2 +Patch02: libsoup-python2.patch +Patch03: 0001-cookie-jar-bail-if-hostname-is-an-empty-string.patch + +BuildRequires: chrpath +BuildRequires: glib2-devel >= %{glib2_version} +BuildRequires: glib-networking +BuildRequires: intltool +BuildRequires: krb5-devel >= 1.11 +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(sqlite3) +BuildRequires: vala + +Requires: glib2%{?_isa} >= %{glib2_version} +Requires: glib-networking%{?_isa} >= %{glib2_version} + +%description +Libsoup is an HTTP library implementation in C. It was originally part +of a SOAP (Simple Object Access Protocol) implementation called Soup, but +the SOAP and non-SOAP parts have now been split into separate packages. + +libsoup uses the Glib main loop and is designed to work well with GTK +applications. This enables GNOME applications to access HTTP servers +on the network in a completely asynchronous fashion, very similar to +the Gtk+ programming model (a synchronous operation mode is also +supported for those who want it). + +%package devel +Summary: Header files for the Soup library +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Libsoup is an HTTP library implementation in C. This package allows +you to develop applications that use the libsoup library. + +%prep +%setup -q +%patch01 -p1 -b .coverity-scan-issues +%patch02 -p1 -b .python2 +%patch03 -p1 -b .cve-2018-12910 + +%build +%configure --disable-static + +# Omit unused direct shared library dependencies. +sed --in-place --expression 's! -shared ! -Wl,--as-needed\0!g' libtool + +make %{?_smp_mflags} + +%install +%make_install + +rm -f $RPM_BUILD_ROOT/%{_libdir}/*.la + +# Remove lib64 rpaths +chrpath --delete $RPM_BUILD_ROOT%{_libdir}/*.so + +%find_lang libsoup + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files -f libsoup.lang +%license COPYING +%doc README NEWS AUTHORS +%{_libdir}/lib*.so.* +%{_libdir}/girepository-1.0/Soup*2.4.typelib + +%files devel +%{_includedir}/%{name}-2.4 +%{_includedir}/%{name}-gnome-2.4 +%{_libdir}/*.so +%{_libdir}/pkgconfig/*.pc +%{_datadir}/gir-1.0/Soup*2.4.gir +%{_datadir}/gtk-doc/html/%{name}-2.4 +%dir %{_datadir}/vala +%dir %{_datadir}/vala/vapi +%{_datadir}/vala/vapi/libsoup-2.4.deps +%{_datadir}/vala/vapi/libsoup-2.4.vapi + +%changelog +* Mon Jul 09 2018 Milan Crha - 2.62.2-2 +- Backport upstream patch for CVE-2018-12910 - Crash in soup_cookie_jar.c: get_cookies() on empty hostnames +- Resolves: #1598838 + +* Tue May 08 2018 Kalev Lember - 2.62.2-1 +- Update to 2.62.2 +- Resolves: #1569734 + +* Mon Apr 09 2018 Kalev Lember - 2.62.1-1 +- Update to 2.62.1 +- Resolves: #1569734 + +* Wed Nov 15 2017 Milan Crha - 2.56.0-6 +- Fix for crash under soup_socket_new() (rh #1513355) + +* Fri Sep 29 2017 Tomas Popela - 2.56.0-5 +- libsoup should fallback to another authentication type if the current failed (rh #1495552) + +* Wed Aug 09 2017 Tomas Popela - 2.56.0-4 +- Fix chunked decoding buffer overrun (CVE-2017-2885) (rh #1479321) + +* Thu Jun 22 2017 Tomas Popela - 2.56.0-3 +- libsoup stuck on infinite loop for kerberized pages (rh #1439798) + +* Wed Apr 26 2017 Milan Crha - 2.56.0-2 +- Add patch to address some of Coverity Scan and clang reported issues + +* Mon Sep 19 2016 Kalev Lember - 2.56.0-1 +- Update to 2.56.0 +- Resolves: #1387019 + +* Tue Apr 19 2016 Milan Crha - 2.48.1-6 +- NTLM auth failure with latest samba (rh #1328453) + +* Wed Apr 13 2016 Milan Crha - 2.48.1-5 +- soup_headers_parse: deal with NUL bytes in headers (rh #1302366) + +* Wed Apr 13 2016 Milan Crha - 2.48.1-4 +- Update ja.po translation file (rh #1304238) + +* Tue May 26 2015 Dan Winship - 2.48.1-3 +- Fix "make check" when LC_ALL is set (rh #1224989) + +* Mon Apr 27 2015 Dan Winship - 2.48.1-2 +- Update to 2.48.1 +- Resolves: #1174446 + +* Sun Oct 19 2014 Dan Winship - 2.46.0-3 +- Apply upstream patch to fix a crash in evolution (rh #1097202) + +* Thu Jul 24 2014 Dan Winship - 2.46.0-2 +- Apply upstream patch to add SoupSession:tls-interaction (rh #1104368) + +* Thu Jul 24 2014 Dan Winship - 2.46.0-1 +- Rebase to 2.46 (rh #1104368) + +* Fri Jan 24 2014 Daniel Mach - 2.42.2-3 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 2.42.2-2 +- Mass rebuild 2013-12-27 + +* Mon Apr 29 2013 Kalev Lember - 2.42.2-1 +- Update to 2.42.2 + +* Tue Apr 16 2013 Richard Hughes - 2.42.1-1 +- Update to 2.42.1 + +* Tue Mar 26 2013 Kalev Lember - 2.42.0-1 +- Update to 2.42.0 + +* Tue Mar 19 2013 Richard Hughes - 2.41.92-1 +- Update to 2.41.92 + +* Thu Mar 7 2013 Matthias Clasen - 2.41.91-1 +- Update to 2.41.91 + +* Tue Feb 19 2013 Richard Hughes - 2.41.90-1 +- Update to 2.41.90 + +* Wed Feb 06 2013 Kalev Lember - 2.41.5-1 +- Update to 2.41.5 + +* Tue Jan 15 2013 Matthias Clasen - 2.41.4-1 +- Updat e to 2.41.4 + +* Thu Dec 20 2012 Kalev Lember - 2.41.3-1 +- Update to 2.41.3 +- Remove libgnome-keyring build dep; no longer used + +* Tue Nov 20 2012 Richard Hughes - 2.41.2-1 +- Update to 2.41.2 + +* Fri Nov 09 2012 Kalev Lember - 2.41.1-1 +- Update to 2.41.1 + +* Tue Oct 16 2012 Kalev Lember - 2.40.1-1 +- Update to 2.40.1 + +* Tue Oct 2 2012 Matthias Clasen - 2.40.0-1 +- Update to 2.40.0 + +* Fri Jul 27 2012 Fedora Release Engineering - 2.39.4.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 17 2012 Richard Hughes - 2.39.4.1-1 +- Update to 2.39.4.1 + +* Wed Jun 27 2012 Richard Hughes - 2.39.3-1 +- Update to 2.39.3 + +* Thu Jun 07 2012 Richard Hughes - 2.39.2-1 +- Update to 2.39.2 + +* Sat May 05 2012 Kalev Lember - 2.39.1-1 +- Update to 2.39.1 +- Package the translations + +* Tue Apr 17 2012 Kalev Lember - 2.38.1-1 +- Update to 2.38.1 + +* Wed Mar 28 2012 Richard Hughes - 2.38.0-1 +- Update to 2.38.0 + +* Wed Mar 21 2012 Kalev Lember - 2.37.92-1 +- Update to 2.37.92 + +* Mon Mar 5 2012 Matthias Clasen - 2.37.91-1 +- Update to 2.37.91 + +* Sat Feb 25 2012 Matthias Clasen - 2.37.90-1 +- Update to 2.37.90 + +* Mon Feb 13 2012 Matthias Clasen - 2.37.5.1-1 +- Update to 2.37.5.1 + +* Mon Feb 6 2012 Matthias Clasen - 2.37.5-1 +- Update to 2.37.5 + +* Tue Jan 17 2012 Matthias Clasen - 2.37.4-1 +- Update to 2.37.4 + +* Fri Jan 13 2012 Fedora Release Engineering - 2.37.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 20 2011 Matthias Clasen - 2.37.3-1 +- Update to 2.37.3 + +* Mon Nov 21 2011 Matthias Clasen - 2.37.2-1 +- Update to 2.37.2 + +* Wed Nov 2 2011 Matthias Clasen - 2.37.1-1 +- Update to 2.37.1 + +* Wed Oct 26 2011 Fedora Release Engineering - 2.36.1-2 +- Rebuilt for glibc bug#747377 + +* Tue Oct 18 2011 Matthias Clasen - 2.36.1-1 +- Update to 2.36.1 + +* Mon Sep 26 2011 Ray - 2.36.0-1 +- Update to 2.36.0 + +* Mon Sep 19 2011 Matthias Clasen 2.35.92-1 +- Update to 2.35.92 + +* Tue Aug 30 2011 Matthias Clasen 2.35.90-1 +- Update to 2.35.90 + +* Wed Aug 17 2011 Matthias Clasen 2.35.5-1 +- Update to 2.35.5 + +* Tue Jul 05 2011 Bastien Nocera 2.35.3-1 +- Update to 2.35.3 + +* Tue Apr 26 2011 Matthias Clasen - 2.34.1-1 +- Update to 2.34.1 + +* Mon Apr 4 2011 Matthias Clasen - 2.34.0-1 +- Update to 2.34.0 + +* Tue Mar 22 2011 Matthias Clasen - 2.33.92-2 +- Clean up BRs + +* Tue Mar 22 2011 Matthias Clasen - 2.33.92-1 +- 2.33.92 + +* Tue Feb 22 2011 Matthias Clasen - 2.33.90-1 +- 2.33.90 + +* Tue Feb 08 2011 Fedora Release Engineering - 2.33.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Feb 2 2011 Christopher Aillon - 2.33.6-1 +- Update to 2.33.6 + +* Mon Jan 17 2011 Dan Winship - 2.33.5-2 +- Require glib-networking, for TLS support + +* Mon Jan 10 2011 Matthias Clasen - 2.33.5-1 +- Update to 2.33.5 + +* Thu Dec 2 2010 Dan Winship - 2.32.2-1 +- Update to 2.32.2 + +* Thu Nov 11 2010 Dan HorĂ¡k - 2.32.0-2 +- bump release to win over F-14 + +* Tue Sep 28 2010 Matthias Clasen - 2.32.0-1 +- Update to 2.32.0 + +* Tue Sep 21 2010 Matthias Clasen - 2.31.92-1 +- Update to 2.31.92 + +* Wed Aug 18 2010 Matthias Clasen - 2.31.90-1 +- Update to 2.31.90 + +* Tue Aug 3 2010 Matthias Clasen - 2.31.6-1 +- Update to 2.31.6 + +* Thu Jul 15 2010 Colin Walters - 2.31.2-5 +- Rebuild with new gobject-introspection + +* Fri Jul 2 2010 Matthias Clasen - 2.31.2-4 +- Rebuild for introspection format break + +* Wed Jun 23 2010 Matthew Barnes - 2.31.2-3 +- libsoup-devel doesn't need gtk-doc (RH bug #604396). + +* Mon Jun 21 2010 Peter Robinson - 2.31.2-2 +- enable introspection support + +* Thu May 27 2010 Matthias Clasen - 2.31.2-1 +- Update to 2.31.2 + +* Tue Apr 27 2010 Matthias Clasen - 2.30.1-1 +- Update to 2.30.1 + +* Mon Mar 29 2010 Matthias Clasen - 2.30.0-1 +- Update to 2.30.0 + +* Thu Mar 25 2010 Nils Philippsen - 2.29.91-2 +- rebuild for new libproxy + +* Mon Feb 22 2010 Matthias Clasen - 2.29.91-1 +- Update to 2.29.91 + +* Mon Feb 08 2010 Matthew Barnes - 2.29.90-1 +- Update to 2.29.90 + +* Tue Jan 26 2010 Matthias Clasen - 2.29.6-1 +- Update to 2.29.6 + +* Sat Jan 16 2010 Matthias Clasen - 2.29.5-1 +- Update to 2.29.5 + +* Wed Dec 9 2009 Dan Winship - 2.29.3-2 +- Add patch from git to fix gir-repository build + +* Tue Dec 01 2009 Bastien Nocera 2.29.3-1 +- Update to 2.29.3 + +* Mon Sep 21 2009 Matthias Clasen - 2.28.0-1 +- Update to 2.28.0 + +* Mon Sep 7 2009 Matthias Clasen - 2.27.92-1 +- Update to 2.27.92 + +* Mon Aug 24 2009 Matthias Clasen - 2.27.91-1 +- Update to 2.27.91 + +* Tue Aug 11 2009 Matthias Clasen - 2.27.90-1 +- Update to 2.27.90 + +* Tue Jul 28 2009 Matthias Clasen - 2.27.5-1 +- Update to 2.27.5 + +* Sat Jul 25 2009 Fedora Release Engineering - 2.27.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jul 13 2009 Matthew Barnes - 2.27.4-1 +- Update to 2.27.4 + +* Wed Jun 17 2009 Matthias Clasen - 2.27.2-1 +- Update to 2.27.2 + +* Mon May 18 2009 Bastien Nocera 2.27.1-1 +- Update to 2.27.1 + +* Mon Apr 13 2009 Matthias Clasen - 2.26.1-1 +- Update to 2.26.1 +- See http://download.gnome.org/sources/libsoup/2.26/libsoup-2.26.1.changes + +* Thu Apr 9 2009 Matthias Clasen - 2.26.0.9-1 +- Upate to 2.26.0.9 + +* Mon Mar 16 2009 Matthias Clasen - 2.26.0-1 +- Update to 2.26.0 + +* Wed Feb 25 2009 Fedora Release Engineering - 2.25.91-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 16 2009 Matthew Barnes - 2.25.91-1 +- Update to 2.25.91 + +* Mon Feb 02 2009 Matthew Barnes - 2.25.5-1 +- Update to 2.25.5 + +* Sun Jan 25 2009 Matthias Clasen - 2.25.4-2 +- Build against libproxy + +* Mon Jan 05 2009 Matthew Barnes - 2.25.4-1 +- Update to 2.25.4 + +* Tue Dec 16 2008 Matthew Barnes - 2.25.3-1 +- Update to 2.25.3 + +* Mon Dec 01 2008 Matthew Barnes - 2.25.2-1 +- Update to 2.25.2 + +* Wed Nov 12 2008 Matthias Clasen - 2.25.1-3 +- Fix BuildRequires + +* Fri Nov 07 2008 Matthew Barnes - 2.25.1-1 +- Update to 2.25.1 + +* Mon Oct 20 2008 Matthias Clasen - 2.24.1-1 +- Update to 2.24.1 + +* Wed Sep 24 2008 Matthias Clasen - 2.24.0.1-1 +- Update to 2.24.0.1 + +* Mon Sep 22 2008 Matthias Clasen - 2.24.0-1 +- Update to 2.24.0 + +* Mon Sep 8 2008 Matthias Clasen - 2.23.92-1 +- Update to 2.23.92 + +* Mon Sep 01 2008 Matthew Barnes - 2.23.91-1 +- Update to 2.23.91 + +* Mon Aug 04 2008 Matthew Barnes - 2.23.6-1 +- Update to 2.23.6 + +* Wed Jul 30 2008 Matthew Barnes - 2.23.1-6 +- Omit unused direct shared library dependencies (RH bug #226046). + +* Tue Jun 24 2008 Tomas Mraz - 2.23.1-5 +- rebuild with new gnutls + +* Sun Jun 22 2008 Matthew Barnes - 2.23.1-4 +- Remove unnecessary pkgconfig build requirement. + +* Mon Jun 16 2008 Matthew Barnes - 2.23.1-3 +- Incorporate package review feedback (RH bug #226046). + +* Sun May 4 2008 Matthias Clasen - 2.23.1-2 +- Fix source url + +* Mon Apr 21 2008 Matthew Barnes - 2.23.1-1 +- Update to 2.23.1 + +* Mon Apr 07 2008 Matthew Barnes - 2.4.1-1 +- Update to 2.4.1 + +* Mon Mar 10 2008 Matthias Clasen - 2.4.0-1 +- Update to 2.4.0 + +* Mon Feb 25 2008 Matthew Barnes - 2.3.4-1 +- Update to 2.3.4 + +* Wed Feb 13 2008 Matthew Barnes - 2.3.2-1 +- Update to 2.3.2 + +* Mon Jan 28 2008 Matthew Barnes - 2.3.0-1 +- Update to 2.3.0 +- Bump glib2 requirement to >= 2.15.3. +- Clean up some redundant dependencies. +- Remove patch for RH bug #327871 (fixed in glibc). + +* Mon Nov 26 2007 Matthew Barnes - 2.2.104-1 +- Update to 2.2.104 + +* Sun Oct 28 2007 Jeremy Katz - 2.2.103-1 +- update to 2.2.103 to fix a rhythmbox crasher (#343561) + +* Mon Oct 15 2007 Matthew Barnes - 2.2.102-1 +- Update to 2.2.102 + +* Thu Oct 11 2007 Matthew Barnes - 2.2.101-2 +- Add patch for RH bug #327871 (broken Rhythmbox build). +- Suspect this is really a glibc bug. + +* Fri Oct 05 2007 Matthew Barnes - 2.2.101-1 +- Update to 2.2.101 + +* Wed Aug 8 2007 Matthias Clasen - 2.2.100-3 +- Update the license field + +* Sat Apr 21 2007 Matthias Clasen - 2.2.100-2 +- Don't install INSTALL + +* Mon Feb 12 2007 Matthew Barnes - 2.2.100-1 +- Update to 2.2.100 + +* Mon Jan 08 2007 Matthew Barnes - 2.2.99-1 +- Update to 2.2.99 + +* Tue Nov 21 2006 Matthew Barnes - 2.2.98-1 +- Update to 2.2.98 +- Remove patch for RH bug #215919 (fixed upstream). + +* Fri Nov 17 2006 Matthias Clasen - 2.2.97-2 +- Avoid accidentally exported symbols (#215919) + +* Mon Nov 06 2006 Matthew Barnes - 2.2.97-1 +- Update to 2.2.97 +- Remove patch for Gnome.org bug #356809 (fixed upstream). + +* Fri Nov 03 2006 Matthew Barnes - 2.2.96-5 +- Revised patch for Gnome.org bug #356809 to match upstream. + +* Sun Oct 01 2006 Jesse Keating - 2.2.96-4 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Wed Sep 20 2006 Matthew Barnes - 2.2.96-3.fc6 +- Add patch for Gnome.org bug #356809 (lingering file on uninstall). + +* Tue Aug 15 2006 Matthew Barnes - 2.2.96-2.fc6 +- Rebuild + +* Tue Jul 25 2006 Matthew Barnes - 2.2.96 +- Update to 2.2.96 +- Bump glib2 requirement to >= 2.6. + +* Wed Jul 12 2006 Matthew Barnes - 2.2.95.1-1 +- Update to 2.2.95.1 + +* Wed Jul 12 2006 Jesse Keating - 2.2.94-3.1 +- rebuild + +* Wed Jun 14 2006 Tomas Mraz - 2.2.94-3 +- rebuilt with new gnutls + +* Tue Jun 13 2006 Matthias Clasen - 2.2.94-1 +- Update to 2.2.94 + +* Mon Apr 10 2006 Matthias Clasen - 2.2.92-2 +- Update to 2.2.92 + +* Sat Mar 4 2006 Matthias Clasen - 2.2.91-1 +- Update to 2.2.91 + +* Wed Feb 15 2006 Matthias Clasen - 2.2.7-2 +- Remove excessive Requires for the -devel package + +* Fri Feb 10 2006 Jesse Keating - 2.2.7-1.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.2.7-1.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Tue Nov 29 2005 David Malcolm - 2.2.7-1 +- 2.2.7 +- Remove static library + +* Tue Aug 23 2005 David Malcolm - 2.2.6.1-1 +- 2.2.6.1 + +* Tue Aug 9 2005 David Malcolm - 2.2.5-1 +- 2.2.5 +- Removed gnome-bug-306877-soup-connection-ntlm.c.patch (#160071) as this is + now in upstream tarball + +* Mon Aug 8 2005 Tomas Mraz - 2.2.3-5 +- rebuild with new gnutls + +* Tue Jun 14 2005 David Malcolm - 2.2.3-4 +- add patch for NTLM domains (#160071) + +* Sun Apr 24 2005 Florian La Roche +- rebuild for new gnutls + +* Thu Mar 17 2005 David Malcolm - 2.2.3-2 +- explicitly enable gtk-doc support + +* Thu Mar 17 2005 David Malcolm - 2.2.3-1 +- 2.2.3 + +* Wed Mar 2 2005 David Malcolm - 2.2.2-3 +- rebuild with GCC 4 + +* Wed Jan 26 2005 David Malcolm - 2.2.2-2 +- actually uploaded the source this time + +* Wed Jan 26 2005 David Malcolm - 2.2.2-1 +- update from 2.2.1 to 2.2.2 +- add explicit devel requirements on glib2-devel, pkgconfig, gtk-doc, gnutls-devel and libxml2-devel + +* Tue Oct 12 2004 David Malcolm - 2.2.1-1 +- update from 2.2.0 to 2.2.1 + +* Wed Oct 6 2004 David Malcolm - 2.2.0-3 +- added requirement on libxml2 (#134700) + +* Wed Sep 22 2004 David Malcolm - 2.2.0-2 +- added requirement on gnutls, so that we build with SSL support +- fixed source download path + +* Tue Aug 31 2004 David Malcolm - 2.2.0-1 +- update from 2.1.13 to 2.2.0 + +* Mon Aug 16 2004 David Malcolm - 2.1.13-1 +- 2.1.13 + +* Tue Jul 20 2004 David Malcolm - 2.1.12-1 +- 2.1.12 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Mon Jun 7 2004 David Malcolm - 2.1.11-1 +- 2.1.11 + +* Thu May 20 2004 David Malcolm - 2.1.10-2 +- added missing md5 file + +* Thu May 20 2004 David Malcolm - 2.1.10-1 +- 2.1.10 + +* Tue Apr 20 2004 David Malcolm - 2.1.9-1 +- Update to 2.1.9; added gtk-doc to BuildRequires and the generated files to the devel package + +* Wed Mar 10 2004 Jeremy Katz - 2.1.8-1 +- 2.1.8 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Tue Feb 17 2004 Jeremy Katz - 2.1.7-1 +- 2.1.7 + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Mon Jan 26 2004 Jeremy Katz 2.1.5-1 +- 2.1.5 + +* Wed Jan 14 2004 Jeremy Katz 2.1.4-0 +- update to 2.1.4 + +* Sat Jan 3 2004 Jeremy Katz 2.1.3-0 +- update to 2.1.3 + +* Tue Sep 23 2003 Jeremy Katz 1.99.26-2 +- rebuild + +* Fri Sep 19 2003 Jeremy Katz 1.99.26-1 +- 1.99.26 + +* Tue Jul 15 2003 Jeremy Katz 1.99.23-3 +- rebuild to pickup ppc64 + +* Mon Jun 9 2003 Jeremy Katz 1.99.23-2 +- rebuild +- no openssl on ppc64 yet, excludearch + +* Mon Jun 9 2003 Jeremy Katz 1.99.23-1 +- 1.99.23 + +* Thu Jun 5 2003 Elliot Lee +- rebuilt + +* Thu Jun 5 2003 Jeremy Katz 1.99.22-2 +- rebuild + +* Sun May 25 2003 Jeremy Katz 1.99.22-1 +- 1.99.22 + +* Tue May 6 2003 Jeremy Katz 1.99.20-1 +- 1.99.20 + +* Sun May 4 2003 Jeremy Katz 1.99.17-3 +- include ssl proxy so that ssl urls work properly (#90165, #90166) + +* Wed Apr 16 2003 Jeremy Katz 1.99.17-2 +- forward port patch to use a union initializer to fix build on x86_64 + +* Wed Apr 16 2003 Jeremy Katz 1.99.17-1 +- rename package to libsoup +- update to 1.99.17 +- don't obsolete soup for now, it's parallel installable + +* Sun Apr 6 2003 Jeremy Katz 0.7.11-1 +- update to 0.7.11 + +* Wed Apr 2 2003 Matt Wilson 0.7.10-5 +- added soup-0.7.10-64bit.patch to fix 64 bit platforms (#86347) + +* Sat Feb 01 2003 Florian La Roche +- only runtime libs in normal rpm + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Jan 21 2003 Jeremy Katz +- update url (#82347) + +* Tue Jan 7 2003 Nalin Dahyabhai 0.7.10-2 +- use pkgconfig's openssl configuration information, if it exists + +* Fri Dec 13 2002 Jeremy Katz 0.7.10-1 +- update to 0.7.10 + +* Thu Dec 12 2002 Jeremy Katz 0.7.9-4 +- fix fpic patch +- soup-devel should require soup + +* Thu Dec 12 2002 Jeremy Katz 0.7.9-3 +- better lib64 patch +- fix building of libwsdl-build to use libtool so that it gets built + with -fPIC as needed + +* Tue Dec 10 2002 Jeremy Katz 0.7.9-2 +- change popt handling in configure slightly so that it will work on + multilib arches + +* Tue Dec 10 2002 Jeremy Katz 0.7.9-1 +- update to 0.7.9, pulling the tarball out of Ximian packages + +* Wed Oct 23 2002 Jeremy Katz 0.7.4-3 +- fix to not try to include non-existent doc files and remove all + unwanted files from the build +- include api docs +- don't build the apache module + +* Wed Sep 25 2002 Jeremy Katz 0.7.4-2 +- various specfile tweaks to include in Red Hat Linux +- include all the files + +* Tue Jan 23 2001 Alex Graveley +- Inital RPM config.