Update error handling for absolute symlink violations when evaluating source action inputs.

PiperOrigin-RevId: 684044178
Change-Id: Ib18cf63bc60d2012ca23882b83fb5fa237a5dac5
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
index 6952ad9..d703084 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
@@ -52,6 +52,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCachingDependenciesProvider;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
+import com.google.devtools.build.lib.vfs.DetailedIOException;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.lib.vfs.XattrProvider;
@@ -303,6 +304,9 @@
     FileValue fileValue;
     try {
       fileValue = (FileValue) env.getValueOrThrow(fileSkyKey, IOException.class);
+    } catch (DetailedIOException e) {
+      throw new ArtifactFunctionException(
+          SourceArtifactException.createdDetailed(artifact, e), Transience.PERSISTENT);
     } catch (IOException e) {
       throw new ArtifactFunctionException(
           SourceArtifactException.create(artifact, e), Transience.PERSISTENT);
@@ -603,6 +607,20 @@
       return new SourceArtifactException(detailedExitCode, e);
     }
 
+    private static SourceArtifactException createdDetailed(
+        Artifact artifact, DetailedIOException e) {
+      FailureDetail failureDetailWithUpdatedErrorMessage =
+          e.getDetailedExitCode().getFailureDetail().toBuilder()
+              .setMessage(
+                  constructErrorMessage(
+                      artifact,
+                      "error reading file: "
+                          + e.getDetailedExitCode().getFailureDetail().getMessage()))
+              .build();
+      return new SourceArtifactException(
+          DetailedExitCode.of(failureDetailWithUpdatedErrorMessage), e);
+    }
+
     private static SourceArtifactException create(
         Artifact artifact, RecursiveFilesystemTraversalException e) {
       FailureDetail failureDetail =