bc: do not yet allow 2^2.1
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 22 Dec 2018 22:14:48 +0000 (23:14 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 22 Dec 2018 22:14:48 +0000 (23:14 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/bc.c

index ae5105b01ff36930f6b911acb222ed90f275350e..8cd67b0f5bce4295d396aff1c60dd495758793e7 100644 (file)
@@ -2095,8 +2095,10 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
        size_t i, powrdx, resrdx;
        bool neg;
 
-// GNU bc does not allow 2^2.0. We do.
-//     if (b->rdx) RETURN_STATUS(bc_error("non integer number"));
+       // GNU bc does not allow 2^2.0 - we do
+       for (i = 0; i < b->rdx; i++)
+               if (b->num[i] != 0)
+                       RETURN_STATUS(bc_error("not an integer"));
 
        if (b->len == 0) {
                bc_num_one(c);
@@ -2505,7 +2507,7 @@ static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
        if (c->len == 0)
                RETURN_STATUS(bc_error("divide by zero"));
        if (a->rdx || b->rdx || c->rdx)
-               RETURN_STATUS(bc_error("non integer number"));
+               RETURN_STATUS(bc_error("not an integer"));
        if (b->neg)
                RETURN_STATUS(bc_error("negative number"));