View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001675 | unreal | ircd | public | 2004-03-22 11:55 | 2004-03-22 16:38 |
Reporter | AngryWolf | Assigned To | |||
Priority | normal | Severity | crash | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Platform | Linux | OS | SuSE | OS Version | 8.2 |
Product Version | 3.2-RC2 | ||||
Summary | 0001675: Crash bug with extended channel modes and set::modes-on-join | ||||
Description | From file Changes: - Made it so set::modes-on-join correctly works with extcmodes. Note: to correctly work with modes created by modules, the module _must_ call CmodeAdd from Mod_Test (0001624) reported by thunderbirdjl This change introduced a new crash bug which darkseid reported to me recently. Details sent in section "Additional information". | ||||
Steps To Reproduce | 1. Load a module that adds an extended channel mode. 2. Do /stats S | ||||
Additional Information | [angrywolf@localhost Server1]$ gdb GNU gdb 5.3 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i586-suse-linux". (gdb) file src/ircd Reading symbols from src/ircd...done. (gdb) set args -F (gdb) break chmode_str Breakpoint 1 at 0x8072af9: file s_conf.c, line 877. (gdb) run Starting program: /home/angrywolf/IRC/IRCNetwork/Server1/src/ircd -F (...) v3.2-RC2fix using OpenSSL 0.9.6i [engine] Feb 19 2003 using zlib 1.1.4 using libcurl/7.11.0 OpenSSL/0.9.6i zlib/1.1.4 * Loading IRCd configuration .. * Configuration loaded without any problems .. * Loading tunefile.. * Initializing SSL. * Dynamic configuration initialized .. booting IRCd. --------------------------------------------------------------------- Breakpoint 1, chmode_str (modes= {mode = 0, extmodes = 0, extparams = {0x0 <repeats 32 times>}, floodprot = {per = 0, t = {0, 0, 0, 0, 0, 0}, c = {0, 0, 0, 0, 0, 0}, l = {0, 0, 0, 0, 0, 0}, a = "\0\0\0\0\0", r = "\0\0\0\0\0", timer_flags = 0}}, mbuf=0x8177520 "", pbuf=0x8177320 "") at s_conf.c:877 877 *pbuf = 0; (...) (gdb) next 890 if (!(Channelmode_Table[i].flag)) (gdb) p Channelmode_Table[i] $8 = {flag = 106 'j', mode = 2, paracount = 1, is_ok = 0x40016580 <ModeJT_is_ok>, put_param = 0x40016710 <ModeJT_put_param>, get_param = 0x40016790 <ModeJT_get_param>, conv_param = 0x400167f0 <ModeJT_conv_param>, free_param = 0x40016880 <ModeJT_free_param>, dup_struct = 0x400168b0 <ModeJT_dup_struct>, sjoin_check = 0x400168f0 <ModeJT_sjoin_check>} (gdb) next 893 if (modes.extmodes & Channelmode_Table[i].mode) (gdb) p modes.extmodes $9 = 0 (gdb) next 895 if (Channelmode_Table[i].paracount) (gdb) next 897 strcat(pbuf, modes.extparams[i]); (gdb) p pbuf $10 = 0x8177320 "" (gdb) p modes.extparams[i] $11 = 0x0 (gdb) next Program received signal SIGSEGV, Segmentation fault. 0x40200219 in strcat () from /lib/libc.so.6 (gdb) As you can see, channel mode +j was not specified in set::modes-on-join, but the function tries to srtcat its parameter, which is NULL. | ||||
Tags | No tags attached. | ||||
3rd party modules | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2004-03-22 11:55 | AngryWolf | New Issue | |
2004-03-22 16:38 |
|
Status | new => resolved |
2004-03-22 16:38 |
|
Resolution | open => fixed |
2004-03-22 16:38 |
|
Assigned To | => codemastr |
2004-03-22 16:38 |
|
Note Added: 0005575 |