View Issue Details

IDProjectCategoryView StatusLast Update
0001675unrealircdpublic2004-03-22 16:38
ReporterAngryWolf Assigned Tocodemastr 
PrioritynormalSeveritycrashReproducibilityalways
Status resolvedResolutionfixed 
PlatformLinuxOSSuSEOS Version8.2
Product Version3.2-RC2 
Summary0001675: Crash bug with extended channel modes and set::modes-on-join
DescriptionFrom 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 Reproduce1. 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.
TagsNo tags attached.
3rd party modules

Activities

codemastr

2004-03-22 16:38

reporter   ~0005575

Fixed in .2194

Issue History

Date Modified Username Field Change
2004-03-22 11:55 AngryWolf New Issue
2004-03-22 16:38 codemastr Status new => resolved
2004-03-22 16:38 codemastr Resolution open => fixed
2004-03-22 16:38 codemastr Assigned To => codemastr
2004-03-22 16:38 codemastr Note Added: 0005575