[PATCH] Disable all trait object unsizing
This commit is contained in:
parent
6f52a1937d
commit
4f9807a037
1 changed files with 137 additions and 0 deletions
137
0006-Disable-all-trait-object-unsizing.patch
Normal file
137
0006-Disable-all-trait-object-unsizing.patch
Normal file
|
@ -0,0 +1,137 @@
|
|||
From 307aba455c6ee3227d7c522c07761cda19dc716c Mon Sep 17 00:00:00 2001
|
||||
From: bjorn3 <bjorn3@users.noreply.github.com>
|
||||
Date: Wed, 29 Aug 2018 14:29:05 +0200
|
||||
Subject: [PATCH] Disable all trait object unsizing
|
||||
|
||||
---
|
||||
src/libcore/alloc.rs | 2 +-
|
||||
src/libcore/fmt/builders.rs | 13 ++++++++-----
|
||||
src/libcore/fmt/mod.rs | 3 ++-
|
||||
src/libcore/panic.rs | 5 +++--
|
||||
src/libcore/slice/mod.rs | 2 +-
|
||||
5 files changed, 15 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/libcore/alloc.rs b/src/libcore/alloc.rs
|
||||
index 35e4eea..28b6e2f 100644
|
||||
--- a/src/libcore/alloc.rs
|
||||
+++ b/src/libcore/alloc.rs
|
||||
@@ -144,7 +144,7 @@ impl Layout {
|
||||
#[stable(feature = "alloc_layout", since = "1.28.0")]
|
||||
#[inline]
|
||||
pub fn for_value<T: ?Sized>(t: &T) -> Self {
|
||||
- let (size, align) = (mem::size_of_val(t), mem::align_of_val(t));
|
||||
+ let (size, align) = panic!(); //(mem::size_of_val(t), mem::align_of_val(t));
|
||||
// See rationale in `new` for why this us using an unsafe variant below
|
||||
debug_assert!(Layout::from_size_align(size, align).is_ok());
|
||||
unsafe {
|
||||
diff --git a/src/libcore/fmt/builders.rs b/src/libcore/fmt/builders.rs
|
||||
index 3c5f934..1427ab3 100644
|
||||
--- a/src/libcore/fmt/builders.rs
|
||||
+++ b/src/libcore/fmt/builders.rs
|
||||
@@ -18,6 +18,7 @@ struct PadAdapter<'a> {
|
||||
impl<'a> PadAdapter<'a> {
|
||||
fn wrap<'b, 'c: 'a+'b>(fmt: &'c mut fmt::Formatter, slot: &'b mut Option<Self>)
|
||||
-> fmt::Formatter<'b> {
|
||||
+ /*
|
||||
fmt.wrap_buf(move |buf| {
|
||||
*slot = Some(PadAdapter {
|
||||
buf,
|
||||
@@ -25,6 +26,8 @@ impl<'a> PadAdapter<'a> {
|
||||
});
|
||||
slot.as_mut().unwrap()
|
||||
})
|
||||
+ */
|
||||
+ panic!();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +110,7 @@ pub fn debug_struct_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>,
|
||||
impl<'a, 'b: 'a> DebugStruct<'a, 'b> {
|
||||
/// Adds a new field to the generated struct output.
|
||||
#[stable(feature = "debug_builders", since = "1.2.0")]
|
||||
- pub fn field(&mut self, name: &str, value: &dyn fmt::Debug) -> &mut DebugStruct<'a, 'b> {
|
||||
+ pub fn field(&mut self, name: &str, value: &impl fmt::Debug) -> &mut DebugStruct<'a, 'b> {
|
||||
self.result = self.result.and_then(|_| {
|
||||
let prefix = if self.has_fields {
|
||||
","
|
||||
@@ -204,7 +207,7 @@ pub fn debug_tuple_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>, name: &str) -> D
|
||||
impl<'a, 'b: 'a> DebugTuple<'a, 'b> {
|
||||
/// Adds a new field to the generated tuple struct output.
|
||||
#[stable(feature = "debug_builders", since = "1.2.0")]
|
||||
- pub fn field(&mut self, value: &dyn fmt::Debug) -> &mut DebugTuple<'a, 'b> {
|
||||
+ pub fn field(&mut self, value: &impl fmt::Debug) -> &mut DebugTuple<'a, 'b> {
|
||||
self.result = self.result.and_then(|_| {
|
||||
let (prefix, space) = if self.fields > 0 {
|
||||
(",", " ")
|
||||
@@ -258,7 +261,7 @@ struct DebugInner<'a, 'b: 'a> {
|
||||
}
|
||||
|
||||
impl<'a, 'b: 'a> DebugInner<'a, 'b> {
|
||||
- fn entry(&mut self, entry: &dyn fmt::Debug) {
|
||||
+ fn entry(&mut self, entry: &impl fmt::Debug) {
|
||||
self.result = self.result.and_then(|_| {
|
||||
if self.is_pretty() {
|
||||
let mut slot = None;
|
||||
@@ -340,7 +343,7 @@ pub fn debug_set_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>) -> DebugSet<'a, 'b
|
||||
impl<'a, 'b: 'a> DebugSet<'a, 'b> {
|
||||
/// Adds a new entry to the set output.
|
||||
#[stable(feature = "debug_builders", since = "1.2.0")]
|
||||
- pub fn entry(&mut self, entry: &dyn fmt::Debug) -> &mut DebugSet<'a, 'b> {
|
||||
+ pub fn entry(&mut self, entry: &impl fmt::Debug) -> &mut DebugSet<'a, 'b> {
|
||||
self.inner.entry(entry);
|
||||
self
|
||||
}
|
||||
@@ -411,7 +414,7 @@ pub fn debug_list_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>) -> DebugList<'a,
|
||||
impl<'a, 'b: 'a> DebugList<'a, 'b> {
|
||||
/// Adds a new entry to the list output.
|
||||
#[stable(feature = "debug_builders", since = "1.2.0")]
|
||||
- pub fn entry(&mut self, entry: &dyn fmt::Debug) -> &mut DebugList<'a, 'b> {
|
||||
+ pub fn entry(&mut self, entry: &impl fmt::Debug) -> &mut DebugList<'a, 'b> {
|
||||
self.inner.entry(entry);
|
||||
self
|
||||
}
|
||||
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs
|
||||
index 928f95e..ad33906 100644
|
||||
--- a/src/libcore/fmt/mod.rs
|
||||
+++ b/src/libcore/fmt/mod.rs
|
||||
@@ -224,7 +224,8 @@ pub trait Write {
|
||||
}
|
||||
}
|
||||
|
||||
- write(&mut Adapter(self), args)
|
||||
+ //write(&mut Adapter(self), args)
|
||||
+ panic!()
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/libcore/panic.rs b/src/libcore/panic.rs
|
||||
index 17cac5a..27b7dde 100644
|
||||
--- a/src/libcore/panic.rs
|
||||
+++ b/src/libcore/panic.rs
|
||||
@@ -58,8 +58,9 @@ impl<'a> PanicInfo<'a> {
|
||||
pub fn internal_constructor(message: Option<&'a fmt::Arguments<'a>>,
|
||||
location: Location<'a>)
|
||||
-> Self {
|
||||
- struct NoPayload;
|
||||
- PanicInfo { payload: &NoPayload, location, message }
|
||||
+ //struct NoPayload;
|
||||
+ //PanicInfo { payload: &NoPayload, location, message }
|
||||
+ panic!();
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs
|
||||
index 88fdd76..8537f0e 100644
|
||||
--- a/src/libcore/slice/mod.rs
|
||||
+++ b/src/libcore/slice/mod.rs
|
||||
@@ -4003,7 +4003,7 @@ impl<A> SlicePartialEq<A> for [A]
|
||||
return true;
|
||||
}
|
||||
unsafe {
|
||||
- let size = mem::size_of_val(self);
|
||||
+ let size = panic!(); //mem::size_of_val(self);
|
||||
memcmp(self.as_ptr() as *const u8,
|
||||
other.as_ptr() as *const u8, size) == 0
|
||||
}
|
||||
--
|
||||
2.11.0
|
Loading…
Reference in a new issue