Browse Source

make any_cmp safe

= 2 years ago
parent
commit
c245f04c8c
1 changed files with 6 additions and 6 deletions
  1. 6 6
      packages/core/src/nodes.rs

+ 6 - 6
packages/core/src/nodes.rs

@@ -500,11 +500,11 @@ pub trait AnyValue: Sync + Send + 'static {
 #[cfg(feature = "sync_attributes")]
 impl<T: Any + PartialEq + Send + Sync + 'static> AnyValue for T {
     fn any_cmp(&self, other: &dyn AnyValue) -> bool {
-        if self.type_id() != other.type_id() {
+        if let Some(other) = other.as_any().downcast_ref() {
+            self == other
+        } else {
             return false;
         }
-
-        self == unsafe { &*(other as *const _ as *const T) }
     }
 
     fn as_any(&self) -> &dyn Any {
@@ -525,11 +525,11 @@ pub trait AnyValue: 'static {
 #[cfg(not(feature = "sync_attributes"))]
 impl<T: Any + PartialEq + 'static> AnyValue for T {
     fn any_cmp(&self, other: &dyn AnyValue) -> bool {
-        if self.type_id() != other.type_id() {
+        if let Some(other) = other.as_any().downcast_ref() {
+            self == other
+        } else {
             return false;
         }
-
-        self == unsafe { &*(other as *const _ as *const T) }
     }
 
     fn as_any(&self) -> &dyn Any {