[Mew-dist 15884] IM on 64bit processor (bug report)
Yasuhisa Itoh
ito at example.com
2001年 1月 12日 (金) 22:03:27 JST
東京理科大学の伊東と申します。
Alpha Linux(64bit)上でAPOP使用時にimgetがフリーズするというバグが
あったので、症状と私がとった対策についてお知らせします。
フリーズの原因は、IM::MD5::MD5.pm内のサブルーチンMD5_trunc()に
非常に大きな値が渡されるということでした。およそ2の64乗に近い値が
渡されれおり、32bitへの繰り下げ処理が2の32乗回発生してしまうのです。
巨大な引数は32bit環境を想定して使われているビット反転演算子によって
生成されているようです。以下のように各ルーチンを書き換えれば
とりあえず動作するようです。
sub MD5_F {my($x, $y, $z) = @_; ((($x) & ($y)) | (&MD5_trunc(~$x) & ($z))); }
sub MD5_G {my($x, $y, $z) = @_; ((($x) & ($z)) | (($y) & &MD5_trunc(~$z))); }
sub MD5_I {my($x, $y, $z) = @_; (($y) ^ (($x) | &MD5_trunc(~$z))); }
sub MD5_trunc {
my($x) = @_;
# while ($x >= 4294967296) {
# $x -= 4294967296;
# }
$x &= 0xffffffff;
return $x;
}
--
□□□ Yasuhisa Itoh (伊東 靖寿)
□□□ ito at example.com
□□□ http://www.hanlab.ee.kagu.sut.ac.jp/~ito/
Mew-dist メーリングリストの案内