From 30e26d258bc69018b7dd6517d816cf36d5606bd3 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Thu, 9 Aug 2018 13:14:37 +0200 Subject: macOS: Handle missing key in QKeySequencePrivate::decodeString() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On macOS we pull out all the modifiers up front, which in the case of incomplete key sequences such as "Meta+Shift+" will result in an empty string as a result. The cross-platform code does not handle that case, so we need to exit early. This fixes an assert in tst_QKeySequence::parseString(). An assert has been added to QKeySequencePrivate::decodeString() to make the assumption about the 'accel' argument explicit. Change-Id: I135e62f9051a8b899202e5fb224b5d3c77bf2062 Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qkeysequence.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 9a9677b476..a428da8ca4 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -1062,6 +1062,8 @@ int QKeySequence::decodeString(const QString &str) int QKeySequencePrivate::decodeString(QString accel, QKeySequence::SequenceFormat format) { + Q_ASSERT(!accel.isEmpty()); + int ret = 0; accel = std::move(accel).toLower(); bool nativeText = (format == QKeySequence::NativeText); @@ -1121,7 +1123,10 @@ int QKeySequencePrivate::decodeString(QString accel, QKeySequence::SequenceForma sl = accel; } } + if (accel.isEmpty()) // Incomplete, like for "Meta+Shift+" + return Qt::Key_unknown; #endif + int i = 0; int lastI = 0; while ((i = sl.indexOf(QLatin1Char('+'), i + 1)) != -1) { -- cgit v1.2.3