diff options
author | 2017-08-29 18:21:55 +0200 | |
---|---|---|
committer | 2017-08-29 18:53:05 +0200 | |
commit | 7bd30dcf279beaecaf20110e44fd15ba53d9e9b7 (patch) | |
tree | 8f5ded679d9b9913ea581a3489cd3e15d2ac7075 /src/main | |
parent | 9d5bce66280094c0531ddfde2752e596d0d78c79 (diff) |
Fix NPE in WorkerFilesHash.
We must check that a given artifact is a file, before calling getDigest, according to the interface contract specified in actions/Metadata.java.
Add a regression test to bazel_worker_test.sh, too. It's enough to simply add a directory entry to the worker's data to trigger the original bug.
PiperOrigin-RevId: 166856512
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/worker/WorkerFilesHash.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerFilesHash.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerFilesHash.java index 2d4a1f0f22..a65109169e 100644 --- a/src/main/java/com/google/devtools/build/lib/worker/WorkerFilesHash.java +++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerFilesHash.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.actions.ActionInputHelper; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; import com.google.devtools.build.lib.actions.Spawn; +import com.google.devtools.build.lib.actions.cache.Metadata; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.PathFragment; import java.io.IOException; @@ -72,9 +73,12 @@ class WorkerFilesHash { for (Entry<PathFragment, Artifact> mapping : rootAndMappings.getValue().entrySet()) { Artifact localArtifact = mapping.getValue(); if (localArtifact != null) { - workerFilesMap.put( - root.getRelative(mapping.getKey()), - HashCode.fromBytes(actionInputFileCache.getMetadata(localArtifact).getDigest())); + Metadata metadata = actionInputFileCache.getMetadata(localArtifact); + if (metadata.isFile()) { + workerFilesMap.put( + root.getRelative(mapping.getKey()), + HashCode.fromBytes(metadata.getDigest())); + } } } } |