[mew-dist 25554] Re: B decode 時のエラー条件緩和
Murata Takashi
Takashi.Murata at example.com
2004年 10月 24日 (日) 16:52:55 JST
> いや、これはあまりにも...
> やるなら、こうでしょう。
>
> 4 で割った余りが 1 のときは、どうするんでしょうか?
base64 の "=" が欠けるのではなく、余計に付加されている例がありました。
Subject: =?iso-2022-jp?B?U29waG9zIEFudGktVmlydXMgGyRCPzc8bxsoQiBJREUgGyRCJVUlISUkJWs3WTlwIScbKEI===?= W32/Bagz-D
これも救済できるように、こんな風にしてみました。
*** mew-env.el~ Mon Sep 13 17:02:34 2004
--- mew-env.el Sun Oct 24 16:42:05 2004
***************
*** 316,325 ****
(condition-case nil
(let ((r (% (length str64) 4)))
(cond
((= r 2)
! (setq str64 (concat str64 "==")))
((= r 3)
! (setq str64 (concat str64 "="))))
(base64-decode-string str64))
(error nil))))
(t
--- 316,332 ----
(condition-case nil
(let ((r (% (length str64) 4)))
(cond
+ ((= r 1)
+ (if (string-match "=$" str64)
+ (setq str64 (substring str64 0 (match-beginning 0)))))
((= r 2)
! (if (string-match "==$" str64)
! (setq str64 (substring str64 0 (match-beginning 0)))
! (setq str64 (concat str64 "=="))))
((= r 3)
! (if (string-match "===$" str64)
! (setq str64 (substring str64 0 (match-beginning 0)))
! (setq str64 (concat str64 "=")))))
(base64-decode-string str64))
(error nil))))
(t
--
村田 隆 / Takashi.Murata at example.com . . . . . ..
Mew-dist メーリングリストの案内