You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2016/07/12 05:03:29 UTC

jclouds git commit: JCLOUDS-1137: Handle TOCTOU during blobMetadata

Repository: jclouds
Updated Branches:
  refs/heads/master 08e78c979 -> 4874a1eb1


JCLOUDS-1137: Handle TOCTOU during blobMetadata

A similar issue exists when getting a blob payload when a caller
simultaneously removes the blob.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/4874a1eb
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/4874a1eb
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/4874a1eb

Branch: refs/heads/master
Commit: 4874a1eb185870eef88731080ae8cf9ceebc3be2
Parents: 08e78c9
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Jul 11 21:51:52 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Jul 11 22:02:15 2016 -0700

----------------------------------------------------------------------
 .../internal/FilesystemStorageStrategyImpl.java        |  3 +++
 .../org/jclouds/blobstore/config/LocalBlobStore.java   | 13 ++++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/4874a1eb/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
index ff16954..3de142e 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
@@ -32,6 +32,7 @@ import static org.jclouds.filesystem.util.Utils.setPublic;
 import static org.jclouds.util.Closeables2.closeQuietly;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
@@ -389,6 +390,8 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
                .contentLength(byteSource.size())
                .contentMD5(byteSource.hash(Hashing.md5()).asBytes());
          }
+      } catch (FileNotFoundException fnfe) {
+         return null;
       } catch (IOException e) {
          throw Throwables.propagate(e);
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/4874a1eb/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 65d39ba..631f182 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -245,18 +245,21 @@ public final class LocalBlobStore implements BlobStore {
                   return storageStrategy.blobExists(containerName, key);
                }
             });
-      SortedSet<StorageMetadata> contents = newTreeSet(transform(blobBelongingToContainer,
-            new Function<String, StorageMetadata>() {
+      SortedSet<StorageMetadata> contents = newTreeSet(FluentIterable.from(blobBelongingToContainer)
+            .transform(new Function<String, StorageMetadata>() {
+               @Override
                public StorageMetadata apply(String key) {
                   Blob oldBlob = loadBlob(containerName, key);
-                  checkState(oldBlob != null, "blob " + key + " is not present although it was in the list of "
-                        + containerName);
+                  if (oldBlob == null) {
+                     return null;
+                  }
                   checkState(oldBlob.getMetadata() != null, "blob " + containerName + "/" + key + " has no metadata");
                   MutableBlobMetadata md = BlobStoreUtils.copy(oldBlob.getMetadata());
                   md.setSize(oldBlob.getMetadata().getSize());
                   return md;
                }
-            }));
+            })
+            .filter(Predicates.<StorageMetadata>notNull()));
 
       String marker = null;
       if (options != null) {