From 300197caf94c459d159f170bd242cb98521d9e80 Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Tue, 27 Oct 2020 16:38:47 -0700 Subject: [PATCH] Don't crash when using Infinity or NaN as a key in a map (#1073) Closes #3126 --- CHANGELOG.md | 2 ++ lib/src/util/number.dart | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d3a83249..3b65c85b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ * **Potentially breaking bug fix:** `meta.load-css()` now correctly uses the name `$url` for its first argument, rather than `$module`. +* Don't crash when using `Infinity` or `NaN` as a key in a map. + * Emit a proper parse error for a `=` with no right-hand side in a function. ## 1.27.0 diff --git a/lib/src/util/number.dart b/lib/src/util/number.dart index da9679bc3..53bcf9239 100644 --- a/lib/src/util/number.dart +++ b/lib/src/util/number.dart @@ -19,7 +19,9 @@ bool fuzzyEquals(num number1, num number2) => final _inverseEpsilon = 1 / epsilon; /// Returns a hash code for [number] that matches [fuzzyEquals]. -int fuzzyHashCode(num number) => (number * _inverseEpsilon).round().hashCode; +int fuzzyHashCode(num number) => number.isInfinite || number.isNaN + ? number.hashCode + : (number * _inverseEpsilon).round().hashCode; /// Returns whether [number1] is less than [number2], and not [fuzzyEquals]. bool fuzzyLessThan(num number1, num number2) =>