From 1bb399c3420038d54a1eda799a941e77ccd61a05 Mon Sep 17 00:00:00 2001
From: Sean Young <sean@mess.org>
Date: Fri, 8 Oct 2021 09:59:33 +0100
Subject: [PATCH] Ensure that pushing empty path works as before

Fixes: https://github.com/rust-lang/rust/issues/89658
---
 library/std/src/path.rs       | 5 ++++-
 library/std/src/path/tests.rs | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/library/std/src/path.rs b/library/std/src/path.rs
index 47156dc33e518..8f00d2260e4c6 100644
--- a/library/std/src/path.rs
+++ b/library/std/src/path.rs
@@ -1208,6 +1208,9 @@ impl PathBuf {
     /// * if `path` has a root but no prefix (e.g., `\windows`), it
     ///   replaces everything except for the prefix (if any) of `self`.
     /// * if `path` has a prefix but no root, it replaces `self`.
+    /// * if `self` has a verbatim prefix (e.g. `\\?\C:\windows`)
+    ///   and `path` is not empty, the new path is normalized: all references
+    ///   to `.` and `..` are removed.
     ///
     /// # Examples
     ///
@@ -1254,7 +1257,7 @@ impl PathBuf {
             self.as_mut_vec().truncate(0);
 
         // verbatim paths need . and .. removed
-        } else if comps.prefix_verbatim() {
+        } else if comps.prefix_verbatim() && !path.inner.is_empty() {
             let mut buf: Vec<_> = comps.collect();
             for c in path.components() {
                 match c {
diff --git a/library/std/src/path/tests.rs b/library/std/src/path/tests.rs
index 3973a6829d3d3..0a16ff2a721ce 100644
--- a/library/std/src/path/tests.rs
+++ b/library/std/src/path/tests.rs
@@ -1271,6 +1271,7 @@ pub fn test_push() {
         tp!(r"\\?\A:\x\y", "/foo", r"\\?\A:\foo");
         tp!(r"\\?\A:", r"..\foo\.", r"\\?\A:\foo");
         tp!(r"\\?\A:\x\y", r".\foo\.", r"\\?\A:\x\y\foo");
+        tp!(r"\\?\A:\x\y", r"", r"\\?\A:\x\y\");
     }
 }