Actions
Bug #43259
closedS3 CopyObject: failed to parse copy location
Status:
Resolved
Priority:
Normal
Assignee:
-
Target version:
-
% Done:
100%
Source:
Tags:
Backport:
pacific octopus
Regression:
Yes
Severity:
2 - major
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):
Description
Hello.
Commit https://github.com/ceph/ceph/commit/ea979b915581c02c0bc8dba23f4fd83e635fe9a7#diff-91c04dc5e6532eab0d6f52eec3d03b1e break S3 CopyObject functions.
Copy requests failing with error "failed to parse copy location".
Expected behavior (13.2.6 and older versions): urlencoded "CopySource" field decoded without errors.
Current behavior (13.2.7): urlencoded "CopySource" field parsing error. It's happen because in new version the string splitted by '/' before urldecode.
I write simple Golang program, that repeat this issue.
package main
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"net/url"
)
const (
endpoint = "https://s3.exmaple.com"
key = "KEY"
secret = "SECRET"
)
func main() {
sess := session.Must(session.NewSession())
sess.Config.S3ForcePathStyle = aws.Bool(true)
sess.Config.Region = aws.String("us-east-1")
cred := credentials.NewStaticCredentials(key, secret, "")
sess.Config.WithCredentials(cred)
sess.Config.Endpoint = aws.String(endpoint)
svc := s3.New(sess)
req := &s3.CopyObjectInput{
Key: aws.String("file-new.txt"),
Bucket: aws.String("bucket"),
CopySource: aws.String(url.QueryEscape("bucket/file.txt")),
}
if _, err := svc.CopyObject(req); err != nil {
panic(err)
}
}
Actions