[Mew-Win32 01118] 'imsort --field=subject --mode=ml' resulted in exception.

Kyotaro HORIGUCHI kyota at example.com
1999年 1月 6日 (水) 15:06:08 JST


堀口と申します. Mew1.94b2/IM104/Windows98 で mew-summary-sort
("subject:ml") とすると perlが例外で落ちてしまいます.

# imsort --src=+inbox --field=subject --mode=ml を実行すると
# 5.004_04 (activeware でないやつ)では Widows の例外ウィンドウ.
# 5.005_02 (activeware build 508)では "Error: Runtime exception"
# と表示して終了.

 例外が発生するのは imsortの170行目の"$1 =~ /^(.*)[:,\s](.*)$/;" 
の部分のようです. とりあえず直前の置換でマッチしていない状態で $1 
に値を代入(参照もまずいかも)しようとしているのがまずいようです.

 マッチに失敗したときはサブジェクトの書き換え部分をスキップするよ
うにしたところ例外が出なくなりました.

 あとは MIME エンコードのやり方の細かい違いや果てはJISの制御コー
ドの入れ方なんかでソートが狂う(Re: の後に最初の Re: なしのが来る
など)ことがあります. MIME エンコードについてはデコードすればよい
のですが, 制御コードの違いなどは jis の文字列の正規化をするとか, 
いっそ比較を EUC なんか(UNICODE?)でやってしまうとかするしかないの
でしょうかね. 不当に重そう^^;

-patch for IM-104---------------
*** imsort.org	Wed Dec 23 19:56:15 1998
--- imsort	Wed Dec 23 19:56:43 1998
***************
*** 165,175 ****
  
      ($_) = /^$field:\s+([^\n]*)/imo;
      if (lc($field) eq 'subject') {
  	if ($smode eq 'ml') {
! 	    s/^[\[\(]([^\]\)]*)[\]\)]\s*//i;
  	    $1 =~ /^(.*)[:,\s](.*)$/;       $ml=$1; $num=$2;
  	    s/^(re:\s*)(.*)$/$2$1/i;
  	    $_ = $ml . $_ . $num;
  	} else {
  	    s/^(re:\s*)(.*)$/$2$1/i;
  	}
--- 165,176 ----
  
      ($_) = /^$field:\s+([^\n]*)/imo;
      if (lc($field) eq 'subject') {
  	if ($smode eq 'ml') {
! 	  if(s/^[\[\(]([^\]\)]*)[\]\)]\s*//i){
  	    $1 =~ /^(.*)[:,\s](.*)$/;       $ml=$1; $num=$2;
  	    s/^(re:\s*)(.*)$/$2$1/i;
  	    $_ = $ml . $_ . $num;
+ 	  }
  	} else {
  	    s/^(re:\s*)(.*)$/$2$1/i;
  	}
----------------
-- 
堀口恭太郎 



Mew-win32 メーリングリストの案内