Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Prevent segfault when search gives no hits
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 #1 0x00007ffff778acef in __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:78 #2 0x00007ffff7736c42 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff771f4f0 in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007ffff7ad4f9e in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () from /lib/x86_64-linux-gnu/libstdc++.so.6 #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 #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 #7 0x000055555653609b in operator() (__closure=0x555558499bd0, ui=...) at src/newcharacter.cpp:2544 #8 0x00005555569d5a09 in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:448 #9 0x00005555569d5ac7 in ui_adaptor::redraw () at src/ui_manager.cpp:353 #10 0x00005555569d5aee in ui_manager::redraw () at src/ui_manager.cpp:516 #11 0x00005555567242cd in query_popup::query_once (this=this@entry=0x7fffffff6890) at src/popup.cpp:295 #12 0x0000555556724b9f in query_popup::query (this=this@entry=0x7fffffff6890) at src/popup.cpp:405 #13 0x000055555664b8ff in popup (text="Nothing found.", flags=flags@entry=PF_NONE) at src/output.cpp:993 #14 0x0000555555aadb73 in popup<>(char const*) (mes=mes@entry=0x555556b4cd0a "Nothing found.") at src/output.h:529 #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 #16 0x0000555556531f9b in set_profession (tabs=..., u=..., pool=<optimized out>) at src/newcharacter.cpp:2598 #17 avatar::create (this=this@entry=0x5555583e4150, type=type@entry=character_type::CUSTOM, tempname="") at src/newcharacter.cpp:837 #18 0x0000555556242bc0 in main_menu::new_character_tab (this=this@entry=0x7fffffffd9f0) at src/main_menu.cpp:1028 #19 0x0000555556245326 in main_menu::opening_screen (this=this@entry=0x7fffffffd9f0) at src/main_menu.cpp:884 #20 0x00005555557feb01 in main (argc=<optimized out>, argv=<optimized out>) at src/main.cpp:857 (gdb) frame 7 #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 ```
- Loading branch information