diff options
Diffstat (limited to 'serde_v8')
-rw-r--r-- | serde_v8/ser.rs | 15 |
1 files changed, 10 insertions, 5 deletions
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> { |