[mew-dist 29273] Re: cmewが例外で終わる

Masamichi HOSODA trueroad at example.com
2010年 8月 22日 (日) 22:25:46 JST


細田です。

もうひとつ ruby 版 cmew で問題を見つけました。

DB 既登録のメールと同じ Message-ID を持つメールを、
別の未登録の path で見つけると止まってしまいます。

古いメールを f で転送した時に発生しました。
他にも refile した後などにも出ると思います。
cmew -f であれば全メールが未登録になるので、出ません。

cmew の 169 行目、
            get_entry.execute!(id) do |row|
は、row が hash になることを期待しているようですが、
実際には、この書き方だと以下のように array になってしまいます。

[#28463] Difference between Statement#execute and Statement#execute!
http://rubyforge.org/tracker/index.php?func=detail&aid=28463&group_id=254&atid=1043

そのため 170 行目
              past_path = row['path']
で、row は array なのに 'path' を取り出そうとしているので、
止まってしまいます。

とりあえず以下のパッチで問題なくなりました。


--- cmew.org	2010-08-03 02:26:48.000000000 +0900
+++ cmew	2010-08-21 16:20:24.000000000 +0900
@@ -166,7 +166,7 @@
           path = get_path(fpath)
           newpath = true
           if last_mod > 0
-            get_entry.execute!(id) do |row|
+            get_entry.execute(id).each do |row|
               past_path = row['path']
               unless File.exist?(past_path)
                 del_entry.execute(id, past_path)

  細田 真道 <trueroad at example.com>


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