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