From d41121119b97ed60e543eed4b8d308ad9d250682 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 12 Jun 2014 10:52:32 +0200 Subject: [PATCH] Don't abuse new to do a reinterpret_cast Using new to do a reinterpret_cast is rather confusing. Also protect the list model case against self-assignment which could lead to memory corruption. Change-Id: I10b81644d0004d4a50a5a74e5b8c58e27cbe6934 Reviewed-by: Simon Hausmann --- src/qml/types/qqmllistmodel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index be49b6e..f4c32ce 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -810,7 +810,7 @@ int ListElement::setDoubleProperty(const ListLayout::Role &role, double d) if (role.type == ListLayout::Role::Number) { char *mem = getPropertyMemory(role); - double *value = new (mem) double; + double *value = reinterpret_cast(mem); bool changed = *value != d; *value = d; if (changed) @@ -826,7 +826,7 @@ int ListElement::setBoolProperty(const ListLayout::Role &role, bool b) if (role.type == ListLayout::Role::Bool) { char *mem = getPropertyMemory(role); - bool *value = new (mem) bool; + bool *value = reinterpret_cast(mem); bool changed = *value != b; *value = b; if (changed) @@ -842,8 +842,8 @@ int ListElement::setListProperty(const ListLayout::Role &role, ListModel *m) if (role.type == ListLayout::Role::List) { char *mem = getPropertyMemory(role); - ListModel **value = new (mem) ListModel *; - if (*value) { + ListModel **value = reinterpret_cast(mem); + if (*value && *value != m) { (*value)->destroy(); delete *value; } -- 2.7.4