Explorar el Código

Merge branch 'master' into 'master'

Fix off-by-one error and remove utf8 check in mktemp

See merge request redox-os/relibc!148
Jeremy Soller hace 6 años
padre
commit
da992bff56
Se han modificado 2 ficheros con 18 adiciones y 11 borrados
  1. 4 2
      .gitlab-ci.yml
  2. 14 9
      src/stdlib/src/lib.rs

+ 4 - 2
.gitlab-ci.yml

@@ -1,6 +1,7 @@
 image: "rust:latest"
 image: "rust:latest"
 
 
 before_script:
 before_script:
+    - git submodule update --init --recursive
     - rustup toolchain add nightly
     - rustup toolchain add nightly
     - rustup target add x86_64-unknown-redox --toolchain nightly
     - rustup target add x86_64-unknown-redox --toolchain nightly
     - rustup show      # Print version info for debugging
     - rustup show      # Print version info for debugging
@@ -19,7 +20,8 @@ test:linux:
 
 
 fmt:
 fmt:
     script:
     script:
-        - ./fmt.sh -- --write-mode=diff
+        - rustup component add rustfmt-preview
+        - ./fmt.sh -- --check
 
 
 # TODO: Set up a docker image with a redox vm that would allow to
 # TODO: Set up a docker image with a redox vm that would allow to
-#   run things like tests under redox
+#   run things like tests under redox

+ 14 - 9
src/stdlib/src/lib.rs

@@ -375,30 +375,35 @@ pub extern "C" fn mktemp(name: *mut c_char) -> *mut c_char {
         fn strlen(s: *const c_char) -> size_t;
         fn strlen(s: *const c_char) -> size_t;
     }
     }
     let len = unsafe { strlen(name) };
     let len = unsafe { strlen(name) };
-    let mut retries = 100;
-    let name_buf = unsafe { slice::from_raw_parts(name as *const u8, len as usize) }; 
-    let name_str = str::from_utf8(name_buf).unwrap_or("");
-    if len < 6 || !name_str.ends_with("XXXXXX") {
+    if len < 6 {
         unsafe { platform::errno = errno::EINVAL };
         unsafe { platform::errno = errno::EINVAL };
         unsafe { *name = 0 };
         unsafe { *name = 0 };
-        return name; 
-    } 
+        return name;
+    }
+    for i in len-6..len {
+        if unsafe { *name.offset(i as isize) } != b'X' as c_char {
+            unsafe { platform::errno = errno::EINVAL };
+            unsafe { *name = 0 };
+            return name;
+        }
+    }
 
 
     let mut rng = JitterRng::new_with_timer(get_nstime);
     let mut rng = JitterRng::new_with_timer(get_nstime);
     rng.test_timer();
     rng.test_timer();
 
 
+    let mut retries = 100;
     loop {
     loop {
         let mut char_iter = iter::repeat(())
         let mut char_iter = iter::repeat(())
         .map(|()| rng.sample(Alphanumeric))
         .map(|()| rng.sample(Alphanumeric))
-        .take(6); 
+        .take(6);
         unsafe {
         unsafe {
             for (i,c) in char_iter.enumerate() {
             for (i,c) in char_iter.enumerate() {
-                *name.offset(len as isize-i as isize) = c as c_char
+                *name.offset(len as isize - i as isize - 1) = c as c_char
             }
             }
         }
         }
 
 
         unsafe {
         unsafe {
-            let mut st: stat = mem::uninitialized(); 
+            let mut st: stat = mem::uninitialized();
             if platform::stat(name, &mut st) != 0 {
             if platform::stat(name, &mut st) != 0 {
                 if platform::errno != ENOENT { *name = 0; }
                 if platform::errno != ENOENT { *name = 0; }
                 return name;
                 return name;