mirror of
https://github.com/denoland/deno.git
synced 2024-11-28 16:20:57 -05:00
fix(serde_v8): remove intentional deserialization error on non-utf8 strings (#10156)
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
This commit is contained in:
parent
24da0aa37d
commit
eb56186e44
2 changed files with 3 additions and 45 deletions
|
@ -154,12 +154,8 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de>
|
||||||
V: Visitor<'de>,
|
V: Visitor<'de>,
|
||||||
{
|
{
|
||||||
if self.input.is_string() {
|
if self.input.is_string() {
|
||||||
// TODO(@AaronO): implement a `.to_rust_string -> Option<String>` in rusty-v8
|
|
||||||
let v8_string = v8::Local::<v8::String>::try_from(self.input).unwrap();
|
let v8_string = v8::Local::<v8::String>::try_from(self.input).unwrap();
|
||||||
let string = match v8_to_rust_string(self.scope, v8_string) {
|
let string = v8_string.to_rust_string_lossy(self.scope);
|
||||||
Some(string) => string,
|
|
||||||
None => return Err(Error::ExpectedUtf8),
|
|
||||||
};
|
|
||||||
visitor.visit_string(string)
|
visitor.visit_string(string)
|
||||||
} else {
|
} else {
|
||||||
Err(Error::ExpectedString)
|
Err(Error::ExpectedString)
|
||||||
|
@ -619,15 +615,3 @@ impl<'de, 'a, 'b, 's> de::VariantAccess<'de>
|
||||||
de::Deserializer::deserialize_struct(&mut d, "", fields, visitor)
|
de::Deserializer::deserialize_struct(&mut d, "", fields, visitor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Like v8::String::to_rust_string_lossy except returns None on non-utf8
|
|
||||||
fn v8_to_rust_string(
|
|
||||||
scope: &mut v8::HandleScope,
|
|
||||||
s: v8::Local<v8::String>,
|
|
||||||
) -> Option<String> {
|
|
||||||
let string = s.to_rust_string_lossy(scope);
|
|
||||||
match string.find(std::char::REPLACEMENT_CHARACTER) {
|
|
||||||
Some(_) => None,
|
|
||||||
None => Some(string),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -683,8 +683,6 @@
|
||||||
"Stringification of new URLSearchParams(\"hi=there&thank=you\")"
|
"Stringification of new URLSearchParams(\"hi=there&thank=you\")"
|
||||||
],
|
],
|
||||||
"url-constructor.any.html": [
|
"url-constructor.any.html": [
|
||||||
"Parsing: <https://x/<2F>?<3F>#<23>> against <about:blank>",
|
|
||||||
"Parsing: <http://example.com/\ud800\udfff﷏ﷰ?\ud800\udfff﷏ﷰ> against <about:blank>",
|
|
||||||
"Parsing: <file://%43%7C> against <about:blank>",
|
"Parsing: <file://%43%7C> against <about:blank>",
|
||||||
"Parsing: <file://%43|> against <about:blank>",
|
"Parsing: <file://%43|> against <about:blank>",
|
||||||
"Parsing: <file://C%7C> against <about:blank>",
|
"Parsing: <file://C%7C> against <about:blank>",
|
||||||
|
@ -740,10 +738,7 @@
|
||||||
"Parsing: <> against <non-spec:/..//p>",
|
"Parsing: <> against <non-spec:/..//p>",
|
||||||
"Parsing: <path> against <non-spec:/..//p>"
|
"Parsing: <path> against <non-spec:/..//p>"
|
||||||
],
|
],
|
||||||
"url-origin.any.html": [
|
"url-origin.any.html": true,
|
||||||
"Origin parsing: <http://example.com/\ud800\udfff﷏ﷰ?\ud800\udfff﷏ﷰ> against <about:blank>",
|
|
||||||
"Origin parsing: <https://x/<2F>?<3F>#<23>> against <about:blank>"
|
|
||||||
],
|
|
||||||
"url-searchparams.any.html": true,
|
"url-searchparams.any.html": true,
|
||||||
"url-setters-stripping.any.html": [
|
"url-setters-stripping.any.html": [
|
||||||
"Setting protocol with leading U+0000 (https:)",
|
"Setting protocol with leading U+0000 (https:)",
|
||||||
|
@ -777,12 +772,7 @@
|
||||||
"urlsearchparams-getall.any.html": true,
|
"urlsearchparams-getall.any.html": true,
|
||||||
"urlsearchparams-has.any.html": true,
|
"urlsearchparams-has.any.html": true,
|
||||||
"urlsearchparams-set.any.html": true,
|
"urlsearchparams-set.any.html": true,
|
||||||
"urlsearchparams-sort.any.html": [
|
"urlsearchparams-sort.any.html": true,
|
||||||
"Parse and sort: <20>=x&&<26>=a",
|
|
||||||
"URL parse and sort: <20>=x&&<26>=a",
|
|
||||||
"Parse and sort: é&e<>&é",
|
|
||||||
"URL parse and sort: é&e<>&é"
|
|
||||||
],
|
|
||||||
"urlsearchparams-stringifier.any.html": true
|
"urlsearchparams-stringifier.any.html": true
|
||||||
},
|
},
|
||||||
"fetch": {
|
"fetch": {
|
||||||
|
@ -1088,33 +1078,17 @@
|
||||||
"storage_session_window_open.window.html": false,
|
"storage_session_window_open.window.html": false,
|
||||||
"storage_set_value_enumerate.window.html": true,
|
"storage_set_value_enumerate.window.html": true,
|
||||||
"storage_setitem.window.html": [
|
"storage_setitem.window.html": [
|
||||||
"localStorage[\"\ud800\"]",
|
|
||||||
"localStorage[] = \"\ud800\"",
|
"localStorage[] = \"\ud800\"",
|
||||||
"localStorage[\"\udbff\"]",
|
|
||||||
"localStorage[] = \"\udbff\"",
|
"localStorage[] = \"\udbff\"",
|
||||||
"localStorage[\"\udc00\"]",
|
|
||||||
"localStorage[] = \"\udc00\"",
|
"localStorage[] = \"\udc00\"",
|
||||||
"localStorage[\"\udfff\"]",
|
|
||||||
"localStorage[] = \"\udfff\"",
|
"localStorage[] = \"\udfff\"",
|
||||||
"localStorage[\"\\ufffd\"]",
|
|
||||||
"localStorage[] = \"\\ufffd\"",
|
|
||||||
"localStorage[\"\ud83ca\"]",
|
|
||||||
"localStorage[] = \"\ud83ca\"",
|
"localStorage[] = \"\ud83ca\"",
|
||||||
"localStorage[\"a\udf4d\"]",
|
|
||||||
"localStorage[] = \"a\udf4d\"",
|
"localStorage[] = \"a\udf4d\"",
|
||||||
"sessionStorage[\"\ud800\"]",
|
|
||||||
"sessionStorage[] = \"\ud800\"",
|
"sessionStorage[] = \"\ud800\"",
|
||||||
"sessionStorage[\"\udbff\"]",
|
|
||||||
"sessionStorage[] = \"\udbff\"",
|
"sessionStorage[] = \"\udbff\"",
|
||||||
"sessionStorage[\"\udc00\"]",
|
|
||||||
"sessionStorage[] = \"\udc00\"",
|
"sessionStorage[] = \"\udc00\"",
|
||||||
"sessionStorage[\"\udfff\"]",
|
|
||||||
"sessionStorage[] = \"\udfff\"",
|
"sessionStorage[] = \"\udfff\"",
|
||||||
"sessionStorage[\"\\ufffd\"]",
|
|
||||||
"sessionStorage[] = \"\\ufffd\"",
|
|
||||||
"sessionStorage[\"\ud83ca\"]",
|
|
||||||
"sessionStorage[] = \"\ud83ca\"",
|
"sessionStorage[] = \"\ud83ca\"",
|
||||||
"sessionStorage[\"a\udf4d\"]",
|
|
||||||
"sessionStorage[] = \"a\udf4d\""
|
"sessionStorage[] = \"a\udf4d\""
|
||||||
],
|
],
|
||||||
"storage_string_conversion.window.html": true,
|
"storage_string_conversion.window.html": true,
|
||||||
|
|
Loading…
Reference in a new issue