[mew-dist 27673] Re: MIME decoding error: No boundary parameter for multipart

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2007年 5月 18日 (金) 17:11:19 JST


白井です。

From: Kazu Yamamoto (山本和彦) <kazu at example.com> さん曰く
Subject: [mew-dist 27672] Re: MIME decoding error: No boundary parameter for multipart
Message-ID: <20070518.153906.134215161.kazu at example.com>
Date: Fri, 18 May 2007 15:39:06 +0900 (JST)

> > 自分の間違いを出すので、ちょっといやなのですが ^^;;
> > http://www.mew.org/pipermail/mew-dist/2006-October/027047.html
> > からはじまるスレッドをお読み下さい。
> 
> これだと、変更が少なくて済みそうですが、ダメですかね?

mew-decode-broken の値によらず OK にするかですけど、ここでやると
ぐちゃぐちゃになっちゃいますね。

で、mew-decode-multipart-boundary-regex() をみると、すでに
non-ASCII な boundary を救っているわけですが、そこで不正な文字も
チェックして、ワーニングやエラーにするようにしてみました。

# ちと、warning を出す階層が違うような気もするのですが、適当な
# チェック箇所がわからなかった。。。

-- 
白井秀行 (mailto:shirai at example.com)

## なんかすごく久しぶりに Mew のコード見たような気が。

Index: mew-bq.el
===================================================================
RCS file: /cvsmew/mew/mew-bq.el,v
retrieving revision 1.51
diff -u -r1.51 mew-bq.el
--- mew-bq.el	20 Apr 2007 05:04:00 -0000	1.51
+++ mew-bq.el	18 May 2007 07:57:57 -0000
@@ -700,7 +700,9 @@
        ((eq err 'ctl)
 	(concat "The '" param "' has invalid control codes.\n"))
        ((eq err 'enc)
-	(concat "The '" param "' parameter has encoded-word.\n")))
+	(concat "The '" param "' parameter has encoded-word.\n"))
+       ((eq err 'char)
+	(concat "The '" param "' has invalid charactor.\n")))
       (mew-xinfo-get-warning)))))
 
 (defun mew-header-decode-region (key rbeg rend &optional draftp)
Index: mew-decode.el
===================================================================
RCS file: /cvsmew/mew/mew-decode.el,v
retrieving revision 1.89
diff -u -r1.89 mew-decode.el
--- mew-decode.el	16 Apr 2007 01:58:06 -0000	1.89
+++ mew-decode.el	18 May 2007 07:57:57 -0000
@@ -707,8 +707,14 @@
 (defun mew-decode-multipart-boundary-regex (boundary)
   ;; for broken MUAs which uses non-ASCII boundaries
   ;; This works only on Emacs 21.
-  (setq boundary (mew-set-string-multibyte boundary))
-  (concat "^--" (regexp-quote boundary) "\\(--\\|\\)[ \t]*$"))
+  (let ((mboundary (mew-set-string-multibyte boundary)))
+    ;; Some MUAs use invalid charactor like "<>".
+    (when (or (string-match "[!-&*;<>@[-^`{-~]" mboundary)
+	      (not (string= mboundary boundary)))
+      (if mew-decode-broken
+	  (mew-decode-warning-params "Boundary" 'char)
+	(mew-decode-error "Boundary has invalid charactor")))
+    (concat "^--" (regexp-quote mboundary) "\\(--\\|\\)[ \t]*$")))
 
 (defsubst mew-decode-multipart-boundary-cont ()
   (string= (mew-match-string 1) ""))
Index: mew-header.el
===================================================================
RCS file: /cvsmew/mew/mew-header.el,v
retrieving revision 1.34
diff -u -r1.34 mew-header.el
--- mew-header.el	4 Jan 2007 06:49:10 -0000	1.34
+++ mew-header.el	18 May 2007 07:57:57 -0000
@@ -366,7 +366,7 @@
 	(when (> tmp-cnt 0)
 	  ;; broken quoted string can be rescued if it appears solely
 	  (save-match-data
-	    (if (string-match "<\\([^>]+\\)>" tmp)
+	    (if (and addrp (string-match "<\\([^>]+\\)>" tmp))
 		(setq ret (cons (mew-match-string 1 tmp) ret))
 	      (setq ret (cons (substring tmp 0 tmp-cnt) ret)))))) ;; end of catch
       (setq ret (delete nil ret))



Mew-dist メーリングリストの案内