;;; Code:
-(eval-and-compile
- (or (fboundp 'base64-decode-region)
- (require 'base64)))
-
(eval-when-compile
(defvar mm-uu-decode-function)
(defvar mm-uu-binhex-decode-function))
(require 'rfc2047)
(require 'mm-encode)
-;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
+;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL,
;; BS, vertical TAB, form feed, and ^_
-(defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f")
+;;
+;; Note that CR is *not* included, as that would allow a non-paired CR
+;; in the body contrary to RFC 2822:
+;;
+;; - CR and LF MUST only occur together as CRLF; they MUST NOT
+;; appear independently in the body.
+
+(defvar mm-7bit-chars "\x20-\x7f\n\t\x7\x8\xb\xc\x1f")
(defcustom mm-body-charset-encoding-alist
'((iso-2022-jp . 7bit)
;; known to break servers.
;; Note: UTF-16 variants are invalid for text parts [RFC 2781],
;; so this can't happen :-/.
+ ;; PPS: Yes, it can happen if the user specifies UTF-16 in the MML
+ ;; markup. - jh.
(utf-16 . base64)
(utf-16be . base64)
(utf-16le . base64))
))))))
(defun mm-long-lines-p (length)
- "Say whether any of the lines in the buffer is longer than LINES."
+ "Say whether any of the lines in the buffer is longer than LENGTH."
(save-excursion
(goto-char (point-min))
(end-of-line)
(longp (mm-long-lines-p 1000)))
(require 'message)
(cond
- ((and (not mm-use-ultra-safe-encoding)
- (not longp)
+ ((and (not longp)
+ (not (and mm-use-ultra-safe-encoding
+ (save-excursion (re-search-forward "^From " nil t))))
(eq bits '7bit))
bits)
((and (not mm-use-ultra-safe-encoding)
(provide 'mm-bodies)
+;;; arch-tag: 41104bb6-4443-4ca9-8d5c-ff87ecf27d8d
;;; mm-bodies.el ends here