Skip to content

KFilePlacesView: Fix crash when dragging over topmost section header

snooxx 💤 requested to merge snooxx/kio:snx/fix-kfileplacesview-crash into master

KFilePlacesView: Fix crash when dragging over topmost section header

b5de820a fixed incorrect highlighting of the section header label during drag operations over the first place of a section in clients setting m_dropOnPlace, e.g. Dolphin. This was effective for all except the topmost section header, where it would cause a crash (independent of the state of m_dropOnPlace).

In KFilePlacesViewDelegate::previousVisibleIndex access to model fails, because the index determined via indexAt of m_dropRect in KFilePlacesView::paintEvent is invalid when dragging towards the topmost section header label. This is because m_dropRect.topLeft() can extend above the entry's visualRect, i.e. it covers the places items below as well as above the separator, of which the latter does not exist for the first entry.

By remembering the index belonging to m_dropRect in m_dropIndex instead of reconstructing it, we can guarantee it to be valid.

BUG: 450813

BUG: 450966

Test Plan:

No more crash when dragging places or folders over topmost section header label in places view in kdialog --getsaveurl as well as dolphin. Other functionality related to dragging places around (including existing bugs) is unaffected and the behavior of the original fix remains.

KFilePlacesView: Fix potential crash in previousVisibleIndex

The previous commit fixed a crash in KFilePlacesViewDelegate::previousVisibleIndex, where access to model failed due to an invalid index.

In addition to the previous commit already fixing the crash, unrelated potential crashes in the future can be avoided by checking for an invalid index in previousVisibleIndex. The existing logic of indexIsSectionHeader is kept intact, since now an invalid index will lead to comparing two empty strings, i.e. it will not be considered a section header as required by the rest of the code.

This fix alone would already solve the crash without any side effects, still introducing m_dropIndex seemed less brittle.

CCBUG: 450813

CCBUG: 450966

Test Plan:

Functionality related to dragging places around (including existing bugs) is unaffected.

Merge request reports