Skip to content

Commit

Permalink
Fixed url escaping in s3 applicator actor
Browse files Browse the repository at this point in the history
  • Loading branch information
GrigoriyPA committed Jan 27, 2025
1 parent 0e77ef0 commit 5e413f3
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,17 @@ struct TCompleteMultipartUpload {

TString RequestId;
TString Url;
TString UrlEscaped;
TString UploadId;
TString Token;
std::vector<TString> 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();
}
Expand All @@ -72,22 +73,23 @@ struct TListMultipartUploads {

TString RequestId;
TString Url;
TString UrlEscaped;
TString Prefix;
TString Token;
TString KeyMarker;
TString UploadIdMarker;

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 {
// We have to sort the cgi parameters for the correct aws signature
// 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);
}
Expand All @@ -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();
}
Expand All @@ -126,22 +129,23 @@ struct TListParts {

TString RequestId;
TString Url;
TString UrlEscaped;
TString UploadId;
TString Token;
TString PartNumberMarker;
TCompleteMultipartUpload::TPtr CompleteState;

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 {
// We have to sort the cgi parameters for the correct aws signature
// 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);
}
Expand Down Expand Up @@ -682,4 +686,4 @@ THolder<NActors::IActor> MakeS3ApplicatorActor(
);
}

} // namespace NYql::NDq
} // namespace NYql::NDq

0 comments on commit 5e413f3

Please sign in to comment.