diff options
author | Neal H. Walfield <[email protected]> | 2016-02-14 15:00:10 +0000 |
---|---|---|
committer | Neal H. Walfield <[email protected]> | 2016-02-16 12:09:32 +0000 |
commit | 2f02ed75a9671a7aae36968d5a1618f71b491325 (patch) | |
tree | de86b9250a9001db377d086a2460068e5e13e8b4 /g10/armor.c | |
parent | doc: Add a gnupg-module-overview picture. (diff) | |
download | gnupg-2f02ed75a9671a7aae36968d5a1618f71b491325.tar.gz gnupg-2f02ed75a9671a7aae36968d5a1618f71b491325.zip |
gpg: Make ASCII armor decoding more robust to encoding errors.
* g10/armor.c (radix64_read): If the = is followed by the string "3D",
check if the following four characters are valid radix 64 and are
followed by a new line. If so, warn and ignore the '3D'.
--
Signed-off-by: Neal H. Walfield <[email protected]>
GnuPG-bug-id: 2250
Diffstat (limited to 'g10/armor.c')
-rw-r--r-- | g10/armor.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/g10/armor.c b/g10/armor.c index 55ee5d328..e34518e0b 100644 --- a/g10/armor.c +++ b/g10/armor.c @@ -796,6 +796,24 @@ radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn, } } + /* Occasionally a bug MTA will leave the = escaped as + =3D. If the 4 characters following that are valid + Radix64 characters and they are following by a new + line, assume that this is the case and skip the + 3D. */ + if (afx->buffer_pos + 6 < afx->buffer_len + && afx->buffer[afx->buffer_pos + 0] == '3' + && afx->buffer[afx->buffer_pos + 1] == 'D' + && asctobin[afx->buffer[afx->buffer_pos + 2]] != 255 + && asctobin[afx->buffer[afx->buffer_pos + 3]] != 255 + && asctobin[afx->buffer[afx->buffer_pos + 4]] != 255 + && asctobin[afx->buffer[afx->buffer_pos + 5]] != 255 + && afx->buffer[afx->buffer_pos + 6] == '\n') + { + afx->buffer_pos += 2; + afx->qp_detected = 1; + } + if (!n) onlypad = 1; |