diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ad1d6b1742857c8eaaf8b8f0c4e37933346c8baf..e38d132959a5c8bde9b8894da74abdcf2891b9e2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ image: "rust:latest" before_script: + - git submodule update --init --recursive - rustup toolchain add nightly - rustup target add x86_64-unknown-redox --toolchain nightly - rustup show # Print version info for debugging @@ -19,7 +20,8 @@ test:linux: fmt: 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 -# run things like tests under redox \ No newline at end of file +# run things like tests under redox diff --git a/src/stdlib/src/lib.rs b/src/stdlib/src/lib.rs index 0a6016f9f12e197a24b9df142f406475209c08df..f88743581d81d1bc2ccd9b08574ce53076436acc 100644 --- a/src/stdlib/src/lib.rs +++ b/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; } 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 { *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); rng.test_timer(); + let mut retries = 100; loop { let mut char_iter = iter::repeat(()) .map(|()| rng.sample(Alphanumeric)) - .take(6); + .take(6); unsafe { 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 { - let mut st: stat = mem::uninitialized(); + let mut st: stat = mem::uninitialized(); if platform::stat(name, &mut st) != 0 { if platform::errno != ENOENT { *name = 0; } return name;