Skip to content

Commit

Permalink
Minor changes to wording of RUSTSEC-2020-0082
Browse files Browse the repository at this point in the history
This clarifies that UB can happen during unwinding, and not only after
catching a panic.
  • Loading branch information
mbrubeck committed Dec 6, 2020
1 parent 69bdf5e commit 04ff0c0
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
23 changes: 23 additions & 0 deletions crates/ordered-float/RUSTSEC-0000-0000.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
```toml
[advisory]
id = "RUSTSEC-2020-0082"
package = "ordered-float"
date = "2020-12-06"
url = "https://github.com/reem/rust-ordered-float/pull/71"
categories = []
keywords = ["unwind"]

[versions]
patched = ["^1.1.1", ">= 2.0.1"]
unaffected = ["< 0.2.2"]

[affected]
```

# ordered_float:NotNan may contain NaN after panic in assignment operators

After using an assignment operators such as `NotNan::add_assign`, `NotNan::mul_assign`, etc., it was possible for the resulting `NotNan` value to contain a `NaN`. This could cause undefined behavior in safe code, because the safe `NotNan::cmp` method contains internal unsafe code that assumes the value is never `NaN`. (It could also cause undefined behavior in third-party unsafe code that makes the same assumption, as well as logic errors in safe code.)

This was mitigated starting in version 0.4.0, by panicking if the assigned value is NaN. However, in affected versions from 0.4.0 onward, code that uses the `NotNan` value during unwinding, or that continues after catching the panic, could still observe the invalid value and trigger undefined behavior.

The flaw is fully corrected in versions 1.1.1 and 2.0.1, by ensuring that the assignment operators panic without modifying the operand, if the result would be `NaN`.
4 changes: 2 additions & 2 deletions crates/ordered-float/RUSTSEC-2020-0082.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ unaffected = ["< 0.2.2"]
[affected]
```

# ordered_float:NotNan may contain NaN after unwinding in assignment operators
# ordered_float:NotNan may contain NaN after panic in assignment operators

After using an assignment operators such as `NotNan::add_assign`, `NotNan::mul_assign`, etc., it was possible for the resulting `NotNan` value to contain a `NaN`. This could cause undefined behavior in safe code, because the safe `NotNan::cmp` method contains internal unsafe code that assumes the value is never `NaN`. (It could also cause undefined behavior in third-party unsafe code that makes the same assumption, as well as logic errors in safe code.)

This was mitigated starting in version 0.4.0, by panicking if the assigned value is NaN. However, in affected versions from 0.4.0 onward, code that continued after using unwinding to catch this panic could still observe the invalid value and trigger undefined behavior.
This was mitigated starting in version 0.4.0, by panicking if the assigned value is NaN. However, in affected versions from 0.4.0 onward, code that uses the `NotNan` value during unwinding, or that continues after catching the panic, could still observe the invalid value and trigger undefined behavior.

The flaw is fully corrected in versions 1.1.1 and 2.0.1, by ensuring that the assignment operators panic without modifying the operand, if the result would be `NaN`.

0 comments on commit 04ff0c0

Please sign in to comment.