Text  |   XML   |   Visible Warnings:

Irssi : Irssi analysis 1 : Null Pointer Dereference  at misc.c:102

Categories: LANG.MEM.NPD CWE:476
Warning ID: 2203.2208
Procedure: g_timeval_cmp
Trace: View
Modified: Wed Sep 2 11:52:26 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/dcc/dcc-send.c
   Enter dcc_queue_send_next
 45 static void dcc_queue_send_next(int queue) 
 46 {
 47         IRC_SERVER_REC *server;
 48         DCC_QUEUE_REC *qrec;
 49         int send_started = FALSE;
 50  
 51         while ((qrec = dcc_queue_get_next(queue)) != NULL && !send_started) {
 52                 server = qrec->servertag == NULL ? NULL : 
 53                         IRC_SERVER(server_find_tag(qrec->servertag));
 54  
 55                 if (server == NULL && qrec->chat == NULL) {
 56                         /* no way to send this request */ 
 57                         signal_emit("dcc error send no route", 2,
 58                                     qrec->nick, qrec->file);
 59                 } else {
 60                         send_started = dcc_send_one_file(queue, qrec->nick,
 61                                                          qrec->file, server,
 62                                                          qrec->chat,
true63                                                          qrec->passive);
     Enter dcc_queue_send_next / dcc_send_one_file
 360   static int dcc_send_one_file(int queue, const char *target, const char *fname,
 361                                IRC_SERVER_REC *server, CHAT_DCC_REC *chat,
 362                                int passive) 
 363   {
 364           struct stat st;
 365           char *str;
 366           char host[MAX_IP_LEN];
 367           int hfile, port = 0;
 368           SEND_DCC_REC *dcc;
 369           IPADDR own_ip;
 370           GIOChannel *handle;
 371    
 372           if (dcc_find_request(DCC_SEND_TYPE, target, fname)) {
 373                   signal_emit("dcc error send exists", 2, target, fname);
 374                   return FALSE;
 375           }
 376    
 377           str = dcc_send_get_file(fname);
 378           hfile = open(str, O_RDONLY);
 379           g_free(str);
 380    
 381           if (hfile == -1) {
 382                   signal_emit("dcc error file open", 3, target, fname,
 383                               GINT_TO_POINTER(errno));
 384                   return FALSE;
 385           }
 386    
 387           if (fstat(hfile, &st) < 0) {
 388                   g_warning("fstat() failed: %s", strerror(errno));
 389                   close(hfile);
 390                   return FALSE;
 391           }
 392    
 393           /* start listening (only if passive == FALSE )*/ 
 394    
 395           if (passive == FALSE) {
 396                   handle = dcc_listen(chat != NULL ? chat->handle : 
 397                                       net_sendbuffer_handle(server->handle),
 398                                       &own_ip, &port);
 399                   if (handle == NULL) {
 400                           close(hfile);
 401                           g_warning("dcc_listen() failed: %s", strerror(errno));
 402                           return FALSE;
 403                   }
 404           } else {
 405                   handle = NULL;
 406           }
 407    
 408           fname = g_basename(fname);
 409    
 410           /* Replace all the spaces with underscore so that lesser 
 411              intelligent clients can communicate.. */ 
 412           if (!settings_get_bool("dcc_send_replace_space_with_underscore"))
 413                   str = NULL;
 414           else {
 415                   str = g_strdup(fname);
 416                   g_strdelimit(str, " ", '_');
 417                   fname = str;
 418           }
 419    
 420           dcc = dcc_send_create(server, chat, target, fname);
 421           g_free(str);
 422    
 423           dcc->handle = handle;
 424           dcc->port = port;
 425           dcc->size = st.st_size;
 426           dcc->fhandle = hfile;
 427           dcc->queue = queue;
 428           dcc->file_quoted = strchr(fname, ' ') != NULL;
 429           if (!passive) {
 430                   dcc->tagconn = g_input_add(handle, G_INPUT_READ,
 431                                              (GInputFunction) dcc_send_connected,   /* Dangerous Function Cast (ID: 623.623) */
 432                                              dcc);
 433           }
 434    
 435           /* Generate an ID for this send if using passive protocol */ 
 436           if (passive) {
 437                   dcc->pasv_id = rand() % 64;
 438           }
 439        
 440           /* send DCC request */ 
 441           signal_emit("dcc request send", 1, dcc);
 442    
 443        
 444           dcc_ip2str(&own_ip, host);
 445           if (passive == FALSE) {
 446                   str = g_strdup_printf(dcc->file_quoted ? 
 447                                         "DCC SEND \"%s\" %s %d %"PRIuUOFF_T : 
 448                                         "DCC SEND %s %s %d %"PRIuUOFF_T,
 449                                         dcc->arg, host, port, dcc->size);
 450           } else {
 451                   str = g_strdup_printf(dcc->file_quoted ? 
 452                                         "DCC SEND \"%s\" 16843009 0 %"PRIuUOFF_T" %d" : 
 453                                         "DCC SEND %s 16843009 0 %"PRIuUOFF_T" %d",
 454                                         dcc->arg, dcc->size, dcc->pasv_id);
 455           }
true456           dcc_ctcp_message(server, target, chat, FALSE, str);
       /u1/paul/SATE/2010/c/irssi/irssi-0.8.14/src/irc/dcc/dcc-chat.c
       Enter dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message
 144     void dcc_ctcp_message(IRC_SERVER_REC *server, const char *target,
 145                           CHAT_DCC_REC *chat, int notice, const char *msg) 
 146     {
 147             char *str;
 148             char *recoded;
 149      
 150             if (chat != NULL && chat->sendbuf != NULL) {
 151                     /* send it via open DCC chat */ 
 152                     recoded = recode_out(SERVER(server), msg, chat->nick);
 153                     str = g_strdup_printf("%s\001%s\001", chat->mirc_ctcp ? "" : 
 154                                           notice ? "CTCP_REPLY " : 
 155                                           "CTCP_MESSAGE ", recoded);
 156                     dcc_chat_send(chat, str);
 157                     g_free(str);
 158             } else {
true159                     recoded = recode_out(SERVER(server), msg, target);
 160                     irc_send_cmdv(server, "%s %s :\001%s\001",
server <= 3711161                                   notice ? "NOTICE" : "PRIVMSG", target, recoded);
         /u1/paul/SATE/2010/c/irssi/irssi-0.8.14/src/irc/core/irc.c
         Enter dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message / irc_send_cmdv
$param_1 <= 3711120       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 <= 3711128               irc_send_cmd(server, str);
           Enter dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message / irc_send_cmdv / irc_send_cmd
$param_1 <= 3711106         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 <= 3711112                 send_now = g_timeval_cmp(&now, &server->wait_cmd) >= 0 && 
             /u1/paul/SATE/2010/c/irssi/irssi-0.8.14/src/core/misc.c
             Enter dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message / irc_send_cmdv / irc_send_cmd / g_timeval_cmp
$param_2 <= 4095100           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 dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message / irc_send_cmdv / irc_send_cmd / g_timeval_cmp
           Exit dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message / irc_send_cmdv / irc_send_cmd
         Exit dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message / irc_send_cmdv
       Exit dcc_queue_send_next / dcc_send_one_file / dcc_ctcp_message
     Exit dcc_queue_send_next / dcc_send_one_file
 64                 }
 65                 dcc_queue_remove_head(queue);
Preconditions
&$unknown_543124 != 0
&$unknown_543132 != 0
&$heap_1331 = 4096
((char*)$unknown_543120)[208] = 0
((char*)$unknown_543120)[8] != 0
strlen(((char*)&$unknown_543120)[8]) != 0
((char*)&$unknown_543131)[232] != 0
mainconfig = 0
$input_12 >= 0
Postconditions
$unknown_543123' is opened
args' = &__builtin_va_alist
chat' = $unknown_543120
chat' = $unknown_543120
cmd' = &#string18[0]
dcc' = &$unknown_543131
errno' >= 1
handle' = 0
$heap_1331' is allocated by open
$heap_1331' is allocated
((char*)&$heap_1331)[-4096]' is open
hfile' = &$heap_1331 - 4096
msg' = &$unknown_543132
notice' = 0
passive' = &$unknown_543124
port' = 0
qrec' = &$unknown_543120
queue' = $param_1
queue' = $param_1
send_started' = 0
server' = 0
server' = 0
server' = 0
server' = 0
server' = 0
str' = cmd'
str' = &$unknown_543132
target' = target'
tv1' = &now.tv_sec
tv2' = 384




Change Warning 2203.2208 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: