diff options
-rw-r--r-- | src/gui/text/qtextcursor.cpp | 3 | ||||
-rw-r--r-- | tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index f32c31d18e..af8fcf369c 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -80,7 +80,8 @@ QTextCursorPrivate::QTextCursorPrivate(const QTextCursorPrivate &rhs) visualNavigation = rhs.visualNavigation; keepPositionOnInsert = rhs.keepPositionOnInsert; changed = rhs.changed; - priv->addCursor(this); + if (priv != nullptr) + priv->addCursor(this); } QTextCursorPrivate::~QTextCursorPrivate() diff --git a/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp b/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp index d2c4adb888..2bc611fe93 100644 --- a/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp +++ b/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp @@ -137,6 +137,7 @@ private slots: void cursorPositionWithBlockUndoAndRedo3(); void joinNonEmptyRemovedBlockUserState(); + void crashOnDetachingDanglingCursor(); private: int blockCount(); @@ -1974,5 +1975,14 @@ void tst_QTextCursor::joinNonEmptyRemovedBlockUserState() QCOMPARE(cursor.block().userState(), 10); } +void tst_QTextCursor::crashOnDetachingDanglingCursor() +{ + QTextDocument *document = new QTextDocument; + QTextCursor cursor(document); + QTextCursor cursor2 = cursor; + delete document; + cursor2.setPosition(0); // Don't crash here +} + QTEST_MAIN(tst_QTextCursor) #include "tst_qtextcursor.moc" |