Skip to content

ArrayIndexOutOfBoundsException when analyzing Jimple of non-nullary methods #15

Open
@maemre

Description

@maemre

Hi,

I want to use the numerical analysis provided by Jandom in a research project and I am getting an ArrayOutOfBoundsException when analyzing methods with more than 0 parameters (including some of the examples that come with Jimple).

I am getting the error on two different computers running Windows 10 and Ubuntu 18.04 respectively, both using JDK 8. I am using the master branch of Jandom. My Jimple configuration (which can be used for reproducing the bug), using the GUI is as follows:

Tool: Soot (in the context menu).

Editor tab:

  • IR Type: Jimple
  • Analysis type: Numerical (Object also fails)
  • Class: NumericalTest
  • Method: void arraylimit(int)

Parameters tab:

  • Domain: BoxDouble (I tried all of them but Octagon)
  • Object Domain: Aliasing
  • Widening Scope: Localized
  • Narrowing Strategy: Separate
  • Widening Delay: [blank]
  • Debug: unchecked

This is the stack trace of the exception I'm getting on the SBT console:

[error] java.lang.ArrayIndexOutOfBoundsException: 3
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.jimpleExprToLinearForm$1(JimpleMethod.scala:55)
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.jimpleExprToLinearCond$1(JimpleMethod.scala:82)
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.analyzeCond$1(JimpleMethod.scala:124)
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.$anonfun$analyzeBlock$8(JimpleMethod.scala:281)
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.$anonfun$analyzeBlock$8$adapted(JimpleMethod.scala:237)
[error]         at scala.collection.Iterator.foreach(Iterator.scala:929)
[error]         at scala.collection.Iterator.foreach$(Iterator.scala:929)
[error]         at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
[error]         at scala.collection.IterableLike.foreach(IterableLike.scala:71)
[error]         at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
[error]         at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.analyzeBlock(JimpleMethod.scala:237)
[error]         at it.unich.jandom.targets.jvmsoot.JimpleMethod.analyzeBlock(JimpleMethod.scala:39)
[error]         at it.unich.jandom.targets.cfg.ControlFlowGraph.analyzeFromAnnotation(ControlFlowGraph.scala:133)
[error]         at it.unich.jandom.targets.cfg.ControlFlowGraph.analyze(ControlFlowGraph.scala:118)
[error]         at it.unich.jandom.ui.gui.SootEditorPane.analyze(SootEditorPane.scala:224)
[error]         at it.unich.jandom.ui.gui.MainFrame$$anon$8.apply(MainFrame.scala:93)
[error]         at scala.swing.Action$$anon$1.actionPerformed(Action.scala:78)
[error]         at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
[error]         at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
[error]         at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
[error]         at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
[error]         at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
[error]         at java.awt.Component.processMouseEvent(Component.java:6539)
[error]         at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
[error]         at java.awt.Component.processEvent(Component.java:6304)
[error]         at java.awt.Container.processEvent(Container.java:2239)
[error]         at java.awt.Component.dispatchEventImpl(Component.java:4889)
[error]         at java.awt.Container.dispatchEventImpl(Container.java:2297)
[error]         at java.awt.Component.dispatchEvent(Component.java:4711)
[error]         at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
[error]         at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
[error]         at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
[error]         at java.awt.Container.dispatchEventImpl(Container.java:2283)
[error]         at java.awt.Window.dispatchEventImpl(Window.java:2746)
[error]         at java.awt.Component.dispatchEvent(Component.java:4711)
[error]         at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
[error]         at java.awt.EventQueue.access$500(EventQueue.java:97)
[error]         at java.awt.EventQueue$3.run(EventQueue.java:709)
[error]         at java.awt.EventQueue$3.run(EventQueue.java:703)
[error]         at java.security.AccessController.doPrivileged(Native Method)
[error]         at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
[error]         at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
[error]         at java.awt.EventQueue$4.run(EventQueue.java:733)
[error]         at java.awt.EventQueue$4.run(EventQueue.java:731)
[error]         at java.security.AccessController.doPrivileged(Native Method)
[error]         at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
[error]         at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
[error]         at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
[error]         at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
[error]         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
[error]         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[error]         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
[error]         at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions