aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcushon <cushon@google.com>2016-08-25 13:58:35 -0700
committerLiam Miller-Cushon <cushon@google.com>2016-09-15 16:08:07 -0700
commit80f4e9191630051ac741ce466d8954237430f949 (patch)
tree4e67d0bb2afdf0dbe39265937865df42b86370bf
parentc5ee876e5f2cee182b6dbe35b9cf7b4f429a8f04 (diff)
downloadturbine-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.java7
-rw-r--r--javatests/com/google/turbine/parse/ExpressionParserTest.java3
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",
+ }
});
}