bsfilterでSPAM学習アップデートしたらエラー。修正対応。
2019/12/03
2019/12/23
タグ: bsfilter, ruby, SPAM学習, メール
CentOS7の環境でbsfilterの学習をさせようとしたら下記のエラーが。
bsfilterも相当古いのでアップデートがもう無いのため、こんな事はよくあるのだろう。
1 2 3 4 5 6 7 8 9 10 11 |
/path/bsfilter:1371:in `gsub': invalid byte sequence in EUC-JP (ArgumentError) from /path/bsfilter:1371:in `decode_character_reference' from /path/bsfilter:1590:in `tokenize_body' from /path/bsfilter:1303:in `tokenize_buf' from /path/bsfilter:2799:in `block (2 levels) in do_imap' from /path/bsfilter:2796:in `each' from /path/bsfilter:2796:in `block in do_imap' from /path/bsfilter:2794:in `each' from /path/bsfilter:2794:in `do_imap' from /path/bsfilter:3442:in `run' from /path/bsfilter:3494:in `<main>' |
既に、数年前に対応されていた方のブログを見ると、「Ruby2.1.0以降では、decode_character_refrence()関数を次のように書き換えるとある。」 でも、CentOS7のlatest(7.7)でもrubyのバージョンはruby 2.0.0p648 で古い。 とりあえず修正対応で指示された内容をbsfilterへ適用してみる。
1 2 3 4 |
def decode_character_reference(str, lang) if (@options["utf-8"]) newstr2 = str.scrub('?') # この行を追加。下の行のstrをnewstr2に変更 newstr = newstr2.gsub(/\&\#(\d{1,5}|x[\da-f]{1,4});/i) do |
bsfilter –add-spam ,–add-clean 実行するとやはり別のエラーが出る。でも異なるエラーでscrubがないとエラーが出てるのでライブラリーの問題かと思い探したらやはり現バージョンでは標準ではないが追加でscrubが使えることがわかった。
1 2 3 4 5 6 |
# yum install ruby-devel #gem install string-scrub # vi /usr/local/sbin/bsfilter 以下を追記。 require 'string/scrub' |
今度はbsfilter –add-spam ,–add-clean 実行成功しました。