-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mutated flowers concept #2
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TheDarklingWolf
added a commit
that referenced
this pull request
Oct 5, 2012
Mutated flowers concept
kevingranade
pushed a commit
that referenced
this pull request
Aug 17, 2013
Rv assembly order fix by atomicdryad
This was referenced Oct 1, 2013
atomicdryad
pushed a commit
that referenced
this pull request
Oct 24, 2013
Merged added .50 BMG with Added Bipod, Support for .50 bmg, and item groups for said items
GlyphGryph
added a commit
that referenced
this pull request
Nov 16, 2013
Make make understand catalua.cpp
narc0tiq
referenced
this pull request
in narc0tiq/Cataclysm-DDA
Nov 27, 2013
This was referenced Jan 12, 2014
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 13, 2024
Prevents division by zero crash when displaying widgets with defined break levels. Example of where previous crash from div-by-zero happened: * Provided save used the `zenfs_thick_sidebar`, which includes widget `zenfs_mana_bar_14_no_label` that defines break levels. * When running the provided save, mana value is usually at `v=201` with `min=0` `max=201`. * Those values are computed by `known_magic::max_mana` where internal values are `bionic_penalty=999` `mana_base=1000` `int_bonus=200`. * But when int falls (because of tiredness), then `known_magic::max_mana` will return `0` because `int_bonus=-100`. * This leads to `_var_max=0` in `widget::value_color` and thus `var_range=0` which causes the div by zero. Backtrace of previous crash beng fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGFPE, Arithmetic exception. 0x0000555556a9c54e in widget::value_color (this=this@entry=0x7fffffffb8d8, value=value@entry=201) at src/widget.cpp:1310 1310 const int value_offset = ( 100 * ( value - _var_min ) ) / var_range; (gdb) bt #0 0x0000555556a9c54e in widget::value_color (this=this@entry=0x7fffffffb8d8, value=value@entry=201) at src/widget.cpp:1310 CleverRaven#1 0x0000555556aa37dc in widget::color_value_string[abi:cxx11](int, int) (this=this@entry=0x7fffffffb8d8, value=201, width_max=width_max@entry=14) at src/widget.cpp:1262 CleverRaven#2 0x0000555556aa38ca in widget::show[abi:cxx11](avatar const&, unsigned int) (this=this@entry=0x7fffffffb8d8, ava=..., max_width=max_width@entry=14) at src/widget.cpp:890 CleverRaven#3 0x0000555556aa497f in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffb8d8, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1834 CleverRaven#4 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffbe88, ava=..., max_width=<optimized out>, label_width=label_width@entry=9, skip_pad=false) at src/widget.cpp:1794 CleverRaven#5 0x0000555556aa3cfa in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffc438, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1724 CleverRaven#6 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffc9e8, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1794 CleverRaven#7 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x555562c47160, ava=..., max_width=<optimized out>, max_width@entry=64, label_width=<optimized out>, skip_pad=skip_pad@entry=false) at src/widget.cpp:1794 CleverRaven#8 0x0000555556aa5222 in custom_draw_func (args=...) at src/widget.cpp:970 CleverRaven#9 0x0000555555ec4360 in std::function<int(draw_args const&)>::operator() (this=0x555597eb1780, __args#0=...) at /usr/include/c++/14/bits/std_function.h:591 CleverRaven#10 game::draw_panels (this=this@entry=0x55555827ef50, force_draw=force_draw@entry=true) at src/game.cpp:4007 CleverRaven#11 0x0000555555eed1ac in game::draw (this=0x55555827ef50, ui=...) at src/game.cpp:3961 CleverRaven#12 0x00005555569a962c in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#13 0x00005555569a96e9 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#14 0x00005555569a9710 in ui_manager::redraw () at src/ui_manager.cpp:506 CleverRaven#15 0x0000555555dd0850 in do_turn () at src/do_turn.cpp:712 CleverRaven#16 0x00005555557a138d in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 (gdb) print var_range $1 = 0 (gdb) print value $2 = 201 (gdb) print _var_min $3 = 0 (gdb) print _var_max $4 = 0 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 13, 2024
Prevents division by zero crash when displaying widgets with defined break levels. Example of where previous crash from div-by-zero happened: * Provided save used the `zenfs_thick_sidebar`, which includes widget `zenfs_mana_bar_14_no_label` that defines break levels. * When running the provided save, mana value is usually at `v=201` with `min=0` `max=201`. * Those values are computed by `known_magic::max_mana` where internal values are `bionic_penalty=999` `mana_base=1000` `int_bonus=200`. * But when int falls (because of tiredness), then `known_magic::max_mana` will return `0` because `int_bonus=-100`. * This leads to `_var_max=0` in `widget::value_color` and thus `var_range=0` which causes the div by zero. Backtrace of previous crash beng fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGFPE, Arithmetic exception. 0x0000555556a9c54e in widget::value_color (this=this@entry=0x7fffffffb8d8, value=value@entry=201) at src/widget.cpp:1310 1310 const int value_offset = ( 100 * ( value - _var_min ) ) / var_range; (gdb) bt #0 0x0000555556a9c54e in widget::value_color (this=this@entry=0x7fffffffb8d8, value=value@entry=201) at src/widget.cpp:1310 CleverRaven#1 0x0000555556aa37dc in widget::color_value_string[abi:cxx11](int, int) (this=this@entry=0x7fffffffb8d8, value=201, width_max=width_max@entry=14) at src/widget.cpp:1262 CleverRaven#2 0x0000555556aa38ca in widget::show[abi:cxx11](avatar const&, unsigned int) (this=this@entry=0x7fffffffb8d8, ava=..., max_width=max_width@entry=14) at src/widget.cpp:890 CleverRaven#3 0x0000555556aa497f in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffb8d8, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1834 CleverRaven#4 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffbe88, ava=..., max_width=<optimized out>, label_width=label_width@entry=9, skip_pad=false) at src/widget.cpp:1794 CleverRaven#5 0x0000555556aa3cfa in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffc438, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1724 CleverRaven#6 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffc9e8, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1794 CleverRaven#7 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x555562c47160, ava=..., max_width=<optimized out>, max_width@entry=64, label_width=<optimized out>, skip_pad=skip_pad@entry=false) at src/widget.cpp:1794 CleverRaven#8 0x0000555556aa5222 in custom_draw_func (args=...) at src/widget.cpp:970 CleverRaven#9 0x0000555555ec4360 in std::function<int(draw_args const&)>::operator() (this=0x555597eb1780, __args#0=...) at /usr/include/c++/14/bits/std_function.h:591 CleverRaven#10 game::draw_panels (this=this@entry=0x55555827ef50, force_draw=force_draw@entry=true) at src/game.cpp:4007 CleverRaven#11 0x0000555555eed1ac in game::draw (this=0x55555827ef50, ui=...) at src/game.cpp:3961 CleverRaven#12 0x00005555569a962c in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#13 0x00005555569a96e9 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#14 0x00005555569a9710 in ui_manager::redraw () at src/ui_manager.cpp:506 CleverRaven#15 0x0000555555dd0850 in do_turn () at src/do_turn.cpp:712 CleverRaven#16 0x00005555557a138d in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 (gdb) print var_range $1 = 0 (gdb) print value $2 = 201 (gdb) print _var_min $3 = 0 (gdb) print _var_max $4 = 0 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 14, 2024
Prevents referencing `visibility_cache` using out-of-bounds array indexes such as negative values. Using out-of-bound indexes for this array previously caused crashes when compiled with `-D_GLIBCXX_ASSERTIONS`. The function `pixel_minimap::render_critters` is, for example, called with `center=(64,59,-5)`, which gives `start=(4,-1)` and then `p=(4,-1,-5)`, which previously crashed because `visibility_cache[p.x][p.y]` then gives a negative array index. Such values were seen when peeking using `X` at a submap boundary. Gdb backtrace of previous crash being fixed: ``` (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad30be in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x000055555668a04e in std::array<lit_level, 132ul>::operator[] (__n=18446744073709551615, this=0x555599f30348) at /usr/include/c++/13/array:211 CleverRaven#6 0x000055555668ab7a in std::array<lit_level, 132ul>::operator[] (__n=18446744073709551615, this=0x555599f30348) at /usr/include/c++/13/array:211 CleverRaven#7 pixel_minimap::render_critters (this=this@entry=0x555558108960, center=...) at src/pixel_minimap.cpp:521 CleverRaven#8 0x000055555668ada2 in pixel_minimap::render (this=0x555558108960, center=...) at src/pixel_minimap.cpp:447 CleverRaven#9 0x000055555668bb69 in pixel_minimap::draw (this=<optimized out>, screen_rect=..., center=...) at src/pixel_minimap.cpp:555 CleverRaven#10 0x0000555555b3fd5c in cata_tiles::draw_minimap (this=this@entry=0x555558093020, dest=..., center=..., width=width@entry=352, height=height@entry=352) at src/cata_tiles.cpp:1919 CleverRaven#11 0x00005555567f43d3 in cata_cursesport::curses_drawwindow (w=...) at src/sdltiles.cpp:1428 CleverRaven#12 0x000055555666f5e2 in std::function<void(draw_args const&)>::operator() (__args#0=..., this=<optimized out>) at /usr/include/c++/13/bits/std_function.h:591 CleverRaven#13 operator() (d=..., __closure=<optimized out>) at src/panels.cpp:54 CleverRaven#14 std::__invoke_impl<int, window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)>&, const draw_args&> (__f=...) at /usr/include/c++/13/bits/invoke.h:61 CleverRaven#15 std::__invoke_r<int, window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)>&, const draw_args&> (__fn=...) at /usr/include/c++/13/bits/invoke.h:114 CleverRaven#16 std::_Function_handler<int(const draw_args&), window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)> >::_M_invoke(const std::_Any_data &, const draw_args &) (__functor=..., __args#0=...) at /usr/include/c++/13/bits/std_function.h:290 CleverRaven#17 0x0000555555e7c9ec in std::function<int(draw_args const&)>::operator() (__args#0=..., this=0x55559461d638) at /usr/include/c++/13/bits/std_function.h:591 CleverRaven#18 game::draw_panels (this=this@entry=0x555558276c40, force_draw=force_draw@entry=true) at src/game.cpp:4006 CleverRaven#19 0x0000555555e984f8 in game::draw (this=0x555558276c40, ui=...) at src/game.cpp:3960 CleverRaven#20 0x000055555695df35 in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#21 0x000055555695e039 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#22 0x000055555695e060 in ui_manager::redraw () at src/ui_manager.cpp:506 CleverRaven#23 0x0000555555ea95cf in game::look_around (this=this@entry=0x555558276c40, show_window=show_window@entry=true, center=..., start_point=..., has_first_point=has_first_point@entry=false, select_zone=false, peeking=true, is_moving_zone=<optimized out>, end_point=..., change_lv=true) at src/game.cpp:7529 CleverRaven#24 0x0000555555eadd32 in game::look_around (this=this@entry=0x555558276c40, looka_params=...) at src/game.cpp:7697 CleverRaven#25 0x0000555555eadecb in game::peek (this=this@entry=0x555558276c40, p=...) at src/game.cpp:6071 CleverRaven#26 0x0000555555ec441a in game::peek (this=this@entry=0x555558276c40) at src/game.cpp:6050 CleverRaven#27 0x0000555555f124ec in game::do_regular_action (this=this@entry=0x555558276c40, act=@0x7fffffffd104: ACTION_PEEK, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2432 CleverRaven#28 0x0000555555f15b09 in game::handle_action (this=0x555558276c40) at src/handle_action.cpp:3174 CleverRaven#29 0x0000555555d8a108 in do_turn () at /usr/include/c++/13/bits/unique_ptr.h:199 CleverRaven#30 0x0000555555781b4e in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 (gdb) frame 7 (gdb) print p $1 = {static dimension = 3, x = 4, y = -1, z = -5} (gdb) print center $2 = (const tripoint &) @0x7fffffffbda8: {static dimension = 3, x = 64, y = 59, z = -5} ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 15, 2024
Prevents segfault when performing `firstaid_activity_actor` but the bandage tool disappeared. Backtrace of fixed segfault: ``` Thread 1 "cataclysm-tiles" received signal SIGSEGV, Segmentation fault. (gdb) bt #0 0x0000555555ece5a4 in item::get_usable_item_helper<item> (use_name="heal", self=...) at src/item.cpp:11584 CleverRaven#1 item::get_usable_item (this=0x0, use_name="heal") at src/item.cpp:11606 CleverRaven#2 0x000055555599c6bf in firstaid_activity_actor::finish (this=0x55559b583f20, act=..., who=...) at src/activity_actor.cpp:6651 CleverRaven#3 0x00005555564d8c6b in player_activity::do_turn (this=0x555558108218, you=...) at src/player_activity.cpp:391 CleverRaven#4 0x0000555555ce3fa6 in do_turn () at src/do_turn.cpp:532 CleverRaven#5 0x000055555577511a in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` An example where this happened was when the bandage was inside a spillable container (clay canning pot), that spilled its contents when starting the activity. Spiling the clay canning pot invalidates the `item_location`. Backtrace of when the clay canning pot was spilled: ``` #0 item_pocket::get_name (this=0x555557fa7540) at src/item_pocket.cpp:2117 CleverRaven#1 item_pocket::handle_liquid_or_spill (this=this@entry=0x555557fa7540, guy=..., avoid=0x555557fa8060) at src/item_pocket.cpp:806 CleverRaven#2 0x0000555555a6aa60 in avatar_action::use_item (you=..., loc=..., method="heal") at src/avatar_action.cpp:1212 CleverRaven#3 0x0000555555a6dda7 in avatar_action::eat_or_use (you=..., loc=...) at src/avatar_action.cpp:988 CleverRaven#4 0x0000555555e3e1c5 in game::do_regular_action (this=this@entry=0x555557f94a60, act=@0x7fffffffd1b0: ACTION_EAT, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2479 CleverRaven#5 0x0000555555e41260 in game::handle_action (this=0x555557f94a60) at src/handle_action.cpp:3176 CleverRaven#6 0x0000555555ce422f in do_turn () at /usr/include/c++/13/bits/unique_ptr.h:199 CleverRaven#7 0x000055555577511a in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 15, 2024
Previous segfault happened when trying to display the list of items that deconstruction would yield, but this terrain has no `deconstruct` json. This commit also adds a check with `debugmsg` for future such cases during the game startup validation. Previous crash being fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGSEGV, Segmentation fault. 0x0000555555cb9602 in operator() (drop_group=..., __closure=<optimized out>) at src/construction.cpp:2049 2049 item_group::spawn_data_from_group( drop_group )->every_item_min_max(); (gdb) bt #0 0x0000555555cb9602 in operator() (drop_group=..., __closure=<optimized out>) at src/construction.cpp:2049 CleverRaven#1 0x0000555555cb9af2 in construct::do_turn_deconstruct (p=..., who=...) at src/construction.cpp:2086 CleverRaven#2 0x0000555555a32fad in activity_handlers::build_do_turn (act=0x5555583e4338, you=0x5555583e3c70) at src/activity_handlers.cpp:3424 CleverRaven#3 0x0000555555a6b7de in std::function<void(player_activity*, Character*)>::operator() (this=<optimized out>, __args#0=<optimized out>, __args#0@entry=0x5555583e4338, __args#1=<optimized out>, __args#1@entry=0x5555583e3c70) at /usr/include/c++/14/bits/std_function.h:591 CleverRaven#4 0x0000555555a69647 in activity_type::call_do_turn (this=<optimized out>, act=act@entry=0x5555583e4338, you=you@entry=0x5555583e3c70) at src/activity_type.cpp:160 CleverRaven#5 0x00005555566d3a1c in player_activity::do_turn (this=0x5555583e4338, you=...) at src/player_activity.cpp:320 CleverRaven#6 0x0000555555dcef82 in do_turn () at src/do_turn.cpp:592 CleverRaven#7 0x00005555557a1217 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 15, 2024
Previous segfault happened when trying to display the list of items that deconstruction would yield, but this terrain has no `deconstruct` json. This commit also adds a check with `debugmsg` for future such cases during the game startup validation. Previous crash being fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGSEGV, Segmentation fault. 0x0000555555cb9602 in operator() (drop_group=..., __closure=<optimized out>) at src/construction.cpp:2049 2049 item_group::spawn_data_from_group( drop_group )->every_item_min_max(); (gdb) bt #0 0x0000555555cb9602 in operator() (drop_group=..., __closure=<optimized out>) at src/construction.cpp:2049 CleverRaven#1 0x0000555555cb9af2 in construct::do_turn_deconstruct (p=..., who=...) at src/construction.cpp:2086 CleverRaven#2 0x0000555555a32fad in activity_handlers::build_do_turn (act=0x5555583e4338, you=0x5555583e3c70) at src/activity_handlers.cpp:3424 CleverRaven#3 0x0000555555a6b7de in std::function<void(player_activity*, Character*)>::operator() (this=<optimized out>, __args#0=<optimized out>, __args#0@entry=0x5555583e4338, __args#1=<optimized out>, __args#1@entry=0x5555583e3c70) at /usr/include/c++/14/bits/std_function.h:591 CleverRaven#4 0x0000555555a69647 in activity_type::call_do_turn (this=<optimized out>, act=act@entry=0x5555583e4338, you=you@entry=0x5555583e3c70) at src/activity_type.cpp:160 CleverRaven#5 0x00005555566d3a1c in player_activity::do_turn (this=0x5555583e4338, you=...) at src/player_activity.cpp:320 CleverRaven#6 0x0000555555dcef82 in do_turn () at src/do_turn.cpp:592 CleverRaven#7 0x00005555557a1217 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 15, 2024
Prevents crashes that previously happened from using references to `explosion_data` that had been invalidated. The problem before happened when killing "unfolded impossibility" in LIXA facility with a grenade, since this monster runs an eoc that switches maps. That led to `explosion_handler::process_explosions` being called twice recursively. First invocation iterates references, and the second invocation might append to the vector, and most certaily will clear the vector, thus invalidating references for the first invocation. Example crash being fixed by this commit, notice how `explosion_handler::process_explosions` occurs twice in the callstack: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad501e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x000055555688b471 in std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >::operator[] (this=<optimized out>, __n=1967424379) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#6 std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >::operator[] (this=<optimized out>, __n=1967424379) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#7 string_identity_static::get_interned_string[abi:cxx11](int) (id=1967424379) at src/string_id.cpp:51 CleverRaven#8 0x0000555555fffed7 in string_identity_static::str[abi:cxx11]() const (this=<optimized out>) at src/string_id.h:140 CleverRaven#9 0x0000555556057423 in string_id<itype>::c_str (this=this@entry=0x5555a126a718) at src/string_id.h:253 CleverRaven#10 0x00005555560be56a in Item_factory::find_template (this=0x55555751cad0, id=...) at src/item_factory.cpp:2563 CleverRaven#11 0x0000555555e4b0c5 in explosion_handler::_make_explosion (source=<optimized out>, p=..., ex=...) at /usr/include/c++/14/bits/unique_ptr.h:193 CleverRaven#12 0x0000555555e4b704 in explosion_handler::process_explosions () at src/explosion.cpp:923 CleverRaven#13 0x0000555556246e97 in map::actualize (this=this@entry=0x5555a12bf890, grid=...) at src/map.cpp:9168 CleverRaven#14 0x00005555562472c0 in map::load (this=this@entry=0x5555a12bf890, w=..., update_vehicle=update_vehicle@entry=true, pump_events=pump_events@entry=false) at src/map.cpp:8387 CleverRaven#15 0x0000555555de2546 in tinymap::load (this=this@entry=0x5555a12bf890, w=..., update_vehicles=update_vehicles@entry=true, pump_events=pump_events@entry=false) at src/map.h:2765 CleverRaven#16 0x00005555562a7e6f in update_mapgen_function_json::update_map (this=0x55555a8ce8f0, omt_pos=..., args=..., offset=..., miss=miss@entry=0x0, verify=verify@entry=true, mirror_horizontal=false, mirror_vertical=false, rotation=0) at src/mapgen.cpp:8015 CleverRaven#17 0x00005555562a81e3 in run_mapgen_update_func (update_mapgen_id=..., omt_pos=..., args=..., miss=miss@entry=0x0, cancel_on_collision=cancel_on_collision@entry=true, mirror_horizontal=mirror_horizontal@entry=false, mirror_vertical=false, rotation=0) at src/mapgen.cpp:8117 CleverRaven#18 0x00005555565a0250 in operator() (__closure=<optimized out>, d=...) at src/npctalk.cpp:3964 CleverRaven#19 0x000055555659c7a4 in talk_effect_t::apply (this=this@entry=0x55555d5211d8, d=...) at src/npctalk.cpp:6526 CleverRaven#20 0x0000555555e0c9ba in effect_on_condition::activate (this=0x55555d521160, d=..., require_callstack_check=require_callstack_check@entry=true) at src/effect_on_condition.cpp:329 CleverRaven#21 0x00005555561f9693 in spell_effect::effect_on_condition (sp=..., caster=..., target=...) at src/magic_spell_effect.cpp:1806 CleverRaven#22 0x00005555561d101e in spell::cast_all_effects (this=0x7fffffffc788, source=..., target=...) at src/magic.cpp:1907 CleverRaven#23 0x0000555556463bec in monster::die (this=0x55559c7fc0a0, nkiller=0x0) at src/monster.cpp:2941 CleverRaven#24 0x0000555555d33386 in Creature::deal_projectile_attack (this=0x55559c7fc0a0, source=0x0, attack=..., print_messages=<optimized out>, wp_attack=...) at src/creature.cpp:1311 CleverRaven#25 0x0000555556465049 in monster::deal_projectile_attack (this=this@entry=0x55559c7fc0a0, source=source@entry=0x0, attack=..., print_messages=print_messages@entry=false, wp_attack=...) at src/monster.cpp:2212 CleverRaven#26 0x0000555555e4a9d9 in explosion_handler::shrapnel (range=-1, source=<optimized out>, src=..., power=<optimized out>, casing_mass=<optimized out>, per_fragment_mass=<optimized out>) at src/explosion.cpp:463 CleverRaven#27 explosion_handler::_make_explosion (source=<optimized out>, p=..., ex=...) at src/explosion.cpp:536 CleverRaven#28 0x0000555555e4b704 in explosion_handler::process_explosions () at src/explosion.cpp:923 CleverRaven#29 0x0000555555dcf46f in do_turn () at src/do_turn.cpp:648 CleverRaven#30 0x00005555557a1227 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` In the crash above, the `explosion_data` has been invalidated: ``` (gdb) frame 11 193 pointer _M_ptr() const noexcept { return std::get<0>(_M_t); } (gdb) print ex $1 = (const explosion_data &) @0x5555a126a6f8: {power = 1.75295132e+25, distance_factor = 2.76847299e+20, max_noise = 1667855474, fire = 117, shrapnel = {casing_mass = 1936026889, fragment_mass = 6.82915174e+22, recovery = -1584519120, drop = {_version = 13059389229367304, _cid = 2019155690, _id = { _id = 1967424379}}}} (gdb) print ex.shrapnel.drop $2 = {_version = 13059389229367304, _cid = 2019155690, _id = {_id = 1967424379}} ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 15, 2024
Prevents crashes that previously happened from using references to `explosion_data` that had been invalidated. The problem before happened when killing "unfolded impossibility" in LIXA facility with a grenade, since this monster runs an eoc that switches maps. That led to `explosion_handler::process_explosions` being called twice recursively. First invocation iterates references, and the second invocation might append to the vector, and most certaily will clear the vector, thus invalidating references for the first invocation. Example crash being fixed by this commit, notice how `explosion_handler::process_explosions` occurs twice in the callstack: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad501e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x000055555688b471 in std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >::operator[] (this=<optimized out>, __n=1967424379) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#6 std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >::operator[] (this=<optimized out>, __n=1967424379) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#7 string_identity_static::get_interned_string[abi:cxx11](int) (id=1967424379) at src/string_id.cpp:51 CleverRaven#8 0x0000555555fffed7 in string_identity_static::str[abi:cxx11]() const (this=<optimized out>) at src/string_id.h:140 CleverRaven#9 0x0000555556057423 in string_id<itype>::c_str (this=this@entry=0x5555a126a718) at src/string_id.h:253 CleverRaven#10 0x00005555560be56a in Item_factory::find_template (this=0x55555751cad0, id=...) at src/item_factory.cpp:2563 CleverRaven#11 0x0000555555e4b0c5 in explosion_handler::_make_explosion (source=<optimized out>, p=..., ex=...) at /usr/include/c++/14/bits/unique_ptr.h:193 CleverRaven#12 0x0000555555e4b704 in explosion_handler::process_explosions () at src/explosion.cpp:923 CleverRaven#13 0x0000555556246e97 in map::actualize (this=this@entry=0x5555a12bf890, grid=...) at src/map.cpp:9168 CleverRaven#14 0x00005555562472c0 in map::load (this=this@entry=0x5555a12bf890, w=..., update_vehicle=update_vehicle@entry=true, pump_events=pump_events@entry=false) at src/map.cpp:8387 CleverRaven#15 0x0000555555de2546 in tinymap::load (this=this@entry=0x5555a12bf890, w=..., update_vehicles=update_vehicles@entry=true, pump_events=pump_events@entry=false) at src/map.h:2765 CleverRaven#16 0x00005555562a7e6f in update_mapgen_function_json::update_map (this=0x55555a8ce8f0, omt_pos=..., args=..., offset=..., miss=miss@entry=0x0, verify=verify@entry=true, mirror_horizontal=false, mirror_vertical=false, rotation=0) at src/mapgen.cpp:8015 CleverRaven#17 0x00005555562a81e3 in run_mapgen_update_func (update_mapgen_id=..., omt_pos=..., args=..., miss=miss@entry=0x0, cancel_on_collision=cancel_on_collision@entry=true, mirror_horizontal=mirror_horizontal@entry=false, mirror_vertical=false, rotation=0) at src/mapgen.cpp:8117 CleverRaven#18 0x00005555565a0250 in operator() (__closure=<optimized out>, d=...) at src/npctalk.cpp:3964 CleverRaven#19 0x000055555659c7a4 in talk_effect_t::apply (this=this@entry=0x55555d5211d8, d=...) at src/npctalk.cpp:6526 CleverRaven#20 0x0000555555e0c9ba in effect_on_condition::activate (this=0x55555d521160, d=..., require_callstack_check=require_callstack_check@entry=true) at src/effect_on_condition.cpp:329 CleverRaven#21 0x00005555561f9693 in spell_effect::effect_on_condition (sp=..., caster=..., target=...) at src/magic_spell_effect.cpp:1806 CleverRaven#22 0x00005555561d101e in spell::cast_all_effects (this=0x7fffffffc788, source=..., target=...) at src/magic.cpp:1907 CleverRaven#23 0x0000555556463bec in monster::die (this=0x55559c7fc0a0, nkiller=0x0) at src/monster.cpp:2941 CleverRaven#24 0x0000555555d33386 in Creature::deal_projectile_attack (this=0x55559c7fc0a0, source=0x0, attack=..., print_messages=<optimized out>, wp_attack=...) at src/creature.cpp:1311 CleverRaven#25 0x0000555556465049 in monster::deal_projectile_attack (this=this@entry=0x55559c7fc0a0, source=source@entry=0x0, attack=..., print_messages=print_messages@entry=false, wp_attack=...) at src/monster.cpp:2212 CleverRaven#26 0x0000555555e4a9d9 in explosion_handler::shrapnel (range=-1, source=<optimized out>, src=..., power=<optimized out>, casing_mass=<optimized out>, per_fragment_mass=<optimized out>) at src/explosion.cpp:463 CleverRaven#27 explosion_handler::_make_explosion (source=<optimized out>, p=..., ex=...) at src/explosion.cpp:536 CleverRaven#28 0x0000555555e4b704 in explosion_handler::process_explosions () at src/explosion.cpp:923 CleverRaven#29 0x0000555555dcf46f in do_turn () at src/do_turn.cpp:648 CleverRaven#30 0x00005555557a1227 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` In the crash above, the `explosion_data` has been invalidated: ``` (gdb) frame 11 193 pointer _M_ptr() const noexcept { return std::get<0>(_M_t); } (gdb) print ex $1 = (const explosion_data &) @0x5555a126a6f8: {power = 1.75295132e+25, distance_factor = 2.76847299e+20, max_noise = 1667855474, fire = 117, shrapnel = {casing_mass = 1936026889, fragment_mass = 6.82915174e+22, recovery = -1584519120, drop = {_version = 13059389229367304, _cid = 2019155690, _id = { _id = 1967424379}}}} (gdb) print ex.shrapnel.drop $2 = {_version = 13059389229367304, _cid = 2019155690, _id = {_id = 1967424379}} ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 16, 2024
Prevents the crash listed below that previously happened when searching for zones to add, but the search yielded no results: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad501e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x0000555555de2639 in std::vector<uilist_entry, std::allocator<uilist_entry> >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1130 CleverRaven#6 std::vector<uilist_entry, std::allocator<uilist_entry> >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#7 0x000055555699deac in uilist_impl::draw_controls (this=0x555599a181d0) at src/ui.cpp:138 CleverRaven#8 0x0000555555b7c312 in cataimgui::window::draw (this=0x555599a181d0) at src/cata_imgui.cpp:631 CleverRaven#9 cataimgui::window::draw (this=0x555599a181d0) at src/cata_imgui.cpp:600 CleverRaven#10 0x00005555569a2b1c in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#11 0x00005555569a2bd9 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#12 0x00005555569a2c00 in ui_manager::redraw () at src/ui_manager.cpp:508 CleverRaven#13 0x000055555699bfa4 in uilist::inputfilter (this=this@entry=0x7fffffffb9c8) at src/ui.cpp:531 CleverRaven#14 0x000055555699ead4 in uilist::query (this=this@entry=0x7fffffffb9c8, loop=loop@entry=true, timeout=timeout@entry=-1, allow_unfiltered_hotkeys=allow_unfiltered_hotkeys@entry=false) at src/ui.cpp:865 CleverRaven#15 0x0000555555c610d4 in zone_manager::query_type (this=this@entry=0x555557274060 <zone_manager::get_manager()::manager>, personal=personal@entry=false) at src/clzones.cpp:621 CleverRaven#16 0x0000555555ef3894 in game::zones_manager (this=this@entry=0x555558291db0) at src/game.cpp:6944 CleverRaven#17 0x0000555555f5d279 in game::do_regular_action (this=this@entry=0x555558291db0, act=@0x7fffffffcfec: ACTION_ZONES, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2438 CleverRaven#18 0x0000555555f60769 in game::handle_action (this=0x555558291db0) at src/handle_action.cpp:3172 CleverRaven#19 0x0000555555dcf14d in do_turn () at src/do_turn.cpp:579 CleverRaven#20 0x00005555557a1217 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` gdb shows that `parent.selected` was negative: ``` (gdb) frame 7 138 parent.entries[parent.selected].desc.c_str() (gdb) print parent.selected $1 = -1 (gdb) print parent.entries.size() $2 = 63 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 16, 2024
Prevents the crash listed below that previously happened when searching for zones to add, but the search yielded no results: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad501e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x0000555555de2639 in std::vector<uilist_entry, std::allocator<uilist_entry> >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1130 CleverRaven#6 std::vector<uilist_entry, std::allocator<uilist_entry> >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#7 0x000055555699deac in uilist_impl::draw_controls (this=0x555599a181d0) at src/ui.cpp:138 CleverRaven#8 0x0000555555b7c312 in cataimgui::window::draw (this=0x555599a181d0) at src/cata_imgui.cpp:631 CleverRaven#9 cataimgui::window::draw (this=0x555599a181d0) at src/cata_imgui.cpp:600 CleverRaven#10 0x00005555569a2b1c in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#11 0x00005555569a2bd9 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#12 0x00005555569a2c00 in ui_manager::redraw () at src/ui_manager.cpp:508 CleverRaven#13 0x000055555699bfa4 in uilist::inputfilter (this=this@entry=0x7fffffffb9c8) at src/ui.cpp:531 CleverRaven#14 0x000055555699ead4 in uilist::query (this=this@entry=0x7fffffffb9c8, loop=loop@entry=true, timeout=timeout@entry=-1, allow_unfiltered_hotkeys=allow_unfiltered_hotkeys@entry=false) at src/ui.cpp:865 CleverRaven#15 0x0000555555c610d4 in zone_manager::query_type (this=this@entry=0x555557274060 <zone_manager::get_manager()::manager>, personal=personal@entry=false) at src/clzones.cpp:621 CleverRaven#16 0x0000555555ef3894 in game::zones_manager (this=this@entry=0x555558291db0) at src/game.cpp:6944 CleverRaven#17 0x0000555555f5d279 in game::do_regular_action (this=this@entry=0x555558291db0, act=@0x7fffffffcfec: ACTION_ZONES, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2438 CleverRaven#18 0x0000555555f60769 in game::handle_action (this=0x555558291db0) at src/handle_action.cpp:3172 CleverRaven#19 0x0000555555dcf14d in do_turn () at src/do_turn.cpp:579 CleverRaven#20 0x00005555557a1217 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` gdb shows that `parent.selected` was negative: ``` (gdb) frame 7 138 parent.entries[parent.selected].desc.c_str() (gdb) print parent.selected $1 = -1 (gdb) print parent.entries.size() $2 = 63 ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 16, 2024
Prevents the crash listed below that previously happened when searching for zones to add, but the search yielded no results: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad501e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x0000555555de2639 in std::vector<uilist_entry, std::allocator<uilist_entry> >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1130 CleverRaven#6 std::vector<uilist_entry, std::allocator<uilist_entry> >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#7 0x000055555699deac in uilist_impl::draw_controls (this=0x555599a181d0) at src/ui.cpp:138 CleverRaven#8 0x0000555555b7c312 in cataimgui::window::draw (this=0x555599a181d0) at src/cata_imgui.cpp:631 CleverRaven#9 cataimgui::window::draw (this=0x555599a181d0) at src/cata_imgui.cpp:600 CleverRaven#10 0x00005555569a2b1c in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#11 0x00005555569a2bd9 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#12 0x00005555569a2c00 in ui_manager::redraw () at src/ui_manager.cpp:508 CleverRaven#13 0x000055555699bfa4 in uilist::inputfilter (this=this@entry=0x7fffffffb9c8) at src/ui.cpp:531 CleverRaven#14 0x000055555699ead4 in uilist::query (this=this@entry=0x7fffffffb9c8, loop=loop@entry=true, timeout=timeout@entry=-1, allow_unfiltered_hotkeys=allow_unfiltered_hotkeys@entry=false) at src/ui.cpp:865 CleverRaven#15 0x0000555555c610d4 in zone_manager::query_type (this=this@entry=0x555557274060 <zone_manager::get_manager()::manager>, personal=personal@entry=false) at src/clzones.cpp:621 CleverRaven#16 0x0000555555ef3894 in game::zones_manager (this=this@entry=0x555558291db0) at src/game.cpp:6944 CleverRaven#17 0x0000555555f5d279 in game::do_regular_action (this=this@entry=0x555558291db0, act=@0x7fffffffcfec: ACTION_ZONES, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2438 CleverRaven#18 0x0000555555f60769 in game::handle_action (this=0x555558291db0) at src/handle_action.cpp:3172 CleverRaven#19 0x0000555555dcf14d in do_turn () at src/do_turn.cpp:579 CleverRaven#20 0x00005555557a1217 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` gdb shows that `parent.selected` was negative: ``` (gdb) frame 7 138 parent.entries[parent.selected].desc.c_str() (gdb) print parent.selected $1 = -1 (gdb) print parent.entries.size() $2 = 63 ```
dseguin
pushed a commit
that referenced
this pull request
Aug 18, 2024
Prevents crashes that previously happened from using references to `explosion_data` that had been invalidated. The problem before happened when killing "unfolded impossibility" in LIXA facility with a grenade, since this monster runs an eoc that switches maps. That led to `explosion_handler::process_explosions` being called twice recursively. First invocation iterates references, and the second invocation might append to the vector, and most certaily will clear the vector, thus invalidating references for the first invocation. Example crash being fixed by this commit, notice how `explosion_handler::process_explosions` occurs twice in the callstack: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007ffff7ad501e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x000055555688b471 in std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >::operator[] (this=<optimized out>, __n=1967424379) at /usr/include/c++/14/bits/stl_vector.h:1128 #6 std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >::operator[] (this=<optimized out>, __n=1967424379) at /usr/include/c++/14/bits/stl_vector.h:1128 #7 string_identity_static::get_interned_string[abi:cxx11](int) (id=1967424379) at src/string_id.cpp:51 #8 0x0000555555fffed7 in string_identity_static::str[abi:cxx11]() const (this=<optimized out>) at src/string_id.h:140 #9 0x0000555556057423 in string_id<itype>::c_str (this=this@entry=0x5555a126a718) at src/string_id.h:253 #10 0x00005555560be56a in Item_factory::find_template (this=0x55555751cad0, id=...) at src/item_factory.cpp:2563 #11 0x0000555555e4b0c5 in explosion_handler::_make_explosion (source=<optimized out>, p=..., ex=...) at /usr/include/c++/14/bits/unique_ptr.h:193 #12 0x0000555555e4b704 in explosion_handler::process_explosions () at src/explosion.cpp:923 #13 0x0000555556246e97 in map::actualize (this=this@entry=0x5555a12bf890, grid=...) at src/map.cpp:9168 #14 0x00005555562472c0 in map::load (this=this@entry=0x5555a12bf890, w=..., update_vehicle=update_vehicle@entry=true, pump_events=pump_events@entry=false) at src/map.cpp:8387 #15 0x0000555555de2546 in tinymap::load (this=this@entry=0x5555a12bf890, w=..., update_vehicles=update_vehicles@entry=true, pump_events=pump_events@entry=false) at src/map.h:2765 #16 0x00005555562a7e6f in update_mapgen_function_json::update_map (this=0x55555a8ce8f0, omt_pos=..., args=..., offset=..., miss=miss@entry=0x0, verify=verify@entry=true, mirror_horizontal=false, mirror_vertical=false, rotation=0) at src/mapgen.cpp:8015 #17 0x00005555562a81e3 in run_mapgen_update_func (update_mapgen_id=..., omt_pos=..., args=..., miss=miss@entry=0x0, cancel_on_collision=cancel_on_collision@entry=true, mirror_horizontal=mirror_horizontal@entry=false, mirror_vertical=false, rotation=0) at src/mapgen.cpp:8117 #18 0x00005555565a0250 in operator() (__closure=<optimized out>, d=...) at src/npctalk.cpp:3964 #19 0x000055555659c7a4 in talk_effect_t::apply (this=this@entry=0x55555d5211d8, d=...) at src/npctalk.cpp:6526 #20 0x0000555555e0c9ba in effect_on_condition::activate (this=0x55555d521160, d=..., require_callstack_check=require_callstack_check@entry=true) at src/effect_on_condition.cpp:329 #21 0x00005555561f9693 in spell_effect::effect_on_condition (sp=..., caster=..., target=...) at src/magic_spell_effect.cpp:1806 #22 0x00005555561d101e in spell::cast_all_effects (this=0x7fffffffc788, source=..., target=...) at src/magic.cpp:1907 #23 0x0000555556463bec in monster::die (this=0x55559c7fc0a0, nkiller=0x0) at src/monster.cpp:2941 #24 0x0000555555d33386 in Creature::deal_projectile_attack (this=0x55559c7fc0a0, source=0x0, attack=..., print_messages=<optimized out>, wp_attack=...) at src/creature.cpp:1311 #25 0x0000555556465049 in monster::deal_projectile_attack (this=this@entry=0x55559c7fc0a0, source=source@entry=0x0, attack=..., print_messages=print_messages@entry=false, wp_attack=...) at src/monster.cpp:2212 #26 0x0000555555e4a9d9 in explosion_handler::shrapnel (range=-1, source=<optimized out>, src=..., power=<optimized out>, casing_mass=<optimized out>, per_fragment_mass=<optimized out>) at src/explosion.cpp:463 #27 explosion_handler::_make_explosion (source=<optimized out>, p=..., ex=...) at src/explosion.cpp:536 #28 0x0000555555e4b704 in explosion_handler::process_explosions () at src/explosion.cpp:923 #29 0x0000555555dcf46f in do_turn () at src/do_turn.cpp:648 #30 0x00005555557a1227 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ``` In the crash above, the `explosion_data` has been invalidated: ``` (gdb) frame 11 193 pointer _M_ptr() const noexcept { return std::get<0>(_M_t); } (gdb) print ex $1 = (const explosion_data &) @0x5555a126a6f8: {power = 1.75295132e+25, distance_factor = 2.76847299e+20, max_noise = 1667855474, fire = 117, shrapnel = {casing_mass = 1936026889, fragment_mass = 6.82915174e+22, recovery = -1584519120, drop = {_version = 13059389229367304, _cid = 2019155690, _id = { _id = 1967424379}}}} (gdb) print ex.shrapnel.drop $2 = {_version = 13059389229367304, _cid = 2019155690, _id = {_id = 1967424379}} ```
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Aug 19, 2024
Prevents referencing `visibility_cache` using out-of-bounds array indexes such as negative values. Using out-of-bound indexes for this array previously caused crashes when compiled with `-D_GLIBCXX_ASSERTIONS`. The function `pixel_minimap::render_critters` is, for example, called with `center=(64,59,-5)`, which gives `start=(4,-1)` and then `p=(4,-1,-5)`, which previously crashed because `visibility_cache[p.x][p.y]` then gives a negative array index. Such values were seen when peeking using `X` at a submap boundary. Gdb backtrace of previous crash being fixed: ``` (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad30be in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x000055555668a04e in std::array<lit_level, 132ul>::operator[] (__n=18446744073709551615, this=0x555599f30348) at /usr/include/c++/13/array:211 CleverRaven#6 0x000055555668ab7a in std::array<lit_level, 132ul>::operator[] (__n=18446744073709551615, this=0x555599f30348) at /usr/include/c++/13/array:211 CleverRaven#7 pixel_minimap::render_critters (this=this@entry=0x555558108960, center=...) at src/pixel_minimap.cpp:521 CleverRaven#8 0x000055555668ada2 in pixel_minimap::render (this=0x555558108960, center=...) at src/pixel_minimap.cpp:447 CleverRaven#9 0x000055555668bb69 in pixel_minimap::draw (this=<optimized out>, screen_rect=..., center=...) at src/pixel_minimap.cpp:555 CleverRaven#10 0x0000555555b3fd5c in cata_tiles::draw_minimap (this=this@entry=0x555558093020, dest=..., center=..., width=width@entry=352, height=height@entry=352) at src/cata_tiles.cpp:1919 CleverRaven#11 0x00005555567f43d3 in cata_cursesport::curses_drawwindow (w=...) at src/sdltiles.cpp:1428 CleverRaven#12 0x000055555666f5e2 in std::function<void(draw_args const&)>::operator() (__args#0=..., this=<optimized out>) at /usr/include/c++/13/bits/std_function.h:591 CleverRaven#13 operator() (d=..., __closure=<optimized out>) at src/panels.cpp:54 CleverRaven#14 std::__invoke_impl<int, window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)>&, const draw_args&> (__f=...) at /usr/include/c++/13/bits/invoke.h:61 CleverRaven#15 std::__invoke_r<int, window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)>&, const draw_args&> (__fn=...) at /usr/include/c++/13/bits/invoke.h:114 CleverRaven#16 std::_Function_handler<int(const draw_args&), window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)> >::_M_invoke(const std::_Any_data &, const draw_args &) (__functor=..., __args#0=...) at /usr/include/c++/13/bits/std_function.h:290 CleverRaven#17 0x0000555555e7c9ec in std::function<int(draw_args const&)>::operator() (__args#0=..., this=0x55559461d638) at /usr/include/c++/13/bits/std_function.h:591 CleverRaven#18 game::draw_panels (this=this@entry=0x555558276c40, force_draw=force_draw@entry=true) at src/game.cpp:4006 CleverRaven#19 0x0000555555e984f8 in game::draw (this=0x555558276c40, ui=...) at src/game.cpp:3960 CleverRaven#20 0x000055555695df35 in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 CleverRaven#21 0x000055555695e039 in ui_adaptor::redraw () at src/ui_manager.cpp:345 CleverRaven#22 0x000055555695e060 in ui_manager::redraw () at src/ui_manager.cpp:506 CleverRaven#23 0x0000555555ea95cf in game::look_around (this=this@entry=0x555558276c40, show_window=show_window@entry=true, center=..., start_point=..., has_first_point=has_first_point@entry=false, select_zone=false, peeking=true, is_moving_zone=<optimized out>, end_point=..., change_lv=true) at src/game.cpp:7529 CleverRaven#24 0x0000555555eadd32 in game::look_around (this=this@entry=0x555558276c40, looka_params=...) at src/game.cpp:7697 CleverRaven#25 0x0000555555eadecb in game::peek (this=this@entry=0x555558276c40, p=...) at src/game.cpp:6071 CleverRaven#26 0x0000555555ec441a in game::peek (this=this@entry=0x555558276c40) at src/game.cpp:6050 CleverRaven#27 0x0000555555f124ec in game::do_regular_action (this=this@entry=0x555558276c40, act=@0x7fffffffd104: ACTION_PEEK, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2432 CleverRaven#28 0x0000555555f15b09 in game::handle_action (this=0x555558276c40) at src/handle_action.cpp:3174 CleverRaven#29 0x0000555555d8a108 in do_turn () at /usr/include/c++/13/bits/unique_ptr.h:199 CleverRaven#30 0x0000555555781b4e in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 (gdb) frame 7 (gdb) print p $1 = {static dimension = 3, x = 4, y = -1, z = -5} (gdb) print center $2 = (const tripoint &) @0x7fffffffbda8: {static dimension = 3, x = 64, y = 59, z = -5} ```
dseguin
pushed a commit
that referenced
this pull request
Aug 20, 2024
Prevents referencing `visibility_cache` using out-of-bounds array indexes such as negative values. Using out-of-bound indexes for this array previously caused crashes when compiled with `-D_GLIBCXX_ASSERTIONS`. The function `pixel_minimap::render_critters` is, for example, called with `center=(64,59,-5)`, which gives `start=(4,-1)` and then `p=(4,-1,-5)`, which previously crashed because `visibility_cache[p.x][p.y]` then gives a negative array index. Such values were seen when peeking using `X` at a submap boundary. Gdb backtrace of previous crash being fixed: ``` (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff787840f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff78294f2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff78124ed in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007ffff7ad30be in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x000055555668a04e in std::array<lit_level, 132ul>::operator[] (__n=18446744073709551615, this=0x555599f30348) at /usr/include/c++/13/array:211 #6 0x000055555668ab7a in std::array<lit_level, 132ul>::operator[] (__n=18446744073709551615, this=0x555599f30348) at /usr/include/c++/13/array:211 #7 pixel_minimap::render_critters (this=this@entry=0x555558108960, center=...) at src/pixel_minimap.cpp:521 #8 0x000055555668ada2 in pixel_minimap::render (this=0x555558108960, center=...) at src/pixel_minimap.cpp:447 #9 0x000055555668bb69 in pixel_minimap::draw (this=<optimized out>, screen_rect=..., center=...) at src/pixel_minimap.cpp:555 #10 0x0000555555b3fd5c in cata_tiles::draw_minimap (this=this@entry=0x555558093020, dest=..., center=..., width=width@entry=352, height=height@entry=352) at src/cata_tiles.cpp:1919 #11 0x00005555567f43d3 in cata_cursesport::curses_drawwindow (w=...) at src/sdltiles.cpp:1428 #12 0x000055555666f5e2 in std::function<void(draw_args const&)>::operator() (__args#0=..., this=<optimized out>) at /usr/include/c++/13/bits/std_function.h:591 #13 operator() (d=..., __closure=<optimized out>) at src/panels.cpp:54 #14 std::__invoke_impl<int, window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)>&, const draw_args&> (__f=...) at /usr/include/c++/13/bits/invoke.h:61 #15 std::__invoke_r<int, window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)>&, const draw_args&> (__fn=...) at /usr/include/c++/13/bits/invoke.h:114 #16 std::_Function_handler<int(const draw_args&), window_panel::window_panel(const std::function<void(const draw_args&)>&, const std::string&, const translation&, int, int, bool, const std::function<bool()>&, bool)::<lambda(const draw_args&)> >::_M_invoke(const std::_Any_data &, const draw_args &) (__functor=..., __args#0=...) at /usr/include/c++/13/bits/std_function.h:290 #17 0x0000555555e7c9ec in std::function<int(draw_args const&)>::operator() (__args#0=..., this=0x55559461d638) at /usr/include/c++/13/bits/std_function.h:591 #18 game::draw_panels (this=this@entry=0x555558276c40, force_draw=force_draw@entry=true) at src/game.cpp:4006 #19 0x0000555555e984f8 in game::draw (this=0x555558276c40, ui=...) at src/game.cpp:3960 #20 0x000055555695df35 in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 #21 0x000055555695e039 in ui_adaptor::redraw () at src/ui_manager.cpp:345 #22 0x000055555695e060 in ui_manager::redraw () at src/ui_manager.cpp:506 #23 0x0000555555ea95cf in game::look_around (this=this@entry=0x555558276c40, show_window=show_window@entry=true, center=..., start_point=..., has_first_point=has_first_point@entry=false, select_zone=false, peeking=true, is_moving_zone=<optimized out>, end_point=..., change_lv=true) at src/game.cpp:7529 #24 0x0000555555eadd32 in game::look_around (this=this@entry=0x555558276c40, looka_params=...) at src/game.cpp:7697 #25 0x0000555555eadecb in game::peek (this=this@entry=0x555558276c40, p=...) at src/game.cpp:6071 #26 0x0000555555ec441a in game::peek (this=this@entry=0x555558276c40) at src/game.cpp:6050 #27 0x0000555555f124ec in game::do_regular_action (this=this@entry=0x555558276c40, act=@0x7fffffffd104: ACTION_PEEK, player_character=..., mouse_target=std::optional [no contained value]) at src/handle_action.cpp:2432 #28 0x0000555555f15b09 in game::handle_action (this=0x555558276c40) at src/handle_action.cpp:3174 #29 0x0000555555d8a108 in do_turn () at /usr/include/c++/13/bits/unique_ptr.h:199 #30 0x0000555555781b4e in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 (gdb) frame 7 (gdb) print p $1 = {static dimension = 3, x = 4, y = -1, z = -5} (gdb) print center $2 = (const tripoint &) @0x7fffffffbda8: {static dimension = 3, x = 64, y = 59, z = -5} ```
dseguin
pushed a commit
that referenced
this pull request
Aug 20, 2024
Previous segfault happened when trying to display the list of items that deconstruction would yield, but this terrain has no `deconstruct` json. This commit also adds a check with `debugmsg` for future such cases during the game startup validation. Previous crash being fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGSEGV, Segmentation fault. 0x0000555555cb9602 in operator() (drop_group=..., __closure=<optimized out>) at src/construction.cpp:2049 2049 item_group::spawn_data_from_group( drop_group )->every_item_min_max(); (gdb) bt #0 0x0000555555cb9602 in operator() (drop_group=..., __closure=<optimized out>) at src/construction.cpp:2049 #1 0x0000555555cb9af2 in construct::do_turn_deconstruct (p=..., who=...) at src/construction.cpp:2086 #2 0x0000555555a32fad in activity_handlers::build_do_turn (act=0x5555583e4338, you=0x5555583e3c70) at src/activity_handlers.cpp:3424 #3 0x0000555555a6b7de in std::function<void(player_activity*, Character*)>::operator() (this=<optimized out>, __args#0=<optimized out>, __args#0@entry=0x5555583e4338, __args#1=<optimized out>, __args#1@entry=0x5555583e3c70) at /usr/include/c++/14/bits/std_function.h:591 #4 0x0000555555a69647 in activity_type::call_do_turn (this=<optimized out>, act=act@entry=0x5555583e4338, you=you@entry=0x5555583e3c70) at src/activity_type.cpp:160 #5 0x00005555566d3a1c in player_activity::do_turn (this=0x5555583e4338, you=...) at src/player_activity.cpp:320 #6 0x0000555555dcef82 in do_turn () at src/do_turn.cpp:592 #7 0x00005555557a1217 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 ```
juur
added a commit
to juur/Cataclysm-DDA
that referenced
this pull request
Aug 31, 2024
ghost
mentioned this pull request
Sep 3, 2024
Maleclypse
pushed a commit
that referenced
this pull request
Oct 6, 2024
Prevents division by zero crash when displaying widgets with defined break levels. Example of where previous crash from div-by-zero happened: * Provided save used the `zenfs_thick_sidebar`, which includes widget `zenfs_mana_bar_14_no_label` that defines break levels. * When running the provided save, mana value is usually at `v=201` with `min=0` `max=201`. * Those values are computed by `known_magic::max_mana` where internal values are `bionic_penalty=999` `mana_base=1000` `int_bonus=200`. * But when int falls (because of tiredness), then `known_magic::max_mana` will return `0` because `int_bonus=-100`. * This leads to `_var_max=0` in `widget::value_color` and thus `var_range=0` which causes the div by zero. Backtrace of previous crash beng fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGFPE, Arithmetic exception. 0x0000555556a9c54e in widget::value_color (this=this@entry=0x7fffffffb8d8, value=value@entry=201) at src/widget.cpp:1310 1310 const int value_offset = ( 100 * ( value - _var_min ) ) / var_range; (gdb) bt #0 0x0000555556a9c54e in widget::value_color (this=this@entry=0x7fffffffb8d8, value=value@entry=201) at src/widget.cpp:1310 #1 0x0000555556aa37dc in widget::color_value_string[abi:cxx11](int, int) (this=this@entry=0x7fffffffb8d8, value=201, width_max=width_max@entry=14) at src/widget.cpp:1262 #2 0x0000555556aa38ca in widget::show[abi:cxx11](avatar const&, unsigned int) (this=this@entry=0x7fffffffb8d8, ava=..., max_width=max_width@entry=14) at src/widget.cpp:890 #3 0x0000555556aa497f in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffb8d8, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1834 #4 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffbe88, ava=..., max_width=<optimized out>, label_width=label_width@entry=9, skip_pad=false) at src/widget.cpp:1794 #5 0x0000555556aa3cfa in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffc438, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1724 #6 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x7fffffffc9e8, ava=..., max_width=<optimized out>, label_width=label_width@entry=0, skip_pad=false) at src/widget.cpp:1794 #7 0x0000555556aa42c2 in widget::layout[abi:cxx11](avatar const&, unsigned int, int, bool) (this=this@entry=0x555562c47160, ava=..., max_width=<optimized out>, max_width@entry=64, label_width=<optimized out>, skip_pad=skip_pad@entry=false) at src/widget.cpp:1794 #8 0x0000555556aa5222 in custom_draw_func (args=...) at src/widget.cpp:970 #9 0x0000555555ec4360 in std::function<int(draw_args const&)>::operator() (this=0x555597eb1780, __args#0=...) at /usr/include/c++/14/bits/std_function.h:591 #10 game::draw_panels (this=this@entry=0x55555827ef50, force_draw=force_draw@entry=true) at src/game.cpp:4007 #11 0x0000555555eed1ac in game::draw (this=0x55555827ef50, ui=...) at src/game.cpp:3961 #12 0x00005555569a962c in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:440 #13 0x00005555569a96e9 in ui_adaptor::redraw () at src/ui_manager.cpp:345 #14 0x00005555569a9710 in ui_manager::redraw () at src/ui_manager.cpp:506 #15 0x0000555555dd0850 in do_turn () at src/do_turn.cpp:712 #16 0x00005555557a138d in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:873 (gdb) print var_range $1 = 0 (gdb) print value $2 = 201 (gdb) print _var_min $3 = 0 (gdb) print _var_max $4 = 0 ```
Maleclypse
added a commit
that referenced
this pull request
Oct 24, 2024
Eliminate some premature division #2
Closed
inogenous
added a commit
to inogenous/Cataclysm-DDA
that referenced
this pull request
Jan 11, 2025
Prevents segfault when searches during character creation gives no hits. To reproduce the issue being fixed: 1. Create custom character 2. Tab to "Scenario" 3. Press `/` to search, enter something that gives no hits, such as `99` 4. Segfault Similar segfault also happens for "Profession" and "Background" tab. Stacktrace of segfault being fixed: ``` Thread 1 "cataclysm-tiles" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 warning: 44 ./nptl/pthread_kill.c: No such file or directory (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 CleverRaven#1 0x00007ffff778acef in __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:78 CleverRaven#2 0x00007ffff7736c42 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 CleverRaven#3 0x00007ffff771f4f0 in __GI_abort () at ./stdlib/abort.c:79 CleverRaven#4 0x00007ffff7ad4f9e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 CleverRaven#5 0x0000555556536759 in std::vector<string_id<profession>, std::allocator<string_id<profession> > >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1130 CleverRaven#6 std::vector<string_id<profession>, std::allocator<string_id<profession> > >::operator[] (this=<optimized out>, __n=<optimized out>) at /usr/include/c++/14/bits/stl_vector.h:1128 CleverRaven#7 0x000055555653609b in operator() (__closure=0x555558499bd0, ui=...) at src/newcharacter.cpp:2544 CleverRaven#8 0x00005555569d5a09 in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:448 CleverRaven#9 0x00005555569d5ac7 in ui_adaptor::redraw () at src/ui_manager.cpp:353 CleverRaven#10 0x00005555569d5aee in ui_manager::redraw () at src/ui_manager.cpp:516 CleverRaven#11 0x00005555567242cd in query_popup::query_once (this=this@entry=0x7fffffff6890) at src/popup.cpp:295 CleverRaven#12 0x0000555556724b9f in query_popup::query (this=this@entry=0x7fffffff6890) at src/popup.cpp:405 CleverRaven#13 0x000055555664b8ff in popup (text="Nothing found.", flags=flags@entry=PF_NONE) at src/output.cpp:993 CleverRaven#14 0x0000555555aadb73 in popup<>(char const*) (mes=mes@entry=0x555556b4cd0a "Nothing found.") at src/output.h:529 CleverRaven#15 0x0000555556529731 in filter_entries<string_id<profession>, <unnamed struct> >(avatar &, int &, std::vector<string_id<profession>, std::allocator<string_id<profession> > > &, std::vector<string_id<profession>, std::allocator<string_id<profession> > > &, std::string, struct {...}, string_id<profession>) (u=..., cur_id=@0x7fffffff6ba4: 0, old_entries=std::vector of length 0, capacity 185, new_entries=std::vector of length 185, capacity 185 = {...}, filterstring="999", sorter=..., chosen_entry=...) at src/newcharacter.cpp:2415 CleverRaven#16 0x0000555556531f9b in set_profession (tabs=..., u=..., pool=<optimized out>) at src/newcharacter.cpp:2598 CleverRaven#17 avatar::create (this=this@entry=0x5555583e4150, type=type@entry=character_type::CUSTOM, tempname="") at src/newcharacter.cpp:837 CleverRaven#18 0x0000555556242bc0 in main_menu::new_character_tab (this=this@entry=0x7fffffffd9f0) at src/main_menu.cpp:1028 CleverRaven#19 0x0000555556245326 in main_menu::opening_screen (this=this@entry=0x7fffffffd9f0) at src/main_menu.cpp:884 CleverRaven#20 0x00005555557feb01 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:857 (gdb) frame 7 CleverRaven#7 0x000055555653609b in operator() (__closure=0x55557a911460, ui=...) at src/newcharacter.cpp:2544 2544 if( u.prof != &sorted_profs[i].obj() ) { (gdb) print i $1 = 0 (gdb) print sorted_profs $2 = std::vector of length 0, capacity 185 (gdb) print iStartPos $3 = (int &) @0x7fffffff6bc0: 0 (gdb) print end_pos $4 = 59 (gdb) print profs_length $5 = (size_t &) @0x7fffffff6c08: 185 (gdb) print iContentHeight $6 = (size_t &) @0x7fffffff6be0: 59 ```
Maleclypse
added a commit
that referenced
this pull request
Jan 18, 2025
* adjust dreaming spell xp requirements * remove old xp eoc * Add max book learn value and use for dream magic type * method definition fix * add casting_xp_formula_id which calculates how much xp is gained per cast and add a simple use for dream magic * add failure cost percent field * dream spells use 10% mana on failure * add failure_eocs field to magic_type * add failure_exp_percent and make dream magic give full xp on failure * astyle * documentation * Fix Conflict (#2) * Make storage unit pallete and array of objects All of the other JSON in data/json is. * Gun variants: Better common token & dupe checking Require at least 3 letters for common tokens, with some explicit exceptions. It might be worth going to 4 letters, but going to 3 cleaned up some issues. Also make the dupe check an actual error (resulting in test failure) than just a silent one. The guns caught by the dupe check are allowed as separate by the variant criteria, but it may be being too lenient there and they should instead be combined. Fix the errors that surfaced. - two guns had 16" and 20" barrels, name the longer one long-barreled - Two revolvers (chiappa_rhino and colt_python) were named the same, name the python to indicate it looks like a old west revolver - Name the BLR magazine with a common identifier to the the gun - Give the FN57 an identifier (FN) - Add pistol to BAD_IDENTIFIERS, so the USP identifier is detected Both the FN57 and USP pistol were using "pistol" as the identifier. The BLR was using "ing". * Sort gun variant script valid identifier list So it's stable and looks nicer. * Remove some unused CBM snippets * Reuse built clang-tidy plugin across the shards * makes lit candle more distinct * Update NPC.md * Initial commit * Fire action accounts for all kinds of shoulder straps I've noticed only "adjustable strap" works with the fire action to drawn weapon, and only with default format (hanging like backpack). Happens that code checks for that specific item. Solution is to check for a flag instead, and so works with all kinds of attachments * initial commit * A couple small C++20 fixes * Add versioning to vcpkg setup * make xedra translocators examinable in faction territory * Set SDL_HINT_APP_NAME for tiles See https://wiki.libsdl.org/SDL2/SDL_HINT_APP_NAME * [Xedra Evolved] Add `fey_magick` magic type (#79113) * Initial commit * Add NO_SPELLCASTING to flags too * Focus the default selection in popups * [Magiclysm] Biomancy is disturbing (#79117) * Initial commit * Add pain effects to some spells * Reduce amount of pain caused * Fix scroll name * Fix ClangBuildAnalyzer workflow * [MoM] Fix Mind-sight goggles special vision sprite (#79119) * Extended description window shows potential deconstruction and bash yields (#79107) * Basic addition of deconstruction yields to extended description * Deduplicate and add skill info * Add bash yields replacing the Smashable tag * Add the extended description keybind text to the look around window * Less lazy formatting * [Xedra Evolved] Increase mana cost on Arvore mana-using traits (#79096) * Remove ghc/filesystem polyfill now that we are on C++17 (#79092) * Remove ghc/filesystem shim now that we are on C++17 * fixies * astyle * teach clang-tidy about <filesystem> * Battery compartment mod can use medium storage batteries (#79091) * Update toolmod.json * Lint --------- Co-authored-by: Anton Simakov <[email protected]> * [MoM] Fix Leukocyte Accumulation class (#79123) * Initial commit * Add magic class * remove const from distance_limit * [Xedra Evolved] Fix treesung baselard recipe (#79131) * Extract special vision descriptions for translation (#79108) * Extract special vision descriptions for translation * Add includes * Add origin arguments * Attempt to appease flake8 * Missed iterating an array * Fix typo * Our flake8 makes me want to commit war crimes * Fix various flake8 errors * Weekly Changelog 2025-01-06 to 2025-01-13 (#79127) * Weekly Changelog 2025-01-06 to 2025-01-13 * Apply suggestions from code review --------- Co-authored-by: David Seguin <[email protected]> Co-authored-by: Maleclypse <[email protected]> * {CR} Adds three new lore log snippets! (#79058) * new lore log snippets (draft) the lore log snippets are one of my favorite things to be featured in cataclysm, and I wanted to write some of my own! * Update e_logs.json * Add three new lore log snippets * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * lint changes * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * Update data/json/snippets/e_logs.json Co-authored-by: Procyonae <[email protected]> * Update data/json/snippets/e_logs.json * replace 3 spaces with 2 spaces --------- Co-authored-by: Procyonae <[email protected]> Co-authored-by: Anton Simakov <[email protected]> Co-authored-by: Maleclypse <[email protected]> * Weekly Changelog 2024-12-30 to 2025-01-06 (#78977) * Weekly Changelog 2024-12-30 to 2025-01-06 * Apply suggestions from code review --------- Co-authored-by: David Seguin <[email protected]> Co-authored-by: Maleclypse <[email protected]> Co-authored-by: Anton Simakov <[email protected]> * Fix Irradiant weapon attack * Move refugee center start from isolationist to its own scenario (#79140) * Change to start outside refugee center entrance * Move refugee center start to its own option * Starting on path by entrance * use test monsters in shotgun tests (#79141) * use test monsters * Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Don't try to GENERATE typed coordinates (#79137) * Don't try to GENERATE typed coordinates * Adjusted according to comments * [MoM] Add null grenades (#79147) * Initial commit * Add expended grenades * Add snippet * Change id to avoid confusion with _null terrain etc * Create user mods dir automatically. (#79057) * mod manager * Update src/mod_manager.cpp Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: Maleclypse <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * [Magiclysm] Fix werewolf aura (#79151) * Initial commit * Fixes * typified a-f * [Magiclysm] Rename 'Introduction to the Divine' to 'The Limits of Magical Recovery' (#79153) * Initial commit * Itemgroup changes * Update data/mods/Magiclysm/items/spellbooks.json --------- Co-authored-by: Anton Simakov <[email protected]> * Aftershock: Genetech Mutation system or Genetically engineered Catgirls. (#79128) * Aftershock Genetech * Apply suggestions from code review Co-authored-by: Marc <[email protected]> --------- Co-authored-by: Anton Simakov <[email protected]> Co-authored-by: Marc <[email protected]> * [Aftershock] Add human++ genemods (#79149) * Add genemods * Add hobbies * Add Genemod: Beauty * Fix errors * Spelling * [Aftershock] UICA Shuttle Bases (#79144) * Add UICA Shuttlebases to the Exo-Planet * Lint * Add a Quartermaster NPC. They can be bribed to sell you UICA gear and supplies. * Lint * Add Lynx Explorer Vehicle, Quartermaster has less stuff to sell, Shuttlebase spawns ground vehicles * Add Vehicle Repair group stub * Bump up Bribe to $3000 * Rewrite some Quartermaster dialog * Please test gods * Test gods please, I beg * Correct Shuttlebase to Shuttle Base * [ Xedrea Evolved ] Gracken Legs first tier (#79122) * Legs first tier Update harvest_monster_hunter_gracken.json * Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update data/mods/Xedra_Evolved/items/gracken_trait_improvements.json --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Anton Simakov <[email protected]> * Sort docs into subfolders * update paths to moved docs * better name for LORE_FAQ doc, as suggested by Kevin (thanks!) * [MoM] Concentrating on powers at higher Nether Attunement has a chance of backlash (#79163) * Initial commit * Check for backlash on concentration breaking too. * Change backlash messages to not reference unleashing powers * Nether Attunement vitamin at 15 or higher, not powers maintained at 15 or higher * Spelling * Temporary script to automate this * Remove meaningless weight fields * Fix compile error, remove unneeded string initialisation, correct translation, don't write required mutation string if we're about to overwrite it with incompatible bionics * Update skyscraper_lab_modular.json * monstergroups "name" -> "id" in /data/json * Commit the script so out of repo + personal mods can use it * monstergroups "name" -> "id" in /data/mods * Update deserialisation * Get annoyed at flake8 * Put the script in the wrong folder like a numpty * Fix MSVC build with lld linker * Add an ignorable error and legacy load * flake8 is rood * Change C++ ids called "name" to something better too * Rename doc/COMPILING/ -> doc/c++/ * Remove string spawn item overloads (#79173) * Remove evil overloads * Deal with fallout * Rename map:: get_global->get_abs, bub_from_abs->get_bub, omt_from_abs->get_omt (#79167) * Renamed map:: getglobal->get_abs, bub_from_abs->get_bub, omt_from_abs->get_omt * astyle * [Magiclysm] Remove duplicate religious professions (#79162) * Update professions.json * Redirect Lost Faith to vanilla professions, add books * Reformat item field? * Update data/mods/Magiclysm/scenarios.json * Add scenario EoC * Remove debug message * Kick tests --------- Co-authored-by: Anton Simakov <[email protected]> * [ Xedra Evolved ] Fix Renfield Drops (#79166) * typify game.h/cpp * use typed point in android code * Use sub_bodypart_str_id::NULL_ID() where appropriate * Add attack_vector_id::NULL_ID() * typify g - lightmap * [MoM] Update and simplify Nether Attunement backlash EoC (#79175) * More updates * More edits * Updating remaining effects * Initial commit * Initial commit * Expand bodypart_str_id::NULL_ID() usage where appropriate * Deal with /tests fallout * Initial commit * please clang * Add CMake function do debug targets * Add targets with dynamic linking * Use VCPKG dynamic linking triplet * Obey linter * Apply review suggestions * Fix Debug configuration linking with MSVS + LLD * Fix zlib linking * Prevent initialising an activity actor's type every turn it's active * [MoM] Fix Research Facility having an oldlab underneath (#79191) * Initial commit * Implement suggestions from code review * fix not being able to move items with charges with AIM (#79183) * fix can move items with charges * astyle --------- Co-authored-by: marilynias <[email protected]> * [Aftershock] Gene Clinics (#79197) * Implement Gene Clinic variant 1 * Renovate Clinic to Add service room. Add Murder Bots and Moxies. Implement powered down gene editor * Add most of the item spawn groups * Add item groups, Monster Spawns, and Mapgen Nests * Add trash to the ground in looted variant. Adjust spawn rates of looted vrs unlooted to 60-40 in the players favor * Geneclinics also spawn without the Exo-Planet * Remove redudant spawn of the larger genetech disposable group, low tier already spawns worker and combat rarely * Mapgen now correctly murders plants when power is out * String fixes for test gods * Slime body can't hold cbms (#79086) * [MoM] Switch mi-go psions to copy-from, giver the mindrender a power-based telepathic attack (#79199) * Initial commit * Kick tests * [Aftershock] Ensure Outfitter always has at least one full EVA suit (#79218) * Outfitter always has at least one full suit. * Lint Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update fema_evacuee_1.json (#79203) --------- Co-authored-by: anothersimulacrum <[email protected]> Co-authored-by: Sab Pyrope <[email protected]> Co-authored-by: moxian <[email protected]> Co-authored-by: gettingusedto <[email protected]> Co-authored-by: EliadOArias <[email protected]> Co-authored-by: Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm <[email protected]> Co-authored-by: Andrew Rosa <[email protected]> Co-authored-by: GuardianDll <[email protected]> Co-authored-by: Dee Anzorge <[email protected]> Co-authored-by: Standing-Storm <[email protected]> Co-authored-by: Maleclypse <[email protected]> Co-authored-by: Anton Simakov <[email protected]> Co-authored-by: Procyonae <[email protected]> Co-authored-by: gisaku33 <[email protected]> Co-authored-by: Kevin Granade <[email protected]> Co-authored-by: David Seguin <[email protected]> Co-authored-by: 7erracotta <[email protected]> Co-authored-by: John Candlebury <[email protected]> Co-authored-by: Further Reading <[email protected]> Co-authored-by: osuphobia <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: PatrikLundell <[email protected]> Co-authored-by: EArias <[email protected]> Co-authored-by: Marc <[email protected]> Co-authored-by: akrieger <[email protected]> Co-authored-by: mqrause <[email protected]> Co-authored-by: alef <[email protected]> Co-authored-by: marilynias <[email protected]> Co-authored-by: marilynias <[email protected]> Co-authored-by: Risuga <[email protected]> * clang stuff --------- Co-authored-by: anothersimulacrum <[email protected]> Co-authored-by: Sab Pyrope <[email protected]> Co-authored-by: moxian <[email protected]> Co-authored-by: gettingusedto <[email protected]> Co-authored-by: EliadOArias <[email protected]> Co-authored-by: Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm <[email protected]> Co-authored-by: Andrew Rosa <[email protected]> Co-authored-by: GuardianDll <[email protected]> Co-authored-by: Dee Anzorge <[email protected]> Co-authored-by: Standing-Storm <[email protected]> Co-authored-by: Maleclypse <[email protected]> Co-authored-by: Anton Simakov <[email protected]> Co-authored-by: Procyonae <[email protected]> Co-authored-by: gisaku33 <[email protected]> Co-authored-by: Kevin Granade <[email protected]> Co-authored-by: David Seguin <[email protected]> Co-authored-by: 7erracotta <[email protected]> Co-authored-by: John Candlebury <[email protected]> Co-authored-by: Further Reading <[email protected]> Co-authored-by: osuphobia <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: PatrikLundell <[email protected]> Co-authored-by: EArias <[email protected]> Co-authored-by: Marc <[email protected]> Co-authored-by: akrieger <[email protected]> Co-authored-by: mqrause <[email protected]> Co-authored-by: alef <[email protected]> Co-authored-by: marilynias <[email protected]> Co-authored-by: marilynias <[email protected]> Co-authored-by: Risuga <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Somewhere at the forum someone wished about flowers at the field. This idea is really good:
Negative effect from poppy odor might be avoided by wearing a gas mask by now.
P.S. It compiles for me...