mirror of
https://github.com/pgsty/minio.git
synced 2026-10-31 21:02:06 +03:00
fix: reject COPY-to-self from unresolved object generations
Signed-off-by: Feng Ruohang <rh@vonng.com>
This commit is contained in:
@@ -126,6 +126,9 @@ func (er erasureObjects) CopyObject(ctx context.Context, srcBucket, srcObject, d
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return oi, toObjectErr(err, srcBucket, srcObject)
|
return oi, toObjectErr(err, srcBucket, srcObject)
|
||||||
}
|
}
|
||||||
|
if err := checkObjectGenerationQuorum(fi, metaArr, errs); err != nil {
|
||||||
|
return oi, toObjectErr(err, srcBucket, srcObject)
|
||||||
|
}
|
||||||
if fi.Deleted {
|
if fi.Deleted {
|
||||||
if srcOpts.VersionID == "" {
|
if srcOpts.VersionID == "" {
|
||||||
return oi, toObjectErr(errFileNotFound, srcBucket, srcObject)
|
return oi, toObjectErr(errFileNotFound, srcBucket, srcObject)
|
||||||
|
|||||||
@@ -136,6 +136,12 @@ func TestPoolsReadGenerationConflictDoesNotExposeOldValue(t *testing.T) {
|
|||||||
}
|
}
|
||||||
if tc.mode != "newer-quorum" {
|
if tc.mode != "newer-quorum" {
|
||||||
for _, version := range []string{"", nullVersionID} {
|
for _, version := range []string{"", nullVersionID} {
|
||||||
|
_, err := set.CopyObject(ctx, bucket, object, bucket, object,
|
||||||
|
ObjectInfo{metadataOnly: true, UserDefined: map[string]string{"copy-test": "conflicting-source"}},
|
||||||
|
ObjectOptions{VersionID: version}, ObjectOptions{})
|
||||||
|
if !isErrReadQuorum(err) {
|
||||||
|
t.Errorf("COPY-to-self version=%q: want read-quorum error, got %v", version, err)
|
||||||
|
}
|
||||||
for _, scan := range []madmin.HealScanMode{madmin.HealNormalScan, madmin.HealDeepScan} {
|
for _, scan := range []madmin.HealScanMode{madmin.HealNormalScan, madmin.HealDeepScan} {
|
||||||
_, err := set.HealObject(ctx, bucket, object, version, madmin.HealOpts{ScanMode: scan, Remove: true})
|
_, err := set.HealObject(ctx, bucket, object, version, madmin.HealOpts{ScanMode: scan, Remove: true})
|
||||||
if !isErrReadQuorum(err) {
|
if !isErrReadQuorum(err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user