こんにちは、なかむら(う)です。

test/digest/test_digest.rbを実行すると、test_eqで失敗するこ
とがあることを(なかださんが)発見しました。
追ってみたところ、MD5_EqualやSHA1_Equal内で、bufferをmemcmp
している部分で不一致と判定されていました。

bufferを初期化しないで使用していて、かつ、現在使用中の長さで
なくbuffer全体をmemcmpしてしまっているため、未使用のゴミ部分
で不一致が発生してしまうことがあるようです。

ruby的には、添付の1行パッチ(なかださん製)で直っちゃいますが、
md5.cやsha1.cなどの立場的には、個別の*_Init内でbufferを初期
化してやるか、*_Equal内でちゃんと必要な長さのみ判定するよう
に修正すべきようにも思います。

どうしましょう?

Index: ext/digest/digest.c =================================================================== RCS file: /home/cvs/ruby/ext/digest/digest.c,v retrieving revision 1.12 diff -u -1 -p -w -r1.12 digest.c --- ext/digest/digest.c 29 Sep 2003 02:44:45 -0000 1.12 +++ ext/digest/digest.c 15 Oct 2003 03:02:30 -0000 @@ -75,3 +75,3 @@ rb_digest_base_alloc(klass) - pctx = xmalloc(algo->ctx_size); + pctx = xcalloc(algo->ctx_size, 1); algo->init_func(pctx);
それでは -- U.Nakamura <usa / osb.att.ne.jp> 「立場的」ってどうよ?