data-flow analysis using the most primitive domain fails for MySQL

Issue #111 resolved
Former user created an issue

Generated Mon Sep 11 22:18:37 CEST 2017

jar:file:/Users/Michael/Desktop/com_mysql.jdbc_5.1.5.jar!/com/mysql/jdbc/ServerPreparedStatement.class

Number of thrown exceptions: 1

com/mysql/jdbc/ServerPreparedStatement "public int[] executeBatch()"
Length: 529
anon$1 the interpretation failed
org.opalj.ai.InterpretationFailedException$ apply   81
org.opalj.ai.AI throwInterpretationFailedException$1    574
org.opalj.ai.AI continueInterpretation  2580
org.opalj.ai.AI continueInterpretation  381
org.opalj.ai.AI performInterpretation   357
org.opalj.ai.AI perform 328
org.opalj.ai.AI apply   195
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$1  apply$mcJ$sp    177
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$1  apply   174
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$1  apply   174
org.opalj.util.PerformanceEvaluation    time    66
org.opalj.ai.debug.InterpretMethodsAnalysis$    org$opalj$ai$debug$InterpretMethodsAnalysis$$analyzeMethod$1    174
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$3$$anonfun$apply$1 apply   230
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$3$$anonfun$apply$1 apply   229
org.opalj.concurrent.package$$anonfun$parForeachArrayElement$1  apply$mcV$sp    240
org.opalj.concurrent.package$$anonfun$parForeachArrayElement$1  apply   235
org.opalj.concurrent.package$$anonfun$parForeachArrayElement$1  apply   235
scala.concurrent.impl.Future$PromiseCompletingRunnable  liftedTree1$1   24
scala.concurrent.impl.Future$PromiseCompletingRunnable  run 24
java.util.concurrent.ThreadPoolExecutor runWorker   1149
java.util.concurrent.ThreadPoolExecutor$Worker  run 624
java.lang.Thread    run 748
caused by:

ClassCastException org.opalj.ai.ValuesDomain$IllegalValue cannot be cast to org.opalj.ai.ValuesDomain$ReferenceValue
org.opalj.ai.domain.l0.TypeLevelReferenceValues$class   asReferenceValue    486
org.opalj.ai.domain.l0.PrimitiveTACAIDomain asReferenceValue    42
org.opalj.ai.domain.l0.TypeLevelReferenceValues$class   refIsNull   574
org.opalj.ai.domain.l0.PrimitiveTACAIDomain refIsNull   42
org.opalj.ai.AI$$anonfun$continueInterpretation$6   apply   1666
org.opalj.ai.AI$$anonfun$continueInterpretation$6   apply   1666
org.opalj.ai.AI ifXX$1  1192
org.opalj.ai.AI continueInterpretation  1666
org.opalj.ai.AI continueInterpretation  381
org.opalj.ai.AI performInterpretation   357
org.opalj.ai.AI perform 328
org.opalj.ai.AI apply   195
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$1  apply$mcJ$sp    177
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$1  apply   174
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$1  apply   174
org.opalj.util.PerformanceEvaluation    time    66
org.opalj.ai.debug.InterpretMethodsAnalysis$    org$opalj$ai$debug$InterpretMethodsAnalysis$$analyzeMethod$1    174
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$3$$anonfun$apply$1 apply   230
org.opalj.ai.debug.InterpretMethodsAnalysis$$anonfun$3$$anonfun$apply$1 apply   229
org.opalj.concurrent.package$$anonfun$parForeachArrayElement$1  apply$mcV$sp    240
org.opalj.concurrent.package$$anonfun$parForeachArrayElement$1  apply   235
org.opalj.concurrent.package$$anonfun$parForeachArrayElement$1  apply   235
scala.concurrent.impl.Future$PromiseCompletingRunnable  liftedTree1$1   24
scala.concurrent.impl.Future$PromiseCompletingRunnable  run 24
java.util.concurrent.ThreadPoolExecutor runWorker   1149
java.util.concurrent.ThreadPoolExecutor$Worker  run 624
java.lang.Thread    run 748

Comments (3)

  1. Michael Eichberg repo owner

    The reason – in the above case(!) – is the lacking understanding of the type hierarchy if the JDK is not loaded. If the JDK is not loaded, a "get field" which may throw a NullPointerException may lead to the execution of an "XXXHandler" (here: SQLExceptionHandler).... which is total non-sense and will lead to a corrupt state.

    In other words, the above issue does not appear if the JDK is also loaded.

  2. Log in to comment