Having some issues with building a 32-bit version currently so I can't test
this out, but I suspect this patch will fix this problem.

Index: interpreter/classes/NumberStringClass.cpp
===================================================================
--- interpreter/classes/NumberStringClass.cpp   (revision 11070)
+++ interpreter/classes/NumberStringClass.cpp   (working copy)
@@ -2422,9 +2422,31 @@
         exponentSign = s == RexxString::ch_MINUS ? -1 : 1;
     }

+    /**
+     * Add an exponent digit to this scan.  This also validates
+     * the size of the exponent with each addition.
+     *
+     * @param d      The next character in the exponent.
+     */
     void addExponentDigit(char d)
     {
-        exponent = (exponent * 10) + (d - RexxString::ch_ZERO);
+        // if the exponent is still valid, add this digit
+        if (exponent <= Numerics::MAX_EXPONENT)
+        {
+            wholenumber_t new_exponent = (exponent * 10) + (d -
RexxString::ch_ZERO);
+            // now we need to check for an exponent that is too large
or one that
+            // caused an overflow
+            if (new_exponent > Numerics::MAX_EXPONENT || new_exponent
< exponent)
+            {
+                // set this to an invalid exponent so we can flag
this as invalid later
+                exponent = Numerics::MAX_EXPONENT + 1;
+            }
+            else
+            {
+                // this is a good value (so far)
+                exponent = new_exponent;
+            }
+        }
     }

     bool finish()


On Tue, Jun 28, 2016 at 3:07 PM, Erich Steinböck <[email protected]
> wrote:

> I have a suspicion this test in NumberString::checkIntengerDigits is wrong.
>>
> Yes, that was exactly what was needed!!!
> Thanks, saved me a *lot* of time to investigate.
>
>
> Now, there's a strange last one, again 32-bit-only, issue left:
>
> rexx -e "do e = 1 to 25; n = '123e'||1~copies(e); say n~dataType~left(4)
> n; end;"
> NUM  123e1
> NUM  123e11
> NUM  123e111
> NUM  123e1111
> NUM  123e11111
> NUM  123e111111
> NUM  123e1111111
> NUM  123e11111111
> NUM  123e111111111
> CHAR 123e1111111111
> CHAR 123e11111111111
> NUM  123e111111111111
> CHAR 123e1111111111111
> NUM  123e11111111111111
> NUM  123e111111111111111
> CHAR 123e1111111111111111
> NUM  123e11111111111111111
> CHAR 123e111111111111111111
> NUM  123e1111111111111111111
> CHAR 123e11111111111111111111
> NUM  123e111111111111111111111
> NUM  123e1111111111111111111111
> CHAR 123e11111111111111111111111
> CHAR 123e111111111111111111111111
> CHAR 123e1111111111111111111111111
>
>
>
> On Tue, Jun 28, 2016 at 6:55 PM, Rick McGuire <[email protected]>
> wrote:
>
>> I have a suspicion this test in NumberString::checkIntengerDigits is
>> wrong.
>>
>>
>>         // now check to see if the first excluded digit will cause
>> rounding
>>         // if it does, we need to worry about a carry value when
>> converting
>>         if (*(numberDigits + digitsCount) >= 5)
>>         {
>>             carry = true;
>>         }
>>
>> I think this should be
>>
>>
>>         // now check to see if the first excluded digit will cause
>> rounding
>>         // if it does, we need to worry about a carry value when
>> converting
>>         if (*(numberDigits + numDigits) >= 5)
>>         {
>>             carry = true;
>>         }
>>
>> If this is not the problem, this method is likely the place where the bug
>> is occurring.
>>
>>
>
> ------------------------------------------------------------------------------
> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
> present their vision of the future. This family event has something for
> everyone, including kids. Get more information and register today.
> http://sdm.link/attshape
> _______________________________________________
> Oorexx-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
>
>
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to