Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-10663

PackageHelperImpl#getPackageNames unable to find package from path or jars that contains plus sign

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 3.x, 2.5.x, 4.x, 5.x
    • 2.5.18, 3.0.12, 4.0.4
    • Groovysh
    • None
    • Linux, java8u332

    Description

      PackageHelperImpl#getPackageNames would not be able to find and return
      the package names if the package path or filename of the jar contains
      plus signs due to the behavior of URLDecoder#decode.

      URLDecoder#decode would decode the plus sign (i.e. +) as empty space, causing java.io.FileNotFoundException.

       

      To reproduce the issue, include a plus sign in the groovyVersion in the gradle.properties, e.g. 5.0.0+SNAPSHOT, then run the PackageHelperImplTest, and testLoadAndGetPackagesEmpty would fail.

       

      WARN [org.apache.groovy.groovysh.util.PackageHelperImpl] Error opening jar file : '/home/jus/repos/apache/groovy/build/libs/groovy-raw-5.0.0+SNAPSHOT.jar' : java.io.FileNotFoundException: /home/jus/repos/apache/groovy/build/libs/groovy-raw-5.0.0 SNAPSHOT.jar (No such file or directory)
      ...
      

       

      Proposing the fix

      Use Paths.get(url.toURI()).toFile() instead of new File(URLDecoder.decode(url.file, 'UTF-8')).

       

      Github PR: https://github.com/apache/groovy/pull/1731

      Attachments

        Issue Links

          Activity

            People

              paulk Paul King
              justinchu Justin Chu
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: