Changeset 4640:a115f3ac3b62

Show
Ignore:
Timestamp:
2006-05-18 10:35:29 (3 years ago)
Author:
Rocco Rutte <pdmef@…>
Branch:
HEAD
Message:

Avoid safe_free() usage and add security checks

Add checks to check_sec.sh for memory functions.

These include a check for use of safe_free() instead of FREE() and a
check whether FREE(&...) is used.

For the former, SAFE_FREE_CHECKED is to be used, for the latter
FREE_CHECKED to avoid messages from check_sec.sh

Files:
26 modified

Legend:

Unmodified
Added
Removed
  • buffy.c

    r4622 r4640  
    189189        FREE (&((*tmp)->path)); 
    190190        tmp1=(*tmp)->next; 
    191         FREE (tmp); 
     191        FREE (tmp);             /* __FREE_CHECKED__ */ 
    192192        *tmp=tmp1; 
    193193      } 
     
    213213        FREE (&((*tmp)->path)); 
    214214        tmp1=(*tmp)->next; 
    215         FREE (tmp); 
     215        FREE (tmp);             /* __FREE_CHECKED__ */ 
    216216        *tmp=tmp1; 
    217217      } 
  • charset.c

    r4343 r4640  
    451451    *ob = '\0'; 
    452452 
    453     FREE (ps); 
     453    FREE (ps);          /* __FREE_CHECKED__ */ 
    454454    *ps = buf; 
    455455     
     
    590590  if (fc->cd != (iconv_t)-1) 
    591591    iconv_close (fc->cd); 
    592   FREE (_fc); 
    593 } 
     592  FREE (_fc);           /* __FREE_CHECKED__ */ 
     593} 
  • check_sec.sh

    r3773 r4640  
    3636do_check '\<sprintf.*%s' __SPRINTF_CHECKED__ "Alert: Unchecked sprintf calls." 
    3737do_check '\<strncat' __STRNCAT_CHECKED__ "You probably meant safe_strcat here." 
     38do_check '\<safe_free' __SAFE_FREE_CHECKED__ "You probably meant FREE here." 
     39do_check '\<FREE[ ]?\([^&]' __FREE_CHECKED__ "You probably meant FREE(&...) here." 
    3840 
    3941# don't do this check on others' code. 
  • color.c

    r4490 r4640  
    130130  mutt_pattern_free(&tmp->color_pattern); 
    131131  FREE (&tmp->pattern); 
    132   FREE (l); 
     132  FREE (l);             /* __FREE_CHECKED__ */ 
    133133} 
    134134 
  • enter.c

    r4343 r4640  
    698698   
    699699  FREE (&(*esp)->wbuf); 
    700   FREE (esp); 
     700  FREE (esp);           /* __FREE_CHECKED__ */ 
    701701} 
    702702 
  • group.c

    r4556 r4640  
    7676  { 
    7777    p = (*ctx)->next; 
    78     FREE (ctx); 
     78    FREE (ctx);         /* __FREE_CHECKED__ */ 
    7979  } 
    8080} 
  • hash.c

    r4343 r4640  
    159159  } 
    160160  FREE (&pptr->table); 
    161   FREE (ptr); 
     161  FREE (ptr);           /* __FREE_CHECKED__ */ 
    162162} 
  • imap/message.c

    r4596 r4640  
    965965  mutt_free_list (&(((IMAP_HEADER_DATA*) *data)->keywords)); 
    966966 
    967   FREE (data); 
     967  FREE (data);          /* __FREE_CHECKED__ */ 
    968968} 
    969969 
  • imap/utf7.c

    r4343 r4640  
    261261    { 
    262262      char *u7 = utf8_to_utf7 (t, strlen (t), NULL, 0); 
    263       FREE (s); 
     263      FREE (s);         /* __FREE_CHECKED__ */ 
    264264      *s = u7; 
    265265    } 
     
    275275    if (t && !mutt_convert_string (&t, "UTF-8", Charset, 0)) 
    276276    { 
    277       FREE (s); 
     277      FREE (s);         /* __FREE_CHECKED__ */ 
    278278      *s = t; 
    279279    } 
  • imap/util.c

    r4494 r4640  
    279279  mutt_buffer_free(&(*idata)->cmdbuf); 
    280280  FREE (&(*idata)->buf); 
    281   FREE (idata); 
     281  FREE (idata);         /* __FREE_CHECKED__ */ 
    282282} 
    283283 
  • init.c

    r4622 r4640  
    347347  case DT_PATH: 
    348348  case DT_STR: 
    349     FREE ((char**)p->data); 
     349    FREE ((char**)p->data);             /* __FREE_CHECKED__ */ 
    350350    break; 
    351351  } 
     
    478478       */ 
    479479      t = last; 
    480       safe_free(&t->template); 
     480      FREE(&t->template); 
    481481      break; 
    482482    } 
     
    534534    *list = spam->next; 
    535535    mutt_free_regexp(&spam->rx); 
    536     safe_free(&spam->template); 
    537     safe_free(&spam); 
     536    FREE(&spam->template); 
     537    FREE(&spam); 
    538538    return 1; 
    539539  } 
     
    546546      prev->next = spam->next; 
    547547      mutt_free_regexp(&spam->rx); 
    548       safe_free(&spam->template); 
    549       safe_free(&spam); 
     548      FREE(&spam->template); 
     549      FREE(&spam); 
    550550      spam = prev->next; 
    551551      ++nremoved; 
     
    982982    regcomp(&a->minor_rx, tmpminor, REG_ICASE|REG_EXTENDED); 
    983983 
    984     safe_free(&tmpminor); 
     984    FREE(&tmpminor); 
    985985 
    986986    dprint(5, (debugfile, "parse_attach_list: added %s/%s [%d]\n", 
     
    17601760          rfc822_free_address ((ADDRESS **) MuttVars[idx].data); 
    17611761        else 
    1762           FREE ((void *) MuttVars[idx].data); 
     1762          /* MuttVars[idx].data is already 'char**' (or some 'void**') or...  
     1763           * so cast to 'void*' is okay */ 
     1764          FREE ((void *) MuttVars[idx].data);           /* __FREE_CHECKED__ */ 
    17631765      } 
    17641766      else if (query || *s->dptr != '=') 
     
    18081810          rfc822_free_address ((ADDRESS **) MuttVars[idx].data); 
    18091811        else 
    1810           FREE ((void *) MuttVars[idx].data); 
     1812          /* MuttVars[idx].data is already 'char**' (or some 'void**') or...  
     1813           * so cast to 'void*' is okay */ 
     1814          FREE ((void *) MuttVars[idx].data);           /* __FREE_CHECKED__ */ 
    18111815 
    18121816        mutt_extract_token (tmp, s, 0); 
     
    30813085    FREE (&(*cur)->name); 
    30823086    FREE (&(*cur)->value); 
    3083     FREE (cur); 
     3087    FREE (cur);         /* __FREE_CHECKED__ */ 
    30843088    *cur = tmp; 
    30853089  } 
  • lib.c

    r4343 r4640  
    186186} 
    187187 
    188 void safe_free (void *ptr) 
     188void safe_free (void *ptr)      /* __SAFE_FREE_CHECKED__ */ 
    189189{ 
    190190  void **p = (void **)ptr; 
     
    261261void mutt_str_replace (char **p, const char *s) 
    262262{ 
    263   FREE (p); 
     263  FREE (p);             /* __FREE_CHECKED__ */ 
    264264  *p = safe_strdup (s); 
    265265} 
  • menu.c

    r4453 r4640  
    704704  } 
    705705 
    706   FREE (p); 
     706  FREE (p);             /* __FREE_CHECKED__ */ 
    707707} 
    708708 
  • mh.c

    r4632 r4640  
    223223  if ((*fp = fdopen (fd, "w")) == NULL) 
    224224  { 
    225     FREE (tgt); 
     225    FREE (tgt);         /* __FREE_CHECKED__ */ 
    226226    close (fd); 
    227227    unlink (path); 
     
    489489    mutt_free_header (&(*md)->h); 
    490490 
    491   FREE (md); 
     491  FREE (md);            /* __FREE_CHECKED__ */ 
    492492} 
    493493 
  • mutt_idna.c

    r4445 r4640  
    9090   
    9191 notrans: 
    92   FREE (out); 
     92  FREE (out);           /* __FREE_CHECKED__ */ 
    9393  *out = safe_strdup (in); 
    9494  return 1; 
     
    115115  if (rv < 0) 
    116116  { 
    117     FREE (out); 
     117    FREE (out);         /* __FREE_CHECKED__ */ 
    118118    *out = safe_strdup (in); 
    119119  } 
  • mutt_ssl_gnutls.c

    r4622 r4640  
    289289    gnutls_certificate_free_credentials (data->xcred); 
    290290    gnutls_deinit (data->state); 
    291     safe_free ((void **) &conn->sockdata); 
     291    FREE (&conn->sockdata); 
    292292  } 
    293293 
  • muttlib.c

    r4628 r4640  
    292292  FREE (&(*h)->data); 
    293293#endif 
    294   FREE (h); 
     294  FREE (h);             /* __FREE_CHECKED__ */ 
    295295} 
    296296 
     
    680680  mutt_free_list (&(*p)->in_reply_to); 
    681681  mutt_free_list (&(*p)->userhdrs); 
    682   FREE (p); 
     682  FREE (p);             /* __FREE_CHECKED__ */ 
    683683} 
    684684 
     
    914914          break; 
    915915        case 1:         /* yes */ 
    916           FREE (directory); 
     916          FREE (directory);             /* __FREE_CHECKED__ */ 
    917917          break; 
    918918        case -1:        /* abort */ 
    919           FREE (directory);  
     919          FREE (directory);             /* __FREE_CHECKED__ */ 
    920920          return -1; 
    921921        case  2:        /* no */ 
    922           FREE (directory); 
     922          FREE (directory);             /* __FREE_CHECKED__ */ 
    923923          return 1; 
    924924      } 
     
    13941394  else 
    13951395  { 
    1396     safe_free(&b->data); 
     1396    FREE(&b->data); 
    13971397  } 
    13981398  memset(b, 0, sizeof(BUFFER)); 
     
    14741474   FREE(&(*p)->data); 
    14751475   /* dptr is just an offset to data and shouldn't be freed */ 
    1476    FREE(p); 
     1476   FREE(p);             /* __FREE_CHECKED__ */ 
    14771477} 
    14781478 
     
    15461546  regfree ((*pp)->rx); 
    15471547  FREE (&(*pp)->rx); 
    1548   FREE (pp); 
     1548  FREE (pp);            /* __FREE_CHECKED__ */ 
    15491549} 
    15501550 
     
    15731573    *list = (*list)->next; 
    15741574    mutt_free_regexp (&p->rx); 
    1575     safe_free(&p->template); 
     1575    FREE (&p->template); 
    15761576    FREE (&p); 
    15771577  } 
  • mx.c

    r4495 r4640  
    15271527  } 
    15281528 
    1529   FREE (msg); 
     1529  FREE (msg);           /* __FREE_CHECKED__ */ 
    15301530  return (r); 
    15311531} 
  • pager.c

    r4439 r4640  
    390390    if ((*QuoteList)->prefix) 
    391391      FREE (&(*QuoteList)->prefix); 
    392     FREE (QuoteList); 
     392    FREE (QuoteList);           /* __FREE_CHECKED__ */ 
    393393    *QuoteList = ptr; 
    394394  } 
  • pgplib.c

    r4343 r4640  
    184184  pgp_free_uid (&kp->address); 
    185185  FREE (&kp->keyid); 
    186   FREE (kpp); 
     186  /* mutt_crypt.h: 'typedef struct pgp_keyinfo *pgp_key_t;' */ 
     187  FREE (kpp);           /* __FREE_CHECKED__ */ 
    187188} 
    188189 
  • remailer.c

    r4343 r4640  
    127127  FREE (&(*r)->ver); 
    128128   
    129   FREE (r); 
     129  FREE (r);             /* __FREE_CHECKED__ */ 
    130130} 
    131131 
     
    217217    mix_free_remailer (&type2_list[i]); 
    218218   
    219   FREE (type2_list); 
     219  FREE (type2_list);            /* __FREE_CHECKED__ */ 
    220220} 
    221221 
  • rfc1524.c

    r4343 r4640  
    369369  FREE (&p->printcommand); 
    370370  FREE (&p->nametemplate); 
    371   FREE (entry); 
     371  FREE (entry);         /* __FREE_CHECKED__ */ 
    372372} 
    373373 
  • rfc2047.c

    r4343 r4640  
    565565                  encode_specials ? RFC822Specials : NULL); 
    566566 
    567   FREE (pd); 
     567  FREE (pd);            /* __FREE_CHECKED__ */ 
    568568  *pd = e; 
    569569} 
     
    762762  *d = 0; 
    763763 
    764   FREE (pd); 
     764  FREE (pd);            /* __FREE_CHECKED__ */ 
    765765  *pd = d0; 
    766766  mutt_str_adjust (pd); 
  • rfc2231.c

    r4343 r4640  
    184184    FREE (&(*p)->attribute); 
    185185    FREE (&(*p)->value); 
    186     FREE (p); 
     186    FREE (p);           /* __FREE_CHECKED__ */ 
    187187  } 
    188188} 
     
    365365    if (d != *pd) 
    366366      FREE (&d); 
    367     FREE (pd); 
     367    FREE (pd);          /* __FREE_CHECKED__ */ 
    368368    *pd = e; 
    369369  } 
    370370  else if (d != *pd) 
    371371  { 
    372     FREE (pd); 
     372    FREE (pd);          /* __FREE_CHECKED__ */ 
    373373    *pd = d; 
    374374  } 
  • rfc822.c

    r4343 r4640  
    793793 
    794794#ifdef TESTING 
    795 int safe_free (void **p) 
     795int safe_free (void **p)        /* __SAFE_FREE_CHECKED__ */ 
    796796{ 
    797797  free(*p);             /* __MEM_CHECKED__ */ 
  • sendlib.c

    r4439 r4640  
    829829    FREE (&tcode[i]); 
    830830 
    831   FREE (tcode); 
     831  FREE (tcode);         /* __FREE_CHECKED__ */ 
    832832   
    833833  return ret; 
     
    18201820    { 
    18211821      unlink (msg); 
    1822       FREE (tempfile); 
     1822      FREE (tempfile);          /* __FREE_CHECKED__ */ 
    18231823      _exit (S_ERR); 
    18241824    } 
     
    18511851      { 
    18521852        unlink (*tempfile); /* no longer needed */ 
    1853         FREE (tempfile); 
     1853        FREE (tempfile);                /* __FREE_CHECKED__ */ 
    18541854      } 
    18551855    } 
     
    18611861      { 
    18621862        unlink (*tempfile); 
    1863         FREE (tempfile); 
     1863        FREE (tempfile);                /* __FREE_CHECKED__ */ 
    18641864      } 
    18651865    } 
     
    18731873      /* the parent is already dead */ 
    18741874      unlink (*tempfile); 
    1875       FREE (tempfile); 
     1875      FREE (tempfile);          /* __FREE_CHECKED__ */ 
    18761876    } 
    18771877