Sonar scanner CLI throws java.lang.IndexOutOfBoundsException

Hi All,

I’m trying to do a scan on a PL/SQL codebase and I get a java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0 exception (see full stacktrace below).

The error happens only if the script contains PL/SQL packages in variable names. For example the snippet below will produce the error for the SELECT statement. If the “dot” is removed from the foo.bar variable name, the scan runs perfectly. Have you any idea if this is a bug and should be fixed or I’m doing something wrong?

CREATE PACKAGE foo AS  -- bodiless package
   TYPE bar IS RECORD (
      var1 SMALLINT,
      var2 SMALLINT);
END foo;

BEGIN
  SELECT * INTO foo.bar FROM exampleTable;
END;
/

Versions used:

  • SonarQube: Version 7.9.1 (build 27448)
  • Scanner: 4.2.0.1873
  • Java: 11.0.3 AdoptOpenJDK (64-bit)
  • OS: Mac OS X 10.15.4 x86_64
  • Relevant plugins: Z PL/SQL Analyzer 2.4.0
ERROR: Error during SonarQube Scanner execution
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
at java.base/java.util.Objects.checkIndex(Unknown Source)
at java.base/java.util.ArrayList.get(Unknown Source)
at org.sonar.plsqlopen.checks.SelectAllColumnsCheck.visitNode(SelectAllColumnsCheck.kt:72)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitNode(PlSqlAstWalker.kt:94)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:60)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visitChildren(PlSqlAstWalker.kt:74)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.visit(PlSqlAstWalker.kt:62)
at org.sonar.plsqlopen.squid.PlSqlAstWalker.walk(PlSqlAstWalker.kt:51)
at org.sonar.plsqlopen.squid.AstScanner.scanFile(AstScanner.kt:87)
at org.sonar.plsqlopen.squid.PlSqlAstScanner.scanMainFile(PlSqlAstScanner.kt:76)
at org.sonar.plsqlopen.squid.PlSqlAstScanner.scanFile(PlSqlAstScanner.kt:67)
at org.sonar.plsqlopen.PlSqlSquidSensor.execute(PlSqlSquidSensor.kt:64)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:400)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:395)
at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:358)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:141)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
at org.sonarsource.scanner.cli.Main.execute(Main.java:112)
at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
at org.sonarsource.scanner.cli.Main.main(Main.java:61)

Thanks,
Daniel

This plugin is not supported by SonarSource.
You should try reporting this issue to the developers of the plugin.