about summary refs log tree commit diff
diff options
context:
space:
mode:
authorschvv31n <tim.kurdov@gmail.com>2024-06-06 23:16:39 +0100
committerschvv31n <tim.kurdov@gmail.com>2024-06-06 23:18:01 +0100
commit2bdc53b153f16af9d81f8b68bdf27575ff82dc71 (patch)
tree3eeb1192a6ee4dd336e577ff6f2fa03c1b4eced8
parentfd5777c4c5c8fbc54d33d15afb29479180c532be (diff)
downloadrust-2bdc53b153f16af9d81f8b68bdf27575ff82dc71.tar.gz
rust-2bdc53b153f16af9d81f8b68bdf27575ff82dc71.zip
fixed memory leaks in PathBuf::leak & OsString::leak tests
-rw-r--r--library/std/src/ffi/os_str/tests.rs2
-rw-r--r--library/std/src/path/tests.rs5
2 files changed, 6 insertions, 1 deletions
diff --git a/library/std/src/ffi/os_str/tests.rs b/library/std/src/ffi/os_str/tests.rs
index 2379f0ba489..5b39b9e34d8 100644
--- a/library/std/src/ffi/os_str/tests.rs
+++ b/library/std/src/ffi/os_str/tests.rs
@@ -26,8 +26,10 @@ fn test_os_string_clear() {
 #[test]
 fn test_os_string_leak() {
     let os_string = OsString::from("have a cake");
+    let (len, cap) = (os_string.len(), os_string.capacity());
     let leaked = os_string.leak();
     assert_eq!(leaked.as_encoded_bytes(), b"have a cake");
+    unsafe { drop(String::from_raw_parts(leaked as *mut OsStr as _, len, cap)) }
 }
 
 #[test]
diff --git a/library/std/src/path/tests.rs b/library/std/src/path/tests.rs
index d29f895ba38..92702b395df 100644
--- a/library/std/src/path/tests.rs
+++ b/library/std/src/path/tests.rs
@@ -128,9 +128,12 @@ fn into() {
 
 #[test]
 fn test_pathbuf_leak() {
-    let buf = PathBuf::from("/have/a/cake".to_owned());
+    let string = "/have/a/cake".to_owned();
+    let (len, cap) = (string.len(), string.capacity());
+    let buf = PathBuf::from(string);
     let leaked = buf.leak();
     assert_eq!(leaked.as_os_str().as_encoded_bytes(), b"/have/a/cake");
+    unsafe { drop(String::from_raw_parts(leaked.as_mut_os_str() as *mut OsStr as _, len, cap)) }
 }
 
 #[test]