Text  |   XML   |   Visible Warnings:

Irssi : Irssi analysis 1 : Null Test After Dereference  at channel-rejoin.c:101

Categories: LANG.STRUCT.NTAD
Warning ID: 2160.2164
Similar Warnings: 2160.2163
Procedure: channel_rejoin
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     
LineSource
  /u1/paul/SATE/2010/c/irssi/irssi-0.8.14/src/irc/core/channel-rejoin.c
  Enter channel_rejoin
71 static int channel_rejoin(IRC_SERVER_REC *server, const char *channel) 
72 {
73         IRC_CHANNEL_REC *chanrec;
74         REJOIN_REC *rec;
75  
76         g_return_val_if_fail(IS_IRC_SERVER(server), 0);
77         g_return_val_if_fail(channel != NULL, 0);
78  
79         chanrec = irc_channel_find(server, channel);
80         if (chanrec == NULL || chanrec->joined) return 0;
81  
82         if (!settings_get_bool("channels_rejoin_unavailable")) {
83                 chanrec->left = TRUE;
84                 channel_destroy(CHANNEL(chanrec));
85                 return 0;
86         }
87          
88         rec = rejoin_find(server, channel);
89         if (rec != NULL) {
90                 /* already exists */ 
91                 rec->joining = FALSE;
92  
93                 /* update channel key */ 
94                 g_free_and_null(rec->key);
95                 if (channel_have_key(chanrec))   /* Null Test After Dereference (ID: 2160.2163) */
96                         rec->key = g_strdup(chanrec->key);
97         } else {
98                 /* new rejoin */ 
99                 rec = g_new0(REJOIN_REC, 1);
100                 rec->channel = g_strdup(channel);
101                 if (channel_have_key(chanrec))     /* Null Test After Dereference */
102                         rec->key = g_strdup(chanrec->key);
103  
104                 server->rejoin_channels = 
105                         g_slist_append(server->rejoin_channels, rec);
106                 signal_emit("channel rejoin new", 2, server, rec);
107         }
108  
109         chanrec->left = TRUE;
110         channel_destroy(CHANNEL(chanrec));
111         return 1;
112 




Change Warning 2160.2164 : Null Test After Dereference

Because they are very similar, this warning shares annotations with warning 2160.2163.
CodeSonar has selected warning 2160.2163 to represent this group of similar warnings. In order to edit this group, you must edit warning 2160.2163.