[Soot-list] RuntimeException in ArrayBoundsCheckerAnalysis
Archie Cobbs
archie at dellroad.org
Tue Nov 16 09:59:19 EST 2004
Archie Cobbs wrote:
> I'm using soot.jimple.toolkits.annotation.arraycheck.ArrayBoundsChecker
> in soot 2.1.0 and suddenly am seeing this exception with one class.
> Before I delve into the tedious details, does this look familiar to
> anybody or does anyone have any clues?
>
> java.lang.RuntimeException: IntValueContainer: not integer type
> at soot.jimple.toolkits.annotation.arraycheck.IntValueContainer.getValue(IntValueContainer.java:66)
> at soot.jimple.toolkits.annotation.arraycheck.ClassFieldAnalysis.ScanMethod(ClassFieldAnalysis.java:336)
> at soot.jimple.toolkits.annotation.arraycheck.ClassFieldAnalysis.internalTransform(ClassFieldAnalysis.java:117)
> at soot.jimple.toolkits.annotation.arraycheck.ClassFieldAnalysis.getFieldInfo(ClassFieldAnalysis.java:141)
> at soot.jimple.toolkits.annotation.arraycheck.ArrayBoundsCheckerAnalysis.assertNormalExpr(ArrayBoundsCheckerAnalysis.java:1010)
> at soot.jimple.toolkits.annotation.arraycheck.ArrayBoundsCheckerAnalysis.flowThrough(ArrayBoundsCheckerAnalysis.java:548)
> at soot.jimple.toolkits.annotation.arraycheck.ArrayBoundsCheckerAnalysis.doAnalysis(ArrayBoundsCheckerAnalysis.java:491)
> at soot.jimple.toolkits.annotation.arraycheck.ArrayBoundsCheckerAnalysis.<init>(ArrayBoundsCheckerAnalysis.java:148)
> at soot.jimple.toolkits.annotation.arraycheck.ArrayBoundsChecker.internalTransform(ArrayBoundsChecker.java:87)
> at soot.BodyTransformer.transform(BodyTransformer.java:51)
> at soot.Transform.apply(Transform.java:88)
> at soot.BodyPack.internalApply(BodyPack.java:44)
> at soot.Pack.apply(Pack.java:113)
I've added the patch below to work around this problem.. however, I am
not sure if this is the correct fix. Could someone who knows this class
take a look? Or explain the meaning of "top" and "bottom"?
Thanks,
-Archie
__________________________________________________________________________
Archie Cobbs * CTO, Awarix * http://www.awarix.com
--- soot-2.1.0.orig/src/soot/jimple/toolkits/annotation/arraycheck/ClassFieldAnalysis.java 2003-12-18 11:43:04.000000000 -0600
+++ soot-2.1.0/src/soot/jimple/toolkits/annotation/arraycheck/ClassFieldAnalysis.java 2004-11-16 08:57:07.000000000 -0600
@@ -333,7 +333,8 @@
}
else
{
- if (oldv.getValue() != length.getValue())
+ if (oldv.isInteger()
+ && oldv.getValue() != length.getValue())
{
oldv.setTop();
candidates.remove(which);
More information about the Soot-list
mailing list