qt: askpassphrasedialog: Clear pass fields on accept
authorPavel Vasin <pavel@vasin.nl>
Fri, 29 Nov 2019 12:37:56 +0000 (14:37 +0200)
committerLaser9un <laser9un@gmail.com>
Fri, 29 Nov 2019 12:37:56 +0000 (14:37 +0200)
This is usability improvement in a case if user gets re-asked passphrase. (e.g. made a typo)

src/qt/askpassphrasedialog.cpp
src/qt/askpassphrasedialog.h

index 9e91cb1..6569989 100644 (file)
@@ -67,10 +67,7 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) :
 
 AskPassphraseDialog::~AskPassphraseDialog()
 {
-    // Attempt to overwrite text so that they do not linger around in memory
-    ui->passEdit1->setText(QString(" ").repeated(ui->passEdit1->text().size()));
-    ui->passEdit2->setText(QString(" ").repeated(ui->passEdit2->text().size()));
-    ui->passEdit3->setText(QString(" ").repeated(ui->passEdit3->text().size()));
+    secureClearPassFields();
     delete ui;
 }
 
@@ -92,6 +89,8 @@ void AskPassphraseDialog::accept()
     oldpass.assign(ui->passEdit1->text().toStdString().c_str());
     newpass1.assign(ui->passEdit2->text().toStdString().c_str());
     newpass2.assign(ui->passEdit3->text().toStdString().c_str());
+       
+       secureClearPassFields();
 
     switch(mode)
     {
@@ -267,3 +266,17 @@ bool AskPassphraseDialog::eventFilter(QObject *object, QEvent *event)
     }
     return QDialog::eventFilter(object, event);
 }
+
+static void SecureClearQLineEdit(QLineEdit* edit)
+{
+    // Attempt to overwrite text so that they do not linger around in memory
+    edit->setText(QString(" ").repeated(edit->text().size()));
+    edit->clear();
+}
+
+void AskPassphraseDialog::secureClearPassFields()
+{
+    SecureClearQLineEdit(ui->passEdit1);
+    SecureClearQLineEdit(ui->passEdit2);
+    SecureClearQLineEdit(ui->passEdit3);
+}
\ No newline at end of file
index 5909fb6..9e46410 100644 (file)
@@ -39,6 +39,7 @@ private:
 
 private slots:
     void textChanged();
+       void secureClearPassFields();
     bool event(QEvent *event);
     bool eventFilter(QObject *, QEvent *event);
 };