Ryo Akagi
another_face_another_smile****@yahoo*****
2010年 6月 24日 (木) 16:56:25 JST
赤木といいます rfc822-date->date, rfc822-parse-date でメールを処理していていくつか気に なる事があったので書きます。 [1] (rfc822-date->date "Sun, 29 Nov 2009 01:23 +0030") が(秒がない)、 *** ERROR: number required, but got #f になります。 これは、添付の 822-1.diff みたいにすれば救えるとも思うのですが、もしか すると rfc822-parse-date 側でどうにかした方がいいのかもしれません。 [2] (rfc822-date->date "Sun, 29 Nov 2009 01:23:45 -0000") が(タイムゾーンが -0000) *** ERROR: integer required, but got #f になります。 これは、動作の観点からは上の [1] と同様に make-date でタイムゾーンが必 要だからですが、 リファレンスマニュアル(info)には、「パーズできないときは かわりに `#f' を返します」とありますが、これは「パーズ できるのに <date> を作れない」 ケースになりそうです。 なので、"-0000" だけは、「パーズできたけど `#f' を返す」という事で良い 気がします。(秒のときの様に適当なデフォルトも無い気がしますし) コードとしては添付の 822-2.diff の様になると思います。但しこれは rfc822-parse-date ではなく rfc822-date->date だけを弄っているので -0000 とタイムゾーンの部分が異常な場合の区別が全くできません。 元々、スパムの処理をしていたので、異常な入力は結構多いのですが、スパム の仕様が決まっているわけではないので、便利機能と割り切って、正しいものが 正しく処理できればそれで十分な気がしてきました。 [3] 不完全文字列を入力するとエラーになる(rfc822-parse-dateの段階で)。 以下の様なケースですが、恐らく同じぐらいの抽象レベルの mime-parse-version だとエラーにならない様でした。 (let1 incomplete (u8vector->string (make-u8vector 3 255)) (print (string-incomplete? incomplete)) (mime-parse-version incomplete) (rfc822-parse-date incomplete) ) mime-parse-version の方が変なのかもしれないですが、rfc822-parse-date の 動作としては入力された文字列に、正規表現を使っているからの様です。 以下を使いました(添付は面倒だったので svn diff から作りました) % gosh -V Gauche scheme shell, version 0.9 [utf-8,pthreads], i686-pc-linux-gnu -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: 822-1.diff 型: text/x-diff サイズ: 508 バイト 説明: 無し Download -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: 822-2.diff 型: text/x-diff サイズ: 497 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/gauche-devel-jp/attachments/20100624/a54501b6/attachment-0001.diff