BlazeOptionHandler: only check in the parent directory, if there is one
When checking for a file called DO_NOT_BUILD_HERE in the parent direcotry of the
workspace path, first verify that there is such a parent directory. This avoids
a null pointer exception if the WORKSPACE file is in the top-level directory.
Fixes #5349
Change-Id: I81289a27a3f7fb0f4b5a112343de1b454fb5b8c5
PiperOrigin-RevId: 199790735
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 1ea31a1..d6f7944 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -340,7 +340,9 @@
Path current = buildFile.getParentDirectory();
for (int i = 0, len = packageFragment.segmentCount();
i < len && !packageFragment.equals(PathFragment.EMPTY_FRAGMENT); i++) {
- current = current.getParentDirectory();
+ if (current != null) {
+ current = current.getParentDirectory();
+ }
}
return Root.fromPath(current);
}
@@ -367,8 +369,8 @@
this.packageDirectory = filename.getParentDirectory();
this.sourceRoot = getSourceRoot(filename, packageIdentifier.getSourceRoot());
- if ((sourceRoot == null
- || !sourceRoot.getRelative(packageIdentifier.getSourceRoot()).equals(packageDirectory))
+ if ((sourceRoot.asPath() == null
+ || !sourceRoot.getRelative(packageIdentifier.getSourceRoot()).equals(packageDirectory))
&& !filename.getBaseName().equals("WORKSPACE")) {
throw new IllegalArgumentException(
"Invalid BUILD file name for package '" + packageIdentifier + "': " + filename);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java
index 81a6f03..107cf45 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java
@@ -144,17 +144,19 @@
return ExitCode.LOCAL_ENVIRONMENTAL_ERROR;
}
- Path doNotBuild =
- workspacePath.getParentDirectory().getRelative(BlazeWorkspace.DO_NOT_BUILD_FILE_NAME);
+ if (workspacePath.getParentDirectory() != null) {
+ Path doNotBuild =
+ workspacePath.getParentDirectory().getRelative(BlazeWorkspace.DO_NOT_BUILD_FILE_NAME);
- if (doNotBuild.exists()) {
- if (!commandAnnotation.canRunInOutputDirectory()) {
- eventHandler.handle(Event.error(getNotInRealWorkspaceError(doNotBuild)));
- return ExitCode.COMMAND_LINE_ERROR;
- } else {
- eventHandler.handle(
- Event.warn(
- runtime.getProductName() + " is run from output directory. This is unsound."));
+ if (doNotBuild.exists()) {
+ if (!commandAnnotation.canRunInOutputDirectory()) {
+ eventHandler.handle(Event.error(getNotInRealWorkspaceError(doNotBuild)));
+ return ExitCode.COMMAND_LINE_ERROR;
+ } else {
+ eventHandler.handle(
+ Event.warn(
+ runtime.getProductName() + " is run from output directory. This is unsound."));
+ }
}
}
return ExitCode.SUCCESS;