From a7a488d6d5852f2111ff694a6d2a9f3853555685 Mon Sep 17 00:00:00 2001 From: Jamie Maher Date: Fri, 1 Jun 2012 13:21:49 -0700 Subject: [PATCH 1/3] Add additional webdav tests for filenames that should be url encoded. --- .../xwiki/test/webdav/DefaultWebDAVTest.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java index 59784839b..3275259b3 100644 --- a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java +++ b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java @@ -214,10 +214,32 @@ public void testUpdatePageWikiContent() * Test making attachment. */ public void testMakingAttachment() + { + testMakingAttachmentFile("attachment.txt","normal text file") + } + + /** + * Test making attachments with unsafe characters in filename. + * These characters should also always be encoded. + */ + public void testMakingAttachmentsUnsafeChars() + { + testMakingAttachmentFile("my attach.txt","space"); + testMakingAttachmentFile("[bracket].txt","brackets"); + testMakingAttachmentFile("{brace}.txt","braces"); + testMakingAttachmentFile("^caret.txt","caret"); + testMakingAttachmentFile("#pound.txt","pound"); + testMakingAttachmentFile("%percent.txt","percent"); + } + + /** + * Test making attachment with filename given under /TestSpace/TestPage + */ + protected void testMakingAttachmentFile(String filename, String testing) { String spaceUrl = SPACES + "/TestSpace"; String pageUrl = spaceUrl + "/TestPage"; - String attachmentUrl = pageUrl + "/attachment.txt"; + String attachmentUrl = pageUrl + "/"+filename; String attachmentContent = "Attachment Content"; DeleteMethod deleteMethod = new DeleteMethod(); deleteMethod.setDoAuthentication(true); @@ -250,9 +272,9 @@ public void testMakingAttachment() deleteMethod.setPath(spaceUrl); assertEquals(DavServletResponse.SC_NO_CONTENT, getHttpClient().executeMethod(deleteMethod)); } catch (HttpException ex) { - fail(ex.getMessage()); + fail("Failed '"+testing+"' attachment: "+ex.getMessage()); } catch (IOException ex) { - fail(ex.getMessage()); + fail("Failed '"+testing+"' attachment: "+ex.getMessage()); } - } + } } From eeb43506e6a4905ca90279dbf5268879fb82c82b Mon Sep 17 00:00:00 2001 From: Jamie Maher Date: Fri, 1 Jun 2012 13:44:34 -0700 Subject: [PATCH 2/3] Add additional webdav tests for filenames with '+' plus in filename see XWIKI-7835 --- .../src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java index 3275259b3..ce08f8c5e 100644 --- a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java +++ b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java @@ -230,6 +230,7 @@ public void testMakingAttachmentsUnsafeChars() testMakingAttachmentFile("^caret.txt","caret"); testMakingAttachmentFile("#pound.txt","pound"); testMakingAttachmentFile("%percent.txt","percent"); + testMakingAttachmentFile("plus+plus.txt","plus"); } /** From 7e8826be4aaf5ba7971a2a1a9ee1201b16a5bf68 Mon Sep 17 00:00:00 2001 From: Jamie Maher Date: Mon, 4 Jun 2012 13:33:13 -0700 Subject: [PATCH 3/3] Fix typo, correctly encode URL using java.net.URI constructor and .toASCIIString(), modify AbstractWebDAVTest constants to provide scheme,host,port separately as required by URI constructor. --- .../xwiki/test/webdav/AbstractWebDAVTest.java | 17 ++++++++ .../xwiki/test/webdav/DefaultWebDAVTest.java | 40 ++++++++++++++++--- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java index 0e455c9ff..464b4fe17 100644 --- a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java +++ b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java @@ -49,6 +49,23 @@ public class AbstractWebDAVTest extends TestCase * Root webdav view. */ public static final String ROOT = "http://localhost:8080/xwiki/webdav"; + + /** Build a correct escaped URI from the URI constructor */ + + /** URI scheme */ + public static final String URI_SCHEME = "http"; + + /** URI host */ + public static final String URI_HOST = "localhost"; + + /** URI port */ + public static final int URI_PORT = 8080; + + /** URI webdav root */ + public static final String URI_WEBDAV_ROOT = "/xwiki/webdav"; + + /** location of the spaces view (uri construction) */ + public static final String PATH_SPACES_VIEW = "/spaces"; /** * location of the home view. diff --git a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java index ce08f8c5e..aaff9a1a1 100644 --- a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java +++ b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java @@ -215,7 +215,7 @@ public void testUpdatePageWikiContent() */ public void testMakingAttachment() { - testMakingAttachmentFile("attachment.txt","normal text file") + testMakingAttachmentFile("attachment.txt","normal text file"); } /** @@ -232,15 +232,45 @@ public void testMakingAttachmentsUnsafeChars() testMakingAttachmentFile("%percent.txt","percent"); testMakingAttachmentFile("plus+plus.txt","plus"); } + + /** + * Properly escape the given url path, using RFC 2396. + * This will properly convert encode, and quote illegal characters correctly. + */ + protected String getEscapedUrl(String pagePath){ + String escapedUrl = ""; + try{ + java.net.URI uri = new java.net.URI( + URI_SCHEME, //scheme + null, //no user info + URI_HOST, //host + URI_PORT, //port + pagePath, //path + null, //no query + null); //no #fragment + + escapedUrl = uri.toASCIIString(); + }catch(java.net.URISyntaxException ue){ + fail("Could not escape url: '"+pagePath+"' "+ue.getMessage()); + } + + return escapedUrl; + } /** * Test making attachment with filename given under /TestSpace/TestPage */ protected void testMakingAttachmentFile(String filename, String testing) - { - String spaceUrl = SPACES + "/TestSpace"; - String pageUrl = spaceUrl + "/TestPage"; - String attachmentUrl = pageUrl + "/"+filename; + { + String spaceUrl = getEscapedUrl( + URI_WEBDAV_ROOT + PATH_SPACES_VIEW + "/TestSpace"); + + String pageUrl = getEscapedUrl( + URI_WEBDAV_ROOT + PATH_SPACES_VIEW + "/TestSpace/TestPage"); + + String attachmentUrl = getEscapedUrl( + URI_WEBDAV_ROOT + PATH_SPACES_VIEW + "/TestSpace/TestPage/" + filename); + String attachmentContent = "Attachment Content"; DeleteMethod deleteMethod = new DeleteMethod(); deleteMethod.setDoAuthentication(true);