From 58e76098e6325ad16d552924d58c33bad6573c07 Mon Sep 17 00:00:00 2001 From: Geert-Jan Zwiers Date: Thu, 1 Sep 2022 22:20:11 +0200 Subject: fix(serde_v8): no panic on reading large text file (#15494) Co-authored-by: Nayeem Rahman --- serde_v8/ser.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'serde_v8/ser.rs') diff --git a/serde_v8/ser.rs b/serde_v8/ser.rs index 31d3e3144..3f8ad3b32 100644 --- a/serde_v8/ser.rs +++ b/serde_v8/ser.rs @@ -447,11 +447,16 @@ impl<'a, 'b, 'c> ser::Serializer for Serializer<'a, 'b, 'c> { } fn serialize_str(self, v: &str) -> JsResult<'a> { - Ok( - v8::String::new(&mut self.scope.borrow_mut(), v) - .unwrap() - .into(), - ) + let maybe_str = v8::String::new(&mut self.scope.borrow_mut(), v); + + // v8 string can return 'None' if buffer length > kMaxLength. + if let Some(str) = maybe_str { + Ok(str.into()) + } else { + Err(Error::Message(String::from( + "Cannot allocate String: buffer exceeds maximum length.", + ))) + } } fn serialize_bytes(self, v: &[u8]) -> JsResult<'a> { -- cgit v1.2.3