Text  |   XML   |   Visible Warnings:

irssi-0.8.14 : irssi-0.8.14 analysis 2 : Null Pointer Dereference  at formats.c:96

Categories: LANG.MEM.NPD CWE:476
Warning ID: 22021.28485
Procedure: format_expand_code
Trace: view
Modified: Thu Nov 26 11:16:56 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/perl/ui/Formats.c
   Enter XS_Irssi__UI__TextDest_print
 299 XS(XS_Irssi__UI__TextDest_print) 
 300 {
 301 #ifdef dVAR 
 302     dVAR; dXSARGS;
 303 #else 
 304     dXSARGS; 
 305 #endif 
 306     if (items != 2)
 307        Perl_croak(aTHX_ "Usage: %s(%s)", "Irssi::UI::TextDest::print", "dest, str");
 308     PERL_UNUSED_VAR(cv); /* -W */ 
 309     {
true310         Irssi__UI__TextDest     dest = irssi_ref_object(ST(0));
 311         char *  str = (char *)SvPV_nolen(ST(1));
 312 #line 136 "Formats.xs"
dest <= 4067313         printtext_dest(dest, "%s", str);
     /kat0/fletcher/SATE/2010/irssi-0.8.14/src/fe-common/core/printtext.c
     Enter XS_Irssi__UI__TextDest_print / printtext_dest
 312   void printtext_dest(TEXT_DEST_REC *dest, const char *text, ...) 
 313   {
 314           va_list va;
 315    
 316           va_start(va, text);
dest <= 4067317           printtext_dest_args(dest, text, va);
       Enter XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args
 297     static void printtext_dest_args(TEXT_DEST_REC *dest, const char *text, va_list va) 
 298     {
 299             char *str;
 300      
 301             if (!sending_print_starting) {
 302                     sending_print_starting = TRUE;
 303                     signal_emit_id(signal_print_starting, 1, dest);
 304                     sending_print_starting = FALSE;
 305             }
 306      
dest <= 4067307             str = printtext_get_args(dest, text, va);
         Enter XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args / printtext_get_args
 204       static char *printtext_get_args(TEXT_DEST_REC *dest, const char *str,
 205                                       va_list va) 
 206       {
 207               GString *out;
 208               char *ret;
 209        
 210               out = g_string_new(NULL);
 211               for (; *str != '\0'; str++) {
 212                       if (*str != '%') {
 213                               g_string_append_c(out, *str);
 214                               continue;
 215                       }
 216        
 217                       if (*++str == '\0')
 218                               break;
 219        
 220                       /* standard parameters */ 
 221                       switch (*str) {
 222                       case 's': {
 223                               char *s = (char *) va_arg(va, char *);
 224                               if (s && *s) printtext_append_str(dest, out, s);
 225                               break;
 226                       }
 227                       case 'd': {
 228                               int d = (int) va_arg(va, int);
 229                               g_string_append_printf(out, "%d", d);
 230                               break;
 231                       }
 232                       case 'f': {
 233                               double f = (double) va_arg(va, double);
 234                               g_string_append_printf(out, "%0.2f", f);
 235                               break;
 236                       }
 237                       case 'u': {
 238                               unsigned int d = 
 239                                       (unsigned int) va_arg(va, unsigned int);
 240                               g_string_append_printf(out, "%u", d);
 241                               break;
 242                       }
 243                       case 'l': {
 244                               long d = (long) va_arg(va, long);
 245        
 246                               if (*++str != 'd' && *str != 'u') {
 247                                       g_string_append_printf(out, "%ld", d);
 248                                       str--;
 249                               } else {
 250                                       if (*str == 'd')
 251                                               g_string_append_printf(out, "%ld", d);
 252                                       else 
 253                                               g_string_append_printf(out, "%lu", d);
 254                               }
 255                               break;
 256                       }
 257                       default: 
dest <= 4067258                               if (!format_expand_styles(out, &str, &dest->flags)) {
           /kat0/fletcher/SATE/2010/irssi-0.8.14/src/fe-common/core/formats.c
           Enter XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args / printtext_get_args / format_expand_styles
 104         int format_expand_styles(GString *out, const char **format, int *flags) 
 105         {
 106                 char *p, fmt;
 107          
 108                 fmt = **format;
 109                 switch (fmt) {
 110                 case '{': 
 111                 case '}': 
 112                 case '%': 
 113                         /* escaped char */ 
 114                         g_string_append_c(out, fmt);
 115                         break;
 116                 case 'U': 
 117                         /* Underline on/off */ 
 118                         g_string_append_c(out, 4);
 119                         g_string_append_c(out, FORMAT_STYLE_UNDERLINE);
           ...
 151                         break;
 152                 case '>': 
 153                         /* clear to end of line */ 
 154                         g_string_append_c(out, 4);
 155                         g_string_append_c(out, FORMAT_STYLE_CLRTOEOL);
 156                         break;
 157                 case '#': 
 158                         g_string_append_c(out, 4);
 159                         g_string_append_c(out, FORMAT_STYLE_MONOSPACE);
 160                         break;
 161                 case '[': 
 162                         /* code */ 
flags <= 4095163                         format_expand_code(format, out, flags);
             Enter XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args / printtext_get_args / format_expand_styles / format_expand_code
 65           static void format_expand_code(const char **format, GString *out, int *flags) 
 66           {
 67                   int set;
 68            
 69                   if (flags == NULL) {
 70                           /* flags are being ignored - skip the code */ 
 71                           while (**format != ']')
 72                                   (*format)++;
 73                           return;
 74                   }
 75            
 76                   set = TRUE;
 77                   (*format)++;
 78                   while (**format != ']' && **format != '\0') {
 79                           if (**format == '+')
 80                                   set = TRUE;
 81                           else if (**format == '-')
 82                                   set = FALSE;
 83                           else switch (**format) {
 84                           case 's': 
 85                           case 'S': 
 86                                   *flags |= !set ? PRINT_FLAG_UNSET_LINE_START : 
 87                                           **format == 's' ? PRINT_FLAG_SET_LINE_START : 
 88                                           PRINT_FLAG_SET_LINE_START_IRSSI;
 89                                   break;
 90                           case 't': 
 91                                   *flags |= set ? PRINT_FLAG_SET_TIMESTAMP : 
 92                                           PRINT_FLAG_UNSET_TIMESTAMP;
 93                                   break;
 94                           case 'T': 
 95                                   *flags |= set ? PRINT_FLAG_SET_SERVERTAG : 
flags <= 409596                                           PRINT_FLAG_UNSET_SERVERTAG;     /* Null Pointer Dereference */
             Exit XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args / printtext_get_args / format_expand_styles / format_expand_code
           Exit XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args / printtext_get_args / format_expand_styles
 259                                       g_string_append_c(out, '%');
 260                                       g_string_append_c(out, *str);
 261                               }
 262                               break;
         Exit XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args / printtext_get_args
       Exit XS_Irssi__UI__TextDest_print / printtext_dest / printtext_dest_args
     Exit XS_Irssi__UI__TextDest_print / printtext_dest
Preconditions
$unknown_1539230 = 37
strlen(&$unknown_1539230) != 0
strlen(&$unknown_1539230) != 2
strlen(&$unknown_1539230) != 1
((char*)&$unknown_1539230)[2] = 84
((char*)&$unknown_1539230)[1] = 91
sending_print_starting != 0
Postconditions
_svi' = &$unknown_1539229
$unknown_1539212' = $unknown_1539212 - 4
dest' = 0
dest' = 0
dest' = 0
dest' = 0
flags' = 28
flags' = 28
fmt' = ((char*)&$unknown_1539230)[1]
format' = &str
format' = &str
items' != 2
out' = out'
set' = 1
str' = &$unknown_1539230 + 2
text' = &#string44[0]
text' = &#string44[0]
va' = &__builtin_va_alist
va' = &__builtin_va_alist




Change Warning 22021.28485 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: