Subject: pkg/35200: Liferea fix for feed display crash on sparc64
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <khorben@defora.org>
List: pkgsrc-bugs
Date: 12/07/2006 14:35:00
>Number:         35200
>Category:       pkg
>Synopsis:       Liferea crashes when attempting to display a feed on sparc64
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 07 14:35:00 +0000 2006
>Originator:     khorben@defora.org
>Release:        NetBSD 3.1.0_PATCH
>Organization:
>Environment:
System: NetBSD exxh.lan.defora.org 3.1.0_PATCH NetBSD 3.1.0_PATCH (GENERIC) #0: Sun Nov 26 15:14:36 CET 2006 khorben@exxh.lan.defora.org:/usr/obj/sys/arch/sparc64/compile/GENERIC sparc64
Architecture: sparc64
Machine: sparc64

/usr/pkg/bin/liferea-bin:
	-lintl.0 => /usr/lib/libintl.so.0
	-lglib-2.0.0 => /usr/pkg/lib/libglib-2.0.so.0
	-lgmodule-2.0.0 => /usr/pkg/lib/libgmodule-2.0.so.0
	-lgobject-2.0.0 => /usr/pkg/lib/libgobject-2.0.so.0
	-lm.0 => /usr/lib/libm.so.0
	-lpthread.0 => /usr/lib/libpthread.so.0
	-lgdk_pixbuf-2.0.0 => /usr/pkg/lib/libgdk_pixbuf-2.0.so.0
	-lX11.6 => /usr/X11R6/lib/libX11.so.6
	-lXext.6 => /usr/X11R6/lib/libXext.so.6
	-lXi.6 => /usr/X11R6/lib/libXi.so.6
	-lpango-1.0.0 => /usr/pkg/lib/libpango-1.0.so.0
	-lz.0 => /usr/lib/libz.so.0
	-lfreetype.6 => /usr/pkg/lib/libfreetype.so.6
	-lexpat.1 => /usr/pkg/lib/libexpat.so.1
	-lfontconfig.1 => /usr/pkg/lib/libfontconfig.so.1
	-lglitz.1 => /usr/pkg/lib/libglitz.so.1
	-lpng12.0 => /usr/pkg/lib/libpng12.so.0
	-lXrender.1 => /usr/pkg/lib/libXrender.so.1
	-lICE.6 => /usr/X11R6/lib/libICE.so.6
	-lSM.6 => /usr/X11R6/lib/libSM.so.6
	-lcairo.2 => /usr/pkg/lib/libcairo.so.2
	-lpangoft2-1.0.0 => /usr/pkg/lib/libpangoft2-1.0.so.0
	-lpangocairo-1.0.0 => /usr/pkg/lib/libpangocairo-1.0.so.0
	-lXrandr.2 => /usr/pkg/lib/libXrandr.so.2
	-lXfixes.0 => /usr/pkg/lib/libXfixes.so.0
	-lXcursor.1 => /usr/pkg/lib/libXcursor.so.1
	-lgdk-x11-2.0.0 => /usr/pkg/lib/libgdk-x11-2.0.so.0
	-latk-1.0.0 => /usr/pkg/lib/libatk-1.0.so.0
	-lgtk-x11-2.0.0 => /usr/pkg/lib/libgtk-x11-2.0.so.0
	-lgthread-2.0.0 => /usr/pkg/lib/libgthread-2.0.so.0
	-lORBit-2.0 => /usr/pkg/lib/libORBit-2.so.0
	-lgconf-2.4 => /usr/pkg/lib/libgconf-2.so.4
	-lxml2.2 => /usr/pkg/lib/libxml2.so.2
	-ldbus-1.3 => /usr/pkg/lib/libdbus-1.so.3
	-ldbus-glib-1.2 => /usr/pkg/lib/libdbus-glib-1.so.2
	-lc.12 => /usr/lib/libc.so.12
>Description:
Until now Liferea was apparently unusable on NetBSD/sparc64 at least, because it
instantly crashed before accessing any feed content.
According to its website Liferea has unknown issues on 64-bits platforms, but I
doubt this is not related, although it may trigger a memory corruption in some
cases.

A stack trace reads:
0x0000000044935ef0 in g_value_transforms_init ()
   from /usr/pkg/lib/libgobject-2.0.so.0
(gdb) bt
#0  0x0000000044935ef0 in g_value_transforms_init ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#1  0x0000000040793610 in gtk_tree_model_get_valist ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#2  0x0000000040793480 in gtk_tree_model_get ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#3  0x000000000013ef94 in on_popup_zoomout_selected ()
#4  0x00000000407a499c in gtk_tree_store_move_after ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#5  0x0000000044b4c33c in g_qsort_with_data ()
   from /usr/pkg/lib/libglib-2.0.so.0
#6  0x00000000407a4b18 in gtk_tree_store_move_after ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#7  0x00000000407a02e4 in gtk_tree_sortable_set_sort_column_id ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#8  0x0000000000130fd8 in itemlist_load ()
#9  0x000000000013c074 in ui_feedlist_update_iter ()
#10 0x00000000449272e8 in g_cclosure_marshal_VOID__VOID ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#11 0x0000000044912214 in g_closure_invoke ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#12 0x0000000044926d48 in g_signal_emit_by_name ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#13 0x0000000044925988 in g_signal_emit_valist ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#14 0x0000000044925d6c in g_signal_emit ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#15 0x00000000407ba9c4 in gtk_tree_view_set_reorderable ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#16 0x00000000407a994c in gtk_tree_view_get_type ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#17 0x00000000406b20dc in gtk_marshal_VOID__UINT_STRING ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#18 0x00000000449124e8 in g_cclosure_new_swap ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#19 0x0000000044912214 in g_closure_invoke ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#20 0x0000000044926638 in g_signal_emit_by_name ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#21 0x0000000044925798 in g_signal_emit_valist ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#22 0x0000000044925d6c in g_signal_emit ()
   from /usr/pkg/lib/libgobject-2.0.so.0
#23 0x00000000407d64f0 in gtk_widget_send_expose ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#24 0x00000000406b0c60 in gtk_propagate_event ()
#25 0x00000000406afaec in gtk_main_do_event ()
   from /usr/pkg/lib/libgtk-x11-2.0.so.0
#26 0x0000000040a54098 in gdk_x11_register_standard_event_type ()
   from /usr/pkg/lib/libgdk-x11-2.0.so.0
#27 0x0000000044b3c7d8 in g_source_is_destroyed ()
   from /usr/pkg/lib/libglib-2.0.so.0
#28 0x0000000044b3de18 in g_main_context_dispatch ()
   from /usr/pkg/lib/libglib-2.0.so.0
#29 0x0000000044b3e218 in g_main_context_dispatch ()
   from /usr/pkg/lib/libglib-2.0.so.0
#30 0x0000000044b3ea20 in g_main_loop_run () from /usr/pkg/lib/libglib-2.0.so.0
#31 0x00000000406af0f4 in gtk_main () from /usr/pkg/lib/libgtk-x11-2.0.so.0
#32 0x0000000000131c50 in main ()
#33 0x00000000001136b8 in ___start ()
>How-To-Repeat:
Clicking on a feed item in the items list triggers a crash on NetBSD/sparc64.
>Fix:
The following patch fixes it for me:

$NetBSD$

--- src/ui_itemlist.c.orig	2006-12-07 14:58:46.000000000 +0100
+++ src/ui_itemlist.c
@@ -104,7 +104,7 @@ GtkTreeStore * ui_itemlist_get_tree_stor
 			- feed icon
 		 */
 		itemstore = gtk_tree_store_new(IS_LEN,
-		                               G_TYPE_UINT,
+		                               G_TYPE_ULONG,
 		                               G_TYPE_STRING, 
 		                               G_TYPE_STRING,
 									   G_TYPE_POINTER,


However a cleaner fix is probably to keep ULONG in there, and to modify
timeCompFunc() this way:
time_t timea, timeb; => unsigned long timea, timeb;

HTH.