[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