[Gauche-devel-jp] rfc822-date->date, rfc822-parse-date

Back to archive index

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 



Gauche-devel-jp メーリングリストの案内
Back to archive index