From d11627a7cadfe7db9415269135a8f4bec543ccd7 Mon Sep 17 00:00:00 2001 From: Alex Bochannek Date: Thu, 1 Oct 2020 02:44:58 +0200 Subject: [PATCH] Make gnus-base64-repad a bit stricter again * lisp/gnus/gnus-util.el (gnus-base64-repad): Make the code a bit stricter again. --- lisp/gnus/gnus-util.el | 6 +++++- test/lisp/gnus/gnus-util-tests.el | 13 ++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 0e15ebce6c6..1cf6bb70531 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -1368,7 +1368,11 @@ CRLF (RFC 5321 SMTP)." ;; input (3.1, 3.3) ;; - if line-length is set, error on input exceeding the limit (3.1) ;; - reject characters outside base encoding (3.3, also section 12) - (let ((splitstr (split-string str "[\n\r \t]+" t))) + ;; + ;; RFC 5322 section 2.2.3 consideration: + ;; Because base 64-encoded strings can appear in long header fields, remove + ;; folding whitespace while still observing the RFC 4648 decisions above. + (let ((splitstr (split-string str "[ \t]*[\r\n]+[ \t]?" t))) (when (and reject-newlines (> (length splitstr) 1)) (error "Invalid Base64 string")) (dolist (substr splitstr) diff --git a/test/lisp/gnus/gnus-util-tests.el b/test/lisp/gnus/gnus-util-tests.el index ec58032e84e..47f0a9cf761 100644 --- a/test/lisp/gnus/gnus-util-tests.el +++ b/test/lisp/gnus/gnus-util-tests.el @@ -151,8 +151,10 @@ (should (equal "Zg==" (gnus-base64-repad "Zg"))) (should (equal "Zg==" (gnus-base64-repad "Zg===="))) - (should (equal (gnus-base64-repad " ") "")) - (should (equal (gnus-base64-repad "Zg== ") "Zg==")) + (should-error (gnus-base64-repad " ") + :type 'error) + (should-error (gnus-base64-repad "Zg== ") + :type 'error) (should-error (gnus-base64-repad "Z?\x00g==") :type 'error) ;; line-length @@ -162,9 +164,10 @@ (should-error (gnus-base64-repad "Zm9v\r\nYmFy" t) :type 'error) (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9vYmFy" t))) - (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9v\r\nYmFy" nil))) - (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9v\r\nYmFy\n" nil))) - (should (equal (gnus-base64-repad "Zm9v\r\n YmFy\r\n" nil) "Zm9vYmFy")) + (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9v\r\nYmFy"))) + (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9v\r\nYmFy\n"))) + (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9v\r\n YmFy\r\n"))) + (should (equal "Zm9vYmFy" (gnus-base64-repad "Zm9v \r\n\tYmFy"))) (should-error (gnus-base64-repad "Zm9v\r\nYmFy" nil 3) :type 'error)) -- 2.39.5