From f81027ae9f5646ddfa06046836001aaa726c4025 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 23 Jun 2023 12:52:48 +0200 Subject: fix(serde_v8): Do not coerce values in serde_v8 (#19569) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #19568 Values are not coerced to the desired type during deserialisation. This makes serde_v8 stricter. --------- Co-authored-by: Bartek IwaƄczuk --- serde_v8/de.rs | 12 ------------ serde_v8/tests/de.rs | 28 ---------------------------- 2 files changed, 40 deletions(-) (limited to 'serde_v8') diff --git a/serde_v8/de.rs b/serde_v8/de.rs index d36cf6452..eb07271b4 100644 --- a/serde_v8/de.rs +++ b/serde_v8/de.rs @@ -80,10 +80,6 @@ macro_rules! deserialize_signed { x.value() as $t } else if let Ok(x) = v8::Local::::try_from(self.input) { x.i64_value().0 as $t - } else if let Some(x) = self.input.number_value(self.scope) { - x as $t - } else if let Some(x) = self.input.to_big_int(self.scope) { - x.i64_value().0 as $t } else { return Err(Error::ExpectedInteger(value_to_type_str(self.input))); }, @@ -103,10 +99,6 @@ macro_rules! deserialize_unsigned { x.value() as $t } else if let Ok(x) = v8::Local::::try_from(self.input) { x.u64_value().0 as $t - } else if let Some(x) = self.input.number_value(self.scope) { - x as $t - } else if let Some(x) = self.input.to_big_int(self.scope) { - x.u64_value().0 as $t } else { return Err(Error::ExpectedInteger(value_to_type_str(self.input))); }, @@ -184,10 +176,6 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de> x.value() } else if let Ok(x) = v8::Local::::try_from(self.input) { bigint_to_f64(x) - } else if let Some(x) = self.input.number_value(self.scope) { - x - } else if let Some(x) = self.input.to_big_int(self.scope) { - bigint_to_f64(x) } else { return Err(Error::ExpectedNumber(value_to_type_str(self.input))); }, diff --git a/serde_v8/tests/de.rs b/serde_v8/tests/de.rs index 3abaa0979..2edfe1bc6 100644 --- a/serde_v8/tests/de.rs +++ b/serde_v8/tests/de.rs @@ -508,34 +508,6 @@ detest!(de_neg_inf_i64, i64, "-Infinity", i64::MIN); detest!(de_neg_inf_f32, f32, "-Infinity", f32::NEG_INFINITY); detest!(de_neg_inf_f64, f64, "-Infinity", f64::NEG_INFINITY); -// valueOf Number -detest!(de_valof_u8, u8, "({ valueOf: () => 123 })", 123); -detest!(de_valof_u16, u16, "({ valueOf: () => 123 })", 123); -detest!(de_valof_u32, u32, "({ valueOf: () => 123 })", 123); -detest!(de_valof_u64, u64, "({ valueOf: () => 123 })", 123); -detest!(de_valof_i8, i8, "({ valueOf: () => 123 })", 123); -detest!(de_valof_i16, i16, "({ valueOf: () => 123 })", 123); -detest!(de_valof_i32, i32, "({ valueOf: () => 123 })", 123); -detest!(de_valof_i64, i64, "({ valueOf: () => 123 })", 123); -detest!(de_valof_f32, f32, "({ valueOf: () => 123 })", 123.0); -detest!(de_valof_f64, f64, "({ valueOf: () => 123 })", 123.0); - -// valueOf BigInt -detest!(de_valof_bigint_u8, u8, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_u16, u16, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_u32, u32, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_u64, u64, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_i8, i8, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_i16, i16, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_i32, i32, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_i64, i64, "({ valueOf: () => 123n })", 123); -detest!(de_valof_bigint_f32, f32, "({ valueOf: () => 123n })", 123.0); -detest!(de_valof_bigint_f64, f64, "({ valueOf: () => 123n })", 123.0); - -// bool -detest!(de_num_true, u8, "true", 1); -detest!(de_num_false, u8, "false", 0); - // BigInt to f32/f64 max/min detest!( de_bigint_f64_max, -- cgit v1.2.3