*) Bugfix for resolveBackpath problem with tailing /..

*) Junit testclass for resolveBackpath testing 

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@2850 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
theli 19 years ago
parent 7c9b8bd313
commit cfe54fedc7

@ -161,7 +161,7 @@ public class URL {
}
// resolve '..'
private String resolveBackpath(String path) /* throws MalformedURLException */ {
String resolveBackpath(String path) /* throws MalformedURLException */ {
/* original version by [MC]
int p;
while ((p = path.indexOf("/..")) >= 0) {
@ -174,7 +174,7 @@ public class URL {
/* by [MT] */
if (path.length() == 0 || path.charAt(0) != '/') { path = "/" + path; }
Pattern pathPattern = Pattern.compile("(/[^/\\.]+/)[.]{2}(?=/)|/\\.(?=/)|/(?=/)");
Pattern pathPattern = Pattern.compile("(/[^/]+(?<!/\\.{1,2})/)[.]{2}(?=/|$)|/\\.(?=/)|/(?=/)");
Matcher matcher = pathPattern.matcher(path);
while (matcher.find()) {
path = matcher.replaceAll("");
@ -183,7 +183,7 @@ public class URL {
/* another version at http://www.yacy-forum.de/viewtopic.php?p=26871#26871 */
return path;
return path.equals("")?"/":path;
}
/**

@ -0,0 +1,40 @@
package de.anomic.net;
import java.net.MalformedURLException;
import junit.framework.TestCase;
public class URLTest extends TestCase {
public void testResolveBackpath() throws MalformedURLException {
String[][] testStrings = new String[][] {
new String[]{"/..home","/..home"},
new String[]{"/test/..home/test.html","/test/..home/test.html"},
new String[]{"/../","/../"},
new String[]{"/..","/.."},
new String[]{"/test/..","/"},
new String[]{"/test/../","/"},
new String[]{"/test/test2/..","/test"},
new String[]{"/test/test2/../","/test/"},
new String[]{"/test/test2/../hallo","/test/hallo"},
new String[]{"/test/test2/../hallo/","/test/hallo/"},
new String[]{"/home/..test/../hallo/../","/home/"}
};
URL urlObj = new URL("http://yacy.net");
for (int i=0; i < testStrings.length; i++) {
// desired conversion result
System.out.print("testResolveBackpath: " + testStrings[i][0]);
String shouldBe = testStrings[i][1];
// conversion result
String resolvedURL = urlObj.resolveBackpath(testStrings[i][0]);
// test if equal
assertEquals(shouldBe,resolvedURL);
System.out.println(" -> " + resolvedURL);
}
}
}
Loading…
Cancel
Save