看板 DFBSD_bugs 關於我們 聯絡資訊
On Thu, 18 Nov 2004, Paul Herman wrote: > Just saw this: > > bash$ echo "e(1.9)" | bc -l > 6.68589444227926941607 > bash$ echo "e(2.0)" | bc -l > 7.38905609893065022723 > bash$ echo "e(2.1)" | bc -l > [...] > > ...and dc (that's with a 'd') just hangs consuming 100% of CPU. Seems to be > true for any number > 2.0. The older bc/dc work. Tried gcc2 and gcc34, same > results. I just heard back from otto (the author) and he says this is a bug in OpenSSL. Here's the patch he forwarded to me. -Paul. Index: bn_word.c =================================================================== RCS file: /cvs/src/lib/libssl/src/crypto/bn/bn_word.c,v retrieving revision 1.5 retrieving revision 1.7 diff -u -p -r1.5 -r1.7 --- bn_word.c 12 May 2003 02:18:36 -0000 1.5 +++ bn_word.c 25 Sep 2003 19:55:36 -0000 1.7 @@ -110,6 +110,9 @@ int BN_add_word(BIGNUM *a, BN_ULONG w) BN_ULONG l; int i; + if ((w & BN_MASK2) == 0) + return(1); + if (a->neg) { a->neg=0; @@ -142,6 +145,9 @@ int BN_add_word(BIGNUM *a, BN_ULONG w) int BN_sub_word(BIGNUM *a, BN_ULONG w) { int i; + + if ((w & BN_MASK2) == 0) + return(1); if (BN_is_zero(a) || a->neg) {