Fix `GlobValue` NPE bug.
PiperOrigin-RevId: 440588414
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
index 752036e..2720411 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
@@ -177,6 +177,10 @@
return null;
}
GlobValue globValue = (GlobValue) listingAndRecursiveGlobResult.next();
+ if (globValue == null) {
+ // has exception, will be handled later.
+ return null;
+ }
matches.addTransitive(globValue.getMatches());
listingValue = (DirectoryListingValue) listingAndRecursiveGlobResult.next();
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
index 19ae251..1a820e9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
@@ -656,6 +656,15 @@
}
@Test
+ public void testDoubleStarPatternWithErrorChild() throws Exception {
+ FileSystemUtils.ensureSymbolicLink(pkgPath.getChild("self"), "self");
+
+ IOException ioException =
+ assertThrows(IOException.class, () -> runGlob("**/self", Operation.FILES));
+ assertThat(ioException).hasMessageThat().matches("Symlink cycle");
+ }
+
+ @Test
public void testDoubleStarPatternWithChildGlob() throws Exception {
assertGlobMatches("**/ba*", "foo/bar", "foo/barnacle", "food/barnacle", "fool/barnacle");
}