[Mew-dist 07555] Parameter analysis patches for Mew-1.94b7
Shun-ichi GOTO
gotoh at example.com
1999年 2月 19日 (金) 17:19:56 JST
後藤@太陽計測です
mew-win32 MLの方で報告された現象におけるMIME パラメータの解析に関しての
報告とパッチです。
#kazuさんの修正とダブるかもしれませんのが、御賞味ください。
---[以下引用]---
金子> また,これはmew-fake-cdpを使用しなくてもそうなのですが,
金子> 以下のようなケースで,
金子> Error: '(error Stack overflow in regrep matcher)'
金子> となり,マルチパートメールとしてすら表示されません.
金子> Content-Type: application/octet-stream; name="
金子> =?ISO-2022-JP?B?GyRCNjUwaTx1OVZKczlwPXEbKEI=?=.doc"
金子> これは次のように修正すれば正しく処理されるものです.
金子> Content-Type: application/octet-stream; name="=?ISO-2022-JP?B?GyRCNjUwaTx1OVZKczlwPXEbKEI=?=.doc"
金子> これも何とかならないですかね? (^^;;;;
ふぅむ。こっちの件は mew-fake-cdp.elの外の Mew本体の話しですね。
うちではそのエラーメッセージは出ないですが、別のエラーが発生し、結果マ
ルチパートにならないという症状でした。探ってみたところ、先にレポートし
たmew-param-analyzeと同様の絡みで、=の直後が"でその直後が\nというレア
ケース(?)の事故のようですね。name="\n ....." が name="になって、これを
unquoteしようとして、mew-param-analyzeがエラーというオチ。
正しい方法かどうかは、ちょっと自信がないのですが、以下のパッチをMew本
体に当てることで、うちでは表示できるようになりました。いかがでしょうか?
#mew-param-analyzeやらmew-param-decodeあたりにはkazuさんの最近の修
#正と重複するかもしれませんが、一応つけておきます。
mew-1.94b7に当てて、makeしてください。
修正点は
(1) mew-header-unfold関数を追加(in mew-header.el)
(2) mew-decode-mime-headerはunfoldしたものを処理する (in mew-decode.el)
(3) mew-param-analyzeでのunquote処理をsafetyにした (in mew-bq.el)
いじょう
--- Regards,
Shun-ichi Goto <gotoh at example.com>
R&D Group, TAIYO Corp., Tokyo, JAPAN
-------------- next part --------------
--- mew-header.el.orig Tue Feb 16 12:15:17 1999
+++ mew-header.el Fri Feb 19 04:30:57 1999
@@ -36,6 +36,12 @@
(mew-header-goto-end)
(forward-line))))
+(defun mew-header-unfold (str)
+ (while (string-match "\n\\([ \t]\\)" str)
+ (setq str (concat (substring str 0 (match-beginning 0))
+ (substring str (match-beginning 1)))))
+ str)
+
(defun mew-header-get-value (field)
"currently, when no match, it returns nil."
;; maybe called in narrowed region.
--- mew-decode.el.orig Tue Feb 16 12:15:17 1999
+++ mew-decode.el Fri Feb 19 04:34:49 1999
@@ -128,7 +128,7 @@
()
(setq n (nth 1 attr))
(setq act (nth 2 attr))
- (setq value (buffer-substring med (1- (point))))
+ (setq value (mew-header-unfold (buffer-substring med (1- (point)))))
(cond
((equal act 'analyze)
(setq value (mew-param-decode value)))
--- mew-bq.el.orig Tue Feb 16 12:15:17 1999
+++ mew-bq.el Fri Feb 19 04:14:05 1999
@@ -722,7 +722,8 @@
(setq section (string-to-int (substring section 1 nil))))
(if (null asterisk)
;; delete quote
- (if (and (char-equal (aref value 0) 34)
+ (if (and (< 1 (length value))
+ (char-equal (aref value 0) 34)
(char-equal (aref value (1- (length value))) 34))
(setq value (substring value 1 -1)))
(if (and (equal section 0)
Mew-dist メーリングリストの案内