CRLFs in encoded word

守岡知彦 / MORIOKA Tomohiko tomo @ kanji.zinbun.kyoto-u.ac.jp
2004年 4月 15日 (木) 19:53:36 JST


>>>>> In [emacs-mime-ja : No.01712] 
>>>>>	"山岡さん" = Katsumi Yamaoka <yamaoka @ jpl.org> wrote:

山岡さん> eword-decode-unfolded-unstructured-field-body という関数は、
山岡さん> 折り返しの無い文字列を返すことが期待されていると思うのですが、

;; 名前から判断するに、どっちかというと、折り返しの無い文字列が渡され
;; ることが期待されているような気がします。ただ、eword-decode-string 
;; を `must-unfold' オプション付きで呼んでるので、折り返しの無い文字列
;; が返されるべきでしょうが。

山岡さん> 世の中には CRLF を encoded word に含めてしまう変な MUA が存
山岡さん> 在するようです。そんな場合、この関数のデコード結果は折り返さ
山岡さん> れてしまいます。

山岡さん> 具体的には、Subject のデコード結果でそのようなことが起きると、
山岡さん> T-gnus の場合には summary の thread 表示が乱れ、場合によって
山岡さん> はそれ以降のメールが summary に現れなくなってしまう障害も起
山岡さん> きるらしいです (ぼくの環境では再現できないのですが)。

山岡さん> この関数を、名前通り、常に戻り値に折り返しを含まないようにし
山岡さん> てしまうのは反則でしょうか?

まさにその目的のために `must-unfold' オプションが付け加えられたと記憶
しています。

code を追って行くと `must-unfold' 族の根本は eword-decode-encoded-text
のように思われます。で、ここでは

      (when dest
	(setq dest (decode-mime-charset-string dest charset))
	(when must-unfold
	  (mapconcat
	   (function
	    (lambda (chr)
	      (cond ((eq chr ?\n) "")
		    ((eq chr ?\t) " ")
		    (t (char-to-string chr)))))
	   (std11-unfold-string dest) ""))
	(when language
	  (put-text-property 0 (length dest) 'mime-language language dest))
	dest))))

なんてことをしてて、折り返し処理をしようとしているように見受けられるの
ですが、結果を dest に保存していないためくたびれもうけになっているよう
です。

そういう訳で、この部分を修正して commit しました。

-- 
守岡 知彦 (MORIOKA Tomohiko) <tomo @ kanji.zinbun.kyoto-u.ac.jp>



More information about the Emacs-mime-ja mailing list