Text  |   XML   |   Visible Warnings:

irssi-0.8.14 : irssi-0.8.14 analysis 2 : Null Pointer Dereference  at misc.c:102

Categories: LANG.MEM.NPD CWE:476
Warning ID: 7227.28308
Procedure: g_timeval_cmp
Trace: view
Modified: Thu Nov 26 11:08:37 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
   /kat0/fletcher/SATE/2010/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: 7229.28310) */
 120                                                       channel[1] == '!');
 121                                 chanrec = irc_channel_create(server, channame, NULL,
 122                                                              automatic);
 123                                 if (key != NULL) chanrec->key = g_strdup(key);   /* Null Pointer Dereference (ID: 7228.28309) */
 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",
true153                                       outchans->str, outkeys->str);
     /kat0/fletcher/SATE/2010/irssi-0.8.14/src/irc/core/irc.c
     Enter irc_channels_join / irc_send_cmdv
 120   void irc_send_cmdv(IRC_SERVER_REC *server, const char *cmd, ...) 
 121   {
 122           va_list args;
 123           char *str;
 124    
 125           va_start(args, cmd);
 126    
 127           str = g_strdup_vprintf(cmd, args);
server <= 3883128           irc_send_cmd(server, str);
       Enter irc_channels_join / irc_send_cmdv / irc_send_cmd
 106     void irc_send_cmd(IRC_SERVER_REC *server, const char *cmd) 
 107     {
 108             GTimeVal now;
 109             int send_now;
 110      
 111             g_get_current_time(&now);
server <= 3883112             send_now = g_timeval_cmp(&now, &server->wait_cmd) >= 0 && 
         /kat0/fletcher/SATE/2010/irssi-0.8.14/src/core/misc.c
         Enter irc_channels_join / irc_send_cmdv / irc_send_cmd / g_timeval_cmp
 100       int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2) 
 101       {
tv2 <= 4095102               if (tv1->tv_sec < tv2->tv_sec)     /* Null Pointer Dereference */  /* 3 more... */
         Exit irc_channels_join / irc_send_cmdv / irc_send_cmd / g_timeval_cmp
       Exit irc_channels_join / irc_send_cmdv / irc_send_cmd
     Exit irc_channels_join / irc_send_cmdv
 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_214786 <= &$unknown_214785
&$unknown_214798 >= 505
tv1[4].tv_sec != 0
((char*)setupchannels->data)[12] >= 0
tv2->tv_sec != 0
strlen(tv2) != 0
((char*)*setupchannels->data)[16] = 0
strlen(((char*)setupchannels->data)[16]) = 0
((char*)$unknown_214785)[4] = 35
strlen(((char*)&$unknown_214785)[4]) != 0
*$unknown_214792 = 0
strlen($unknown_214792) = 0
$unknown_214783 = 0
strlen(&$unknown_214783) = 0
((char*)&$unknown_214785)[8] = 0
((char*)&$unknown_214786)[4] >= 0
((char*)&$unknown_214787)[4] >= 1
$unknown_214790 = 33
strlen(&$unknown_214790) != 0
((char*)&$unknown_214790)[1] != 33
Postconditions
_g_boolean_var_' = 1
_g_boolean_var_' = 1
args' = &__builtin_va_alist
chanlist' = &$unknown_214786
channame' = &$unknown_214790
channel' = &$unknown_214790
channels' = &$unknown_214784
cmd' = &#string12[0]
cmdlen' = &$unknown_214798
key' = ((char*)setupchannels->data)[16]
keylist' = &$unknown_214789
keys' = &$unknown_214783
outchans' = &$unknown_214787
outkeys' = &$unknown_214793
schannel' = setupchannels->data
server' = 0
server' = 0
space' = 0
str' = cmd'
tmp' = &$unknown_214785 + 4
tmpkey' = &$unknown_214792 + 4
tmpstr' = &$unknown_214785 + 8
tv1' = &now.tv_sec
tv2' = 212
use_keys' = 1




Change Warning 7227.28308 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: