X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhshowsbr.c;h=08d676e035626d7f2046c2cb2ac62f681ebc1e55;hp=97455045f745581f016e62889567971053c2594b;hb=fb49dd82ec42997b9df97f221c920f6596102c0a;hpb=8146bc09fc2e8ad69520ba998be51fb02cbf069c diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index 9745504..08d676e 100644 --- a/uip/mhshowsbr.c +++ b/uip/mhshowsbr.c @@ -3,6 +3,10 @@ * mhshowsbr.c -- routines to display the contents of MIME messages * * $Id$ + * + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #include @@ -12,10 +16,11 @@ #include #include #include -#include -#include +#include +#include #include #include +#include #ifdef HAVE_SYS_WAIT_H # include @@ -31,7 +36,6 @@ # define siglongjmp(env,val) longjmp(env,val) #endif -extern int errno; extern int debugsw; int pausesw = 1; @@ -136,7 +140,9 @@ show_single_message (CT ct, char *form) union wait status; #endif - umask (ct->c_umask); + /* Allow user executable bit so that temporary directories created by + * the viewer (e.g., lynx) are going to be accessible */ + umask (ct->c_umask & ~(0100)); /* * If you have a format file, then display @@ -405,7 +411,16 @@ show_content_aux (CT ct, int serial, int alternate, char *cp, char *cracked) case 'f': /* insert filename containing content */ - snprintf (bp, buflen, "%s", file); + snprintf (bp, buflen, "'%s'", file); + /* since we've quoted the file argument, set things up + * to look past it, to avoid problems with the quoting + * logic below. (I know, I should figure out what's + * broken with the quoting logic, but..) + */ + len = strlen(bp); + buflen -= len; + bp += len; + pp = bp; break; case 'p': @@ -869,8 +884,9 @@ show_multi_aux (CT ct, int serial, int alternate, char *cp) quoted = 0; /* Now parse display string */ - for ( ; *cp; cp++) { + for ( ; *cp && buflen > 0; cp++) { if (*cp == '%') { + pp = bp; switch (*++cp) { case 'a': /* insert parameters from Content-Type field */ @@ -923,6 +939,10 @@ show_multi_aux (CT ct, int serial, int alternate, char *cp) buflen -= len; s = " "; } + /* set our starting pointer back to bp, to avoid + * requoting the filenames we just added + */ + pp = bp; } break;