Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8367049

URL.openConnection throws StringIndexOutOfBoundsException in avm mode

XMLWordPrintable

    • generic
    • generic

      ADDITIONAL SYSTEM INFORMATION :
      os: Ubuntu Linux
      jtreg 7.6-dev+0n
      jdk: temurin 17.0.14 & 17.0.16


      A DESCRIPTION OF THE PROBLEM :
      URL.openConnection throws StringIndexOutOfBoundsException when using -avm in Jtreg within JDK-17.
      Removing -avm flag/using JDK-24/not using jtreg will never trigger it, and openConnection will throw IOException as expected.
      When I using latest JDK17(temurin 17.0.16), I get some warnings.
      WARNING: A terminally deprecated method in java.lang.System has been called
      WARNING: System::setSecurityManager has been called by com.sun.javatest.regtest.agent.RegressionSecurityManager (file:/home/usrname/Develop/jtreg/build/images/jtreg/lib/jtreg.jar)
      WARNING: Please consider reporting this to the maintainers of com.sun.javatest.regtest.agent.RegressionSecurityManager
      WARNING: System::setSecurityManager will be removed in a future release

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Using Jtreg to execute testcase
      jtreg -va -ea -avm OpenStream.java

      ACTUAL -
      --------------------------------------------------
      TEST: src/test/java/OpenStream.java
      TEST JDK: /home/usrname/.jdks/temurin-17.0.16

      ACTION: build -- Passed. Build successful
      REASON: Named class compiled on demand
      TIME: 0.437 seconds
      messages:
      command: build OpenStream
      reason: Named class compiled on demand
      started: Wed Sep 03 15:23:51 CST 2025
      Test directory:
        compile: OpenStream
      finished: Wed Sep 03 15:23:52 CST 2025
      elapsed time (seconds): 0.437

      ACTION: compile -- Passed. Compilation successful
      REASON: .class file out of date or does not exist
      TIME: 0.432 seconds
      messages:
      command: compile /home/usrname/Develop/Project/src/test/java/OpenStream.java
      reason: .class file out of date or does not exist
      started: Wed Sep 03 15:23:51 CST 2025
      Mode: agentvm
      Agent id: 1
      Process id: 579295
      finished: Wed Sep 03 15:23:52 CST 2025
      elapsed time (seconds): 0.432
      configuration:
      Boot Layer (javac runtime environment)
        class path: /home/usrname/Develop/jtreg/build/images/jtreg/lib/javatest.jar
                    /home/usrname/Develop/jtreg/build/images/jtreg/lib/jtreg.jar
        patch: java.base /home/usrname/Develop/Project/JTwork/patches/java.base

      javac compilation environment
        source path: /home/usrname/Develop/Project/src/test/java
        class path: /home/usrname/Develop/Project/src/test/java
                     /home/usrname/Develop/Project/JTwork/classes/src/test/java

      rerun:
      cd /home/usrname/Develop/Project/JTwork/scratch && \
      DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
      DESKTOP_SESSION=plasma \
      DISPLAY=:1 \
      HOME=/home/usrname \
      LANG=en_US.UTF-8 \
      PATH=/bin:/usr/bin:/usr/sbin \
      WAYLAND_DISPLAY=wayland-0 \
      XDG_CONFIG_DIRS=/home/usrname/.config/kdedefaults:/etc/xdg \
      XDG_CURRENT_DESKTOP=KDE \
      XDG_DATA_DIRS=/home/usrname/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share \
      XDG_MENU_PREFIX=plasma- \
      XDG_RUNTIME_DIR=/run/user/1000 \
      XDG_SEAT=seat0 \
      XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 \
      XDG_SESSION_CLASS=user \
      XDG_SESSION_DESKTOP=KDE \
      XDG_SESSION_ID=2 \
      XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1 \
      XDG_SESSION_TYPE=wayland \
      XDG_VTNR=1 \
      XMODIFIERS=@im=fcitx \
          /home/usrname/.jdks/temurin-17.0.16/bin/javac \
              -J-ea \
              -J-Dtest.vm.opts=-ea \
              -J-Dtest.tool.vm.opts=-J-ea \
              -J-Dtest.compiler.opts= \
              -J-Dtest.java.opts= \
              -J-Dtest.jdk=/home/usrname/.jdks/temurin-17.0.16 \
              -J-Dcompile.jdk=/home/usrname/.jdks/temurin-17.0.16 \
              -J-Dtest.timeout.factor=1.0 \
              -J-Dtest.root=/home/usrname/Develop/Project \
              -J-Dtest.name=src/test/java/OpenStream.java \
              -J-Dtest.verbose=Verbose[p=FULL,f=FULL,e=FULL,t=false,m=false] \
              -J-Dtest.file=/home/usrname/Develop/Project/src/test/java/OpenStream.java \
              -J-Dtest.src=/home/usrname/Develop/Project/src/test/java \
              -J-Dtest.src.path=/home/usrname/Develop/Project/src/test/java \
              -J-Dtest.classes=/home/usrname/Develop/Project/JTwork/classes/src/test/java \
              -J-Dtest.class.path=/home/usrname/Develop/Project/JTwork/classes/src/test/java \
              -J-Dtest.class.path.prefix=/home/usrname/Develop/Project/JTwork/classes/src/test/java:/home/usrname/Develop/Project/src/test/java \
              -d /home/usrname/Develop/Project/JTwork/classes/src/test/java \
              -sourcepath /home/usrname/Develop/Project/src/test/java \
              -classpath /home/usrname/Develop/Project/src/test/java:/home/usrname/Develop/Project/JTwork/classes/src/test/java /home/usrname/Develop/Project/src/test/java/OpenStream.java

      ACTION: main -- Failed. Execution failed: `main' threw exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
      REASON: Assumed action based on file name: run main OpenStream
      TIME: 0.184 seconds
      messages:
      command: main OpenStream
      reason: Assumed action based on file name: run main OpenStream
      started: Wed Sep 03 15:23:52 CST 2025
      Mode: agentvm
      Agent id: 2
      Process id: 579342
      finished: Wed Sep 03 15:23:52 CST 2025
      elapsed time (seconds): 0.184
      configuration:
      Boot Layer
        class path: /home/usrname/Develop/jtreg/build/images/jtreg/lib/javatest.jar
                    /home/usrname/Develop/jtreg/build/images/jtreg/lib/jtreg.jar
                    /home/usrname/Develop/jtreg/build/images/jtreg/lib/junit-platform-console-standalone-1.11.0.jar
                    /home/usrname/Develop/jtreg/build/images/jtreg/lib/testng-7.3.0.jar
                    /home/usrname/Develop/jtreg/build/images/jtreg/lib/guice-5.1.0.jar
                    /home/usrname/Develop/jtreg/build/images/jtreg/lib/jcommander-1.82.jar
        patch: java.base /home/usrname/Develop/Project/JTwork/patches/java.base

      Test Layer
        class path: /home/usrname/Develop/Project/JTwork/classes/src/test/java
                    /home/usrname/Develop/Project/src/test/java

      rerun:
      cd /home/usrname/Develop/Project/JTwork/scratch && \
      DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
      DESKTOP_SESSION=plasma \
      DISPLAY=:1 \
      HOME=/home/usrname \
      LANG=en_US.UTF-8 \
      PATH=/bin:/usr/bin:/usr/sbin \
      WAYLAND_DISPLAY=wayland-0 \
      XDG_CONFIG_DIRS=/home/usrname/.config/kdedefaults:/etc/xdg \
      XDG_CURRENT_DESKTOP=KDE \
      XDG_DATA_DIRS=/home/usrname/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share \
      XDG_MENU_PREFIX=plasma- \
      XDG_RUNTIME_DIR=/run/user/1000 \
      XDG_SEAT=seat0 \
      XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 \
      XDG_SESSION_CLASS=user \
      XDG_SESSION_DESKTOP=KDE \
      XDG_SESSION_ID=2 \
      XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1 \
      XDG_SESSION_TYPE=wayland \
      XDG_VTNR=1 \
      XMODIFIERS=@im=fcitx \
          /home/usrname/.jdks/temurin-17.0.16/bin/java \
              -Dtest.vm.opts=-ea \
              -Dtest.tool.vm.opts=-J-ea \
              -Dtest.compiler.opts= \
              -Dtest.java.opts= \
              -Dtest.jdk=/home/usrname/.jdks/temurin-17.0.16 \
              -Dcompile.jdk=/home/usrname/.jdks/temurin-17.0.16 \
              -Dtest.timeout.factor=1.0 \
              -Dtest.root=/home/usrname/Develop/Project \
              -Dtest.name=src/test/java/OpenStream.java \
              -Dtest.verbose=Verbose[p=FULL,f=FULL,e=FULL,t=false,m=false] \
              -Dtest.file=/home/usrname/Develop/Project/src/test/java/OpenStream.java \
              -Dtest.src=/home/usrname/Develop/Project/src/test/java \
              -Dtest.src.path=/home/usrname/Develop/Project/src/test/java \
              -Dtest.classes=/home/usrname/Develop/Project/JTwork/classes/src/test/java \
              -Dtest.class.path=/home/usrname/Develop/Project/JTwork/classes/src/test/java \
              -Dtest.class.path.prefix=/home/usrname/Develop/Project/JTwork/classes/src/test/java:/home/usrname/Develop/Project/src/test/java \
              -classpath /home/usrname/Develop/Project/JTwork/classes/src/test/java:/home/usrname/Develop/Project/src/test/java:/home/usrname/Develop/jtreg/build/images/jtreg/lib/javatest.jar:/home/usrname/Develop/jtreg/build/images/jtreg/lib/jtreg.jar \
              OpenStream
      stderr:
      WARNING: A terminally deprecated method in java.lang.System has been called
      WARNING: System::setSecurityManager has been called by com.sun.javatest.regtest.agent.RegressionSecurityManager (file:/home/usrname/Develop/jtreg/build/images/jtreg/lib/jtreg.jar)
      WARNING: Please consider reporting this to the maintainers of com.sun.javatest.regtest.agent.RegressionSecurityManager
      WARNING: System::setSecurityManager will be removed in a future release
      STDERR:
      java.lang.StringIndexOutOfBoundsException: String index out of range: 0
              at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
              at java.base/java.lang.String.charAt(String.java:1517)
              at java.base/java.net.HostPortrange.<init>(HostPortrange.java:75)
              at java.base/java.net.URLPermission$Authority.<init>(URLPermission.java:529)
              at java.base/java.net.URLPermission.parseURI(URLPermission.java:497)
              at java.base/java.net.URLPermission.init(URLPermission.java:206)
              at java.base/java.net.URLPermission.<init>(URLPermission.java:186)
              at java.base/sun.net.www.protocol.http.HttpURLConnection.URLtoSocketPermission(HttpURLConnection.java:1179)
              at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1612)
              at OpenStream.testMalformedURL(OpenStream.java:21)
              at OpenStream.main(OpenStream.java:14)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
              at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.base/java.lang.reflect.Method.invoke(Method.java:569)
              at com.sun.javatest.regtest.agent.MainActionHelper$AgentVMRunnable.run(MainActionHelper.java:335)
              at java.base/java.lang.Thread.run(Thread.java:840)

      JavaTest Message: Test threw exception: java.lang.StringIndexOutOfBoundsException
      JavaTest Message: shutting down test


      TEST RESULT: Failed. Execution failed: `main' threw exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
      --------------------------------------------------
      Test results: failed: 1

      ---------- BEGIN SOURCE ----------
      /* @test
       */

      import java.io.*;
      import java.net.*;

      public class OpenStream {

          public static void main(String[] args) throws IOException {
              testMalformedURL();
          }

          static void testMalformedURL() {
              // Test behavior with obviously malformed URL
              try {
                  URL u = new URL("http:///path-without-host");
                  u.openConnection(Proxy.NO_PROXY).getInputStream();
                  throw new RuntimeException("Expected MalformedURLException or similar error");
              } catch (MalformedURLException e) {
                  System.out.println("MalformedURLException thrown as expected: " + e.getMessage());
              } catch (IOException e) {
                  // Other IOExceptions are acceptable for malformed URLs
                  System.out.println("IOException thrown for malformed URL: " + e.getClass().getSimpleName() + ": " + e.getMessage());
              }
          }
      }
      ---------- END SOURCE ----------

            Unassigned Unassigned
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: