summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2015-04-15 11:31:20 +0200
committerMarc Mutz <marc.mutz@kdab.com>2015-04-16 09:46:00 +0000
commit198190b76baffce9b983d03749e64af6f8428e49 (patch)
tree2563051d164491839cb9926a1c5d8c96c20683c5 /src
parentaea74dcaee2d6930e4d69cbda83088703b45816e (diff)
QList: make QListSpecialMethods dtors protected
QList publicly inherits from QListSpecialMethods. Thus, any specialisation of QListSpecialMethods should make their destructor protected, to avoid deletion through a pointer to QListSpecialMethods invoking UB. Change-Id: I7e317606f84826cc0faf1bfc05dee97da6eaf2eb Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/tools/qbytearraylist.h4
-rw-r--r--src/corelib/tools/qlist.h7
-rw-r--r--src/corelib/tools/qstringlist.h4
3 files changed, 14 insertions, 1 deletions
diff --git a/src/corelib/tools/qbytearraylist.h b/src/corelib/tools/qbytearraylist.h
index 9cd241a87b..f8539ca07a 100644
--- a/src/corelib/tools/qbytearraylist.h
+++ b/src/corelib/tools/qbytearraylist.h
@@ -55,6 +55,10 @@ class QByteArrayList : public QList<QByteArray>
template <> struct QListSpecialMethods<QByteArray>
#endif
{
+#ifndef Q_QDOC
+protected:
+ ~QListSpecialMethods() {}
+#endif
public:
inline QByteArray join() const
{ return QtPrivate::QByteArrayList_join(self(), 0, 0); }
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 57e67d52d7..f5ff952f97 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -62,8 +62,13 @@ QT_BEGIN_NAMESPACE
template <typename T> class QVector;
template <typename T> class QSet;
-template <typename T> struct QListSpecialMethods { };
+template <typename T> struct QListSpecialMethods
+{
+protected:
+ ~QListSpecialMethods() {}
+};
template <> struct QListSpecialMethods<QByteArray>;
+template <> struct QListSpecialMethods<QString>;
struct Q_CORE_EXPORT QListData {
// tags for tag-dispatching of QList implementations,
diff --git a/src/corelib/tools/qstringlist.h b/src/corelib/tools/qstringlist.h
index 89785208c8..8288e430fa 100644
--- a/src/corelib/tools/qstringlist.h
+++ b/src/corelib/tools/qstringlist.h
@@ -57,6 +57,10 @@ class QStringList : public QList<QString>
template <> struct QListSpecialMethods<QString>
#endif
{
+#ifndef Q_QDOC
+protected:
+ ~QListSpecialMethods() {}
+#endif
public:
inline void sort(Qt::CaseSensitivity cs = Qt::CaseSensitive);
inline int removeDuplicates();