Text  |   XML   |   Visible Warnings:

Irssi : Irssi analysis 1 : Null Pointer Dereference  at irc-channels.c:123

Categories: LANG.MEM.NPD CWE:476
Warning ID: 2162.2166
Procedure: irc_channels_join
Trace: View
Modified: Wed Sep 2 11:51:39 2009   show details
 
Priority: None
State: None
Finding: None
Owner: None
  edit properties

Legend [ X ]
Warning Location
Contributes
Parse Error
Other Warning
Two or More Loop Iterations
On Execution Path
Comment
Macro
Preprocessor
Include
Keyword
Preprocessed Away

Source  |  Language: C Hide Legend     
ProblemLineSource
   /u1/paul/SATE/2010/c/irssi/irssi-0.8.14/src/irc/core/irc-channels.c
   Enter irc_channels_join
 66 static void irc_channels_join(IRC_SERVER_REC *server, const char *data,
 67                               int automatic) 
 68 {
 69         CHANNEL_SETUP_REC *schannel;
 70         IRC_CHANNEL_REC *chanrec;
 71         GString *outchans, *outkeys;
 72         char *channels, *keys, *key, *space;
 73         char **chanlist, **keylist, **tmp, **tmpkey, **tmpstr, *channel, *channame;
 74         void *free_arg;
 75         int use_keys, cmdlen;
 76  
 77         g_return_if_fail(data != NULL);
 78         g_return_if_fail(IS_IRC_SERVER(server) && server->connected);
 79         if (*data == '\0') return;
 80  
 81         if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST,
 82                             &channels, &keys))
 83                 return;
 84  
 85         /* keys shouldn't contain space */ 
 86         space = strchr(keys, ' ');
 87         if (space != NULL) {
 88                 *space = '\0';
 89         }
 90  
 91         chanlist = g_strsplit(channels, ",", -1);
 92         keylist = g_strsplit(keys, ",", -1);
 93  
 94         outchans = g_string_new(NULL);
 95         outkeys = g_string_new(NULL);
 96  
 97         use_keys = *keys != '\0';
 98         tmpkey = keylist;
 99         tmp = chanlist;
 100         for (;; tmp++) {
 101                 if (*tmp !=  NULL) {
 102                         channel = ischannel(**tmp) ? g_strdup(*tmp) : 
 103                         g_strdup_printf("#%s", *tmp);
 104  
 105                         chanrec = irc_channel_find(server, channel);
 106                         if (chanrec == NULL) {
 107                                 schannel = channel_setup_find(channel, server->connrec->chatnet);
 108  
 109                                 g_string_append_printf(outchans, "%s,", channel);
 110                                 if (*tmpkey != NULL && **tmpkey != '\0')
 111                                         key = *tmpkey;
 112                                 else if (schannel != NULL && schannel->password != NULL) {
 113                                         /* get password from setup record */ 
 114                                         use_keys = TRUE;
 115                                         key = schannel->password;
 116                                 } else key = NULL;
 117                                  
 118                                 g_string_append_printf(outkeys, "%s,", get_join_key(key));
 119                                 channame = channel + (channel[0] == '!' &&   /* Null Pointer Dereference (ID: 2163.2167) */
 120                                                       channel[1] == '!');
 121                                 chanrec = irc_channel_create(server, channame, NULL,
true122                                                              automatic);
chanrec <= 4095123                                 if (key != NULL) chanrec->key = g_strdup(key);     /* Null Pointer Dereference */
 124                         }
 125                         g_free(channel);
 126  
 127                         if (*tmpkey != NULL)
 128                                 tmpkey++;
 129          
 130                         tmpstr = tmp;
 131                         tmpstr++;
 132                         cmdlen = outchans->len-1;
 133                          
 134                         if (use_keys)
 135                                 cmdlen += outkeys->len;
 136                         if (*tmpstr != NULL)
 137                                 cmdlen += ischannel(**tmpstr) ? strlen(*tmpstr) : 
 138                                           strlen(*tmpstr)+1;
 139                         if (*tmpkey != NULL)
 140                                 cmdlen += strlen(*tmpkey);
 141                                  
 142                         /* don't try to send too long lines 
 143                            make sure it's not longer than 510 
 144                            so 510 - strlen("JOIN ") = 505 */ 
 145                         if (cmdlen < 505)
 146                                 continue;
 147                 }
 148                 if (outchans->len > 0) {
 149                         g_string_truncate(outchans, outchans->len-1);
 150                         g_string_truncate(outkeys, outkeys->len-1);
 151                         irc_send_cmdv(IRC_SERVER(server),
 152                                       use_keys ? "JOIN %s %s" : "JOIN %s",
 153                                       outchans->str, outkeys->str);
 154                 }
 155                 cmdlen = 0;
 156                 g_string_truncate(outchans,0);
 157                 g_string_truncate(outkeys,0);
 158                 if (*tmp == NULL || tmp[1] == NULL)
Preconditions
&$unknown_363488 <= &$unknown_363487
((char*)$param_1)[56] != 0
((char*)((char*)$unknown_363496)[8])[16] >= 0
*$param_2 != 0
strlen($param_2) != 0
((char*)*((char*)$unknown_363496)[8])[24] = 0
strlen(((char*)((char*)$unknown_363496)[8])[24]) = 0
((char*)$unknown_363487)[8] = 43
strlen(((char*)&$unknown_363487)[8]) != 0
*$unknown_363497 = 0
strlen($unknown_363497) = 0
$unknown_363484 != 0
strlen(&$unknown_363484) != 0
((char*)&$unknown_363488)[8] >= 0
$unknown_363494 != 33
Postconditions
_g_boolean_var_' = 1
_g_boolean_var_' = 1
automatic' = $param_3
chanlist' = &$unknown_363488
channame' = &$unknown_363494
channel' = &$unknown_363494
channels' = &$unknown_363482
chanrec' = 0
data' = $param_2
key' = ((char*)((char*)$unknown_363496)[8])[24]
keylist' = &$unknown_363491
keys' = &$unknown_363484
outchans' = &$unknown_363490
outkeys' = &$unknown_363498
schannel' = ((char*)$unknown_363496)[8]
server' = $param_1
space' = 0
tmp' = &$unknown_363487 + 8
tmpkey' = &$unknown_363497
tmpstr' = &$unknown_363487 + 8
use_keys' = 1




Change Warning 2162.2166 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: