On 12/16/2012 01:06 AM, Paul Gevers wrote:
Hi David,
I think we are nearly there.
It seems upstream decided to use a slightly different patch than you
currently use for bug 692272. Could you comment on the differences?
http://sourceforge.net/p/liferea/code/ci/a167cec01b086302854ec4908ad92210b438c3e0/tree/src/itemlist.c?diff=13b09aee142529b64a73c8e25b4b40d817f354b4
Upstream's patch for this bug didn't apply cleanly to the version of
liferea in Wheezy.
Even with a quilt -f it had rejects.
I'll assume that upstream patches are always better, so I've backported
the patch from upstream to the version of liferea in Wheezy. It adds
and removes the exact same code, but the code around it is a little
different due to the older version in Wheezy.
Tested and works.
diff -Nru liferea-1.8.6/debian/control liferea-1.8.6/debian/control
- libwebkit-dev (>= 1.2.2),
+ libwebkitgtk-dev (>= 1.8.1),
Although I suggest to remove it now, why also update the version? This
is not documented in the changelog.
I set the version to the libwebkitgtk-dev that is in Wheezy. I noticed
that older versions of libwebkit& libxml2 cause problems because when
libwebkit or libxml2 crashes, it always causes liferea to crash. There
were a bunch of bug reports that got tracked back to old versions of
libwebkit or libxml2 (#551147) and I suspect several others are related
to old versions of those libs as well (#583990, #609494, #645423). I
don't have any bug reports as specifically being marked as resolved-by
having a newer version of the lib though.
Though I'll admit it's certainly not *required* to have the new version
so I removed the increase in the version number from the NMU.
If you are confident that it is better to use a newer version, you can
do so, but then you have to document it in the changelog. And for
possible backports, it would than be better to give the minimal version
you are comfortable with, not just the current version. For now, leaving
the version as it was seems best to me.
Yes, going to leave it alone.
Note: Upstream has just contacted me saying that they accepted a slight
modification of my patch.
I've replaced this patch with upstream's modified patch[0]. I had
forgot to free a variable after using it.
Ack.
Just a note, next time you can leave the forwarded-to notes in the bts.
They are links to the upstream bug, whether or not they are fixed
upstream is irrelevant for the tag.
Paul
Ah, ok. Wasn't aware of that.
New NMU with upstream's patch for 692272 backported to liferea in Wheezy
attached.
Thanks for your time and patience!
http://mentors.debian.net/package/liferea
http://mentors.debian.net/debian/pool/main/l/liferea/liferea_1.8.6-1.1.dsc
-David
diff -Nru liferea-1.8.6/debian/changelog liferea-1.8.6/debian/changelog
--- liferea-1.8.6/debian/changelog 2012-07-01 05:45:40.000000000 +0800
+++ liferea-1.8.6/debian/changelog 2012-12-15 19:29:35.000000000 +0800
@@ -1,3 +1,23 @@
+liferea (1.8.6-1.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Fixed crash when dragging Google Reader feeds to parent node.
+ (Closes: #692526)
+ * Fixed crash when removing folders in Google Reader feeds.
+ (Closes: #692525)
+ * Fixed crash when opening empty links in feeds. (Closes: #692272)
+ * Fixed crash when network online status changes. (Closes: #692270)
+ * Fixed bug where web browser doesn't launch or the wrong web browser is
+ launched. (Closes: #668197)
+ * Replaced build-depends on transitional package libwebkit-dev with
+ libwebkitgtk-dev. (Closes: #677749)
+ * Added hardening build flags since liferea has a parser and should be
+ built with hardening. (Closes: #692527)
+ * Added build dependency on dpkg-dev (>= 1.16.1~) to enable build flags
+ with hardening.
+
+ -- David Smith <sidic...@gmail.com> Sat, 15 Dec 2012 16:35:23 +0800
+
liferea (1.8.6-1) unstable; urgency=low
* Fixes ever growing temporary DB files. (patch by Sven Hartge)
diff -Nru liferea-1.8.6/debian/control liferea-1.8.6/debian/control
--- liferea-1.8.6/debian/control 2012-07-01 05:38:09.000000000 +0800
+++ liferea-1.8.6/debian/control 2012-12-15 18:55:27.000000000 +0800
@@ -15,14 +15,15 @@
libglade2-dev,
libgtk2.0-dev (>= 2.18.0),
libglib2.0-dev (>= 2.24.0),
- libwebkit-dev (>= 1.2.2),
+ libwebkitgtk-dev (>= 1.2.2),
intltool,
libicu-dev,
libx11-dev,
dh-autoreconf,
libice-dev,
libunique-dev,
- libjson-glib-dev
+ libjson-glib-dev,
+ dpkg-dev (>= 1.16.1~)
Standards-Version: 3.9.3
Homepage: http://liferea.sourceforge.net/
Vcs-Browser: http://git.debian.org/?p=collab-maint/liferea.git
diff -Nru liferea-1.8.6/debian/patches/fix-browser-selections liferea-1.8.6/debian/patches/fix-browser-selections
--- liferea-1.8.6/debian/patches/fix-browser-selections 1970-01-01 08:00:00.000000000 +0800
+++ liferea-1.8.6/debian/patches/fix-browser-selections 2012-12-15 18:36:03.000000000 +0800
@@ -0,0 +1,34 @@
+From: Lars Windolf <lars.lind...@gmail.com>
+Subject: x-www-browser preference not working
+Description: Fixed a bug where web browser doesn't launch
+due to not having gnome desktop installed, or the wrong
+web browser is launched due to not having an appropriate
+fallback.
+Origin: upstream, http://liferea.git.sourceforge.net/git/gitweb.cgi?p=liferea/liferea;a=commit;h=408a99b39535c4eb79983ebd2936a8eda5fff8b7
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668197
+Last-Update: 2012-12-15
+--- a/src/browser.c
++++ b/src/browser.c
+@@ -244,6 +244,7 @@
+ struct browser *browser;
+ gchar *cmd = NULL;
+ gboolean done = FALSE;
++ gchar *libname = NULL;
+
+ g_assert (uri != NULL);
+
+@@ -255,8 +256,12 @@
+ done = browser_execute (cmd, uri, TRUE);
+ g_free (cmd);
+ } else {
+- /* the "default" browser has no command to use the GTK launch mechanism */
+- done = gtk_show_uri (NULL, uri, 0, NULL);
++ /* the "default" browser has no command to use the GTK
++ launch mechanism, so we use gtk_show_uri() instead */
++ conf_get_str_value (BROWSER_ID, &libname);
++ if (g_str_equal (libname, "default"))
++ done = gtk_show_uri (NULL, uri, 0, NULL);
++ g_free (libname);
+ }
+ }
+
diff -Nru liferea-1.8.6/debian/patches/fix-crash-in-empty-launch-url liferea-1.8.6/debian/patches/fix-crash-in-empty-launch-url
--- liferea-1.8.6/debian/patches/fix-crash-in-empty-launch-url 1970-01-01 08:00:00.000000000 +0800
+++ liferea-1.8.6/debian/patches/fix-crash-in-empty-launch-url 2012-12-17 19:09:45.000000000 +0800
@@ -0,0 +1,40 @@
+Date: Wed, 15 Aug 2012 00:06:29 +0200
+Subject: [PATCH] fix crash in liferea_webkit_launch_url(...) for empty links
+ in feeds
+
+Description: in case of empty links in feeds liferea crashed with the
+following backtrace:
+ #0 in __strstr_sse42 () from /lib/libc.so.6
+ #1 in liferea_webkit_launch_url (scrollpane=<>, url=0x0) at webkit.c:515
+ #2 in itemlist_selection_changed (item=item@entry=<>) at itemlist.c:599
+
+Copyright (C) 2004-2012 Lars Lindner <lars.lind...@gmail.com>
+
+Reported-by: Matthias Maennich <matth...@maennich.net>
+Origin: upstream, https://sourceforge.net/p/liferea/code/ci/274b4dba082a8353bb17c2017c3eae6c07112144/
+Bug: http://sourceforge.net/tracker/index.php?func=detail&aid=3557513&group_id=87005&atid=581686
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692272
+Last-Update: 2012-12-17
+--- a/src/itemlist.c
++++ b/src/itemlist.c
+@@ -588,7 +588,8 @@
+
+ /* set read and unset update status when selecting */
+ if (item) {
+- nodePtr node = node_from_id (item->nodeId);
++ gchar *link = NULL;
++ nodePtr node = node_from_id (item->nodeId);
+
+ if (IS_FEED(node) && !((feedPtr)node->data)->ignoreComments)
+ comments_refresh (item);
+@@ -596,9 +597,7 @@
+ item_set_read_state (item, TRUE);
+ itemview_set_mode (ITEMVIEW_SINGLE_ITEM);
+
+- if (node->loadItemLink) {
+- gchar* link = item_make_link (item);
+-
++ if (node->loadItemLink && (link = item_make_link (item))) {
+ itemview_launch_URL (link, TRUE /* force internal */);
+ g_free (link);
+ } else {
diff -Nru liferea-1.8.6/debian/patches/fix-crash-when-dragging-feeds-outside-google-reader liferea-1.8.6/debian/patches/fix-crash-when-dragging-feeds-outside-google-reader
--- liferea-1.8.6/debian/patches/fix-crash-when-dragging-feeds-outside-google-reader 1970-01-01 08:00:00.000000000 +0800
+++ liferea-1.8.6/debian/patches/fix-crash-when-dragging-feeds-outside-google-reader 2012-12-15 18:36:15.000000000 +0800
@@ -0,0 +1,23 @@
+From: Lars Windolf <lars.lind...@gmail.com>
+Date: Mon, 30 Jul 2012 23:26:01 +0200
+Subject: [PATCH] Fixes SF #2855990: Crash when dragging Google Reader feeds outside Google Reader. This is now prevented. (reported by algnod)
+Origin: upstream, http://liferea.git.sourceforge.net/git/gitweb.cgi?p=liferea/liferea;a=commit;h=5f245fe87e8f32ff0e13c2e94addaf6032b806c4
+Bug: http://sourceforge.net/tracker/index.php?func=detail&aid=2855990&group_id=87005&atid=581684
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692526
+Last-Updated: 2012-12-15
+--- a/src/ui/ui_dnd.c
++++ b/src/ui/ui_dnd.c
+@@ -116,6 +116,13 @@
+ if (gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, src_path)) {
+ gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, FS_PTR, &sourceNode, -1);
+
++ g_assert (sourceNode);
++
++ /* Never drop into another node source as this arises to many problems
++ (e.g. remote sync, different subscription type, e.g. SF #2855990) */
++ if (NODE_SOURCE_TYPE (targetNode) != NODE_SOURCE_TYPE (sourceNode))
++ return FALSE;
++
+ if (IS_FOLDER(sourceNode) && !(NODE_SOURCE_TYPE (targetNode)->capabilities & NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST))
+ return FALSE;
+ }
diff -Nru liferea-1.8.6/debian/patches/fix-crash-when-online-status-changes liferea-1.8.6/debian/patches/fix-crash-when-online-status-changes
--- liferea-1.8.6/debian/patches/fix-crash-when-online-status-changes 1970-01-01 08:00:00.000000000 +0800
+++ liferea-1.8.6/debian/patches/fix-crash-when-online-status-changes 2012-12-15 18:36:22.000000000 +0800
@@ -0,0 +1,24 @@
+From: Yanko Kaneti <yan...@declera.com>
+Date: Fri, 14 Sep 2012 16:13:00 +0300
+Subject: [PATCH] Fix crash when network online status changes
+Description: From Fedora bug
+https://bugzilla.redhat.com/show_bug.cgi?id=857348 :
+"liferea frequently crashes when manipulating htmlviews (opening/closing
+new tabs) while the network online status changes. This is caused
+because the signal notifying online status is not properly disconnected
+when the htmlview is removed."
+Origin: upstream, http://liferea.git.sourceforge.net/git/gitweb.cgi?p=liferea/liferea;a=commit;h=7c69af4fe8435b34cbf9e7f76cb2e44e985d37b5
+Bug: http://sourceforge.net/tracker/index.php?func=detail&aid=3567715&group_id=87005&atid=581686
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692270
+Last-Update: 2012-12-15
+--- a/src/ui/liferea_htmlview.c
++++ b/src/ui/liferea_htmlview.c
+@@ -77,6 +77,8 @@
+ static void
+ liferea_htmlview_finalize (GObject *object)
+ {
++ g_signal_handlers_disconnect_by_data (network_monitor_get (), object);
++
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+ }
+
diff -Nru liferea-1.8.6/debian/patches/fix-crash-when-removing-google-reader-folders liferea-1.8.6/debian/patches/fix-crash-when-removing-google-reader-folders
--- liferea-1.8.6/debian/patches/fix-crash-when-removing-google-reader-folders 1970-01-01 08:00:00.000000000 +0800
+++ liferea-1.8.6/debian/patches/fix-crash-when-removing-google-reader-folders 2012-12-15 19:00:43.000000000 +0800
@@ -0,0 +1,157 @@
+From: Lars Windolf <lars.lind...@gmail.com>
+Date: Fri, 5 Oct 2012 12:09:42 +0200
+Subject: [PATCH] Fixes SF #3572660: crash in google_source_remove_node (reported by Yanko Kaneti)
+Origin: upstream, http://liferea.git.sourceforge.net/git/gitweb.cgi?p=liferea/liferea;a=commit;h=878863cd0e02e89e461e5e47f02be38e57a4fe27
+Bug: http://sourceforge.net/tracker/index.php?func=detail&aid=3572660&group_id=87005&atid=581684
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692525
+Last-Update: 2012-12-15
+--- a/src/fl_sources/default_source.c
++++ b/src/fl_sources/default_source.c
+@@ -210,6 +210,8 @@
+ .description = "The default feed list source. Should never be added manually. If you see this then something went wrong!",
+ .capabilities = NODE_SOURCE_CAPABILITY_IS_ROOT |
+ NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST |
++ NODE_SOURCE_CAPABILITY_ADD_FEED |
++ NODE_SOURCE_CAPABILITY_ADD_FOLDER |
+ NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST,
+ .source_type_init = default_source_init,
+ .source_type_deinit = default_source_deinit,
+--- a/src/fl_sources/node_source.h
++++ b/src/fl_sources/node_source.h
+@@ -50,11 +50,12 @@
+
+ enum {
+ NODE_SOURCE_CAPABILITY_IS_ROOT = (1<<0), /**< flag only for default feed list source */
+- NODE_SOURCE_CAPABILITY_MULTI_INSTANCES = (1<<1), /**< allows multiple source instances */
+- NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION = (1<<2), /**< feed list source is user created */
+- NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST = (1<<3), /**< the feed list tree of the source can be changed */
+- NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST = (1<<4), /**< the feed list tree of the source can have hierarchic folders */
+- NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC = (1<<5) /**< the item state can and should be sync'ed with remote */
++ NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION = (1<<1), /**< feed list source is user created */
++ NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST = (1<<2), /**< the feed list tree of the source can be changed */
++ NODE_SOURCE_CAPABILITY_ADD_FEED = (1<<3), /**< feeds can be added to the source */
++ NODE_SOURCE_CAPABILITY_ADD_FOLDER = (1<<4), /**< folders can be added to the source */
++ NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST = (1<<5), /**< the feed list tree of the source can have hierarchic folders */
++ NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC = (1<<6) /**< the item state can and should be sync'ed with remote */
+ };
+
+ /** feed list node source type */
+--- a/src/node.c
++++ b/src/node.c
+@@ -494,6 +494,28 @@
+ return baseUrl;
+ }
+
++gboolean
++node_can_add_child_feed (nodePtr node)
++{
++ g_assert (node->source->root);
++
++ if (!(NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS))
++ return FALSE;
++
++ return (NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_ADD_FEED);
++}
++
++gboolean
++node_can_add_child_folder (nodePtr node)
++{
++ g_assert (node->source->root);
++
++ if (!(NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS))
++ return FALSE;
++
++ return (NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_ADD_FOLDER);
++}
++
+ /* node children iterating interface */
+
+ void
+--- a/src/node.h
++++ b/src/node.h
+@@ -355,6 +355,24 @@
+ */
+ const gchar * node_get_base_url(nodePtr node);
+
++/**
++ * Query wether a feed be added to the given node.
++ *
++ * @param node the node
++ *
++ * @returns TRUE if a feed can be added
++ */
++gboolean node_can_add_child_feed (nodePtr node);
++
++/**
++ * Query wether a folder be added to the given node.
++ *
++ * @param node the node
++ *
++ * @returns TRUE if a folder can be added
++ */
++gboolean node_can_add_child_folder (nodePtr node);
++
+ /* child nodes iterating interface */
+
+ typedef void (*nodeActionFunc) (nodePtr node);
+--- a/src/ui/popup_menu.c
++++ b/src/ui/popup_menu.c
+@@ -262,14 +262,15 @@
+ ui_popup_node_menu (nodePtr node, gboolean validSelection, guint button, guint32 activate_time)
+ {
+ GtkWidget *menu;
+- gboolean writeableFeedlist, isRoot, isHierarchic;
++ gboolean writeableFeedlist, isRoot, isHierarchic, addChildren;
+
+ menu = gtk_menu_new ();
+
+ if (node->parent) {
+ writeableFeedlist = NODE_SOURCE_TYPE (node->parent->source->root)->capabilities & NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST;
+- isRoot = NODE_SOURCE_TYPE (node->parent->source->root)->capabilities & NODE_SOURCE_CAPABILITY_IS_ROOT;
++ isRoot = NODE_SOURCE_TYPE (node->source->root)->capabilities & NODE_SOURCE_CAPABILITY_IS_ROOT;
+ isHierarchic = NODE_SOURCE_TYPE (node->parent->source->root)->capabilities & NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST;
++ addChildren = NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS;
+ } else {
+ /* if we have no parent then we have the root node... */
+ writeableFeedlist = TRUE;
+@@ -287,7 +288,7 @@
+ }
+
+ if (writeableFeedlist) {
+- if (NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS) {
++ if (addChildren) {
+ GtkWidget *item;
+ GtkWidget *submenu;
+
+@@ -295,9 +296,10 @@
+
+ item = ui_popup_add_menuitem (menu, _("_New"), NULL, NULL, NULL, 0);
+
+- ui_popup_add_menuitem (submenu, _("New _Subscription..."), ui_popup_add_feed, NULL, NULL, 0);
++ if (node_can_add_child_feed (node))
++ ui_popup_add_menuitem (submenu, _("New _Subscription..."), ui_popup_add_feed, NULL, NULL, 0);
+
+- if (isHierarchic)
++ if (node_can_add_child_folder (node))
+ ui_popup_add_menuitem (submenu, _("New _Folder..."), ui_popup_add_folder, NULL, NULL, 0);
+
+ if (isRoot) {
+@@ -309,7 +311,7 @@
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM(item), submenu);
+ }
+
+- if (node->children) {
++ if (isRoot && node->children) {
+ gtk_menu_shell_append (GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
+ ui_popup_add_menuitem (menu, _("Sort Feeds"), ui_popup_sort_feeds, node, GTK_STOCK_SORT_ASCENDING, 0);
+ }
+--- a/src/fl_sources/google_source.c
++++ b/src/fl_sources/google_source.c
+@@ -360,6 +360,7 @@
+ "present your Google Reader subscriptions, and will synchronize your feed list and reading lists."),
+ .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION |
+ NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST |
++ NODE_SOURCE_CAPABILITY_ADD_FEED |
+ NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC,
+ .source_type_init = google_source_init,
+ .source_type_deinit = google_source_deinit,
diff -Nru liferea-1.8.6/debian/patches/series liferea-1.8.6/debian/patches/series
--- liferea-1.8.6/debian/patches/series 2012-02-27 09:54:47.000000000 +0800
+++ liferea-1.8.6/debian/patches/series 2012-12-17 15:32:29.000000000 +0800
@@ -1,3 +1,8 @@
www-browser
debian-example-feeds
libtool-dont-rearange-as-needed
+fix-browser-selections
+fix-crash-when-dragging-feeds-outside-google-reader
+fix-crash-when-online-status-changes
+fix-crash-when-removing-google-reader-folders
+fix-crash-in-empty-launch-url
diff -Nru liferea-1.8.6/debian/rules liferea-1.8.6/debian/rules
--- liferea-1.8.6/debian/rules 2012-02-27 09:54:47.000000000 +0800
+++ liferea-1.8.6/debian/rules 2012-12-15 19:36:20.000000000 +0800
@@ -2,6 +2,9 @@
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
CFLAGS += -g -O$(if $(findstring noopt,$(DEB_BUILD_OPTIONS)),0,2)
LDFLAGS += "-Wl,--as-needed"
export LIBS=-lX11 -lICE