Changeset 5443:8b783c916893

Show
Ignore:
Timestamp:
2008-07-02 02:19:14 (5 months ago)
Author:
Rocco Rutte <pdmef@…>
Branch:
HEAD
Message:

Use realpath() in mutt_pretty_mailbox() for paths that may need it.
This requires to add the buffer size as parameter since the result may
be longer than the original but still fit in the buffer. Closes #2948.

Files:
18 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r5441 r5443  
     12008-07-02 10:06 +0200  Rocco Rutte  <pdmef@gmx.net>  (cc2334fdf126) 
     2 
     3        * hash.c: Use casts to avoid triggering integer overflow detection in 
     4        hash function 
     5 
     62008-07-01 20:06 -0700  Vincent Lefevre  <vincent@vinc17.org>  (fb0df4ae0836) 
     7 
     8        * ChangeLog, curs_lib.c: Clamp timeval math to unsigned int to match 
     9        progress timestamps. This is fine since only relative differences 
     10        matter. Closes #3018. 
     11 
    1122008-07-01 18:29 -0700  Brendan Cully  <brendan@kublai.com>  (f9af0501d2dd) 
    213 
  • browser.c

    r5209 r5443  
    463463     
    464464    strfcpy (buffer, NONULL(tmp->path), sizeof (buffer)); 
    465     mutt_pretty_mailbox (buffer); 
     465    mutt_pretty_mailbox (buffer, sizeof (buffer)); 
    466466 
    467467    add_folder (menu, state, buffer, &s, tmp->new); 
     
    509509  { 
    510510    strfcpy (path, LastDir, sizeof (path)); 
    511     mutt_pretty_mailbox (path); 
     511    mutt_pretty_mailbox (path, sizeof (path)); 
    512512#ifdef USE_IMAP 
    513513  if (state->imap_browse && option (OPTIMAPLSUB)) 
  • buffy.c

    r5398 r5443  
    430430 
    431431    strfcpy (path, tmp->path, sizeof (path)); 
    432     mutt_pretty_mailbox (path); 
     432    mutt_pretty_mailbox (path, sizeof (path)); 
    433433     
    434434    if (!first && pos + strlen (path) >= COLS - 7) 
     
    503503    } 
    504504    strfcpy (s, tmp->path, slen); 
    505     mutt_pretty_mailbox (s); 
     505    mutt_pretty_mailbox (s, slen); 
    506506    break; 
    507507 
     
    529529    } 
    530530    strfcpy (s, tmp->path, slen); 
    531     mutt_pretty_mailbox (s); 
     531    mutt_pretty_mailbox (s, slen); 
    532532    break; 
    533533  } 
  • commands.c

    r5422 r5443  
    759759  } 
    760760 
    761   mutt_pretty_mailbox (buf); 
     761  mutt_pretty_mailbox (buf, sizeof (buf)); 
    762762  if (mutt_enter_fname (prompt, buf, sizeof (buf), redraw, 0) == -1) 
    763763    return (-1); 
  • compose.c

    r5358 r5443  
    218218    if(stat(idx[i]->content->filename, &st) != 0) 
    219219    { 
    220       mutt_pretty_mailbox(pretty); 
     220      mutt_pretty_mailbox(pretty, sizeof (pretty)); 
    221221      mutt_error(_("%s [#%d] no longer exists!"), 
    222222                 pretty, i+1); 
     
    226226    if(idx[i]->content->stamp < st.st_mtime) 
    227227    { 
    228       mutt_pretty_mailbox(pretty); 
     228      mutt_pretty_mailbox(pretty, sizeof (pretty)); 
    229229      snprintf(msg, sizeof(msg), _("%s [#%d] modified. Update encoding?"), 
    230230               pretty, i+1); 
     
    569569        if (mutt_get_field ("Fcc: ", buf, sizeof (buf), M_FILE | M_CLEAR) == 0) 
    570570        { 
    571           strfcpy (fcc, buf, _POSIX_PATH_MAX); 
    572           mutt_pretty_mailbox (fcc); 
     571          strfcpy (fcc, buf, fcclen); 
     572          mutt_pretty_mailbox (fcc, fcclen); 
    573573          move (HDR_FCC, HDR_XOFFSET); 
    574574          mutt_paddstr (W, fcc); 
     
    718718          { 
    719719            strfcpy (fname, NONULL (Context->path), sizeof (fname)); 
    720             mutt_pretty_mailbox (fname); 
     720            mutt_pretty_mailbox (fname, sizeof (fname)); 
    721721          } 
    722722 
     
    10061006        CHECK_COUNT; 
    10071007        strfcpy (fname, idx[menu->current]->content->filename, sizeof (fname)); 
    1008         mutt_pretty_mailbox (fname); 
     1008        mutt_pretty_mailbox (fname, sizeof (fname)); 
    10091009        if (mutt_get_field (_("Rename to: "), fname, sizeof (fname), M_FILE) 
    10101010                                                        == 0 && fname[0]) 
     
    11951195       { 
    11961196         strfcpy (fname, NONULL (Context->path), sizeof (fname)); 
    1197          mutt_pretty_mailbox (fname); 
     1197         mutt_pretty_mailbox (fname, sizeof (fname)); 
    11981198       } 
    11991199       if (idxlen) 
  • curs_main.c

    r5372 r5443  
    10721072        { 
    10731073          strfcpy (buf, Context->path, sizeof (buf)); 
    1074           mutt_pretty_mailbox (buf); 
     1074          mutt_pretty_mailbox (buf, sizeof (buf)); 
    10751075          mutt_buffy (buf, sizeof (buf)); 
    10761076          if (!buf[0]) 
  • enter.c

    r5331 r5443  
    573573              if (*buf) 
    574574              { 
    575                 mutt_pretty_mailbox (buf); 
     575                mutt_pretty_mailbox (buf, buflen); 
    576576                if (!pass) 
    577577                  mutt_history_add (hclass, buf, 1); 
  • headers.c

    r4616 r5443  
    144144      { 
    145145        strfcpy (fcc, p, fcclen); 
    146         mutt_pretty_mailbox (fcc); 
     146        mutt_pretty_mailbox (fcc, fcclen); 
    147147      } 
    148148      keep = 0; 
     
    174174        else 
    175175        { 
    176           mutt_pretty_mailbox (path); 
     176          mutt_pretty_mailbox (path, sizeof (path)); 
    177177          mutt_error (_("%s: unable to attach file"), path); 
    178178        } 
  • hook.c

    r5099 r5443  
    427427      strfcpy (path, NONULL (Outbox), pathlen); 
    428428  } 
    429   mutt_pretty_mailbox (path); 
     429  mutt_pretty_mailbox (path, pathlen); 
    430430} 
    431431 
  • imap/imap.c

    r5371 r5443  
    19911991    /* reformat output */ 
    19921992    imap_qualify_path (dest, dlen, &mx, completion); 
    1993     mutt_pretty_mailbox (dest); 
     1993    mutt_pretty_mailbox (dest, dlen); 
    19941994 
    19951995    FREE (&mx.mbox); 
  • init.c

    r5416 r5443  
    18571857          _tmp[0] = '\0'; 
    18581858          strfcpy (_tmp, NONULL(*((char **) MuttVars[idx].data)), sizeof (_tmp)); 
    1859           mutt_pretty_mailbox (_tmp); 
     1859          mutt_pretty_mailbox (_tmp, sizeof (_tmp)); 
    18601860          val = _tmp; 
    18611861        } 
     
    26192619    strfcpy (tmp, NONULL (*((char **) MuttVars[idx].data)), sizeof (tmp)); 
    26202620    if (DTYPE (MuttVars[idx].type) == DT_PATH) 
    2621       mutt_pretty_mailbox (tmp); 
     2621      mutt_pretty_mailbox (tmp, sizeof (tmp)); 
    26222622  } 
    26232623  else if (DTYPE (MuttVars[idx].type) == DT_ADDR) 
  • mbox.c

    r5422 r5443  
    957957    mutt_unblock_signals (); 
    958958    mx_fastclose_mailbox (ctx); 
    959     mutt_pretty_mailbox (savefile); 
     959    mutt_pretty_mailbox (savefile, sizeof (savefile)); 
    960960    mutt_error (_("Write failed!  Saved partial mailbox to %s"), savefile); 
    961961    mutt_sleep (5); 
  • muttlib.c

    r5365 r5443  
    754754 
    755755/* collapse the pathname using ~ or = when possible */ 
    756 void mutt_pretty_mailbox (char *s) 
     756void mutt_pretty_mailbox (char *s, size_t buflen) 
    757757{ 
    758758  char *p = s, *q = s; 
    759759  size_t len; 
    760760  url_scheme_t scheme; 
     761  char tmp[_POSIX_PATH_MAX]; 
    761762 
    762763  scheme = url_check_scheme (s); 
     
    780781    p = q; 
    781782  } 
    782    
    783   /* first attempt to collapse the pathname */ 
    784   while (*p) 
    785   { 
    786     if (*p == '/' && p[1] == '/') 
    787     { 
    788       *q++ = '/'; 
    789       p += 2; 
    790     } 
    791     else if (p[0] == '/' && p[1] == '.' && p[2] == '/') 
    792     { 
    793       *q++ = '/'; 
    794       p += 3; 
    795     } 
    796     else 
    797       *q++ = *p++; 
    798   } 
    799   *q = 0; 
     783 
     784  /* cleanup path */ 
     785  if (strstr (p, "//") || strstr (p, "/./")) 
     786  { 
     787    /* first attempt to collapse the pathname, this is more 
     788     * lightweight than realpath() and doesn't resolve links 
     789     */ 
     790    while (*p) 
     791    { 
     792      if (*p == '/' && p[1] == '/') 
     793      { 
     794        *q++ = '/'; 
     795        p += 2; 
     796      } 
     797      else if (p[0] == '/' && p[1] == '.' && p[2] == '/') 
     798      { 
     799        *q++ = '/'; 
     800        p += 3; 
     801      } 
     802      else 
     803        *q++ = *p++; 
     804    } 
     805    *q = 0; 
     806  } 
     807  else if (strstr (p, "..") &&  
     808           (scheme == U_UNKNOWN || scheme == U_FILE) && 
     809           realpath (p, tmp)) 
     810    strfcpy (p, tmp, buflen - (p - s)); 
    800811 
    801812  if (mutt_strncmp (s, Maildir, (len = mutt_strlen (Maildir))) == 0 && 
  • postpone.c

    r5010 r5443  
    323323      SKIPWS (p); 
    324324      strfcpy (fcc, p, fcclen); 
    325       mutt_pretty_mailbox (fcc); 
     325      mutt_pretty_mailbox (fcc, fcclen); 
    326326 
    327327      /* remove the X-Mutt-Fcc: header field */ 
  • protos.h

    r5414 r5443  
    231231void mutt_prepare_envelope (ENVELOPE *, int); 
    232232void mutt_unprepare_envelope (ENVELOPE *); 
    233 void mutt_pretty_mailbox (char *); 
     233void mutt_pretty_mailbox (char *, size_t); 
    234234void mutt_pretty_size (char *, size_t, LOFF_T); 
    235235void mutt_pipe_message (HEADER *); 
  • recvattach.c

    r5348 r5443  
    255255           
    256256          strfcpy (path, aptr->content->filename, sizeof (path)); 
    257           mutt_pretty_mailbox (path); 
     257          mutt_pretty_mailbox (path, sizeof (path)); 
    258258          mutt_format_s (dest, destlen, prefix, path); 
    259259        } 
  • send.c

    r5317 r5443  
    15061506 
    15071507    fcc_error = 0; /* reset value since we may have failed before */ 
    1508     mutt_pretty_mailbox (fcc); 
     1508    mutt_pretty_mailbox (fcc, sizeof (fcc)); 
    15091509    i = mutt_compose_menu (msg, fcc, sizeof (fcc), cur); 
    15101510    if (i == -1) 
  • status.c

    r5353 r5443  
    100100      { 
    101101        strfcpy (tmp, Context->path, sizeof (tmp)); 
    102         mutt_pretty_mailbox (tmp); 
     102        mutt_pretty_mailbox (tmp, sizeof (tmp)); 
    103103      } 
    104104      else