Don't crash on an absolute --client_cwd value that is not in the workspace.

PiperOrigin-RevId: 313225953
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
index 3e037e1..19cbb07 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -248,22 +248,36 @@
     Path workspace = getWorkspace();
     Path workingDirectory;
     if (inWorkspace()) {
-      if (commandOptions.clientCwd.containsUplevelReferences()) {
+      PathFragment clientCwd = commandOptions.clientCwd;
+      if (clientCwd.containsUplevelReferences()) {
         throw new AbruptExitException(
             DetailedExitCode.of(
                 ExitCode.COMMAND_LINE_ERROR,
                 FailureDetail.newBuilder()
-                    .setMessage("Client cwd contains uplevel references")
+                    .setMessage("Client cwd '" + clientCwd + "' contains uplevel references")
                     .setClientEnvironment(
                         FailureDetails.ClientEnvironment.newBuilder()
                             .setCode(FailureDetails.ClientEnvironment.Code.CLIENT_CWD_MALFORMED)
                             .build())
                     .build()));
       }
-      workingDirectory = workspace.getRelative(commandOptions.clientCwd);
+      if (clientCwd.isAbsolute() && !clientCwd.startsWith(workspace.asFragment())) {
+        throw new AbruptExitException(
+            DetailedExitCode.of(
+                ExitCode.COMMAND_LINE_ERROR,
+                FailureDetail.newBuilder()
+                    .setMessage(
+                        String.format(
+                            "Client cwd '%s' is not inside workspace '%s'", clientCwd, workspace))
+                    .setClientEnvironment(
+                        FailureDetails.ClientEnvironment.newBuilder()
+                            .setCode(FailureDetails.ClientEnvironment.Code.CLIENT_CWD_MALFORMED)
+                            .build())
+                    .build()));
+      }
+      workingDirectory = workspace.getRelative(clientCwd);
     } else {
-      workspace = FileSystemUtils.getWorkingDirectory(getRuntime().getFileSystem());
-      workingDirectory = workspace;
+      workingDirectory = FileSystemUtils.getWorkingDirectory(getRuntime().getFileSystem());
     }
     return workingDirectory;
   }