mutt_env_free(&b->mime_headers);
mutt_env_free(&octetstream->mime_headers);
- int rc = crypt_pgp_encrypted_handler(octetstream, s);
+ int rc;
+ /* Some clients improperly encode the octetstream part. */
+ if (octetstream->encoding != ENC_7BIT)
+ rc = run_decode_and_handler(octetstream, s, crypt_pgp_encrypted_handler, 0);
+ else
+ rc = crypt_pgp_encrypted_handler(octetstream, s);
b->goodsig |= octetstream->goodsig;
/* Relocate protected headers onto the multipart/encrypted part */
first_part->warnsig = false;
if (mutt_is_valid_multipart_pgp_encrypted(b))
+ {
b = b->parts->next;
+ /* Some clients improperly encode the octetstream part. */
+ if (b->encoding != ENC_7BIT)
+ need_decode = true;
+ }
else if (mutt_is_malformed_multipart_pgp_encrypted(b))
{
b = b->parts->next->next;
/* clear out any mime headers before the handler, so they can't be spoofed. */
mutt_env_free(&a->mime_headers);
-
a->warnsig = false;
FILE *fpout = mutt_file_mkstemp();
if (!fpout)
int rc = 0;
if (mutt_is_valid_multipart_pgp_encrypted(b))
+ {
b = b->parts->next;
+ /* Some clients improperly encode the octetstream part. */
+ if (b->encoding != ENC_7BIT)
+ need_decode = true;
+ }
else if (mutt_is_malformed_multipart_pgp_encrypted(b))
{
b = b->parts->next->next;