Changeset 4640:a115f3ac3b62
- 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:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r4622
|
r4640
|
|
| 189 | 189 | FREE (&((*tmp)->path)); |
| 190 | 190 | tmp1=(*tmp)->next; |
| 191 | | FREE (tmp); |
| | 191 | FREE (tmp); /* __FREE_CHECKED__ */ |
| 192 | 192 | *tmp=tmp1; |
| 193 | 193 | } |
| … |
… |
|
| 213 | 213 | FREE (&((*tmp)->path)); |
| 214 | 214 | tmp1=(*tmp)->next; |
| 215 | | FREE (tmp); |
| | 215 | FREE (tmp); /* __FREE_CHECKED__ */ |
| 216 | 216 | *tmp=tmp1; |
| 217 | 217 | } |
-
|
r4343
|
r4640
|
|
| 451 | 451 | *ob = '\0'; |
| 452 | 452 | |
| 453 | | FREE (ps); |
| | 453 | FREE (ps); /* __FREE_CHECKED__ */ |
| 454 | 454 | *ps = buf; |
| 455 | 455 | |
| … |
… |
|
| 590 | 590 | if (fc->cd != (iconv_t)-1) |
| 591 | 591 | iconv_close (fc->cd); |
| 592 | | FREE (_fc); |
| 593 | | } |
| | 592 | FREE (_fc); /* __FREE_CHECKED__ */ |
| | 593 | } |
-
|
r3773
|
r4640
|
|
| 36 | 36 | do_check '\<sprintf.*%s' __SPRINTF_CHECKED__ "Alert: Unchecked sprintf calls." |
| 37 | 37 | do_check '\<strncat' __STRNCAT_CHECKED__ "You probably meant safe_strcat here." |
| | 38 | do_check '\<safe_free' __SAFE_FREE_CHECKED__ "You probably meant FREE here." |
| | 39 | do_check '\<FREE[ ]?\([^&]' __FREE_CHECKED__ "You probably meant FREE(&...) here." |
| 38 | 40 | |
| 39 | 41 | # don't do this check on others' code. |
-
|
r4490
|
r4640
|
|
| 130 | 130 | mutt_pattern_free(&tmp->color_pattern); |
| 131 | 131 | FREE (&tmp->pattern); |
| 132 | | FREE (l); |
| | 132 | FREE (l); /* __FREE_CHECKED__ */ |
| 133 | 133 | } |
| 134 | 134 | |
-
|
r4343
|
r4640
|
|
| 698 | 698 | |
| 699 | 699 | FREE (&(*esp)->wbuf); |
| 700 | | FREE (esp); |
| | 700 | FREE (esp); /* __FREE_CHECKED__ */ |
| 701 | 701 | } |
| 702 | 702 | |
-
|
r4556
|
r4640
|
|
| 76 | 76 | { |
| 77 | 77 | p = (*ctx)->next; |
| 78 | | FREE (ctx); |
| | 78 | FREE (ctx); /* __FREE_CHECKED__ */ |
| 79 | 79 | } |
| 80 | 80 | } |
-
|
r4343
|
r4640
|
|
| 159 | 159 | } |
| 160 | 160 | FREE (&pptr->table); |
| 161 | | FREE (ptr); |
| | 161 | FREE (ptr); /* __FREE_CHECKED__ */ |
| 162 | 162 | } |
-
|
r4596
|
r4640
|
|
| 965 | 965 | mutt_free_list (&(((IMAP_HEADER_DATA*) *data)->keywords)); |
| 966 | 966 | |
| 967 | | FREE (data); |
| | 967 | FREE (data); /* __FREE_CHECKED__ */ |
| 968 | 968 | } |
| 969 | 969 | |
-
|
r4343
|
r4640
|
|
| 261 | 261 | { |
| 262 | 262 | char *u7 = utf8_to_utf7 (t, strlen (t), NULL, 0); |
| 263 | | FREE (s); |
| | 263 | FREE (s); /* __FREE_CHECKED__ */ |
| 264 | 264 | *s = u7; |
| 265 | 265 | } |
| … |
… |
|
| 275 | 275 | if (t && !mutt_convert_string (&t, "UTF-8", Charset, 0)) |
| 276 | 276 | { |
| 277 | | FREE (s); |
| | 277 | FREE (s); /* __FREE_CHECKED__ */ |
| 278 | 278 | *s = t; |
| 279 | 279 | } |
-
|
r4494
|
r4640
|
|
| 279 | 279 | mutt_buffer_free(&(*idata)->cmdbuf); |
| 280 | 280 | FREE (&(*idata)->buf); |
| 281 | | FREE (idata); |
| | 281 | FREE (idata); /* __FREE_CHECKED__ */ |
| 282 | 282 | } |
| 283 | 283 | |
-
|
r4622
|
r4640
|
|
| 347 | 347 | case DT_PATH: |
| 348 | 348 | case DT_STR: |
| 349 | | FREE ((char**)p->data); |
| | 349 | FREE ((char**)p->data); /* __FREE_CHECKED__ */ |
| 350 | 350 | break; |
| 351 | 351 | } |
| … |
… |
|
| 478 | 478 | */ |
| 479 | 479 | t = last; |
| 480 | | safe_free(&t->template); |
| | 480 | FREE(&t->template); |
| 481 | 481 | break; |
| 482 | 482 | } |
| … |
… |
|
| 534 | 534 | *list = spam->next; |
| 535 | 535 | mutt_free_regexp(&spam->rx); |
| 536 | | safe_free(&spam->template); |
| 537 | | safe_free(&spam); |
| | 536 | FREE(&spam->template); |
| | 537 | FREE(&spam); |
| 538 | 538 | return 1; |
| 539 | 539 | } |
| … |
… |
|
| 546 | 546 | prev->next = spam->next; |
| 547 | 547 | mutt_free_regexp(&spam->rx); |
| 548 | | safe_free(&spam->template); |
| 549 | | safe_free(&spam); |
| | 548 | FREE(&spam->template); |
| | 549 | FREE(&spam); |
| 550 | 550 | spam = prev->next; |
| 551 | 551 | ++nremoved; |
| … |
… |
|
| 982 | 982 | regcomp(&a->minor_rx, tmpminor, REG_ICASE|REG_EXTENDED); |
| 983 | 983 | |
| 984 | | safe_free(&tmpminor); |
| | 984 | FREE(&tmpminor); |
| 985 | 985 | |
| 986 | 986 | dprint(5, (debugfile, "parse_attach_list: added %s/%s [%d]\n", |
| … |
… |
|
| 1760 | 1760 | rfc822_free_address ((ADDRESS **) MuttVars[idx].data); |
| 1761 | 1761 | 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__ */ |
| 1763 | 1765 | } |
| 1764 | 1766 | else if (query || *s->dptr != '=') |
| … |
… |
|
| 1808 | 1810 | rfc822_free_address ((ADDRESS **) MuttVars[idx].data); |
| 1809 | 1811 | 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__ */ |
| 1811 | 1815 | |
| 1812 | 1816 | mutt_extract_token (tmp, s, 0); |
| … |
… |
|
| 3081 | 3085 | FREE (&(*cur)->name); |
| 3082 | 3086 | FREE (&(*cur)->value); |
| 3083 | | FREE (cur); |
| | 3087 | FREE (cur); /* __FREE_CHECKED__ */ |
| 3084 | 3088 | *cur = tmp; |
| 3085 | 3089 | } |
-
|
r4343
|
r4640
|
|
| 186 | 186 | } |
| 187 | 187 | |
| 188 | | void safe_free (void *ptr) |
| | 188 | void safe_free (void *ptr) /* __SAFE_FREE_CHECKED__ */ |
| 189 | 189 | { |
| 190 | 190 | void **p = (void **)ptr; |
| … |
… |
|
| 261 | 261 | void mutt_str_replace (char **p, const char *s) |
| 262 | 262 | { |
| 263 | | FREE (p); |
| | 263 | FREE (p); /* __FREE_CHECKED__ */ |
| 264 | 264 | *p = safe_strdup (s); |
| 265 | 265 | } |
-
|
r4453
|
r4640
|
|
| 704 | 704 | } |
| 705 | 705 | |
| 706 | | FREE (p); |
| | 706 | FREE (p); /* __FREE_CHECKED__ */ |
| 707 | 707 | } |
| 708 | 708 | |
-
|
r4632
|
r4640
|
|
| 223 | 223 | if ((*fp = fdopen (fd, "w")) == NULL) |
| 224 | 224 | { |
| 225 | | FREE (tgt); |
| | 225 | FREE (tgt); /* __FREE_CHECKED__ */ |
| 226 | 226 | close (fd); |
| 227 | 227 | unlink (path); |
| … |
… |
|
| 489 | 489 | mutt_free_header (&(*md)->h); |
| 490 | 490 | |
| 491 | | FREE (md); |
| | 491 | FREE (md); /* __FREE_CHECKED__ */ |
| 492 | 492 | } |
| 493 | 493 | |
-
|
r4445
|
r4640
|
|
| 90 | 90 | |
| 91 | 91 | notrans: |
| 92 | | FREE (out); |
| | 92 | FREE (out); /* __FREE_CHECKED__ */ |
| 93 | 93 | *out = safe_strdup (in); |
| 94 | 94 | return 1; |
| … |
… |
|
| 115 | 115 | if (rv < 0) |
| 116 | 116 | { |
| 117 | | FREE (out); |
| | 117 | FREE (out); /* __FREE_CHECKED__ */ |
| 118 | 118 | *out = safe_strdup (in); |
| 119 | 119 | } |
-
|
r4622
|
r4640
|
|
| 289 | 289 | gnutls_certificate_free_credentials (data->xcred); |
| 290 | 290 | gnutls_deinit (data->state); |
| 291 | | safe_free ((void **) &conn->sockdata); |
| | 291 | FREE (&conn->sockdata); |
| 292 | 292 | } |
| 293 | 293 | |
-
|
r4628
|
r4640
|
|
| 292 | 292 | FREE (&(*h)->data); |
| 293 | 293 | #endif |
| 294 | | FREE (h); |
| | 294 | FREE (h); /* __FREE_CHECKED__ */ |
| 295 | 295 | } |
| 296 | 296 | |
| … |
… |
|
| 680 | 680 | mutt_free_list (&(*p)->in_reply_to); |
| 681 | 681 | mutt_free_list (&(*p)->userhdrs); |
| 682 | | FREE (p); |
| | 682 | FREE (p); /* __FREE_CHECKED__ */ |
| 683 | 683 | } |
| 684 | 684 | |
| … |
… |
|
| 914 | 914 | break; |
| 915 | 915 | case 1: /* yes */ |
| 916 | | FREE (directory); |
| | 916 | FREE (directory); /* __FREE_CHECKED__ */ |
| 917 | 917 | break; |
| 918 | 918 | case -1: /* abort */ |
| 919 | | FREE (directory); |
| | 919 | FREE (directory); /* __FREE_CHECKED__ */ |
| 920 | 920 | return -1; |
| 921 | 921 | case 2: /* no */ |
| 922 | | FREE (directory); |
| | 922 | FREE (directory); /* __FREE_CHECKED__ */ |
| 923 | 923 | return 1; |
| 924 | 924 | } |
| … |
… |
|
| 1394 | 1394 | else |
| 1395 | 1395 | { |
| 1396 | | safe_free(&b->data); |
| | 1396 | FREE(&b->data); |
| 1397 | 1397 | } |
| 1398 | 1398 | memset(b, 0, sizeof(BUFFER)); |
| … |
… |
|
| 1474 | 1474 | FREE(&(*p)->data); |
| 1475 | 1475 | /* dptr is just an offset to data and shouldn't be freed */ |
| 1476 | | FREE(p); |
| | 1476 | FREE(p); /* __FREE_CHECKED__ */ |
| 1477 | 1477 | } |
| 1478 | 1478 | |
| … |
… |
|
| 1546 | 1546 | regfree ((*pp)->rx); |
| 1547 | 1547 | FREE (&(*pp)->rx); |
| 1548 | | FREE (pp); |
| | 1548 | FREE (pp); /* __FREE_CHECKED__ */ |
| 1549 | 1549 | } |
| 1550 | 1550 | |
| … |
… |
|
| 1573 | 1573 | *list = (*list)->next; |
| 1574 | 1574 | mutt_free_regexp (&p->rx); |
| 1575 | | safe_free(&p->template); |
| | 1575 | FREE (&p->template); |
| 1576 | 1576 | FREE (&p); |
| 1577 | 1577 | } |
-
|
r4495
|
r4640
|
|
| 1527 | 1527 | } |
| 1528 | 1528 | |
| 1529 | | FREE (msg); |
| | 1529 | FREE (msg); /* __FREE_CHECKED__ */ |
| 1530 | 1530 | return (r); |
| 1531 | 1531 | } |
-
|
r4439
|
r4640
|
|
| 390 | 390 | if ((*QuoteList)->prefix) |
| 391 | 391 | FREE (&(*QuoteList)->prefix); |
| 392 | | FREE (QuoteList); |
| | 392 | FREE (QuoteList); /* __FREE_CHECKED__ */ |
| 393 | 393 | *QuoteList = ptr; |
| 394 | 394 | } |
-
|
r4343
|
r4640
|
|
| 184 | 184 | pgp_free_uid (&kp->address); |
| 185 | 185 | FREE (&kp->keyid); |
| 186 | | FREE (kpp); |
| | 186 | /* mutt_crypt.h: 'typedef struct pgp_keyinfo *pgp_key_t;' */ |
| | 187 | FREE (kpp); /* __FREE_CHECKED__ */ |
| 187 | 188 | } |
| 188 | 189 | |
-
|
r4343
|
r4640
|
|
| 127 | 127 | FREE (&(*r)->ver); |
| 128 | 128 | |
| 129 | | FREE (r); |
| | 129 | FREE (r); /* __FREE_CHECKED__ */ |
| 130 | 130 | } |
| 131 | 131 | |
| … |
… |
|
| 217 | 217 | mix_free_remailer (&type2_list[i]); |
| 218 | 218 | |
| 219 | | FREE (type2_list); |
| | 219 | FREE (type2_list); /* __FREE_CHECKED__ */ |
| 220 | 220 | } |
| 221 | 221 | |
-
|
r4343
|
r4640
|
|
| 369 | 369 | FREE (&p->printcommand); |
| 370 | 370 | FREE (&p->nametemplate); |
| 371 | | FREE (entry); |
| | 371 | FREE (entry); /* __FREE_CHECKED__ */ |
| 372 | 372 | } |
| 373 | 373 | |
-
|
r4343
|
r4640
|
|
| 565 | 565 | encode_specials ? RFC822Specials : NULL); |
| 566 | 566 | |
| 567 | | FREE (pd); |
| | 567 | FREE (pd); /* __FREE_CHECKED__ */ |
| 568 | 568 | *pd = e; |
| 569 | 569 | } |
| … |
… |
|
| 762 | 762 | *d = 0; |
| 763 | 763 | |
| 764 | | FREE (pd); |
| | 764 | FREE (pd); /* __FREE_CHECKED__ */ |
| 765 | 765 | *pd = d0; |
| 766 | 766 | mutt_str_adjust (pd); |
-
|
r4343
|
r4640
|
|
| 184 | 184 | FREE (&(*p)->attribute); |
| 185 | 185 | FREE (&(*p)->value); |
| 186 | | FREE (p); |
| | 186 | FREE (p); /* __FREE_CHECKED__ */ |
| 187 | 187 | } |
| 188 | 188 | } |
| … |
… |
|
| 365 | 365 | if (d != *pd) |
| 366 | 366 | FREE (&d); |
| 367 | | FREE (pd); |
| | 367 | FREE (pd); /* __FREE_CHECKED__ */ |
| 368 | 368 | *pd = e; |
| 369 | 369 | } |
| 370 | 370 | else if (d != *pd) |
| 371 | 371 | { |
| 372 | | FREE (pd); |
| | 372 | FREE (pd); /* __FREE_CHECKED__ */ |
| 373 | 373 | *pd = d; |
| 374 | 374 | } |
-
|
r4343
|
r4640
|
|
| 793 | 793 | |
| 794 | 794 | #ifdef TESTING |
| 795 | | int safe_free (void **p) |
| | 795 | int safe_free (void **p) /* __SAFE_FREE_CHECKED__ */ |
| 796 | 796 | { |
| 797 | 797 | free(*p); /* __MEM_CHECKED__ */ |
-
|
r4439
|
r4640
|
|
| 829 | 829 | FREE (&tcode[i]); |
| 830 | 830 | |
| 831 | | FREE (tcode); |
| | 831 | FREE (tcode); /* __FREE_CHECKED__ */ |
| 832 | 832 | |
| 833 | 833 | return ret; |
| … |
… |
|
| 1820 | 1820 | { |
| 1821 | 1821 | unlink (msg); |
| 1822 | | FREE (tempfile); |
| | 1822 | FREE (tempfile); /* __FREE_CHECKED__ */ |
| 1823 | 1823 | _exit (S_ERR); |
| 1824 | 1824 | } |
| … |
… |
|
| 1851 | 1851 | { |
| 1852 | 1852 | unlink (*tempfile); /* no longer needed */ |
| 1853 | | FREE (tempfile); |
| | 1853 | FREE (tempfile); /* __FREE_CHECKED__ */ |
| 1854 | 1854 | } |
| 1855 | 1855 | } |
| … |
… |
|
| 1861 | 1861 | { |
| 1862 | 1862 | unlink (*tempfile); |
| 1863 | | FREE (tempfile); |
| | 1863 | FREE (tempfile); /* __FREE_CHECKED__ */ |
| 1864 | 1864 | } |
| 1865 | 1865 | } |
| … |
… |
|
| 1873 | 1873 | /* the parent is already dead */ |
| 1874 | 1874 | unlink (*tempfile); |
| 1875 | | FREE (tempfile); |
| | 1875 | FREE (tempfile); /* __FREE_CHECKED__ */ |
| 1876 | 1876 | } |
| 1877 | 1877 | |