diff options
author | Paul Phillips <paulp@improving.org> | 2010-09-19 03:58:11 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-09-19 03:58:11 +0000 |
commit | 28c1aa3c204b0c1081d040a66a628d8f21306b10 (patch) | |
tree | 514e141982f8e29b5ba3787fd7ff323a7990585f /src/fjbg/ch | |
parent | df7119adc0b5816a17130ecc2ecf94d995c86d04 (diff) | |
download | scala-28c1aa3c204b0c1081d040a66a628d8f21306b10.tar.gz scala-28c1aa3c204b0c1081d040a66a628d8f21306b10.tar.bz2 scala-28c1aa3c204b0c1081d040a66a628d8f21306b10.zip |
Guard against overflow in fjbg.
Diffstat (limited to 'src/fjbg/ch')
-rw-r--r-- | src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java b/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java index 69d0436528..f0f61630e6 100644 --- a/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java +++ b/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java @@ -575,12 +575,13 @@ public class JExtendedCode extends JCode { } int keyMin = keys[0], keyMax = keys[keys.length - 1]; - int keyRange = keyMax - keyMin + 1; + /** Calculate in long to guard against overflow. */ + long keyRange = (long)keyMax - keyMin + 1; if ((double)keys.length / (double)keyRange >= minDensity) { // Keys are dense enough, use a table in which holes are // filled with defaultBranch. - int[] newKeys = new int[keyRange]; - Label[] newBranches = new Label[keyRange]; + int[] newKeys = new int[(int)keyRange]; + Label[] newBranches = new Label[(int)keyRange]; int oldPos = 0; for (int i = 0; i < keyRange; ++i) { int key = keyMin + i; |