Follow-up Comment #1, bug #17146 (project freeciv):
I believe I just ran into this with S2_3 (r19372) while trying to display the
city report (F4). This is in a game with the experimental ruleset, with cities
that were building Genetic Labs, which do not yet have sprites.
Backtrace below. I think the problem is an endemic failure to cope with NULL
returns from common functions like get_building_sprite(); see the inline
functions in gui-sdl/gui_tilespec.h, which invoke the GET_SURF() macro which
can dereference a NULL pointer.
I guess that it wouldn't be so hard to munge GET_SURF() to divert to a tiny,
preallocated SDL_Surface if it encounters a NULL pointer.
#0 real_info_city_report_dialog_update () at cityrep.c:504
pImprove = 0x80b580
pCity_iter = 0x868e350
pCity = 0x8691210
bg_color = {r = 255 '377', g = 255 '377', b = 255 '377',
unused = 136 '210'}
pBuf = <value optimised out>
pWindow = 0x2002650
pStr = 0x7741260
pText1 = 0x2021c70
pText2 = 0x77969a0
pText3 = 0x2002900
pUnits_Icon = 0x20027a0
pCMA_Icon = 0x7796a40
pText4 = 0x77968d0
pLogo = <value optimised out>
togrow = <value optimised out>
w = <value optimised out>
count = 51
ww = <value optimised out>
hh = <value optimised out>
name_w = 81
prod_w = 52
H = <value optimised out>
cBuf = "24 00urns 00
Platformn(53/120) 00 00 00 00 00 00` 00 00 00 00 00 00 00` 00 00 00 00 00 00
00260E 25 02 00 00 00 00
260231b", ' 00' <repeats 12 times>,
" 01 00 00 00 00 00 00 00 31? 00 00 00 00 00 00 30 00 00 00 00 00 00 00 30",
' 00' <repeats 23 times>, " 01 00 00 00 00 00 00"
pName = <value optimised out>
dst = {x = 768, y = 0, w = 0, h = 0}
__FUNCTION__ = "real_info_city_report_dialog_update"
#1 0x000000000040d8c8 in cities_action_callback (pButton=0x6016bd0)
at mapctrl.c:174
No locals.
#2 0x00000000004a0f5e in widget_pressed_action (pWidget=0x6016bd0)
at widget.c:401
ID = 100
#3 0x0000000000405be8 in gui_event_loop (pData=0x0, loop_action=0,
key_down_handler=<value optimised out>,
key_up_handler=<value optimised out>,
mouse_button_down_handler=<value optimised out>,
mouse_button_up_handler=<value optimised out>,
mouse_motion_handler=0x404ec0 <main_mouse_motion_handler>)
at gui_main.c:675
ID = 0
tv = {tv_sec = 0, tv_usec = 0}
civfdset = {fds_bits = {0 <repeats 16 times>}}
t_current = <value optimised out>
t_last_unit_anim = 16153
t_last_map_scrolling = 16246
real_timer_next_call = 16332
result = 0
schot_nr = 0
schot = ' 00' <repeats 31 times>
__FUNCTION__ = "gui_event_loop"
#4 0x00000000004062f2 in ui_main (argc=1, argv=0x7fff8af0b618)
at gui_main.c:1057
__Net_User_Event = {type = 24 ' 30', active = {type = 24 ' 30',
gain = 0 ' 00', state = 0 ' 00'}, key = {type = 24 ' 30',
which = 0 ' 00', state = 0 ' 00', keysym = {scancode = 1 ' 01',
sym = SDLK_UNKNOWN, mod = KMOD_NONE, unicode = 0}}, motion = {
type = 24 ' 30', which = 0 ' 00', state = 0 ' 00', x = 1,
y = 0, xrel = 0, yrel = 0}, button = {type = 24 ' 30',
which = 0 ' 00', button = 0 ' 00', state = 0 ' 00', x = 1,
y = 0}, jaxis = {type = 24 ' 30', which = 0 ' 00',
axis = 0 ' 00', value = 1}, jball = {type = 24 ' 30',
which = 0 ' 00', ball = 0 ' 00', xrel = 1, yrel = 0}, jhat = {
type = 24 ' 30', which = 0 ' 00', hat = 0 ' 00',
value = 0 ' 00'}, jbutton = {type = 24 ' 30', which = 0 ' 00',
button = 0 ' 00', state = 0 ' 00'}, resize = {type = 24 ' 30',
w = 1, h = 0}, expose = {type = 24 ' 30'}, quit = {
type = 24 ' 30'}, user = {type = 24 ' 30', code = 1,
data1 = 0x0, data2 = 0x0}, syswm = {type = 24 ' 30', msg = 0x0}}
__GGZ_User_Event = {type = 24 ' 30', active = {type = 24 ' 30',
gain = 182 '266', state = 240 '360'}, key = {type = 24 ' 30',
which = 182 '266', state = 240 '360', keysym = {
scancode = 2 ' 02', sym = SDLK_UNKNOWN, mod = KMOD_NONE,
unicode = 0}}, motion = {type = 24 ' 30', which = 182 '266',
state = 240 '360', x = 2, y = 0, xrel = 0, yrel = 0}, button = {
type = 24 ' 30', which = 182 '266', button = 240 '360',
state = 138 '212', x = 2, y = 0}, jaxis = {type = 24 ' 30',
which = 182 '266', axis = 240 '360', value = 2}, jball = {
type = 24 ' 30', which = 182 '266', ball = 240 '360', xrel = 2,
yrel = 0}, jhat = {type = 24 ' 30', which = 182 '266',
hat = 240 '360', value = 138 '212'}, jbutton = {
type = 24 ' 30', which = 182 '266', button = 240 '360',
state = 138 '212'}, resize = {type = 24 ' 30', w = 2, h = 0},
expose = {type = 24 ' 30'}, quit = {type = 24 ' 30'}, user = {
type = 24 ' 30', code = 2, data1 = 0x0, data2 = 0x0}, syswm = {
type = 24 ' 30', msg = 0x0}}
__Anim_User_Event = {type = 24 ' 30', active = {type = 24 ' 30',
gain = 0 ' 00', state = 0 ' 00'}, key = {type = 24 ' 30',
which = 0 ' 00', state = 0 ' 00', keysym = {scancode = 3 ' 03',
sym = SDLK_UNKNOWN, mod = KMOD_NONE, unicode = 0}}, motion = {
type = 24 ' 30', which = 0 ' 00', state = 0 ' 00', x = 3,
y = 0, xrel = 0, yrel = 0}, button = {type = 24 ' 30',
which = 0 ' 00', button = 0 ' 00', state = 0 ' 00', x = 3,
y = 0}, jaxis = {type = 24 ' 30', which = 0 ' 00',
axis = 0 ' 00', value = 3}, jball = {type = 24 ' 30',
which = 0 ' 00', ball = 0 ' 00', xrel = 3, yrel = 0}, jhat = {
type = 24 ' 30', which = 0 ' 00', hat = 0 ' 00',
value = 0 ' 00'}, jbutton = {type = 24 ' 30', which = 0 ' 00',
button = 0 ' 00', state = 0 ' 00'}, resize = {type = 24 ' 30',
w = 3, h = 0}, expose = {type = 24 ' 30'}, quit = {
type = 24 ' 30'}, user = {type = 24 ' 30', code = 3,
data1 = 0x0, data2 = 0x0}, syswm = {type = 24 ' 30', msg = 0x0}}
__Info_User_Event = {type = 24 ' 30', active = {type = 24 ' 30',
gain = 0 ' 00', state = 0 ' 00'}, key = {type = 24 ' 30',
which = 0 ' 00', state = 0 ' 00', keysym = {scancode = 5 ' 05',
sym = SDLK_UNKNOWN, mod = KMOD_NONE, unicode = 0}}, motion = {
type = 24 ' 30', which = 0 ' 00', state = 0 ' 00', x = 5,
y = 0, xrel = 0, yrel = 0}, button = {type = 24 ' 30',
which = 0 ' 00', button = 0 ' 00', state = 0 ' 00', x = 5,
y = 0}, jaxis = {type = 24 ' 30', which = 0 ' 00',
axis = 0 ' 00', value = 5}, jball = {type = 24 ' 30',
which = 0 ' 00', ball = 0 ' 00', xrel = 5, yrel = 0}, jhat = {
type = 24 ' 30', which = 0 ' 00', hat = 0 ' 00',
value = 0 ' 00'}, jbutton = {type = 24 ' 30', which = 0 ' 00',
button = 0 ' 00', state = 0 ' 00'}, resize = {type = 24 ' 30',
w = 5, h = 0}, expose = {type = 24 ' 30'}, quit = {
type = 24 ' 30'}, user = {type = 24 ' 30', code = 5,
data1 = 0x0, data2 = 0x0}, syswm = {type = 24 ' 30', msg = 0x0}}
__Flush_User_Event = {type = 24 ' 30', active = {type = 24 ' 30',
gain = 0 ' 00', state = 0 ' 00'}, key = {type = 24 ' 30',
which = 0 ' 00', state = 0 ' 00', keysym = {scancode = 6 ' 06',
sym = SDLK_UNKNOWN, mod = KMOD_NONE, unicode = 0}}, motion = {
type = 24 ' 30', which = 0 ' 00', state = 0 ' 00', x = 6,
y = 0, xrel = 0, yrel = 0}, button = {type = 24 ' 30',
which = 0 ' 00', button = 0 ' 00', state = 0 ' 00', x = 6,
y = 0}, jaxis = {type = 24 ' 30', which = 0 ' 00',
axis = 0 ' 00', value = 6}, jball = {type = 24 ' 30',
which = 0 ' 00', ball = 0 ' 00', xrel = 6, yrel = 0}, jhat = {
type = 24 ' 30', which = 0 ' 00', hat = 0 ' 00',
value = 0 ' 00'}, jbutton = {type = 24 ' 30', which = 0 ' 00',
button = 0 ' 00', state = 0 ' 00'}, resize = {type = 24 ' 30',
w = 6, h = 0}, expose = {type = 24 ' 30'}, quit = {
type = 24 ' 30'}, user = {type = 24 ' 30', code = 6,
data1 = 0x0, data2 = 0x0}, syswm = {type = 24 ' 30', msg = 0x0}}
__pMap_Scroll_User_Event = {type = 24 ' 30', active = {
type = 24 ' 30', gain = 0 ' 00', state = 0 ' 00'}, key = {
type = 24 ' 30', which = 0 ' 00', state = 0 ' 00', keysym = {
scancode = 7 'a', sym = SDLK_UNKNOWN, mod = KMOD_NONE,
unicode = 0}}, motion = {type = 24 ' 30', which = 0 ' 00',
state = 0 ' 00', x = 7, y = 0, xrel = 0, yrel = 0}, button = {
type = 24 ' 30', which = 0 ' 00', button = 0 ' 00',
state = 0 ' 00', x = 7, y = 0}, jaxis = {type = 24 ' 30',
which = 0 ' 00', axis = 0 ' 00', value = 7}, jball = {
type = 24 ' 30', which = 0 ' 00', ball = 0 ' 00', xrel = 7,
yrel = 0}, jhat = {type = 24 ' 30', which = 0 ' 00',
hat = 0 ' 00', value = 0 ' 00'}, jbutton = {type = 24 ' 30',
which = 0 ' 00', button = 0 ' 00', state = 0 ' 00'}, resize = {
type = 24 ' 30', w = 7, h = 0}, expose = {type = 24 ' 30'},
quit = {type = 24 ' 30'}, user = {type = 24 ' 30', code = 7,
data1 = 0x0, data2 = 0x0}, syswm = {type = 24 ' 30', msg = 0x0}}
#5 0x000000000042832f in client_main (argc=<value optimised out>,
argv=0x7fff8af0b618) at client_main.c:509
i = 1
loglevel = LOG_NORMAL
ui_options = <value optimised out>
ui_separator = 16
option = <value optimised out>
user_tileset = false
fatal_assertions = -1
__FUNCTION__ = "client_main"
#6 0x00007f580c483c4d in __libc_start_main () from /lib/libc.so.6
No symbol table info available.
#7 0x0000000000404999 in _start ()
No symbol table info available.
(file #12493)
_______________________________________________________
Additional Item Attachment:
File name: freeciv-T0231-Y01655-manual.sav.bz2 Size:66 KB
_______________________________________________________
Reply to this item at:
<http://gna.org/bugs/?17146>
_______________________________________________
Message sent via/by Gna!
http://gna.org/
_______________________________________________
Freeciv-dev mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-dev