Make gnus-base64-repad a bit stricter again

* lisp/gnus/gnus-util.el (gnus-base64-repad): Make the code a bit
stricter again.
This commit is contained in:
Alex Bochannek 2020-10-01 02:44:58 +02:00 committed by Lars Ingebrigtsen
parent 7518596857
commit d11627a7ca
2 changed files with 13 additions and 6 deletions

View file

@ -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)

View file

@ -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))