Skip to content

Commit

Permalink
Properly handle NaN in new Date() (#1477)
Browse files Browse the repository at this point in the history
  • Loading branch information
raskad authored Aug 20, 2021
1 parent 0449d7a commit bc12f95
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions boa/src/builtins/date/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -450,9 +450,13 @@ impl Date {
},
tv => {
let tv = tv.to_number(context)?;
let secs = (tv / 1_000f64) as i64;
let nsecs = ((tv % 1_000f64) * 1_000_000f64) as u32;
NaiveDateTime::from_timestamp_opt(secs, nsecs)
if tv.is_nan() {
None
} else {
let secs = (tv / 1_000f64) as i64;
let nsecs = ((tv % 1_000f64) * 1_000_000f64) as u32;
NaiveDateTime::from_timestamp_opt(secs, nsecs)
}
}
},
};
Expand Down Expand Up @@ -846,6 +850,13 @@ impl Date {
/// [mdn]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear
pub fn set_full_year(&mut self, year: Option<f64>, month: Option<f64>, day: Option<f64>) {
if let Some(year) = year {
if self.0.is_none() {
self.0 = NaiveDateTime::from_timestamp_opt(0, 0)
.and_then(|local| ignore_ambiguity(Local.from_local_datetime(&local)))
.map(|local| local.naive_utc())
.filter(|time| Self::time_clip(time.timestamp_millis() as f64).is_some());
}

self.set_components(false, Some(year), month, day, None, None, None, None)
} else {
self.0 = None
Expand Down

0 comments on commit bc12f95

Please sign in to comment.