path: root/src/corelib/tools/qlinkedlist.h
diff options
authorBradley T. Hughes <>2011-10-03 15:21:02 +0200
committerQt by Nokia <>2011-10-04 11:21:25 +0200
commit992a37234c5ec7494fc2f24217d36400f6c1630a (patch)
treee3bf0adbcb0dfa81ef950de7012d7e078d434bf1 /src/corelib/tools/qlinkedlist.h
parent22948130e878903bd9b98b8c031bce7dc07d7a95 (diff)
Don't crash by modifying read-only shared_null
Functions that modify the d-pointer must detach or otherwise take measures to not modify the const, read-only shared_null. The setSharable(bool) function takes care to detach when setting sharable to false, but should avoid setting the sharable data member unless d is not the shared null. Similarly, QMap<Key, T>::setInsertInOrder() needs to detach if it is shared with the shared_null (the logic has been updated to be the same as setSharable()). Change-Id: Ida5cb9818b86695f1b9f0264418b955c56424898 Reviewed-on: Reviewed-by: Qt Sanity Bot <> Reviewed-by: Bradley T. Hughes <> Reviewed-by: Jan-Arve Sæther <>
Diffstat (limited to 'src/corelib/tools/qlinkedlist.h')
1 files changed, 1 insertions, 1 deletions
diff --git a/src/corelib/tools/qlinkedlist.h b/src/corelib/tools/qlinkedlist.h
index bcad210d30..36cbc68eb8 100644
--- a/src/corelib/tools/qlinkedlist.h
+++ b/src/corelib/tools/qlinkedlist.h
@@ -97,7 +97,7 @@ public:
inline void detach()
{ if (d->ref != 1) detach_helper(); }
inline bool isDetached() const { return d->ref == 1; }
- inline void setSharable(bool sharable) { if (!sharable) detach(); d->sharable = sharable; }
+ inline void setSharable(bool sharable) { if (!sharable) detach(); if (d != &QLinkedListData::shared_null) d->sharable = sharable; }
inline bool isSharedWith(const QLinkedList<T> &other) const { return d == other.d; }
inline bool isEmpty() const { return d->size == 0; }