Text  |   XML   |   Visible Warnings:

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

Categories: LANG.STRUCT.NTAD
Warning ID: 2160.2163
Similar Warnings: 2160.2164
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 */
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 (ID: 2160.2164) */
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.2163 : Null Test After Dereference

Because they are very similar, this warning shares annotations with warning 2160.2164.

Priority:
State:
Finding:
Owner:
Note: