[Mew-dist 11973] Re: im-133 y2k bugfix (Fw: [Kondara-devel:01032])

SAITO Tetsuya ( さいとてつや ) saito at example.com
2000年 1月 3日 (月) 00:33:35 JST


さいとです.

From: Hidetomo Hosono <h at example.com>
Subject: [Mew-dist 11972] Re: im-133 y2k bugfix (Fw: [Kondara-devel:01032])
Date: Mon, 3 Jan 2000 00:01:20 +0900
Message-Id:<20000103000031H.h at example.com>

h>  私も最初はそう思って、32ビット UNIX 系 OS の日付の限界を超えたあ
h> たりの139 を入れておいたのですが、さいとさんのパッチで実際に日付を
h> でっちあげたものを幾つか用意し、imls を試してみたら問題は収まってい
h> ます。

Scan.pm での Date: フィールドの処理は,対象となるメイルに Date: フィー
ルドがある場合と,Date: フィールドがない場合の 2 つに分けられています.
ほそのさんが問題にしていたのは +draft ですので,メイルに Date: フィー
ルドがない場合になります.

メイルに Date: フィールドがない場合,対象となるメイルの更新時刻を 
stat() で取って Date: フィールドをでっちあげます.ところが,Perl の 
localtime() や gmtime() (というか,struct tm の仕様でしたっけ?)が年
として西暦の下 2 桁ではなく 1900 年からの経過年数を返します.それをそ
のまま表示していたところに問題がありました.

そこで,私のパッチでは,Date: をでっちあげるときに 1900 を足して 4 桁
の年をつっこむことで解決しました.ですから,ほそのさんのおっしゃる通り 
Date: がはじめからない場合(+draft など)ではうまくいっています.

しかし,吉藤さんや,村田さんが[Mew-dist 11960]で問題にしているのは,す
でにメイルに付けられている Date: の年が 1 桁になったり(Winbiff),3 
桁になる場合です.これは私のパッチのところは通りませんので,

----------------------------------------------------------------------
h>     ## RFC822 しか守っていない MUA からのメッセージの Date: フィールドは
h>     ## 年を2桁で表すので、50未満なら2000を足したものと、
h>     ## 50以上で100以下であれば1900を足したものとみなす。
h>     ## Date: フィールドのないメッセージに関しては
h>     ## 処理が終わっているのでチェックにもはやひっかからない。
h>     if ($year < 50) {
h> 	$year += 2000;
h>     } elsif ($year < 100) {
h> 	$year += 1900;
h>     }
h>     ## ここでいかなる場合でもメッセージの年の4桁化が終了。
----------------------------------------------------------------------

ここの処理にひっかかります.1 桁の年を通すようなパッチ([Mew-dist
11960])を当てていれば,ここでの処理もうまくいきますが,それでも 3 桁
の場合はそのまま抜けてしまいます.

もちろん 1 桁だとか 3 桁の年を Date: に入れる方が悪いと思うのですが,
私が判断することでもないので,この部分はかずさんにまかせます(^^;).

-- 
さいとてつや (saito at example.com)



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