bugFreeciv - Bugs: bug #21373, Switching between nationsets...

 
 
Show feedback again

bug #21373: Switching between nationsets causes Cairo-related assertion failure for flags

Submitted by:  Marko Lindqvist <cazfi>
Submitted on:  Wed 25 Dec 2013 02:21:43 AM UTC  
 
Category: client-gtk-3.0Severity: 3 - Normal
Priority: 5 - NormalStatus: Fixed
Assigned to: Marko Lindqvist <cazfi>Open/Closed: Closed
Release: Operating System: None
Planned Release: 2.4.4, 2.5.0, 2.6.0

Add a New Comment (Rich MarkupRich Markup):
   

You are not logged in

Please log in, so followups can be emailed to you.

 

(Jump to the original submission Jump to the original submission)

Wed 13 Aug 2014 08:43:36 PM UTC, SVN revision 25901:

After loading image with no alpha channel (RGB24), convert such surface to ARGB32.

See bug #21373

(Browse SVN revision 25901)

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.
Wed 13 Aug 2014 08:43:31 PM UTC, SVN revision 25900:

After loading image with no alpha channel (RGB24), convert such surface to ARGB32.

See bug #21373

(Browse SVN revision 25900)

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.
Wed 13 Aug 2014 08:43:25 PM UTC, SVN revision 25899:

After loading image with no alpha channel (RGB24), convert such surface to ARGB32.

See bug #21373

(Browse SVN revision 25899)

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.
Sun 10 Aug 2014 09:46:17 PM UTC, comment #7:

Fix to problem of loading images with no alpha channel (RGB24). Convert such surfaces to ARGB32.

Unfortunately this is not the only bug there. This fixes loading of some specific flags only. Many more still load up being broken, but I'm going to open new ticket about those.

(file #21687)

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.
Sun 10 Aug 2014 09:02:22 PM UTC, comment #6:

> I think the format assumption documented by that assertion in
> sprite_get_bounding_box() is at the mercy of the behaviour of
> cairo_image_surface_create_from_png() called from our
> load_gfxfile().


Adding fc_assert(cairo_image_surface_get_format(sprite->surface) == CAIRO_FORMAT_ARGB32); immediately after cairo_image_surface_create_from_png() fails sometimes, so this indeed is the problem point.

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.
Wed 19 Feb 2014 12:38:38 AM UTC, comment #5:

Ran into bug #21692 when I came to look at this; maybe related?

Jacob Nevins <jtn>
Project Administrator
Sat 28 Dec 2013 11:52:19 AM UTC, comment #4:

OK, I'm back on my main computer and am now seeing this (on trunk but not S2_5, oddly).

Jacob Nevins <jtn>
Project Administrator
Wed 25 Dec 2013 12:19:28 PM UTC, comment #3:

> dpkg -s libcairo2 -> Version: 1.12.16-2

1.10.2-6.1ubuntu3 for me.

I think the format assumption documented by that assertion in sprite_get_bounding_box() is at the mercy of the behaviour of cairo_image_surface_create_from_png() called from our load_gfxfile().

Looking at the [http://cgit.freedesktop.org/cairo/tree/src/cairo-png.c#n639 current Cairo git code), it can create a surface with format CAIRO_FORMAT_ARGB32 or CAIRO_FORMAT_RGB24, depending on the PNG format it finds.

However, I think my packaged libcairo2 looks similar to the top of tree in this regard, so I'm not sure why I'm not seeing it.

(Also, the comment about cairo-png "It is a toy API" is a bit worrying.)

Jacob Nevins <jtn>
Project Administrator
Wed 25 Dec 2013 11:01:03 AM UTC, comment #2:

> (I believe you're using a newer Gtk3 than me, for what that's
> worth.)


dpkg -s libgtk-3-0 -> Version: 3.8.6-1
dpkg -s libcairo2 -> Version: 1.12.16-2

> (Maybe this happens when initially popping up the pick-nations
> dialog as well as when interacting with the nationsets control?)


No

That popup_races_dialog() part is interesting in that I just got one of the backtraces on screen (as I said there was a lot of them - maybe one per nation?) there. Now that I reproduced this, I can't see one with popup_races_dialog(), but all have races_update_pickable() there.

1: in sprite_get_bounding_box() [client/gui-gtk-3.0/sprite.c::190]: assertion 'cairo_image_surface_get_format(sprite->surface) == CAIRO_FORMAT_ARGB32' failed.
2: Backtrace:
2: 0: ./client/freeciv-gtk3() [0x5e640d]
2: 1: ./client/freeciv-gtk3(vdo_log+0x78) [0x5eafc8]
2: 2: ./client/freeciv-gtk3(do_log+0x7d) [0x5eb05d]
2: 3: ./client/freeciv-gtk3(fc_assert_fail+0x8e) [0x5eb24e]
2: 4: ./client/freeciv-gtk3(sprite_get_bounding_box+0x2a5) [0x469345]
2: 5: ./client/freeciv-gtk3(get_flag+0x3c) [0x463dec]
2: 6: ./client/freeciv-gtk3() [0x4d66d9]
2: 7: ./client/freeciv-gtk3() [0x4d69d4]
2: 8: ./client/freeciv-gtk3(races_update_pickable+0x114) [0x4d7d04]
2: 9: ./client/freeciv-gtk3(client_handle_packet+0x2b) [0x4a316b]
2: 10: ./client/freeciv-gtk3(client_packet_input+0x1f) [0x46ff8f]
2: 11: ./client/freeciv-gtk3(input_from_server+0x6c) [0x47631c]

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.
Wed 25 Dec 2013 09:29:33 AM UTC, comment #1:

Interesting -- I haven't seen these.
(I believe you're using a newer Gtk3 than me, for what that's worth.)

Interesting to see popup_races_dialog() in the backtrace -- I don't think I expect that when interacting with the nationset control. (Maybe this happens when initially popping up the pick-nations dialog as well as when interacting with the nationsets control?)

Jacob Nevins <jtn>
Project Administrator
Wed 25 Dec 2013 02:21:43 AM UTC, original submission:

I get several of these every time I switch from core to extended, and I think once when switching the other direction:

1: in sprite_get_bounding_box() [client/gui-gtk-3.0/sprite.c::190]: assertion 'cairo_image_surface_get_format(sprite->surface) == CAIRO_FORMAT_ARGB32' failed.
2: Backtrace:
2: 0: ./client/freeciv-gtk3() [0x5e640d]
2: 1: ./client/freeciv-gtk3(vdo_log+0x78) [0x5eafc8]
2: 2: ./client/freeciv-gtk3(do_log+0x7d) [0x5eb05d]
2: 3: ./client/freeciv-gtk3(fc_assert_fail+0x8e) [0x5eb24e]
2: 4: ./client/freeciv-gtk3(sprite_get_bounding_box+0x2a5) [0x469345]
2: 5: ./client/freeciv-gtk3(get_flag+0x3c) [0x463dec]
2: 6: ./client/freeciv-gtk3() [0x4d66d9]
2: 7: ./client/freeciv-gtk3() [0x4d6a2b]
2: 8: ./client/freeciv-gtk3(popup_races_dialog+0x3b3) [0x4d81a3]
2: 9: ./client/freeciv-gtk3() [0x45d75d]

Marko Lindqvist <cazfi>
Project AdministratorIn charge of this item.

 

(Note: upload size limit is set to 1024 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

Attached Files
file #21687:  LoadRGB24.patch added by cazfi (2kB - text/x-diff)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -unavailable- added by jtn (Posted a comment)
  • -unavailable- added by cazfi (Submitted the item)
  •  

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 7 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Wed 13 Aug 2014 08:44:00 PM UTCcazfiStatusNone=>Fixed
      Assigned toNone=>cazfi
      Open/ClosedOpen=>Closed
    Sun 10 Aug 2014 09:46:17 PM UTCcazfiAttached File-=>Added LoadRGB24.patch, #21687
      Planned Release2.6.0=>2.4.4, 2.5.0, 2.6.0
    Sat 11 Jan 2014 11:18:15 AM UTCjtnSummarySwitching between nationsets cause assert failure=>Switching between nationsets causes Cairo-related assertion failure for flags
    Wed 25 Dec 2013 02:22:09 AM UTCcazfiSummarySwitching between nationsets cause gtk-assert=>Switching between nationsets cause assert failure
    Show feedback again

    Back to the top


    Powered by Savane 3.1-cleanup