Index: src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java =================================================================== --- src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java (revision 1518042) +++ src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java (working copy) @@ -91,6 +91,10 @@ try { if (!versionMatcher.isDynamic(mrid) || isAlwaysCheckExactRevision()) { String resourceName = IvyPatternHelper.substitute(pattern, mrid, artifact); + + // replace any '\' characters in the URL with '/' + resourceName = resourceName.replaceAll("\\\\", "/"); + Message.debug("\t trying " + resourceName); logAttempt(resourceName); Resource res = repository.getResource(resourceName); Index: test/java/org/apache/ivy/plugins/resolver/URLResolverTest.java =================================================================== --- test/java/org/apache/ivy/plugins/resolver/URLResolverTest.java (revision 1518042) +++ test/java/org/apache/ivy/plugins/resolver/URLResolverTest.java (working copy) @@ -305,6 +312,25 @@ assertEquals("1.4.4", rmr.getId().getRevision()); } + public void testErrantBackslash() throws Exception { + String ibiblioRoot = IBiblioHelper.getIBiblioMirror(); + if (ibiblioRoot == null) { + return; + } + + URLResolver resolver = new URLResolver(); + resolver.setSettings(settings); + resolver.addArtifactPattern(ibiblioRoot + "/[organisation]/\\[module]/[revision]/[artifact]-[revision].[type]"); + resolver.setName("test"); + assertEquals("test", resolver.getName()); + + ModuleRevisionId mrid = ModuleRevisionId.newInstance("asm", "asm", "1.4.3"); + ResolvedModuleRevision rmr = resolver.getDependency(new DefaultDependencyDescriptor(mrid, + false), data); + assertNotNull(rmr); + assertEquals("1.4.3", rmr.getId().getRevision()); + } + public void testUnknown() throws Exception { String ibiblioRoot = IBiblioHelper.getIBiblioMirror(); if (ibiblioRoot == null) {