You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by "Daniel Holmes (JIRA)" <ji...@apache.org> on 2016/01/15 15:46:39 UTC

[jira] [Updated] (IVY-1522) Ivy 2.4.0 improperly handles modules with colon (:) in version

     [ https://issues.apache.org/jira/browse/IVY-1522?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Holmes updated IVY-1522:
-------------------------------
    Description: 
This was not an issue in 2.2.0.

I have some modules in my project which produce debian .deb files and those modules versions include a colon ':' in the version because the version scheme was reset, so an epoch is set.

Also for this module the ivy.xml declaration uses extends tag, and in processing the parent location, this code in FileUtil which is called during a FileUtil.normalize() is causing the : in the resolve parent file name to have the ':' replaced with a ':/'.

The comment on the it seems to explain that it is trying to handle a Windows/NetWare case, but the assumption to process any colon in the path is too broad and is negatively affecting my case which is executing on a linux system.  Even on windows, this would only be attempting to address a drive letter case, right, where colon would occur only after a single letter in the path?

   private static String[] dissect(String path) {
        char sep = File.separatorChar;
        path = path.replace('/', sep).replace('\\', sep);

        // // make sure we are dealing with an absolute path
        // if (!isAbsolutePath(path)) {
        // throw new BuildException(path + " is not an absolute path");
        // }
        String root = null;
        int colon = path.indexOf(':');
        if (colon > 0) { // && (ON_DOS || ON_NETWARE)) {

            int next = colon + 1;
            root = path.substring(0, next);
            char[] ca = path.toCharArray();
            root += sep;
            // remove the initial separator; the root has it.
            next = (ca[next] == sep) ? next + 1 : next;

            StringBuffer sbPath = new StringBuffer();
            // Eliminate consecutive slashes after the drive spec:
            for (int i = next; i < ca.length; i++) {
                if (ca[i] != sep || ca[i - 1] != sep) {
                    sbPath.append(ca[i]);
                }
            }
            path = sbPath.toString();

  was:
This was not an issue in 2.2.0.

I have some modules in my project which produce debian .deb files and those modules versions include a colon (:) in the version because the version scheme was reset, so an epoch is set.

I also for this module use the extends tag, and in processing the parent location, this code in FileUtil which is called during a FileUtil.normalize() is causing the : in the resolve parent file name to have the : replaced with a :/.

The comment on the if seems to explain that it is trying to handle a Windows/NetWare case, but the assumption to process any colon in the path is too broad.

   private static String[] dissect(String path) {
        char sep = File.separatorChar;
        path = path.replace('/', sep).replace('\\', sep);

        // // make sure we are dealing with an absolute path
        // if (!isAbsolutePath(path)) {
        // throw new BuildException(path + " is not an absolute path");
        // }
        String root = null;
        int colon = path.indexOf(':');
        if (colon > 0) { // && (ON_DOS || ON_NETWARE)) {

            int next = colon + 1;
            root = path.substring(0, next);
            char[] ca = path.toCharArray();
            root += sep;
            // remove the initial separator; the root has it.
            next = (ca[next] == sep) ? next + 1 : next;

            StringBuffer sbPath = new StringBuffer();
            // Eliminate consecutive slashes after the drive spec:
            for (int i = next; i < ca.length; i++) {
                if (ca[i] != sep || ca[i - 1] != sep) {
                    sbPath.append(ca[i]);
                }
            }
            path = sbPath.toString();


> Ivy 2.4.0 improperly handles modules with colon (:) in version
> --------------------------------------------------------------
>
>                 Key: IVY-1522
>                 URL: https://issues.apache.org/jira/browse/IVY-1522
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.4.0
>            Reporter: Daniel Holmes
>            Priority: Critical
>
> This was not an issue in 2.2.0.
> I have some modules in my project which produce debian .deb files and those modules versions include a colon ':' in the version because the version scheme was reset, so an epoch is set.
> Also for this module the ivy.xml declaration uses extends tag, and in processing the parent location, this code in FileUtil which is called during a FileUtil.normalize() is causing the : in the resolve parent file name to have the ':' replaced with a ':/'.
> The comment on the it seems to explain that it is trying to handle a Windows/NetWare case, but the assumption to process any colon in the path is too broad and is negatively affecting my case which is executing on a linux system.  Even on windows, this would only be attempting to address a drive letter case, right, where colon would occur only after a single letter in the path?
>    private static String[] dissect(String path) {
>         char sep = File.separatorChar;
>         path = path.replace('/', sep).replace('\\', sep);
>         // // make sure we are dealing with an absolute path
>         // if (!isAbsolutePath(path)) {
>         // throw new BuildException(path + " is not an absolute path");
>         // }
>         String root = null;
>         int colon = path.indexOf(':');
>         if (colon > 0) { // && (ON_DOS || ON_NETWARE)) {
>             int next = colon + 1;
>             root = path.substring(0, next);
>             char[] ca = path.toCharArray();
>             root += sep;
>             // remove the initial separator; the root has it.
>             next = (ca[next] == sep) ? next + 1 : next;
>             StringBuffer sbPath = new StringBuffer();
>             // Eliminate consecutive slashes after the drive spec:
>             for (int i = next; i < ca.length; i++) {
>                 if (ca[i] != sep || ca[i - 1] != sep) {
>                     sbPath.append(ca[i]);
>                 }
>             }
>             path = sbPath.toString();



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)