On 2004-02-26 10:21:33 +0100, Christoph Berg wrote: > > > message-hook '!(~g|~G) ~b"^-----BEGIN\ PGP\ (SIGNED\ )?MESSAGE"' "exec > > > check-traditional-pgp" The attached patch (which just went into the CVS) should make this kind of message-hook safe, by making sure that check-traditional-pgp does not leave the pager context. -- Thomas Roessler <roessler@xxxxxxxxxxxxxxxxxx>
? err ? mutt-1.5.5-extra.tgz ? patch ? patch-1.5.3-CVS.tlr.idna.1 ? patch-1.5.4.nr.tag_prefix_cond ? patch-1.5.4.tlr.nodots.1 ? patch-1.5.4.tlr.pgpsmimeautoselect.1 ? patch-1.5.4.tlr.query_mem.1 ? patch-1.5.4.tlr.save_attachment.1 ? patch-1.5.4.tlr.tag_prefix.1 ? patch-1.5.5.1.regexp_lists.1 ? patch-1.5.5.1.tlr.libidncompat.1 ? patch-1.5.5.1.tlr.partsign.1 ? patch-1.5.5.1.tlr.retainable_sigs.1 ? patch-1.5.5.1.tlr.thread_free.1 ? patch-1.5.5.1.tlr.unbind.1 ? patch-1.5.5.1692 ? patch-1.5.6.tlr.1808.1 ? pgpring.sample ? send.c.new ? sort.c.new ? stamp-h1 ? typescript Index: commands.c =================================================================== RCS file: /cvs/mutt/mutt/commands.c,v retrieving revision 3.22 diff -u -r3.22 commands.c --- commands.c 30 Dec 2003 13:04:20 -0000 3.22 +++ commands.c 12 Apr 2004 20:31:40 -0000 @@ -941,6 +941,8 @@ MESSAGE *msg; int rv = 0; + h->security |= PGP_TRADITIONAL_CHECKED; + mutt_parse_mime_message (Context, h); if ((msg = mx_open_message (Context, h->msgno)) == NULL) return 0; @@ -959,12 +961,12 @@ { int i; int rv = 0; - if (h) + if (h && !(h->security & PGP_TRADITIONAL_CHECKED)) rv = _mutt_check_traditional_pgp (h, redraw); else { for (i = 0; i < Context->vcount; i++) - if (Context->hdrs[Context->v2r[i]]->tagged) + if (Context->hdrs[Context->v2r[i]]->tagged && !(h->security & PGP_TRADITIONAL_CHECKED)) rv = _mutt_check_traditional_pgp (Context->hdrs[Context->v2r[i]], redraw) || rv; } Index: curs_main.c =================================================================== RCS file: /cvs/mutt/mutt/curs_main.c,v retrieving revision 3.16 diff -u -r3.16 curs_main.c --- curs_main.c 3 Sep 2003 17:09:09 -0000 3.16 +++ curs_main.c 12 Apr 2004 20:31:40 -0000 @@ -1876,7 +1876,9 @@ break; CHECK_MSGCOUNT; CHECK_VISIBLE; - mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + if (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED)) + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + if (menu->menu == MENU_PAGER) { op = OP_DISPLAY_MESSAGE; Index: mutt.h =================================================================== RCS file: /cvs/mutt/mutt/mutt.h,v retrieving revision 3.24 diff -u -r3.24 mutt.h --- mutt.h 12 Apr 2004 19:34:45 -0000 3.24 +++ mutt.h 12 Apr 2004 20:31:41 -0000 @@ -641,7 +641,7 @@ typedef struct header { - unsigned int security : 9; /* bit 0-6: flags, bit 7,8: application. + unsigned int security : 10; /* bit 0-6: flags, bit 7,8: application. see: crypt.h pgplib.h, smime.h */ unsigned int mime : 1; /* has a Mime-Version header? */ Index: mutt_crypt.h =================================================================== RCS file: /cvs/mutt/mutt/mutt_crypt.h,v retrieving revision 3.5 diff -u -r3.5 mutt_crypt.h --- mutt_crypt.h 30 Dec 2003 13:04:20 -0000 3.5 +++ mutt_crypt.h 12 Apr 2004 20:31:41 -0000 @@ -41,6 +41,8 @@ #define APPLICATION_PGP (1 << 7) #define APPLICATION_SMIME (1 << 8) +#define PGP_TRADITIONAL_CHECKED (1 << 9) + #define PGPENCRYPT (APPLICATION_PGP | ENCRYPT) #define PGPSIGN (APPLICATION_PGP | SIGN) #define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN) Index: pager.c =================================================================== RCS file: /cvs/mutt/mutt/pager.c,v retrieving revision 3.13 diff -u -r3.13 pager.c --- pager.c 3 Dec 2003 08:19:11 -0000 3.13 +++ pager.c 12 Apr 2004 20:31:41 -0000 @@ -2173,6 +2173,17 @@ mutt_resend_message (NULL, extra->ctx, extra->hdr); redraw = REDRAW_FULL; break; + + case OP_CHECK_TRADITIONAL: + CHECK_MODE (IsHeader (extra)); + if (!(WithCrypto & APPLICATION_PGP)) + break; + if (!(extra->hdr->security & PGP_TRADITIONAL_CHECKED)) + { + ch = -1; + rc = OP_CHECK_TRADITIONAL; + } + break; case OP_CREATE_ALIAS: CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); Index: recvattach.c =================================================================== RCS file: /cvs/mutt/mutt/recvattach.c,v retrieving revision 3.12 diff -u -r3.12 recvattach.c --- recvattach.c 4 Oct 2003 20:35:00 -0000 3.12 +++ recvattach.c 12 Apr 2004 20:31:42 -0000 @@ -816,7 +816,7 @@ break; /* functions which are passed through from the pager */ case OP_CHECK_TRADITIONAL: - if (!(WithCrypto & APPLICATION_PGP)) + if (!(WithCrypto & APPLICATION_PGP) || (hdr && hdr->security & PGP_TRADITIONAL_CHECKED)) { op = OP_NULL; break;
Attachment:
pgpQVyVW5x2vt.pgp
Description: PGP signature