Merge branch 'master' into 'master'

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

See merge request redox-os/relibc!148
This commit is contained in:
Jeremy Soller
2018-06-28 11:36:02 +00:00
2 changed files with 18 additions and 11 deletions
+4 -2
View File
@@ -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
# run things like tests under redox
+14 -9
View File
@@ -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;