You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2017/07/03 09:25:07 UTC
ant-ivy git commit: IVY-1562 Fix potential double encoding of
"location" value of "extends" element in the ivy descriptor
Repository: ant-ivy
Updated Branches:
refs/heads/master c4828bfd0 -> 4b6e0bd17
IVY-1562 Fix potential double encoding of "location" value of "extends" element in the ivy descriptor
Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/4b6e0bd1
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/4b6e0bd1
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/4b6e0bd1
Branch: refs/heads/master
Commit: 4b6e0bd179c5f728761c953249b6dda4d33fe18a
Parents: c4828bf
Author: Jaikiran Pai <ja...@apache.org>
Authored: Mon Jul 3 14:52:01 2017 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Mon Jul 3 14:53:03 2017 +0530
----------------------------------------------------------------------
.../parser/xml/XmlModuleDescriptorParser.java | 9 ++--
.../xml/XmlModuleDescriptorParserTest.java | 55 ++++++++++++++++----
.../xml/foo%2Fbar/hello/test-ivy-extends.xml | 25 +++++++++
.../plugins/parser/xml/foo%2Fbar/parent-ivy.xml | 27 ++++++++++
4 files changed, 100 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/4b6e0bd1/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java b/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
index cc640a8..63ed1f3 100644
--- a/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
+++ b/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
@@ -670,12 +670,11 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser {
File file = new File(location);
if (!file.isAbsolute()) {
- URL url = settings.getRelativeUrlResolver().getURL(descriptorURL, location);
- try {
- file = new File(new URI(url.toExternalForm()));
- } catch (URISyntaxException e) {
- file = new File(url.getPath());
+ final URL url = settings.getRelativeUrlResolver().getURL(descriptorURL, location);
+ if (!url.getProtocol().equals("file")) {
+ throw new IOException("Resolved location " + url + ", of parent module descriptor, is not a file");
}
+ file = new File(url.getPath());
}
file = FileUtil.normalize(file.getAbsolutePath());
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/4b6e0bd1/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java b/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
index 390d713..e2a62dd 100644
--- a/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
+++ b/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
@@ -17,15 +17,6 @@
*/
package org.apache.ivy.plugins.parser.xml;
-import java.io.File;
-import java.io.IOException;
-import java.text.ParseException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashSet;
-
import org.apache.ivy.Ivy;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.Configuration;
@@ -51,13 +42,26 @@ import org.apache.ivy.util.DefaultMessageLogger;
import org.apache.ivy.util.FileUtil;
import org.apache.ivy.util.Message;
import org.apache.ivy.util.XMLHelper;
-
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import static org.junit.Assert.*;
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
public class XmlModuleDescriptorParserTest extends AbstractModuleDescriptorParserTester {
private IvySettings settings = null;
@@ -1447,4 +1451,33 @@ public class XmlModuleDescriptorParserTest extends AbstractModuleDescriptorParse
assertEquals("mymodule", artifacts[0].getName());
assertEquals("jar", artifacts[0].getType());
}
+
+ /**
+ * Tests that when the <code>location</code> attribute of the <code>extends</code> element of a module descriptor
+ * file, includes any characters that {@link java.net.URI} considers as encoded characters (for example <code>%2F</code>)
+ * then the module descriptor and the location of the parent descriptor, are resolved and parsed correctly.
+ *
+ * @throws Exception
+ * @see <a href="https://issues.apache.org/jira/browse/IVY-1562">IVY-1562</a> for more details
+ */
+ @Test
+ public void testExtendsEncodedLocation() throws Exception {
+ final ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(settings, getClass().getResource("foo%2Fbar/hello/test-ivy-extends.xml"), true);
+ assertNotNull("Parsed module descriptor is null", md);
+ assertEquals("Unexpected org for the parsed module descriptor", "myorg", md.getModuleRevisionId().getOrganisation());
+ assertEquals("Unexpected module name for the parsed module descriptor", "mymodule", md.getModuleRevisionId().getName());
+ assertEquals("Unexpected revision for the parsed module descriptor", "1.0.0", md.getModuleRevisionId().getRevision());
+
+ final Configuration[] confs = md.getConfigurations();
+ assertNotNull("No configurations found in module descriptor", confs);
+ assertEquals("Unexpected number of configurations found in module descriptor", 3, confs.length);
+
+ final Set<String> expectedConfs = new HashSet<>(Arrays.asList("parent-conf1", "parent-conf2", "conf2"));
+ for (final Configuration conf : confs) {
+ assertNotNull("One of the configurations was null in module descriptor", conf);
+ assertTrue("Unexpected configuration " + conf.getName() + " found in parsed module descriptor", expectedConfs.remove(conf.getName()));
+ }
+ assertTrue("Missing configurations " + expectedConfs + " from the parsed module descriptor", expectedConfs.isEmpty());
+
+ }
}
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/4b6e0bd1/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/hello/test-ivy-extends.xml
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/hello/test-ivy-extends.xml b/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/hello/test-ivy-extends.xml
new file mode 100644
index 0000000..fca2360
--- /dev/null
+++ b/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/hello/test-ivy-extends.xml
@@ -0,0 +1,25 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<ivy-module version="1.0">
+ <info organisation="myorg"
+ module="mymodule">
+ <extends organisation="myorg" module="myparent" revision="1.0.0" location="../../foo%2Fbar/parent-ivy.xml"/>
+ </info>
+ <configurations>
+ <conf name="conf2" visibility="private"/>
+ </configurations>
+</ivy-module>
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/4b6e0bd1/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/parent-ivy.xml
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/parent-ivy.xml b/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/parent-ivy.xml
new file mode 100644
index 0000000..b54dc92
--- /dev/null
+++ b/test/java/org/apache/ivy/plugins/parser/xml/foo%2Fbar/parent-ivy.xml
@@ -0,0 +1,27 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<ivy-module version="1.0">
+ <info organisation="myorg"
+ module="myparent"
+ revision="1.0.0">
+ <description>Parent module description.</description>
+ </info>
+ <configurations>
+ <conf name="parent-conf1"/>
+ <conf name="parent-conf2" visibility="public"/>
+ </configurations>
+</ivy-module>