Bug 795152 - Cross compiled Midori crashes when trying to fetch favicon
Summary: Cross compiled Midori crashes when trying to fetch favicon
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Fedora
Classification: Fedora
Component: mingw32-gdk-pixbuf
Version: 16
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Erik van Pienbroek
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-02-19 19:37 UTC by Paweł Forysiuk
Modified: 2012-02-28 10:55 UTC (History)
4 users (show)

Fixed In Version: mingw32-gdk-pixbuf-2.25.2-2.fc17
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2012-02-28 10:55:41 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Paweł Forysiuk 2012-02-19 19:37:24 UTC
Description of problem:
When using cross-compiled Midori with gdk-pixbuf compiled with gdi+ loaders, it crashes
when trying to fetch icons from some pages.

Version-Release number of selected component (if applicable):

mingw32-gdk-pixbuf-2.25.2

How reproducible:
100% reproducible.


Steps to Reproduce:
1. Run cross-compiled Midori
2. go to page http://alex-butenko.livejournal.com
3. Midori crashes.
  
Actual results:
Midori crashes.

Expected results:
Normal behavior.

Additional info:

Backtrace of a crash


GLib-GObject-WARNING **: cannot register existing type `GdkPixbufGdipAnim'

GLib-CRITICAL **: g_once_init_leave: assertion `result != 0' failed

GLib-GObject-CRITICAL **: g_object_new: assertion `G_TYPE_IS_OBJECT (object_type
)' failed

Program received signal SIGSEGV, Segmentation fault.
0x66c02146 in stop_load (bitmap=0x46e39a8, context=0x4238ed8, error=0x0)
    at ../../gdk-pixbuf/io-gdip-utils.c:695
695     ../../gdk-pixbuf/io-gdip-utils.c: No such file or directory.
        in ../../gdk-pixbuf/io-gdip-utils.c
(gdb) bt
#0  0x66c02146 in stop_load (bitmap=0x46e39a8, context=0x4238ed8, error=0x0)
    at ../../gdk-pixbuf/io-gdip-utils.c:695
#1  0x66c02646 in gdk_pixbuf__gdip_image_stop_load (data=0x4238ed8, error=0x0)
    at ../../gdk-pixbuf/io-gdip-utils.c:756
#2  0x003d5805 in _gdk_pixbuf_generic_image_load (module=0x2de4218,
    f=0x77c4fd80, error=0x0) at ../../gdk-pixbuf/gdk-pixbuf-io.c:1025
#3  0x003d59f9 in gdk_pixbuf_new_from_file_utf8 (
    filename=0x69f1948 "C:\\Documents and Settings\\pawel\\Ustawienia lokalne\\T
emporary Internet Files\\midori\\icons\\0a467b10b25769bd45d7a24d5ff848f0.10", er
ror=0x0) at ../../gdk-pixbuf/gdk-pixbuf-io.c:1116
#4  0x0044a995 in _midori_web_view_load_icon (view=0x41e35b0)
    at ../midori/midori-view.c:855
#5  0x0044c290 in midori_web_view_notify_icon_uri_cb (web_view=0x41e4370,
    pspec=0x41b4610, view=0x41e35b0) at ../midori/midori-view.c:1522
#6  0x63a45ec6 in ?? () from F:\mingw\bin\libgobject-2.0-0.dll
#7  0x63a47c10 in ?? () from F:\mingw\bin\libgobject-2.0-0.dll
Cannot access memory at address 0x40000006

Comment 1 Kalev Lember 2012-02-19 19:58:33 UTC
The favicon it is loading is an animated gif and the GDI+ gif loader code is failing to register the gobject.

This appears to be a regression from http://git.gnome.org/browse/gdk-pixbuf/commit/?id=f592afe9 that converted the animation implementations to use G_DEFINE_TYPE.

The loadable gdk-pixbuf GDI+ modules share common code in io-ani-animation.c, but are each compiled into different DLL files. This means that each of these DLL files that are loaded in the same process try to register the same gobject type, GdkPixbufAniAnim. The pre-G_DEFINE_TYPE code get_type() implementation had a manual check to make sure some other loadable DLL hasn't already registered this type:
  object_type = g_type_from_name ("GdkPixbufGdipAnim");
  if (object_type == 0) {
     object_type = g_type_register...

The new code generated by G_DEFINE_TYPE uses a static variable to guard for multiple registrations, but this isn't working if some other loadable DLL has already registered the type, because the static variable is different for each of the DLL files.

Fixing it upstream would probably involve either moving back to hand-crafted get_type() or splitting io-ani-animation.c into a separate DLL.

As a downstream, I guess we could compile all the GDI+ loaders into the main gdk-pixbuf DLL, which should fix the static variable problem. Another way to fix it would be to just stop using the GDI+ loaders.

Comment 2 Fedora Update System 2012-02-19 20:26:48 UTC
mingw32-gdk-pixbuf-2.25.2-2.fc17 has been submitted as an update for Fedora 17.
https://admin.fedoraproject.org/updates/mingw32-gdk-pixbuf-2.25.2-2.fc17

Comment 3 Fedora Update System 2012-02-20 02:15:09 UTC
Package mingw32-gdk-pixbuf-2.25.2-2.fc17:
* should fix your issue,
* was pushed to the Fedora 17 testing repository,
* should be available at your local mirror within two days.
Update it with:
# su -c 'yum update --enablerepo=updates-testing mingw32-gdk-pixbuf-2.25.2-2.fc17'
as soon as you are able to.
Please go to the following url:
https://admin.fedoraproject.org/updates/FEDORA-2012-2032/mingw32-gdk-pixbuf-2.25.2-2.fc17
then log in and leave karma (feedback).

Comment 4 Fedora Update System 2012-02-28 10:55:41 UTC
mingw32-gdk-pixbuf-2.25.2-2.fc17 has been pushed to the Fedora 17 stable repository.  If problems still persist, please make note of it in this bug report.


Note You need to log in before you can comment on or make changes to this bug.