diff --git a/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp b/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp index 4cf07f3f8e16..1b4e62cbbc94 100644 --- a/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp +++ b/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp @@ -40,16 +40,17 @@ struct TCompleteMultipartUpload { TString RequestId; TString Url; + TString UrlEscaped; TString UploadId; TString Token; std::vector Tags; TCompleteMultipartUpload(const TString& requestId, const TString& url, const TString& uploadId, const TString& token) - : RequestId(requestId), Url(url), UploadId(uploadId), Token(token) { + : RequestId(requestId), Url(url), UrlEscaped(NS3Util::UrlEscapeRet(url)), UploadId(uploadId), Token(token) { } TString BuildUrl() const { - TUrlBuilder urlBuilder(Url); + TUrlBuilder urlBuilder(UrlEscaped); urlBuilder.AddUrlParam("uploadId", UploadId); return urlBuilder.Build(); } @@ -72,6 +73,7 @@ struct TListMultipartUploads { TString RequestId; TString Url; + TString UrlEscaped; TString Prefix; TString Token; TString KeyMarker; @@ -79,7 +81,7 @@ struct TListMultipartUploads { TListMultipartUploads(const TString& requestId, const TString& url, const TString& prefix, const TString& token, const TString& keyMarker = "", const TString& uploadIdMarker = "") - : RequestId(requestId), Url(url), Prefix(prefix), Token(token), KeyMarker(keyMarker), UploadIdMarker(uploadIdMarker) { + : RequestId(requestId), Url(url), UrlEscaped(NS3Util::UrlEscapeRet(url)), Prefix(prefix), Token(token), KeyMarker(keyMarker), UploadIdMarker(uploadIdMarker) { } TString BuildUrl() const { @@ -87,7 +89,7 @@ struct TListMultipartUploads { // This requirement will be fixed in the curl library // https://github.com/curl/curl/commit/fc76a24c53b08cdf6eec8ba787d8eac64651d56e // https://github.com/curl/curl/commit/c87920353883ef9d5aa952e724a8e2589d76add5 - TUrlBuilder urlBuilder(Url); + TUrlBuilder urlBuilder(UrlEscaped); if (KeyMarker) { urlBuilder.AddUrlParam("key-marker", KeyMarker); } @@ -106,15 +108,16 @@ struct TAbortMultipartUpload { TString RequestId; TString Url; + TString UrlEscaped; TString UploadId; TString Token; TAbortMultipartUpload(const TString& requestId, const TString& url, const TString& uploadId, const TString& token) - : RequestId(requestId), Url(url), UploadId(uploadId), Token(token) { + : RequestId(requestId), Url(url), UrlEscaped(NS3Util::UrlEscapeRet(url)), UploadId(uploadId), Token(token) { } TString BuildUrl() const { - TUrlBuilder urlBuilder(Url); + TUrlBuilder urlBuilder(UrlEscaped); urlBuilder.AddUrlParam("uploadId", UploadId); return urlBuilder.Build(); } @@ -126,6 +129,7 @@ struct TListParts { TString RequestId; TString Url; + TString UrlEscaped; TString UploadId; TString Token; TString PartNumberMarker; @@ -133,7 +137,7 @@ struct TListParts { TListParts(const TString& requestId, const TString& url, const TString& uploadId, const TString& token, TCompleteMultipartUpload::TPtr completeState) - : RequestId(requestId), Url(url), UploadId(uploadId), Token(token), CompleteState(completeState) { + : RequestId(requestId), Url(url), UrlEscaped(NS3Util::UrlEscapeRet(url)), UploadId(uploadId), Token(token), CompleteState(completeState) { } TString BuildUrl() const { @@ -141,7 +145,7 @@ struct TListParts { // This requirement will be fixed in the curl library // https://github.com/curl/curl/commit/fc76a24c53b08cdf6eec8ba787d8eac64651d56e // https://github.com/curl/curl/commit/c87920353883ef9d5aa952e724a8e2589d76add5 - TUrlBuilder urlBuilder(Url); + TUrlBuilder urlBuilder(UrlEscaped); if (PartNumberMarker) { urlBuilder.AddUrlParam("part-number-marker", PartNumberMarker); } @@ -682,4 +686,4 @@ THolder MakeS3ApplicatorActor( ); } -} // namespace NYql::NDq \ No newline at end of file +} // namespace NYql::NDq