[librsvg/librsvg-2.44] (391): Avoid undefined behavior casting opaque pointers to empty enums



commit ed31aa367922d4083394bd78bda34bc937d553f2
Author: Jordan Petridis <jpetridis gnome org>
Date:   Thu Dec 6 15:13:44 2018 +0200

    (391): Avoid undefined behavior casting opaque pointers to empty enums
    
    Looks like enums had been the recommended way to do this kind of
    thing, in the rustbooks itself, but it can lead to UB and it was
    changed recently to reflect this.
    
    The new recommendation is a repr(c) struct with a single private
    field.
    
    Close #391

 rsvg_internals/src/css.rs         | 5 ++++-
 rsvg_internals/src/defs.rs        | 5 ++++-
 rsvg_internals/src/drawing_ctx.rs | 5 ++++-
 rsvg_internals/src/handle.rs      | 5 ++++-
 rsvg_internals/src/tree.rs        | 5 ++++-
 5 files changed, 20 insertions(+), 5 deletions(-)
---
diff --git a/rsvg_internals/src/css.rs b/rsvg_internals/src/css.rs
index 8111fef6..c8f17e9c 100644
--- a/rsvg_internals/src/css.rs
+++ b/rsvg_internals/src/css.rs
@@ -15,7 +15,10 @@ use handle::{self, RsvgHandle};
 use state::State;
 use util::utf8_cstr;
 
-pub enum RsvgCssStyles {}
+#[repr(C)]
+pub struct RsvgCssStyles {
+    _private: [u8; 0],
+}
 
 struct Declaration {
     prop_value: String,
diff --git a/rsvg_internals/src/defs.rs b/rsvg_internals/src/defs.rs
index 1fbd4bd7..d213a074 100644
--- a/rsvg_internals/src/defs.rs
+++ b/rsvg_internals/src/defs.rs
@@ -8,7 +8,10 @@ use handle::{self, RsvgHandle};
 use node::{Node, RsvgNode};
 use util::utf8_cstr;
 
-pub enum RsvgDefs {}
+#[repr(C)]
+pub struct RsvgDefs {
+    _private: [u8; 0],
+}
 
 pub struct Defs {
     handle: *const RsvgHandle,
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index f34dfbf5..ea56c710 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -96,7 +96,10 @@ impl Drop for ViewParams {
     }
 }
 
-pub enum RsvgDrawingCtx {}
+#[repr(C)]
+pub struct RsvgDrawingCtx {
+    _private: [u8; 0],
+}
 
 pub struct DrawingCtx<'a> {
     rect: cairo::Rectangle,
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index e3506ae2..8ebb3162 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -13,7 +13,10 @@ use defs::{Defs, RsvgDefs};
 use error::LoadingError;
 use surface_utils::shared_surface::SharedImageSurface;
 
-pub enum RsvgHandle {}
+#[repr(C)]
+pub struct RsvgHandle {
+    _private: [u8; 0],
+}
 
 #[allow(improper_ctypes)]
 extern "C" {
diff --git a/rsvg_internals/src/tree.rs b/rsvg_internals/src/tree.rs
index 4345cc5d..0148d6cc 100644
--- a/rsvg_internals/src/tree.rs
+++ b/rsvg_internals/src/tree.rs
@@ -7,7 +7,10 @@ use std::rc::Rc;
 use node::{box_node, Node, NodeType, RsvgNode};
 use state::ComputedValues;
 
-pub enum RsvgTree {}
+#[repr(C)]
+pub struct RsvgTree {
+    _private: [u8; 0],
+}
 
 pub struct Tree {
     pub root: Rc<Node>,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]