Skip to content

Commit 95fea7a

Browse files
authored
fix url encoding issue (#795)
* fix more * add ut * add more ut
1 parent 5bad554 commit 95fea7a

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

sdk/storage/azure-storage-blobs/src/blob_client.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ namespace Azure { namespace Storage { namespace Blobs {
2727
{
2828
auto parsedConnectionString = Details::ParseConnectionString(connectionString);
2929
auto blobUri = std::move(parsedConnectionString.BlobServiceUri);
30-
blobUri.AppendPath(containerName);
31-
blobUri.AppendPath(blobName);
30+
blobUri.AppendPath(Details::UrlEncodePath(containerName));
31+
blobUri.AppendPath(Details::UrlEncodePath(blobName));
3232

3333
if (parsedConnectionString.KeyCredential)
3434
{

sdk/storage/azure-storage-blobs/src/blob_service_client.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ namespace Azure { namespace Storage { namespace Blobs {
112112
const std::string& containerName) const
113113
{
114114
auto containerUri = m_serviceUrl;
115-
containerUri.AppendPath(containerName);
115+
containerUri.AppendPath(Details::UrlEncodePath(containerName));
116116
return BlobContainerClient(std::move(containerUri), m_pipeline);
117117
}
118118

sdk/storage/azure-storage-blobs/test/blob_container_client_test.cpp

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ namespace Azure { namespace Storage { namespace Test {
10521052
{
10531053
const std::string non_ascii_word = "\xE6\xB5\x8B\xE8\xAF\x95";
10541054
const std::string encoded_non_ascii_word = "%E6%B5%8B%E8%AF%95";
1055-
std::string baseBlobName = "a b c / !@#$%^&*() def" + non_ascii_word;
1055+
std::string baseBlobName = "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~\\) def" + non_ascii_word;
10561056

10571057
{
10581058
std::string blobName = baseBlobName + RandomString();
@@ -1081,6 +1081,48 @@ namespace Azure { namespace Storage { namespace Test {
10811081
blobUrl,
10821082
m_blobContainerClient->GetUri() + "/" + Storage::Details::UrlEncodePath(blobName));
10831083
}
1084+
1085+
{
1086+
std::string blobName = baseBlobName + RandomString();
1087+
auto blobClient = Blobs::AppendBlobClient::CreateFromConnectionString(
1088+
StandardStorageConnectionString(), m_containerName, blobName);
1089+
EXPECT_NO_THROW(blobClient.Create());
1090+
auto blobUrl = blobClient.GetUri();
1091+
EXPECT_EQ(
1092+
blobUrl,
1093+
m_blobContainerClient->GetUri() + "/" + Storage::Details::UrlEncodePath(blobName));
1094+
}
1095+
{
1096+
std::string blobName = baseBlobName + RandomString();
1097+
auto blobClient = Blobs::PageBlobClient::CreateFromConnectionString(
1098+
StandardStorageConnectionString(), m_containerName, blobName);
1099+
EXPECT_NO_THROW(blobClient.Create(1024));
1100+
auto blobUrl = blobClient.GetUri();
1101+
EXPECT_EQ(
1102+
blobUrl,
1103+
m_blobContainerClient->GetUri() + "/" + Storage::Details::UrlEncodePath(blobName));
1104+
}
1105+
{
1106+
std::string blobName = baseBlobName + RandomString();
1107+
auto blobClient = Blobs::BlockBlobClient::CreateFromConnectionString(
1108+
StandardStorageConnectionString(), m_containerName, blobName);
1109+
EXPECT_NO_THROW(blobClient.UploadFrom(nullptr, 0));
1110+
auto blobUrl = blobClient.GetUri();
1111+
EXPECT_EQ(
1112+
blobUrl,
1113+
m_blobContainerClient->GetUri() + "/" + Storage::Details::UrlEncodePath(blobName));
1114+
}
1115+
}
1116+
1117+
TEST_F(BlobContainerClientTest, QuestionMarkBlobName)
1118+
{
1119+
std::string blobName = "?";
1120+
auto blobClient = m_blobContainerClient->GetAppendBlobClient(blobName);
1121+
EXPECT_NO_THROW(blobClient.Create());
1122+
auto blobUrl = blobClient.GetUri();
1123+
EXPECT_EQ(
1124+
blobUrl,
1125+
m_blobContainerClient->GetUri() + "/" + Storage::Details::UrlEncodePath(blobName));
10841126
}
10851127

10861128
}}} // namespace Azure::Storage::Test

0 commit comments

Comments
 (0)