You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Tomas Rokicki (JIRA)" <ji...@apache.org> on 2017/02/07 19:58:42 UTC

[jira] [Created] (GROOVY-8080) Number stack is "unfortunate"

Tomas Rokicki created GROOVY-8080:
-------------------------------------

             Summary: Number stack is "unfortunate"
                 Key: GROOVY-8080
                 URL: https://issues.apache.org/jira/browse/GROOVY-8080
             Project: Groovy
          Issue Type: Wish
          Components: Compiler
    Affects Versions: 2.4.8
         Environment: Windows (but probably generic)
            Reporter: Tomas Rokicki


Groovy's default number stack is unfortunate.

groovy:000> 1/(1/(30000*30000))
===> 909090909.091

Only two significant digits of precision!

groovy:000> 1/(1/(new Double(30000)*new Double(30000)))
===> 9.0E8

Correct value.

groovy:000> 1/(1/(70000*70000))
===> 588235294.118

Way off (integer overflow); Groovy "fixes" division but still overflows on ints?

groovy:000> 1/(1/(new Double(70000)*new Double(70000)))
===> 4.9E9

Correct value

groovy:000> 9**999999999

Blows the JVM.  So integer overflow won't happen here, but it does with basic multiplication.

Probably intentional, but limits Groovy's applicability with such an obvious DOS attack.

Overall, the number stack in Groovy is unintuitive and outright dangerous.

Probably not something that can be fixed.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)