You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/09/22 11:37:07 UTC
svn commit: r1388762 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/util/FileUtil.java
main/java/org/apache/camel/util/ObjectHelper.java
test/java/org/apache/camel/util/FileUtilTest.java
Author: davsclaus
Date: Sat Sep 22 09:37:07 2012
New Revision: 1388762
URL: http://svn.apache.org/viewvc?rev=1388762&view=rev
Log:
CAMEL-5632: Fixed issue with loading resource containg relative paths. Fixed issue with 2+ parent paths using .. notation.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1388762&r1=1388761&r2=1388762&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Sat Sep 22 09:37:07 2012
@@ -202,7 +202,8 @@ public final class FileUtil {
}
/**
- * Compacts a path by stacking it and reducing <tt>..</tt>
+ * Compacts a path by stacking it and reducing <tt>..</tt>,
+ * and uses OS specific file separators (eg {@link java.io.File#separator}).
*/
public static String compactPath(String path) {
if (path == null) {
@@ -219,6 +220,9 @@ public final class FileUtil {
return path;
}
+ // preserve ending slash if given in input path
+ boolean endsWithSlash = path.endsWith("/") || path.endsWith("\\");
+
Stack<String> stack = new Stack<String>();
String separatorRegex = File.separator;
@@ -227,8 +231,8 @@ public final class FileUtil {
}
String[] parts = path.split(separatorRegex);
for (String part : parts) {
- if (part.equals("..") && !stack.isEmpty()) {
- // only pop if there is a previous path
+ if (part.equals("..") && !stack.isEmpty() && !"..".equals(stack.peek())) {
+ // only pop if there is a previous path, which is not a ".." path either
stack.pop();
} else {
stack.push(part);
@@ -244,6 +248,10 @@ public final class FileUtil {
}
}
+ if (endsWithSlash) {
+ sb.append(File.separator);
+ }
+
return sb.toString();
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=1388762&r1=1388761&r2=1388762&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Sat Sep 22 09:37:07 2012
@@ -905,17 +905,7 @@ public final class ObjectHelper {
* @return the modified or unmodified string if there were no changes
*/
private static String resolveUriPath(String name) {
- String answer = name;
- if (answer.indexOf("//") > -1) {
- answer = answer.replaceAll("//", "/");
- }
- if (answer.indexOf("../") > -1) {
- answer = answer.replaceAll("[A-Za-z0-9]*/\\.\\./", "");
- }
- if (answer.indexOf("./") > -1) {
- answer = answer.replaceAll("\\./", "");
- }
- return answer;
+ return FileUtil.compactPath(name);
}
/**
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java?rev=1388762&r1=1388761&r2=1388762&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java Sat Sep 22 09:37:07 2012
@@ -133,6 +133,10 @@ public class FileUtilTest extends TestCa
public void testCompactPath() {
assertEquals(null, FileUtil.compactPath(null));
if (FileUtil.isWindows()) {
+ assertEquals("..\\foo", FileUtil.compactPath("..\\foo"));
+ assertEquals("..\\..\\foo", FileUtil.compactPath("..\\..\\foo"));
+ assertEquals("..\\..\\foo\\bar", FileUtil.compactPath("..\\..\\foo\\bar"));
+ assertEquals("..\\..\\foo", FileUtil.compactPath("..\\..\\foo\\bar\\.."));
assertEquals("foo", FileUtil.compactPath("foo"));
assertEquals("bar", FileUtil.compactPath("foo\\..\\bar"));
assertEquals("bar\\baz", FileUtil.compactPath("foo\\..\\bar\\baz"));
@@ -141,6 +145,10 @@ public class FileUtilTest extends TestCa
assertEquals("..\\baz", FileUtil.compactPath("foo\\bar\\..\\..\\..\\baz"));
assertEquals("..\\foo\\bar", FileUtil.compactPath("..\\foo\\bar"));
} else {
+ assertEquals("../foo", FileUtil.compactPath("../foo"));
+ assertEquals("../../foo", FileUtil.compactPath("../../foo"));
+ assertEquals("../../foo/bar", FileUtil.compactPath("../../foo/bar"));
+ assertEquals("../../foo", FileUtil.compactPath("../../foo/bar/.."));
assertEquals("foo", FileUtil.compactPath("foo"));
assertEquals("bar", FileUtil.compactPath("foo/../bar"));
assertEquals("bar/baz", FileUtil.compactPath("foo/../bar/baz"));