about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChris Denton <chris@chrisdenton.dev>2025-05-31 21:51:33 +0000
committerChris Denton <chris@chrisdenton.dev>2025-05-31 21:55:26 +0000
commit921b6c02aa01b40b9dfea318f4ae7ec1a9811499 (patch)
tree337e38b1c671cf5a6ed8520f895954456a32e78c
parent4d08223c054cf5a56d9761ca925fd46ffebe7115 (diff)
downloadrust-921b6c02aa01b40b9dfea318f4ae7ec1a9811499.tar.gz
rust-921b6c02aa01b40b9dfea318f4ae7ec1a9811499.zip
If HOME is empty, use the fallback instead
-rw-r--r--library/std/src/env.rs2
-rw-r--r--library/std/src/sys/pal/unix/os.rs5
2 files changed, 5 insertions, 2 deletions
diff --git a/library/std/src/env.rs b/library/std/src/env.rs
index ce2dc795220..9b0c295ae3a 100644
--- a/library/std/src/env.rs
+++ b/library/std/src/env.rs
@@ -617,7 +617,7 @@ impl Error for JoinPathsError {
 /// # Unix
 ///
 /// - Returns the value of the 'HOME' environment variable if it is set
-///   (including to an empty string).
+///   (and not an empty string).
 /// - Otherwise, it tries to determine the home directory by invoking the `getpwuid_r` function
 ///   using the UID of the current user. An empty home directory field returned from the
 ///   `getpwuid_r` function is considered to be a valid value.
diff --git a/library/std/src/sys/pal/unix/os.rs b/library/std/src/sys/pal/unix/os.rs
index 48609030aed..633cb299736 100644
--- a/library/std/src/sys/pal/unix/os.rs
+++ b/library/std/src/sys/pal/unix/os.rs
@@ -633,7 +633,10 @@ pub fn temp_dir() -> PathBuf {
 }
 
 pub fn home_dir() -> Option<PathBuf> {
-    return crate::env::var_os("HOME").or_else(|| unsafe { fallback() }).map(PathBuf::from);
+    return crate::env::var_os("HOME")
+        .filter(|s| !s.is_empty())
+        .or_else(|| unsafe { fallback() })
+        .map(PathBuf::from);
 
     #[cfg(any(
         target_os = "android",