From 569910856e648e8cdaad85916eb82fea3c75ed8b Mon Sep 17 00:00:00 2001 From: Aapo Alasuutari Date: Fri, 5 Aug 2022 19:26:54 +0300 Subject: fix(ext/ffi): Check CStr for UTF-8 validity on read (#15318) Co-authored-by: Phosra --- ext/ffi/lib.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'ext') 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::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::String::new(scope, cstr) + .ok_or_else(|| { + type_error("Invalid CString pointer, string exceeds max length") + })? + .into(); Ok(value.into()) } -- cgit v1.2.3