diff options
author | cushon <cushon@google.com> | 2016-08-25 13:58:35 -0700 |
---|---|---|
committer | Liam Miller-Cushon <cushon@google.com> | 2016-09-15 16:08:07 -0700 |
commit | 80f4e9191630051ac741ce466d8954237430f949 (patch) | |
tree | 4e67d0bb2afdf0dbe39265937865df42b86370bf | |
parent | c5ee876e5f2cee182b6dbe35b9cf7b4f429a8f04 (diff) | |
download | turbine-80f4e9191630051ac741ce466d8954237430f949.tar.gz |
Fix bounds checks on non-decimal integer literals
Hexadecimal, octal, and binary integer literals are accepted as long as
they fit in 32 bits (JLS 3.10.1).
MOE_MIGRATED_REVID=131327820
-rw-r--r-- | java/com/google/turbine/parse/ConstExpressionParser.java | 7 | ||||
-rw-r--r-- | javatests/com/google/turbine/parse/ExpressionParserTest.java | 3 |
2 files changed, 9 insertions, 1 deletions
diff --git a/java/com/google/turbine/parse/ConstExpressionParser.java b/java/com/google/turbine/parse/ConstExpressionParser.java index 687a00d..26deb91 100644 --- a/java/com/google/turbine/parse/ConstExpressionParser.java +++ b/java/com/google/turbine/parse/ConstExpressionParser.java @@ -21,6 +21,7 @@ import static com.google.common.collect.Iterables.getOnlyElement; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; +import com.google.common.primitives.UnsignedInts; import com.google.turbine.model.Const; import com.google.turbine.tree.Tree; import com.google.turbine.tree.TurbineConstantTypeKind; @@ -263,7 +264,11 @@ public class ConstExpressionParser { if (negate) { text = "-" + text; } - value = new Const.IntValue(Ints.checkedCast(parseLong(text, radix))); + value = + new Const.IntValue( + radix == 10 + ? Ints.checkedCast(parseLong(text, radix)) + : UnsignedInts.parseUnsignedInt(text, radix)); break; } case LONG: diff --git a/javatests/com/google/turbine/parse/ExpressionParserTest.java b/javatests/com/google/turbine/parse/ExpressionParserTest.java index c3b94e5..f9a2388 100644 --- a/javatests/com/google/turbine/parse/ExpressionParserTest.java +++ b/javatests/com/google/turbine/parse/ExpressionParserTest.java @@ -125,6 +125,9 @@ public class ExpressionParserTest { { "1+-2", "(1 + -2)", }, + { + "0xffffffff", "-1", + } }); } |