Skip to content

Commit 41ae6e8

Browse files
committed
fix: not panic when inf or nan to value
1 parent 81872f2 commit 41ae6e8

File tree

4 files changed

+13
-14
lines changed

4 files changed

+13
-14
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ license = "Apache-2.0"
1010
name = "sonic-rs"
1111
readme = "README.md"
1212
repository = "https://github.com/cloudwego/sonic-rs"
13-
version = "0.5.4"
13+
version = "0.5.5"
1414

1515
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1616

examples/iterator.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ fn main() {
2626
let iter = unsafe { to_object_iter_unchecked(&json) };
2727
for ret in iter {
2828
// deal with errors
29-
if ret.is_err() {
30-
println!("{}", ret.unwrap_err());
29+
if let Err(e) = ret {
30+
println!("{}", e);
3131
return;
3232
}
3333

src/serde/mod.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -354,11 +354,6 @@ mod test {
354354
"Invalid UTF-8 characters in json at line 1 column 5\n\n\t\"\0\0\0��\"\n\t....^..\n"
355355
);
356356

357-
#[derive(Debug, Deserialize, Serialize, PartialEq)]
358-
struct TestStruct {
359-
char_: char,
360-
}
361-
362357
// char's deserialize will iterator on the `str`
363358
let data = [34, 255, 34];
364359
let value: crate::Result<char> = from_slice(&data);

src/value/ser.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,7 @@ impl serde::Serializer for Serializer {
154154
if value.is_finite() {
155155
Ok(unsafe { Value::new_f64_unchecked(value as f64) })
156156
} else {
157-
Err(key_must_be_str_or_num(Unexpected::Other(
158-
"NaN or Infinite f32",
159-
)))
157+
Ok(Value::new_null())
160158
}
161159
}
162160

@@ -165,9 +163,7 @@ impl serde::Serializer for Serializer {
165163
if value.is_finite() {
166164
Ok(unsafe { Value::new_f64_unchecked(value) })
167165
} else {
168-
Err(key_must_be_str_or_num(Unexpected::Other(
169-
"NaN or Infinite f64",
170-
)))
166+
Ok(Value::new_null())
171167
}
172168
}
173169

@@ -947,4 +943,12 @@ mod test {
947943

948944
assert_eq!(value["arr"][2]["app_name"].as_str(), Some("test"));
949945
}
946+
947+
#[test]
948+
fn test_inf_or_nan_to_value() {
949+
assert_eq!(to_value(&f64::INFINITY).unwrap(), Value::new_null());
950+
assert_eq!(to_value(&f64::NAN).unwrap(), Value::new_null());
951+
assert_eq!(to_value(&f32::INFINITY).unwrap(), Value::new_null());
952+
assert_eq!(to_value(&f32::NAN).unwrap(), Value::new_null());
953+
}
950954
}

0 commit comments

Comments
 (0)