You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jclouds.apache.org by "Ka-Hing Cheung (JIRA)" <ji...@apache.org> on 2015/05/29 23:09:17 UTC
[jira] [Commented] (JCLOUDS-918) putting blobs with % encoded names
gives unexpected results
[ https://issues.apache.org/jira/browse/JCLOUDS-918?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14565414#comment-14565414 ]
Ka-Hing Cheung commented on JCLOUDS-918:
----------------------------------------
I misspoke a bit, https://github.com/jclouds/jclouds/pull/755 addresses other similar issues but does not address the specific examples above.
> putting blobs with % encoded names gives unexpected results
> -----------------------------------------------------------
>
> Key: JCLOUDS-918
> URL: https://issues.apache.org/jira/browse/JCLOUDS-918
> Project: jclouds
> Issue Type: Bug
> Reporter: Ka-Hing Cheung
>
> adding this test case causes Swift (but probably all http based providers) to fail:
> {code:title=BaseBlobIntegrationTest.java|borderStyle=solid}
> diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
> index 730d935..c9275ad 100644
> --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
> +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
> @@ -529,7 +529,8 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
>
> return new Object[][] { { "file", "text/xml", file, realObject },
> { "string", "text/xml", realObject, realObject },
> - { "bytes", "application/octet-stream", realObject.getBytes(), realObject } };
> + { "bytes", "application/octet-stream", realObject.getBytes(), realObject },
> + { "%20", "text/xml", file, realObject } };
> }
>
> @Test(groups = { "integration", "live" }, dataProvider = "putTests")
> @@ -552,6 +553,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
> assertEquals(returnedString, realObject);
> PageSet<? extends StorageMetadata> set = view.getBlobStore().list(container);
> assert set.size() == 1 : set;
> + assertThat(set.iterator().next().getName()).isEqualTo(name);
> } finally {
> returnContainer(container);
> }
> {code}
> The issue is that because the blob name is encoded, Strings2.urlEncode won't encode the name again, so the server side thinks we are trying to put a blob named " ". So on list(), a blob named " " would be returned.
> Similarly, if putBlob("%2520") is called, jclouds won't escape the name, so the server sees it as "%20", and will return that as the blob name. However, any jclouds operations on blob "%20" will fail, because again jclouds won't escape "%20", and the server will think that the request is on blob " ", which doesn't exist.
> This is the same family of issues as https://issues.apache.org/jira/browse/JCLOUDS-217 . I attempted to address this with https://github.com/jclouds/jclouds/pull/755 but turns out other code has hidden dependencies on broken behaviors.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)