[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: wanderlust & octet.el



;; やっと仕事が一段落したので, 色々やってみて原因が分かりました.

In the message [emacs-w3m : No.02779]
   on Mon, 11 Feb 2002 18:56:18 +0900, Hiroya Murata wrote:

> edebug で追っかけた所, octet-filter-call2-extra() で一時的に作成
> している infile と mime-save-content() で保存したファイルとでサイ
> ズが異なっていました. 中身を binary で開いて比較すると, 幾つかの
> バイトが欠落している様に見えます.

mime-\(pre\)?view-octet では, entity の内容をバッファに準備するの
に以下の様な code を使っています.

  (with-temp-buffer
    (set-buffer-multibyte nil)
    (insert (mime-entity-content entity))
    ...

ここで, User-Agent の環境で entity が, base64 で符号化されていた場合,

  (multibyte-string-p (mime-entity-content entity))
    => t

となります. 結局, unibyte のバッファに multibyte の文字列を 
insert するので, この時点でバッファの内容が壊れてしまっているのが
原因の様です.

  (with-temp-buffer
    (set-buffer-multibyte t)
    (insert (mime-entity-content entity))
    (set-buffer-multibyte nil)
    ...

とか

  (with-temp-buffer
    (set-buffer-multibyte nil)
    (mime-insert-entity-body entity)
    (mime-decode-region (point-min) (point-max)
                        (mime-entity-encoding entity))
    ...

とかすれば, 動くのは確認したんですが, どっちも何かすっきりしませ
ん. どう直すのが, 良いでしょうか?

;; 因に, XEmacs はともかく, Emacs21 で問題とならないのは何でかと
;; 思い, cvs からソースを取ってきて調べてみたら, base64 の復号化
;; に使われる base64-decode-string() で文字列を作るのに使われる函
;; 数が, make_string() から make_unibyte_string() に変更されてい
;; ました.

-- 
Hiroya Murata (村田 浩也) <lapis-lazuli@pop06.odn.ne.jp>
PGP fingerprint: 53B6 1B4A 8193 A2D4 1526  BC9E 9AEF 2F6D 249D 5F17