Przeglądaj źródła

realpath on redox: don't forget the nul terminator

jD91mZM2 6 lat temu
rodzic
commit
91675b5bc8
2 zmienionych plików z 14 dodań i 3 usunięć
  1. 2 2
      src/platform/linux/mod.rs
  2. 12 1
      src/platform/redox/mod.rs

+ 2 - 2
src/platform/linux/mod.rs

@@ -324,8 +324,8 @@ impl Pal for Sys {
         write!(proc_path, "{}", *file).unwrap();
         proc_path.push(0);
 
-        let len = out.len() - 1;
-        let read = readlink(CStr::from_bytes_with_nul(&proc_path).unwrap(), &mut out[..len]);
+        let len = out.len();
+        let read = readlink(CStr::from_bytes_with_nul(&proc_path).unwrap(), &mut out[..len-1]);
         if read < 0 {
             return -1;
         }

+ 12 - 1
src/platform/redox/mod.rs

@@ -622,7 +622,18 @@ impl Pal for Sys {
             Err(_) => return -1
         };
 
-        e(syscall::fpath(*file as usize, out)) as c_int
+        if out.is_empty() {
+            return 0;
+        }
+
+        let len = out.len();
+        let read = e(syscall::fpath(*file as usize, &mut out[..len-1]));
+        if (read as c_int) < 0 {
+            return -1;
+        }
+        out[read as usize] = 0;
+
+        0
     }
 
     fn rename(oldpath: &CStr, newpath: &CStr) -> c_int {