fix(x): do not enforce valid utf8 in strndup

Closes #112
This commit is contained in:
dignifiedquire
2019-06-02 19:35:07 +02:00
parent 983ccaaccd
commit dc7d23ec47

View File

@@ -1,5 +1,4 @@
use crate::dc_strbuilder::dc_strbuilder_t; use crate::dc_strbuilder::dc_strbuilder_t;
use crate::dc_tools::*;
use crate::types::*; use crate::types::*;
pub use libc::{ pub use libc::{
@@ -27,9 +26,14 @@ pub fn strndup(s: *const libc::c_char, n: libc::c_ulong) -> *mut libc::c_char {
return std::ptr::null_mut(); return std::ptr::null_mut();
} }
let s_r = to_str(s); let end = std::cmp::min(n as usize, unsafe { strlen(s) });
let end = std::cmp::min(n as usize, s_r.len()); unsafe {
unsafe { strdup(to_cstring(&s_r[..end]).as_ptr()) } let result = malloc(end + 1);
memcpy(result, s as *const _, end);
std::ptr::write_bytes(result.offset(end as isize), b'\x00', 1);
result as *mut _
}
} }
extern "C" { extern "C" {