You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jclouds.apache.org by "Andrew Gaul (JIRA)" <ji...@apache.org> on 2015/08/28 18:36:47 UTC

[jira] [Resolved] (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:all-tabpanel ]

Andrew Gaul resolved JCLOUDS-918.
---------------------------------
    Resolution: Duplicate
      Assignee: Timur Alperovich

> 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
>          Components: jclouds-blobstore
>            Reporter: Ka-Hing Cheung
>            Assignee: Timur Alperovich
>
> 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)