[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#692975: Bug#692874: liferea: diff for NMU version 1.8.6-1+nmu1



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 <sidicas2@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.lindner@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.lindner@gmail.com>
+
+Reported-by: Matthias Maennich <matthias@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.lindner@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 <yaneti@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.lindner@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

Reply to: