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)
{