aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar philwo <philwo@google.com>2017-08-29 18:21:55 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-08-29 18:53:05 +0200
commit7bd30dcf279beaecaf20110e44fd15ba53d9e9b7 (patch)
tree8f5ded679d9b9913ea581a3489cd3e15d2ac7075 /src/main
parent9d5bce66280094c0531ddfde2752e596d0d78c79 (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.java10
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()));
+ }
}
}
}