Skip to content

Commit 1486e1f

Browse files
committed
Auto merge of #60786 - alexcrichton:error-type-id-destabilize-beta, r=pietroalbini
[beta] Destabilize the `Error::type_id` function This commit destabilizes the `Error::type_id` function in the standard library. This does so by effectively reverting #58048, restoring the `#[unstable]` attribute. The security mailing list has recently been notified of a vulnerability relating to the stabilization of this function. First stabilized in Rust 1.34.0, a stable function here allows users to implement a custom return value for this function: struct MyType; impl Error for MyType { fn type_id(&self) -> TypeId { // Enable safe casting to `String` by accident. TypeId::of::<String>() } } This, when combined with the `Error::downcast` family of functions, allows safely casting a type to any other type, clearly a memory safety issue! A formal announcement has been made to the [security mailing list](https://groups.google.com/forum/#!topic/rustlang-security-announcements/aZabeCMUv70) as well as [the blog](https://blog.rust-lang.org/2019/05/13/Security-advisory.html) This commit simply destabilizes the `Error::type_id` which, although breaking for users since Rust 1.34.0, is hoped to have little impact and has been deemed sufficient to mitigate this issue for the stable channel. The long-term fate of the `Error::type_id` API will be discussed at #60784.
2 parents 88f5adc + 68bc1f6 commit 1486e1f

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

RELEASES.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
Version 1.34.2 (2019-05-14)
2+
===========================
3+
4+
* [Destabilize the `Error::type_id` function due to a security
5+
vulnerability][60785]
6+
7+
[60785]: https://github.com/rust-lang/rust/pull/60785
8+
19
Version 1.34.1 (2019-04-25)
210
===========================
311

src/libstd/error.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ pub trait Error: Debug + Display {
197197
fn source(&self) -> Option<&(dyn Error + 'static)> { None }
198198

199199
/// Gets the `TypeId` of `self`
200-
#[stable(feature = "error_type_id", since = "1.34.0")]
200+
#[doc(hidden)]
201+
#[unstable(feature = "error_type_id",
202+
reason = "this is memory unsafe to override in user code",
203+
issue = "60784")]
201204
fn type_id(&self) -> TypeId where Self: 'static {
202205
TypeId::of::<Self>()
203206
}

0 commit comments

Comments
 (0)