From 3e76f7af0f6d92a8ae8b077f775b97ead3aef7bf Mon Sep 17 00:00:00 2001 From: Hanno Date: Thu, 2 Mar 2017 11:58:18 +0100 Subject: [PATCH 1/2] Fix stack buffer overflow in zxcvbn. The array PossChars is filled with a 48 byte string plus a trailing zero byte. Therefore it needs to be 49 bytes long. --- src/zxcvbn/zxcvbn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zxcvbn/zxcvbn.cpp b/src/zxcvbn/zxcvbn.cpp index 25cbe5440..c999adfae 100644 --- a/src/zxcvbn/zxcvbn.cpp +++ b/src/zxcvbn/zxcvbn.cpp @@ -496,7 +496,7 @@ typedef struct uint8_t LeetCnv[sizeof L33TCnv / LEET_NORM_MAP_SIZE + 1]; /* uint8_t LeetChr[3]; */ uint8_t First; - uint8_t PossChars[48]; + uint8_t PossChars[49]; } DictWork_t; /********************************************************************************** From d45c2cf0f253d2109d84974d4ca1d22f4a938e10 Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Wed, 1 Mar 2017 21:08:10 -0500 Subject: [PATCH 2/2] closeEvent() should always hide the window, never raise it. This fixes an issue on X11 where Alt-F4 would not close the window, due to toggleWindow() believing the window is inactive and trying to raise it. Avoid the problem by closing the window unconditionally. --- src/gui/MainWindow.cpp | 23 ++++++++++++++--------- src/gui/MainWindow.h | 1 + 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3298c8b6c..b0e1a1925 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -281,7 +281,7 @@ MainWindow::MainWindow() connect(m_ui->passwordGeneratorWidget, SIGNAL(dialogTerminated()), SLOT(closePasswordGen())); connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog())); - + #ifdef Q_OS_MAC setUnifiedTitleAndToolBarOnMac(true); #endif @@ -563,7 +563,7 @@ void MainWindow::closeEvent(QCloseEvent* event) if (minimizeOnClose && !appExitCalled) { event->ignore(); - toggleWindow(); + hideWindow(); if (config()->get("security/lockdatabaseminimize").toBool()) { m_ui->tabWidget->lockDatabases(); @@ -728,22 +728,27 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) } } +void MainWindow::hideWindow() +{ + setWindowState(windowState() | Qt::WindowMinimized); + QTimer::singleShot(0, this, SLOT(hide())); + + if (config()->get("security/lockdatabaseminimize").toBool()) { + m_ui->tabWidget->lockDatabases(); + } +} + void MainWindow::toggleWindow() { if ((QApplication::activeWindow() == this) && isVisible() && !isMinimized()) { - setWindowState(windowState() | Qt::WindowMinimized); - QTimer::singleShot(0, this, SLOT(hide())); - - if (config()->get("security/lockdatabaseminimize").toBool()) { - m_ui->tabWidget->lockDatabases(); - } + hideWindow(); } else { ensurePolished(); setWindowState(windowState() & ~Qt::WindowMinimized); show(); raise(); activateWindow(); - + #if defined(Q_OS_LINUX) && ! defined(QT_NO_DBUS) // re-register global D-Bus menu (needed on Ubuntu with Unity) // see https://github.com/keepassxreboot/keepassxc/issues/271 diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index ab9924a75..ff92260f4 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -68,6 +68,7 @@ private Q_SLOTS: void rememberOpenDatabases(const QString& filePath); void applySettingsChanges(); void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); + void hideWindow(); void toggleWindow(); void lockDatabasesAfterInactivity(); void repairDatabase();