[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 メーリングリストの案内