diff options
Diffstat (limited to 'ext/ffi/lib.rs')
-rw-r--r-- | ext/ffi/lib.rs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/ext/ffi/lib.rs b/ext/ffi/lib.rs index ec80d4786..ae4ddd605 100644 --- a/ext/ffi/lib.rs +++ b/ext/ffi/lib.rs @@ -2187,13 +2187,14 @@ where permissions.check(None)?; // SAFETY: Pointer is user provided. - let cstr = unsafe { CStr::from_ptr(ptr as *const c_char) }.to_bytes(); - let value: v8::Local<v8::Value> = - v8::String::new_from_utf8(scope, cstr, v8::NewStringType::Normal) - .ok_or_else(|| { - type_error("Invalid CString pointer, string exceeds max length") - })? - .into(); + let cstr = unsafe { CStr::from_ptr(ptr as *const c_char) } + .to_str() + .map_err(|_| type_error("Invalid CString pointer, not valid UTF-8"))?; + let value: v8::Local<v8::Value> = v8::String::new(scope, cstr) + .ok_or_else(|| { + type_error("Invalid CString pointer, string exceeds max length") + })? + .into(); Ok(value.into()) } |