Kazuhiro's blog
ようこそ! Kazuhiro's blog
金曜日, 11月 29 2024 @ 04:36 午前 JST
   

サマリバッファの文字化け (Wanderlustの)

general

MLに投稿されていた、サマリバッファのキャッシュが正しく保存されない問題についてですが、WanderlustのMLが早めに終了してしまったようなので、 (だいたい) 自分で調べた内容を記録しておきます。 encode-coding-regionの動作がおかしいというところまでが前提です。

src/coding.cにあるCODING_DECODE_CHARマクロのコメントには以下のように書かれています。

/* This wrapper macro is used to preserve validity of pointers into
   buffer text across calls to decode_char, which could cause
   relocation of buffers if it loads a charset map, because loading a
   charset map allocates large structures.  */

これによると、charset mapが読み込まれると、bufferのrelocationが生じる可能性があります。 このコメントにはdecode_charについてのみ書かれていますが、encode_charや、char_charsetについてもcharset mapが読み込まれる、すなわち、bufferのrelocationが生じる可能性があります。 しかし、エンコーダ (encode_coding_iso_2022等) はそれを考慮していない為、実際にrelocationが生じると不適切な場所へエンコードした結果を書き込んでしまいます。 このバグを持つ Emacs に関しては、

(defadvice encode-coding-region
  (before avoid-relocation (start end coding) activate)
  (encode-coding-string (buffer-substring start end) coding))

等のようにして、encode-coding-region内でcharset mapが読み込まれないようにすれば回避できます。

Emacsに対するパッチも一応投稿していますが、反応が無いのでどうなるのかよく分かりません。

(追記) WanderlustのMLは広瀬さんが引き継がれて再開しました。 新しい投稿アドレスはwl@ml.gentei.orgです。

(追記その2) encode-coding-regionのバグはtrunkで修正されました。 半田さんありがとうございます。

タグ:Wanderlust

トラックバック

このエントリのトラックバックURL: http://ikazuhiro.s206.xrea.com/trackback.php/20110907213407438

サマリバッファの文字化け (Wanderlustの) | 0 件のコメント | アカウントの作成
コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。