From db3911c87879abdaab2d2f05455ec34df2f74bbf Mon Sep 17 00:00:00 2001 From: Andrew Gaul Date: Sat, 23 Nov 2024 12:48:39 -0800 Subject: [PATCH] Prohibit object operations on non-existent containers Found via s3-tests. References #697. --- .../org/gaul/s3proxy/nio2blob/Nio2BlobStore.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/org/gaul/s3proxy/nio2blob/Nio2BlobStore.java b/src/main/java/org/gaul/s3proxy/nio2blob/Nio2BlobStore.java index 513fd8c..be490f5 100644 --- a/src/main/java/org/gaul/s3proxy/nio2blob/Nio2BlobStore.java +++ b/src/main/java/org/gaul/s3proxy/nio2blob/Nio2BlobStore.java @@ -58,6 +58,7 @@ import jakarta.inject.Singleton; import org.jclouds.blobstore.BlobStore; import org.jclouds.blobstore.BlobStoreContext; +import org.jclouds.blobstore.ContainerNotFoundException; import org.jclouds.blobstore.KeyNotFoundException; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.domain.BlobAccess; @@ -161,6 +162,10 @@ public final class Nio2BlobStore extends BaseBlobStore { @Override public PageSet list(String container, ListContainerOptions options) { + if (!containerExists(container)) { + throw new ContainerNotFoundException(container, ""); + } + var delimiter = options.getDelimiter(); if (delimiter != null && !delimiter.equals("/")) { throw new IllegalArgumentException("Delimiters other than / not supported"); @@ -290,6 +295,10 @@ public final class Nio2BlobStore extends BaseBlobStore { @Override public Blob getBlob(String container, String key, GetOptions options) { + if (!containerExists(container)) { + throw new ContainerNotFoundException(container, ""); + } + var path = fs.getPath(container, key); logger.debug("Getting blob at: " + path); @@ -429,6 +438,10 @@ public final class Nio2BlobStore extends BaseBlobStore { @Override public String putBlob(String container, Blob blob, PutOptions options) { + if (!containerExists(container)) { + throw new ContainerNotFoundException(container, ""); + } + var path = fs.getPath(container, blob.getMetadata().getName()); // TODO: should we use a known suffix to filter these out during list? var tmpPath = fs.getPath(container, blob.getMetadata().getName() + "-" + UUID.randomUUID());