diff options
author | Andrew Whatson | 2023-01-03 22:19:42 +1000 |
---|---|---|
committer | Arun Isaac | 2023-01-03 13:27:37 +0000 |
commit | 8a9c14473f0ae449bfbfe77ba680734e4a14562f (patch) | |
tree | 48db47d01165133aea6f7ba4093529ec744374f7 | |
parent | f49a4e54acfced1a2a6c5f06caeab42f3eeceaf0 (diff) | |
download | guile-email-8a9c14473f0ae449bfbfe77ba680734e4a14562f.tar.gz guile-email-8a9c14473f0ae449bfbfe77ba680734e4a14562f.tar.lz guile-email-8a9c14473f0ae449bfbfe77ba680734e4a14562f.zip |
email: Support quoted-printable CR LF sequences.
* email/quoted-printable.scm (quoted-printable-decode): Ignore "=\r\n"
sequences in the input.
* tests/quoted-printable.scm ("quoted-printable decoding of soft line
breaks (=\\n)", "quoted-printable decoding of soft line
breaks (=\\r\\n)"): New tests.
Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
-rw-r--r-- | email/quoted-printable.scm | 8 | ||||
-rw-r--r-- | tests/quoted-printable.scm | 7 |
2 files changed, 13 insertions, 2 deletions
diff --git a/email/quoted-printable.scm b/email/quoted-printable.scm index 2c5d7a7..d986346 100644 --- a/email/quoted-printable.scm +++ b/email/quoted-printable.scm @@ -1,5 +1,6 @@ ;;; guile-email --- Guile email parser ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2023 Andrew Whatson <whatson@tailcall.au> ;;; ;;; This file is part of guile-email. ;;; @@ -41,11 +42,14 @@ (cond ((eof-object? c) out) ((char=? c #\=) - ;; TODO: Support "\r\n" line ending (let ((c1 (read-char in))) + ;; Skip if \n was read. (unless (char=? c1 #\Newline) (let ((c2 (read-char in))) - (put-u8 out (string->number (string c1 c2) 16))))) + ;; Skip if \r\n was read. + (unless (and (char=? c1 #\Return) + (char=? c2 #\Newline)) + (put-u8 out (string->number (string c1 c2) 16)))))) (quoted-printable-decode in out)) (else (put-u8 out (char->integer c)) (quoted-printable-decode in out))))))) diff --git a/tests/quoted-printable.scm b/tests/quoted-printable.scm index bfbd985..415feb0 100644 --- a/tests/quoted-printable.scm +++ b/tests/quoted-printable.scm @@ -1,5 +1,6 @@ ;;; guile-email --- Guile email parser ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2023 Andrew Whatson <whatson@tailcall.au> ;;; ;;; This file is part of guile-email. ;;; @@ -67,6 +68,12 @@ abriquent pour te la vendre une =C3=A2me vulgaire.") (quoted-printable-escape-encode-char #\return) (quoted-printable-escape-encode-char #\newline))) +(test-equal "quoted-printable decoding of soft line breaks (=\\n)" + (quoted-printable-decode "=\n") #vu8()) + +(test-equal "quoted-printable decoding of soft line breaks (=\\r\\n)" + (quoted-printable-decode "=\r\n") #vu8()) + (test-assert "quoted-printable random bytevector: quoted-printable-encode and quoted-printable-decode are inverses of each other" (every (lambda (len) (let ((x (random-bytevector len))) |