SEO対策とセキュリティで企業をバックアップします。

ITエンジニアの技術力UPをお約束します。

bsfilterでSPAM学習アップデートしたらエラー。修正対応。

bsfilterでSPAM学習アップデートしたらエラー。修正対応。


CentOS7の環境でbsfilterの学習をさせようとしたら下記のエラーが。

bsfilterも相当古いのでアップデートがもう無いのため、こんな事はよくあるのだろう。

/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へ適用してみる。

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が使えることがわかった。

# yum install ruby-devel
#gem install string-scrub

# vi /usr/local/sbin/bsfilter
以下を追記。
require 'string/scrub'

今度はbsfilter –add-spam ,–add-clean 実行成功しました。

タグ: , , ,