mirror of
https://github.com/outbackdingo/ports.git
synced 2026-03-22 05:44:47 +00:00
823 lines
30 KiB
Diff
Executable File
823 lines
30 KiB
Diff
Executable File
Submitted By: Douglas R. Reno <renodr at linuxfromscratch dot org>
|
|
Date: 2019-09-10
|
|
Initial Package Version: 0.7.0
|
|
Upstream Status: Submitted (PR)
|
|
Origin: Self
|
|
Description: Fixes several bugs in libgrss. This includes porting
|
|
to the new libsoup API, fixing memory leaks, bumping
|
|
the version to the one that tracker-miners wants,
|
|
fixing signal emission problems, upgrading g-i files,
|
|
fixing authentication bugs, and porting from
|
|
GSimpleAsync to GTask.
|
|
|
|
diff -Naurp libgrss-0.7.0.orig/configure.ac libgrss-0.7.0/configure.ac
|
|
--- libgrss-0.7.0.orig/configure.ac 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/configure.ac 2019-04-10 00:01:12.448526750 -0500
|
|
@@ -2,13 +2,13 @@
|
|
# bump micro_version to the next odd number after each release
|
|
m4_define([grss_major_version], [0])
|
|
m4_define([grss_minor_version], [7])
|
|
-m4_define([grss_micro_version], [0])
|
|
+m4_define([grss_micro_version], [1])
|
|
m4_define([grss_version],
|
|
[grss_major_version.grss_minor_version.grss_micro_version])
|
|
|
|
# bump up by 1 for every micro release with no API changes, otherwise
|
|
# set to 0. after release, bump up by 1
|
|
-m4_define([grss_interface_age], [0])
|
|
+m4_define([grss_interface_age], [1])
|
|
m4_define([grss_binary_age], [m4_eval(100 * grss_minor_version + grss_micro_version)])
|
|
|
|
m4_define([lt_current], [m4_eval(100 * grss_minor_version + grss_micro_version - grss_interface_age)])
|
|
diff -Naurp libgrss-0.7.0.orig/doc/reference/libgrss-docs.sgml libgrss-0.7.0/doc/reference/libgrss-docs.sgml
|
|
--- libgrss-0.7.0.orig/doc/reference/libgrss-docs.sgml 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/doc/reference/libgrss-docs.sgml 2019-04-09 23:51:42.414042258 -0500
|
|
@@ -55,7 +55,6 @@
|
|
|
|
<xi:include href="xml/feed-atom-handler.xml"/>
|
|
<xi:include href="xml/feed-handler.xml"/>
|
|
- <xi:include href="xml/feed-marshal.xml"/>
|
|
<xi:include href="xml/feed-pie-handler.xml"/>
|
|
<xi:include href="xml/feed-rss-handler.xml"/>
|
|
<xi:include href="xml/feeds-group-handler.xml"/>
|
|
diff -Naurp libgrss-0.7.0.orig/doc/reference/version.xml.in libgrss-0.7.0/doc/reference/version.xml.in
|
|
--- libgrss-0.7.0.orig/doc/reference/version.xml.in 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/doc/reference/version.xml.in 2019-04-10 00:01:52.056757372 -0500
|
|
@@ -1 +1 @@
|
|
-@LIBGRSS_VERSION@
|
|
+@GRSS_VERSION@
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-atom-handler.c libgrss-0.7.0/src/feed-atom-handler.c
|
|
--- libgrss-0.7.0.orig/src/feed-atom-handler.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-atom-handler.c 2019-04-10 00:28:07.125200045 -0500
|
|
@@ -63,6 +63,14 @@ feed_atom_handler_error_quark ()
|
|
static void
|
|
feed_atom_handler_finalize (GObject *object)
|
|
{
|
|
+ /* Ensure that the Feed Atom Handler's hash tables and objects are cleared
|
|
+ * properly. Without this, we risk triggering a memory leak. */
|
|
+ FeedAtomHandler *self = FEED_ATOM_HANDLER (object);
|
|
+
|
|
+ g_clear_object (&self->priv->handler);
|
|
+ g_hash_table_destroy (self->priv->feed_elements_hash);
|
|
+ g_hash_table_destroy (self->priv->entry_elements_hash);
|
|
+
|
|
G_OBJECT_CLASS (feed_atom_handler_parent_class)->finalize (object);
|
|
}
|
|
|
|
@@ -329,6 +337,8 @@ atom10_parse_link (xmlNodePtr cur, GrssF
|
|
const gchar *home;
|
|
gchar *alternate = NULL;
|
|
|
|
+ g_return_val_if_fail (GRSS_IS_FEED_CHANNEL (feed), NULL);
|
|
+
|
|
href = (gchar*) xmlGetNsProp (cur, BAD_CAST"href", NULL);
|
|
|
|
if (href) {
|
|
@@ -384,11 +394,9 @@ atom10_parse_link (xmlNodePtr cur, GrssF
|
|
*/
|
|
}
|
|
else if (g_str_equal (relation, "hub")) {
|
|
- if (feed != NULL)
|
|
grss_feed_channel_set_pubsubhub (feed, url);
|
|
}
|
|
else if (g_str_equal (relation, "self")) {
|
|
- if (feed != NULL)
|
|
grss_feed_channel_set_source (feed, url);
|
|
}
|
|
|
|
@@ -782,7 +790,7 @@ feed_atom_handler_parse (FeedHandler *se
|
|
parser = FEED_ATOM_HANDLER (self);
|
|
|
|
while (TRUE) {
|
|
- if (xmlStrcmp (cur->name, BAD_CAST"feed")) {
|
|
+ if (!cur || xmlStrcmp (cur->name, BAD_CAST"feed")) {
|
|
g_set_error (error, FEED_ATOM_HANDLER_ERROR, FEED_ATOM_HANDLER_PARSE_ERROR, "Could not find Atom 1.0 header!");
|
|
break;
|
|
}
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-channel.c libgrss-0.7.0/src/feed-channel.c
|
|
--- libgrss-0.7.0.orig/src/feed-channel.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-channel.c 2019-04-10 00:45:23.191159682 -0500
|
|
@@ -103,6 +103,8 @@ grss_feed_channel_finalize (GObject *obj
|
|
FREE_STRING (chan->priv->rsscloud.path);
|
|
FREE_STRING (chan->priv->rsscloud.protocol);
|
|
FREE_STRING (chan->priv->copyright);
|
|
+ FREE_STRING (chan->priv->format);
|
|
+ FREE_STRING (chan->priv->source);
|
|
if (chan->priv->editor)
|
|
grss_person_unref (chan->priv->editor);
|
|
FREE_STRING (chan->priv->webmaster);
|
|
@@ -215,6 +217,7 @@ GrssFeedChannel*
|
|
grss_feed_channel_new_from_memory (const gchar *data, GError **error)
|
|
{
|
|
xmlDocPtr doc;
|
|
+ GrssFeedChannel *ret;
|
|
|
|
doc = content_to_xml (data, strlen (data));
|
|
if (doc == NULL) {
|
|
@@ -222,7 +225,11 @@ grss_feed_channel_new_from_memory (const
|
|
return NULL;
|
|
}
|
|
|
|
- return grss_feed_channel_new_from_xml (doc, error);
|
|
+ ret = grss_feed_channel_new_from_xml (doc, error);
|
|
+
|
|
+ xmlFreeDoc (doc);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
/**
|
|
@@ -944,7 +951,6 @@ static gboolean
|
|
quick_and_dirty_parse (GrssFeedChannel *channel, SoupMessage *msg, GList **save_items)
|
|
{
|
|
GList *items;
|
|
- GList *iter;
|
|
xmlDocPtr doc;
|
|
GrssFeedParser *parser;
|
|
|
|
@@ -1010,7 +1016,7 @@ grss_feed_channel_fetch (GrssFeedChannel
|
|
|
|
ret = FALSE;
|
|
|
|
- session = soup_session_sync_new ();
|
|
+ session = soup_session_new ();
|
|
init_soup_session (session, channel);
|
|
|
|
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
|
|
@@ -1036,26 +1042,27 @@ grss_feed_channel_fetch (GrssFeedChannel
|
|
static void
|
|
feed_downloaded (SoupSession *session, SoupMessage *msg, gpointer user_data) {
|
|
guint status;
|
|
- GSimpleAsyncResult *result;
|
|
+ GTask *task;
|
|
GrssFeedChannel *channel;
|
|
|
|
- result = user_data;
|
|
- channel = GRSS_FEED_CHANNEL (g_async_result_get_source_object (G_ASYNC_RESULT (result)));
|
|
+ task = user_data;
|
|
+ channel = GRSS_FEED_CHANNEL (g_task_get_source_object (task));
|
|
g_object_get (msg, "status-code", &status, NULL);
|
|
|
|
if (status >= 200 && status <= 299) {
|
|
if (quick_and_dirty_parse (channel, msg, NULL) == FALSE)
|
|
- g_simple_async_result_set_error (result, FEED_CHANNEL_ERROR, FEED_CHANNEL_PARSE_ERROR,
|
|
+ g_task_return_new_error (task, FEED_CHANNEL_ERROR, FEED_CHANNEL_PARSE_ERROR,
|
|
"Unable to parse feed from %s", grss_feed_channel_get_source (channel));
|
|
+ else
|
|
+ g_task_return_boolean (task, TRUE);
|
|
}
|
|
else {
|
|
- g_simple_async_result_set_error (result, FEED_CHANNEL_ERROR, FEED_CHANNEL_FETCH_ERROR,
|
|
+ g_task_return_new_error (task, FEED_CHANNEL_ERROR, FEED_CHANNEL_FETCH_ERROR,
|
|
"Unable to download from %s", grss_feed_channel_get_source (channel));
|
|
}
|
|
|
|
- g_simple_async_result_complete_in_idle (result);
|
|
g_clear_object (&channel->priv->fetchcancel);
|
|
- g_object_unref (result);
|
|
+ g_object_unref (task);
|
|
}
|
|
|
|
/**
|
|
@@ -1074,10 +1081,7 @@ feed_downloaded (SoupSession *session, S
|
|
gboolean
|
|
grss_feed_channel_fetch_finish (GrssFeedChannel *channel, GAsyncResult *res, GError **error)
|
|
{
|
|
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
|
|
- return FALSE;
|
|
- else
|
|
- return TRUE;
|
|
+ return g_task_propagate_boolean (G_TASK (res), error);
|
|
}
|
|
|
|
static void
|
|
@@ -1098,7 +1102,7 @@ do_prefetch (GrssFeedChannel *channel)
|
|
void
|
|
grss_feed_channel_fetch_async (GrssFeedChannel *channel, GAsyncReadyCallback callback, gpointer user_data)
|
|
{
|
|
- GSimpleAsyncResult *result;
|
|
+ GTask *task;
|
|
SoupMessage *msg;
|
|
SoupSession *session;
|
|
|
|
@@ -1107,16 +1111,15 @@ grss_feed_channel_fetch_async (GrssFeedC
|
|
*/
|
|
|
|
do_prefetch (channel);
|
|
- result = g_simple_async_result_new (G_OBJECT (channel), callback, user_data, grss_feed_channel_fetch_async);
|
|
- g_simple_async_result_set_check_cancellable (result, channel->priv->fetchcancel);
|
|
+ task = g_task_new (channel, channel->priv->fetchcancel, callback, user_data);
|
|
|
|
- session = soup_session_async_new ();
|
|
+ session = soup_session_new ();
|
|
init_soup_session (session, channel);
|
|
|
|
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
|
|
init_soup_message (msg, channel);
|
|
|
|
- soup_session_queue_message (session, msg, feed_downloaded, result);
|
|
+ soup_session_queue_message (session, msg, feed_downloaded, task);
|
|
}
|
|
|
|
/**
|
|
@@ -1140,7 +1143,7 @@ grss_feed_channel_fetch_all (GrssFeedCha
|
|
SoupMessage *msg;
|
|
SoupSession *session;
|
|
|
|
- session = soup_session_sync_new ();
|
|
+ session = soup_session_new ();
|
|
init_soup_session (session, channel);
|
|
|
|
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
|
|
@@ -1182,30 +1185,29 @@ feed_downloaded_return_items (SoupSessio
|
|
{
|
|
guint status;
|
|
GList *items;
|
|
- GSimpleAsyncResult *result;
|
|
+ GTask *task;
|
|
GrssFeedChannel *channel;
|
|
|
|
- result = user_data;
|
|
- channel = GRSS_FEED_CHANNEL (g_async_result_get_source_object (G_ASYNC_RESULT (result)));
|
|
+ task = user_data;
|
|
+ channel = GRSS_FEED_CHANNEL (g_task_get_source_object (task));
|
|
g_object_get (msg, "status-code", &status, NULL);
|
|
|
|
if (status >= 200 && status <= 299) {
|
|
items = NULL;
|
|
|
|
if (quick_and_dirty_parse (channel, msg, &items) == TRUE)
|
|
- g_simple_async_result_set_op_res_gpointer (result, items, free_items_list);
|
|
+ g_task_return_pointer (task, items, free_items_list);
|
|
else
|
|
- g_simple_async_result_set_error (result, FEED_CHANNEL_ERROR, FEED_CHANNEL_PARSE_ERROR,
|
|
+ g_task_return_new_error (task, FEED_CHANNEL_ERROR, FEED_CHANNEL_PARSE_ERROR,
|
|
"Unable to parse feed from %s", grss_feed_channel_get_source (channel));
|
|
}
|
|
else {
|
|
- g_simple_async_result_set_error (result, FEED_CHANNEL_ERROR, FEED_CHANNEL_FETCH_ERROR,
|
|
+ g_task_return_new_error (task, FEED_CHANNEL_ERROR, FEED_CHANNEL_FETCH_ERROR,
|
|
"Unable to download from %s", grss_feed_channel_get_source (channel));
|
|
}
|
|
|
|
- g_simple_async_result_complete_in_idle (result);
|
|
g_clear_object (&channel->priv->fetchcancel);
|
|
- g_object_unref (result);
|
|
+ g_object_unref (task);
|
|
}
|
|
|
|
/**
|
|
@@ -1219,21 +1221,20 @@ feed_downloaded_return_items (SoupSessio
|
|
void
|
|
grss_feed_channel_fetch_all_async (GrssFeedChannel *channel, GAsyncReadyCallback callback, gpointer user_data)
|
|
{
|
|
- GSimpleAsyncResult *result;
|
|
+ GTask *task;
|
|
SoupMessage *msg;
|
|
SoupSession *session;
|
|
|
|
do_prefetch (channel);
|
|
- result = g_simple_async_result_new (G_OBJECT (channel), callback, user_data, grss_feed_channel_fetch_async);
|
|
- g_simple_async_result_set_check_cancellable (result, channel->priv->fetchcancel);
|
|
+ task = g_task_new (channel, channel->priv->fetchcancel, callback, user_data);
|
|
|
|
- session = soup_session_async_new ();
|
|
+ session = soup_session_new ();
|
|
init_soup_session (session, channel);
|
|
|
|
msg = soup_message_new ("GET", grss_feed_channel_get_source (channel));
|
|
init_soup_message (msg, channel);
|
|
|
|
- soup_session_queue_message (session, msg, feed_downloaded_return_items, result);
|
|
+ soup_session_queue_message (session, msg, feed_downloaded_return_items, task);
|
|
}
|
|
|
|
/**
|
|
@@ -1254,10 +1255,7 @@ grss_feed_channel_fetch_all_async (GrssF
|
|
GList*
|
|
grss_feed_channel_fetch_all_finish (GrssFeedChannel *channel, GAsyncResult *res, GError **error)
|
|
{
|
|
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
|
|
- return NULL;
|
|
- else
|
|
- return (GList*) g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
|
|
+ return g_task_propagate_pointer (G_TASK (res), error);
|
|
}
|
|
|
|
/**
|
|
@@ -1275,11 +1273,10 @@ grss_feed_channel_fetch_cancel (GrssFeed
|
|
{
|
|
if (channel->priv->fetchcancel != NULL) {
|
|
g_cancellable_cancel (channel->priv->fetchcancel);
|
|
- g_object_unref (channel->priv->fetchcancel);
|
|
+ g_clear_object (&channel->priv->fetchcancel);
|
|
return TRUE;
|
|
}
|
|
else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
-
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-enclosure.c libgrss-0.7.0/src/feed-enclosure.c
|
|
--- libgrss-0.7.0.orig/src/feed-enclosure.c 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-enclosure.c 2019-04-10 00:21:24.288851984 -0500
|
|
@@ -219,7 +219,7 @@ grss_feed_enclosure_fetch (GrssFeedEnclo
|
|
ret = NULL;
|
|
url = grss_feed_enclosure_get_url (enclosure);
|
|
|
|
- session = soup_session_sync_new ();
|
|
+ session = soup_session_new ();
|
|
msg = soup_message_new ("GET", url);
|
|
status = soup_session_send_message (session, msg);
|
|
|
|
@@ -239,12 +239,12 @@ enclosure_downloaded (SoupSession *sessi
|
|
guint status;
|
|
const gchar *url;
|
|
GFile *file;
|
|
- GSimpleAsyncResult *result;
|
|
+ GTask *task;
|
|
GrssFeedEnclosure *enclosure;
|
|
GError *error;
|
|
|
|
- result = user_data;
|
|
- enclosure = GRSS_FEED_ENCLOSURE (g_async_result_get_source_object (G_ASYNC_RESULT (result)));
|
|
+ task = user_data;
|
|
+ enclosure = GRSS_FEED_ENCLOSURE (g_task_get_source_object (task));
|
|
url = grss_feed_enclosure_get_url (enclosure);
|
|
g_object_get (msg, "status-code", &status, NULL);
|
|
|
|
@@ -253,17 +253,16 @@ enclosure_downloaded (SoupSession *sessi
|
|
file = msg_to_internal_file (enclosure, msg, &error);
|
|
|
|
if (file != NULL)
|
|
- g_simple_async_result_set_op_res_gpointer (result, file, g_object_unref);
|
|
+ g_task_return_pointer (task, file, g_object_unref);
|
|
else
|
|
- g_simple_async_result_take_error (result, error);
|
|
+ g_task_return_error (task, error);
|
|
}
|
|
else {
|
|
- g_simple_async_result_set_error (result, FEED_ENCLOSURE_ERROR, FEED_ENCLOSURE_FETCH_ERROR,
|
|
+ g_task_return_new_error (task, FEED_ENCLOSURE_ERROR, FEED_ENCLOSURE_FETCH_ERROR,
|
|
"Unable to download from %s", url);
|
|
}
|
|
|
|
- g_simple_async_result_complete_in_idle (result);
|
|
- g_object_unref (result);
|
|
+ g_object_unref (task);
|
|
}
|
|
|
|
/**
|
|
@@ -277,14 +276,14 @@ enclosure_downloaded (SoupSession *sessi
|
|
void
|
|
grss_feed_enclosure_fetch_async (GrssFeedEnclosure *enclosure, GAsyncReadyCallback callback, gpointer user_data)
|
|
{
|
|
- GSimpleAsyncResult *result;
|
|
+ GTask *task;
|
|
SoupMessage *msg;
|
|
SoupSession *session;
|
|
|
|
- result = g_simple_async_result_new (G_OBJECT (enclosure), callback, user_data, grss_feed_enclosure_fetch_async);
|
|
- session = soup_session_async_new ();
|
|
+ task = g_task_new (enclosure, NULL, callback, user_data);
|
|
+ session = soup_session_new ();
|
|
msg = soup_message_new ("GET", grss_feed_enclosure_get_url (enclosure));
|
|
- soup_session_queue_message (session, msg, enclosure_downloaded, result);
|
|
+ soup_session_queue_message (session, msg, enclosure_downloaded, task);
|
|
}
|
|
|
|
/**
|
|
@@ -303,8 +302,5 @@ grss_feed_enclosure_fetch_async (GrssFee
|
|
GFile*
|
|
grss_feed_enclosure_fetch_finish (GrssFeedEnclosure *enclosure, GAsyncResult *res, GError **error)
|
|
{
|
|
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
|
|
- return NULL;
|
|
- else
|
|
- return (GFile*) g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
|
|
+ return g_task_propagate_pointer (G_TASK (res), error);
|
|
}
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-item.c libgrss-0.7.0/src/feed-item.c
|
|
--- libgrss-0.7.0.orig/src/feed-item.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-item.c 2019-04-10 00:02:49.610543227 -0500
|
|
@@ -136,7 +136,6 @@ grss_feed_item_new (GrssFeedChannel *par
|
|
|
|
item = GRSS_FEED_ITEM (g_object_new (GRSS_FEED_ITEM_TYPE, NULL));
|
|
item->priv->parent = parent;
|
|
- item->priv->pub_time = time (NULL);
|
|
return item;
|
|
}
|
|
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-parser.c libgrss-0.7.0/src/feed-parser.c
|
|
--- libgrss-0.7.0.orig/src/feed-parser.c 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-parser.c 2019-04-09 23:31:31.714083101 -0500
|
|
@@ -65,6 +65,9 @@ grss_feed_parser_error_quark ()
|
|
static void
|
|
grss_feed_parser_finalize (GObject *object)
|
|
{
|
|
+ GrssFeedParser *parser = GRSS_FEED_PARSER (object);
|
|
+ g_slist_free_full (parser->priv->handlers, g_object_unref);
|
|
+
|
|
G_OBJECT_CLASS (grss_feed_parser_parent_class)->finalize (object);
|
|
}
|
|
|
|
@@ -89,24 +92,26 @@ feed_parsers_get_list (GrssFeedParser *p
|
|
FeedHandler *feed;
|
|
NSHandler *ns;
|
|
|
|
- ns = ns_handler_new ();
|
|
-
|
|
if (parser->priv->handlers == NULL) {
|
|
/*
|
|
- TODO Parsers may be dinamically loaded and managed as external plugins
|
|
+ TODO Parsers may be dynamically loaded and managed as external plugins
|
|
*/
|
|
|
|
+ ns = ns_handler_new ();
|
|
+
|
|
feed = FEED_HANDLER (feed_rss_handler_new ());
|
|
- feed_handler_set_ns_handler (feed, ns);
|
|
+ feed_handler_set_ns_handler (feed, g_object_ref (ns));
|
|
parser->priv->handlers = g_slist_append (parser->priv->handlers, feed);
|
|
|
|
feed = FEED_HANDLER (feed_atom_handler_new ()); /* Must be before pie */
|
|
- feed_handler_set_ns_handler (feed, ns);
|
|
+ feed_handler_set_ns_handler (feed, g_object_ref (ns));
|
|
parser->priv->handlers = g_slist_append (parser->priv->handlers, feed);
|
|
|
|
feed = FEED_HANDLER (feed_pie_handler_new ());
|
|
- feed_handler_set_ns_handler (feed, ns);
|
|
+ feed_handler_set_ns_handler (feed, g_object_ref (ns));
|
|
parser->priv->handlers = g_slist_append (parser->priv->handlers, feed);
|
|
+
|
|
+ g_object_unref (ns);
|
|
}
|
|
|
|
return parser->priv->handlers;
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-pie-handler.c libgrss-0.7.0/src/feed-pie-handler.c
|
|
--- libgrss-0.7.0.orig/src/feed-pie-handler.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-pie-handler.c 2019-04-10 00:24:39.979851646 -0500
|
|
@@ -62,7 +62,11 @@ feed_pie_handler_error_quark ()
|
|
static void
|
|
feed_pie_handler_finalize (GObject *object)
|
|
{
|
|
- G_OBJECT_CLASS (feed_pie_handler_parent_class)->finalize (object);
|
|
+ FeedPieHandler *self = FEED_PIE_HANDLER (object);
|
|
+
|
|
+ g_clear_object (&self->priv->handler);
|
|
+
|
|
+ G_OBJECT_CLASS (feed_pie_handler_parent_class)->finalize (object);
|
|
}
|
|
|
|
static void
|
|
@@ -326,7 +330,7 @@ feed_pie_handler_parse (FeedHandler *sel
|
|
cur = cur->next;
|
|
|
|
while (TRUE) {
|
|
- if (xmlStrcmp (cur->name, BAD_CAST"feed")) {
|
|
+ if (!cur || xmlStrcmp (cur->name, BAD_CAST"feed")) {
|
|
g_set_error (error, FEED_PIE_HANDLER_ERROR, FEED_PIE_HANDLER_PARSE_ERROR, "Could not find Atom/PIE header!");
|
|
break;
|
|
}
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-rss-formatter.c libgrss-0.7.0/src/feed-rss-formatter.c
|
|
--- libgrss-0.7.0.orig/src/feed-rss-formatter.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-rss-formatter.c 2019-04-09 23:35:19.729038185 -0500
|
|
@@ -41,8 +41,7 @@ feed_rss_formatter_format (GrssFeedForma
|
|
time_t date;
|
|
GList *iter;
|
|
GList *items;
|
|
- GrssPerson *person;
|
|
- const GList *list;
|
|
+ GrssPerson *person;
|
|
GString *text;
|
|
GrssFeedChannel *channel;
|
|
GrssFeedItem *item;
|
|
diff -Naurp libgrss-0.7.0.orig/src/feed-rss-handler.c libgrss-0.7.0/src/feed-rss-handler.c
|
|
--- libgrss-0.7.0.orig/src/feed-rss-handler.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feed-rss-handler.c 2019-04-10 00:26:49.126809861 -0500
|
|
@@ -75,6 +75,11 @@ feed_rss_handler_error_quark ()
|
|
static void
|
|
feed_rss_handler_finalize (GObject *object)
|
|
{
|
|
+
|
|
+ FeedRssHandler *self = FEED_RSS_HANDLER (object);
|
|
+
|
|
+ g_clear_object (&self->priv->handler);
|
|
+
|
|
G_OBJECT_CLASS (feed_rss_handler_parent_class)->finalize (object);
|
|
}
|
|
|
|
@@ -452,16 +457,17 @@ feed_rss_handler_parse (FeedHandler *sel
|
|
while (cur && xmlIsBlankNode (cur))
|
|
cur = cur->next;
|
|
|
|
- if (!xmlStrcmp (cur->name, BAD_CAST"rss")) {
|
|
+ if (cur && !xmlStrcmp (cur->name, BAD_CAST"rss")) {
|
|
cur = cur->xmlChildrenNode;
|
|
rdf = FALSE;
|
|
}
|
|
- else if (!xmlStrcmp (cur->name, BAD_CAST"rdf") ||
|
|
- !xmlStrcmp (cur->name, BAD_CAST"RDF")) {
|
|
+ else if (cur &&
|
|
+ (!xmlStrcmp (cur->name, BAD_CAST"rdf") ||
|
|
+ !xmlStrcmp (cur->name, BAD_CAST"RDF"))) {
|
|
cur = cur->xmlChildrenNode;
|
|
rdf = TRUE;
|
|
}
|
|
- else if (!xmlStrcmp (cur->name, BAD_CAST"Channel")) {
|
|
+ else if (cur && !xmlStrcmp (cur->name, BAD_CAST"Channel")) {
|
|
rdf = FALSE;
|
|
}
|
|
else {
|
|
diff -Naurp libgrss-0.7.0.orig/src/feeds-group.c libgrss-0.7.0/src/feeds-group.c
|
|
--- libgrss-0.7.0.orig/src/feeds-group.c 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feeds-group.c 2019-04-10 00:37:07.985868698 -0500
|
|
@@ -238,7 +238,7 @@ grss_feeds_group_parse_file (GrssFeedsGr
|
|
* @error: location for eventual errors.
|
|
*
|
|
* Creates a new file with the list of @channels rappresented in the required
|
|
- * @format. It a file already exists at the @uri location, it is overwritten.
|
|
+ * @format. It the file already exists at the @uri location, it is overwritten.
|
|
*
|
|
* Returns: %TRUE if the file is created correctly, or %FALSE if an error
|
|
* occours and @error is set.
|
|
@@ -273,7 +273,7 @@ grss_feeds_group_export_file (GrssFeedsG
|
|
}
|
|
|
|
file = g_file_new_for_uri (uri);
|
|
- stream = g_file_append_to (file, G_FILE_CREATE_NONE, NULL, &err);
|
|
+ stream = g_file_replace (file, NULL, TRUE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, &err);
|
|
|
|
if (stream == NULL) {
|
|
g_propagate_error (error, err);
|
|
diff -Naurp libgrss-0.7.0.orig/src/feeds-pool.c libgrss-0.7.0/src/feeds-pool.c
|
|
--- libgrss-0.7.0.orig/src/feeds-pool.c 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feeds-pool.c 2019-04-10 00:53:11.331558847 -0500
|
|
@@ -177,7 +177,7 @@ grss_feeds_pool_init (GrssFeedsPool *nod
|
|
node->priv = FEEDS_POOL_GET_PRIVATE (node);
|
|
memset (node->priv, 0, sizeof (GrssFeedsPoolPrivate));
|
|
node->priv->parser = grss_feed_parser_new ();
|
|
- node->priv->soupsession = soup_session_async_new ();
|
|
+ node->priv->soupsession = soup_session_new ();
|
|
}
|
|
|
|
/**
|
|
@@ -291,19 +291,21 @@ feed_downloaded (GObject *source, GAsync
|
|
{
|
|
GList *items;
|
|
GrssFeedChannelWrap *feed;
|
|
+ GError *error = NULL;
|
|
|
|
feed = (GrssFeedChannelWrap*) user_data;
|
|
if (feed->pool->priv->running == FALSE)
|
|
return;
|
|
|
|
- items = grss_feed_channel_fetch_all_finish (GRSS_FEED_CHANNEL (source), res, NULL);
|
|
+ items = grss_feed_channel_fetch_all_finish (GRSS_FEED_CHANNEL (source), res, &error);
|
|
|
|
- if (items != NULL)
|
|
+ if (error == NULL)
|
|
g_signal_emit (feed->pool, signals [FEED_READY], 0, feed->channel, items, NULL);
|
|
else
|
|
g_signal_emit (feed->pool, signals [FEED_FAIL], 0, feed->channel, NULL);
|
|
|
|
feed->next_fetch = time (NULL) + (grss_feed_channel_get_update_interval (feed->channel) * 60);
|
|
+ g_clear_error (&error);
|
|
}
|
|
|
|
static gboolean
|
|
@@ -324,9 +326,11 @@ fetch_feeds (gpointer data)
|
|
|
|
for (iter = pool->priv->feeds_list; iter; iter = g_list_next (iter)) {
|
|
feed = (GrssFeedChannelWrap*) iter->data;
|
|
- if (feed->next_fetch <= now)
|
|
+ if (feed->next_fetch <= now) {
|
|
+ g_signal_emit (feed->pool, signals[FEED_FETCHING], 0, feed->channel);
|
|
grss_feed_channel_fetch_all_async (feed->channel, feed_downloaded, feed);
|
|
- }
|
|
+ }
|
|
+ }
|
|
|
|
return TRUE;
|
|
}
|
|
diff -Naurp libgrss-0.7.0.orig/src/feeds-publisher.c libgrss-0.7.0/src/feeds-publisher.c
|
|
--- libgrss-0.7.0.orig/src/feeds-publisher.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feeds-publisher.c 2019-04-10 00:34:22.232723193 -0500
|
|
@@ -102,7 +102,7 @@ enum {
|
|
G_DEFINE_TYPE (GrssFeedsPublisher, grss_feeds_publisher, G_TYPE_OBJECT);
|
|
|
|
static GQuark
|
|
-feeds_publisher_error_quark ()
|
|
+feeds_publisher_error_quark (void)
|
|
{
|
|
return g_quark_from_static_string ("feeds_publisher_error");
|
|
}
|
|
@@ -219,7 +219,7 @@ grss_feeds_publisher_init (GrssFeedsPubl
|
|
* Returns: a new #GrssFeedsPublisher.
|
|
*/
|
|
GrssFeedsPublisher*
|
|
-grss_feeds_publisher_new ()
|
|
+grss_feeds_publisher_new (void)
|
|
{
|
|
return g_object_new (FEEDS_PUBLISHER_TYPE, NULL);
|
|
}
|
|
@@ -624,7 +624,7 @@ remove_client_to_topic (GrssFeedsPublish
|
|
}
|
|
|
|
static gchar*
|
|
-random_string ()
|
|
+random_string (void)
|
|
{
|
|
register int i;
|
|
gchar str [50];
|
|
@@ -663,7 +663,7 @@ verification_message_for_client (RemoteS
|
|
break;
|
|
}
|
|
|
|
- body = g_strdup_printf ("%s?hub.mode=%s&hub.topic=%s&hub.challenge=%s&hub.lease_seconds=%lld",
|
|
+ body = g_strdup_printf ("%s?hub.mode=%s&hub.topic=%s&hub.challenge=%s&hub.lease_seconds=%ld",
|
|
client->callback, mode, client->topic, client->challenge, client->lease_interval);
|
|
|
|
ret = soup_message_new ("GET", body);
|
|
@@ -840,12 +840,18 @@ handle_incoming_requests_cb (SoupServer
|
|
}
|
|
}
|
|
else if (strcmp (mode, "unsubscribe") == 0) {
|
|
- client = search_subscriber_by_topic_and_callback (pub, topic, callback);
|
|
- if (client != NULL)
|
|
- client->status = REMOTE_UNSUBSCRIBING;
|
|
+ if (callback == NULL) {
|
|
+ soup_message_set_status (msg, 400);
|
|
+ }
|
|
+ else {
|
|
+ client = search_subscriber_by_topic_and_callback (pub, topic, callback);
|
|
+
|
|
+ if (client != NULL)
|
|
+ client->status = REMOTE_UNSUBSCRIBING;
|
|
+ }
|
|
}
|
|
|
|
- if (client != NULL) {
|
|
+ if (client != NULL && verify != NULL) {
|
|
verify_msg = verification_message_for_client (client);
|
|
|
|
if (strcmp (verify, "sync") == 0) {
|
|
@@ -859,6 +865,9 @@ handle_incoming_requests_cb (SoupServer
|
|
soup_message_set_status (msg, 202);
|
|
}
|
|
}
|
|
+ else if (client != NULL) {
|
|
+ soup_message_set_status (msg, 400);
|
|
+ }
|
|
}
|
|
|
|
g_strfreev (contents);
|
|
@@ -869,7 +878,7 @@ close_server (GrssFeedsPublisher *pub)
|
|
{
|
|
if (pub->priv->server != NULL) {
|
|
soup_server_remove_handler (pub->priv->server, NULL);
|
|
- soup_server_quit (pub->priv->server);
|
|
+ soup_server_disconnect (pub->priv->server);
|
|
g_object_unref (pub->priv->server);
|
|
pub->priv->server = NULL;
|
|
}
|
|
@@ -881,14 +890,15 @@ create_and_run_server (GrssFeedsPublishe
|
|
SoupAddress *soup_addr;
|
|
|
|
if (pub->priv->soupsession == NULL)
|
|
- pub->priv->soupsession = soup_session_async_new ();
|
|
+ pub->priv->soupsession = soup_session_new ();
|
|
|
|
soup_addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, pub->priv->port);
|
|
pub->priv->server = soup_server_new ("port", pub->priv->port, "interface", soup_addr, NULL);
|
|
g_object_unref (soup_addr);
|
|
|
|
soup_server_add_handler (pub->priv->server, NULL, handle_incoming_requests_cb, pub, NULL);
|
|
- soup_server_run_async (pub->priv->server);
|
|
+ /* TODO - Add IPv6 support - Send PR upstream */
|
|
+ soup_server_listen_all (pub->priv->server, pub->priv->port, SOUP_SERVER_LISTEN_IPV4_ONLY, NULL);
|
|
}
|
|
|
|
/**
|
|
diff -Naurp libgrss-0.7.0.orig/src/feeds-publisher.h libgrss-0.7.0/src/feeds-publisher.h
|
|
--- libgrss-0.7.0.orig/src/feeds-publisher.h 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feeds-publisher.h 2019-04-10 00:34:54.054712602 -0500
|
|
@@ -45,9 +45,9 @@ typedef struct {
|
|
void (*delete_subscription) (GrssFeedsPublisher *pub, GrssFeedChannel *topic, gchar *callback);
|
|
} GrssFeedsPublisherClass;
|
|
|
|
-GType grss_feeds_publisher_get_type () G_GNUC_CONST;
|
|
+GType grss_feeds_publisher_get_type (void) G_GNUC_CONST;
|
|
|
|
-GrssFeedsPublisher* grss_feeds_publisher_new ();
|
|
+GrssFeedsPublisher* grss_feeds_publisher_new (void);
|
|
|
|
gchar* grss_feeds_publisher_format_content (GrssFeedsPublisher *pub, GrssFeedChannel *channel, GList *items, GError **error);
|
|
gboolean grss_feeds_publisher_publish_web (GrssFeedsPublisher *pub, GrssFeedChannel *channel, GList *items, const gchar *id, GError **error);
|
|
diff -Naurp libgrss-0.7.0.orig/src/feeds-subscriber.c libgrss-0.7.0/src/feeds-subscriber.c
|
|
--- libgrss-0.7.0.orig/src/feeds-subscriber.c 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/feeds-subscriber.c 2019-04-09 23:47:50.782967714 -0500
|
|
@@ -389,7 +389,7 @@ close_server (GrssFeedsSubscriber *sub)
|
|
{
|
|
if (sub->priv->server != NULL) {
|
|
unregister_handlers (sub);
|
|
- soup_server_quit (sub->priv->server);
|
|
+ soup_server_disconnect (sub->priv->server);
|
|
g_object_unref (sub->priv->server);
|
|
sub->priv->server = NULL;
|
|
}
|
|
@@ -514,7 +514,7 @@ init_run_server (GrssFeedsSubscriber *su
|
|
GInetAddress *addr;
|
|
|
|
if (sub->priv->soupsession == NULL)
|
|
- sub->priv->soupsession = soup_session_async_new ();
|
|
+ sub->priv->soupsession = soup_session_new ();
|
|
|
|
/*
|
|
Flow:
|
|
diff -Naurp libgrss-0.7.0.orig/src/Makefile.am libgrss-0.7.0/src/Makefile.am
|
|
--- libgrss-0.7.0.orig/src/Makefile.am 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/Makefile.am 2019-04-10 00:22:54.753625871 -0500
|
|
@@ -1,4 +1,4 @@
|
|
-SUBDIRS = tests
|
|
+SUBDIRS = . tests
|
|
|
|
NULL =
|
|
|
|
@@ -128,6 +128,8 @@ introspection_sources = \
|
|
|
|
Grss-0.7.gir: libgrss.la
|
|
Grss_0_7_gir_INCLUDES = GObject-2.0 Gio-2.0 Soup-2.4 libxml2-2.0
|
|
+Grss_0_7_gir_C_INCLUDES = libgrss.h
|
|
+Grss_0_7_gir_EXPORT_PACKAGES = libgrss_
|
|
Grss_0_7_gir_CFLAGS = $(INCLUDES)
|
|
Grss_0_7_gir_LIBS = libgrss.la
|
|
Grss_0_7_gir_FILES = $(introspection_sources)
|
|
diff -Naurp libgrss-0.7.0.orig/src/ns-handler.c libgrss-0.7.0/src/ns-handler.c
|
|
--- libgrss-0.7.0.orig/src/ns-handler.c 2015-07-18 16:43:44.000000000 -0500
|
|
+++ libgrss-0.7.0/src/ns-handler.c 2019-04-09 23:48:42.071534115 -0500
|
|
@@ -502,7 +502,7 @@ ns_handler_init (NSHandler *node)
|
|
memset (node->priv, 0, sizeof (NSHandlerPrivate));
|
|
|
|
node->priv->href_handlers = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
|
|
- node->priv->prefix_handlers = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
|
|
+ node->priv->prefix_handlers = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
|
|
|
|
nsh = g_new0 (InternalNsHandler, 1);
|
|
nsh->handle_channel = ns_admin_channel;
|
|
@@ -545,7 +545,7 @@ ns_handler_init (NSHandler *node)
|
|
nsh->handle_item = ns_dc_item;
|
|
g_hash_table_insert (node->priv->prefix_handlers, "dc", nsh);
|
|
g_hash_table_insert (node->priv->href_handlers, "http://purl.org/dc/elements/1.1/", nsh);
|
|
- g_hash_table_insert (node->priv->href_handlers, "http://purl.org/dc/elements/1.0/", nsh);
|
|
+ g_hash_table_insert (node->priv->href_handlers, "http://purl.org/dc/elements/1.0/", g_memdup (nsh, sizeof(InternalNsHandler)));
|
|
|
|
nsh = g_new0 (InternalNsHandler, 1);
|
|
nsh->handle_channel = NULL;
|
|
diff -Naurp libgrss-0.7.0.orig/src/tests/formatter.c libgrss-0.7.0/src/tests/formatter.c
|
|
--- libgrss-0.7.0.orig/src/tests/formatter.c 2015-07-18 15:22:27.000000000 -0500
|
|
+++ libgrss-0.7.0/src/tests/formatter.c 2019-04-09 23:50:47.141354039 -0500
|
|
@@ -66,6 +66,9 @@ test_format_atom ()
|
|
|
|
formatter = grss_feed_atom_formatter_new ();
|
|
do_the_job (GRSS_FEED_FORMATTER (formatter));
|
|
+
|
|
+ grss_feed_formatter_reset (GRSS_FEED_FORMATTER (formatter));
|
|
+ g_object_unref (formatter);
|
|
}
|
|
|
|
static void
|
|
@@ -75,6 +78,9 @@ test_format_rss ()
|
|
|
|
formatter = grss_feed_rss_formatter_new ();
|
|
do_the_job (GRSS_FEED_FORMATTER (formatter));
|
|
+
|
|
+ grss_feed_formatter_reset (GRSS_FEED_FORMATTER (formatter));
|
|
+ g_object_unref (formatter);
|
|
}
|
|
|
|
int
|
|
diff -Naurp libgrss-0.7.0.orig/src/utils.c libgrss-0.7.0/src/utils.c
|
|
--- libgrss-0.7.0.orig/src/utils.c 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/utils.c 2019-04-10 00:33:27.328014093 -0500
|
|
@@ -559,7 +559,7 @@ detect_internet_address ()
|
|
return NULL;
|
|
|
|
sockfd = socket (AF_INET, SOCK_DGRAM, 0);
|
|
- if (!sockfd)
|
|
+ if (sockfd < 0)
|
|
return NULL;
|
|
|
|
if (connect (sockfd, (struct sockaddr*) &serv_add, sizeof (serv_add)) == -1) {
|
|
diff -Naurp libgrss-0.7.0.orig/src/utils.h libgrss-0.7.0/src/utils.h
|
|
--- libgrss-0.7.0.orig/src/utils.h 2015-07-15 15:59:07.000000000 -0500
|
|
+++ libgrss-0.7.0/src/utils.h 2019-04-10 00:05:27.316424768 -0500
|
|
@@ -33,6 +33,7 @@
|
|
#include <unistd.h>
|
|
#include <errno.h>
|
|
#include <sys/types.h>
|
|
+#include <sys/socket.h>
|
|
#include <sys/stat.h>
|
|
#include <arpa/inet.h>
|
|
#include <netinet/in.h>
|