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");
   }