diff --git a/src/cutecoin/gui/password_asker.py b/src/cutecoin/gui/password_asker.py index 96d1dbcd75637e0f86a9153e0c7dfe6b4bfe11ac..82bad7c5c3e0d78502bcef48a9288c7e6955675d 100644 --- a/src/cutecoin/gui/password_asker.py +++ b/src/cutecoin/gui/password_asker.py @@ -5,6 +5,8 @@ Created on 24 dec. 2014 ''' import logging +import unicodedata +import re from PyQt5.QtWidgets import QDialog, QMessageBox @@ -40,16 +42,24 @@ class PasswordAskerDialog(QDialog, Ui_PasswordAskerDialog): def accept(self): password = self.edit_password.text() - if self.account.check_password(password): - self.remember = self.check_remember.isChecked() - self.password = password - self.edit_password.setText("") - logging.debug("Password is valid") - super().accept() - else: + + if detect_non_printable(password): + QMessageBox.warning(self, "Bad password", + "Non printable characters in password", + QMessageBox.Ok) + return False + + if not self.account.check_password(password): QMessageBox.warning(self, "Failed to get private key", "Wrong password typed. Cannot open the private key", QMessageBox.Ok) + return False + + self.remember = self.check_remember.isChecked() + self.password = password + self.edit_password.setText("") + logging.debug("Password is valid") + super().accept() def reject(self): self.edit_password.setText("") @@ -57,3 +67,10 @@ class PasswordAskerDialog(QDialog, Ui_PasswordAskerDialog): self.setResult(QDialog.Accepted) self.password = "" super().reject() + + +def detect_non_printable(data): + control_chars = ''.join(map(chr, list(range(0, 32)) + list(range(127, 160)))) + control_char_re = re.compile('[%s]' % re.escape(control_chars)) + if control_char_re.search(data): + return True diff --git a/src/cutecoin/gui/transfer.py b/src/cutecoin/gui/transfer.py index e6eb917dd7261016cd4d2b57de0d1578a770dcfe..c26e461ca3b714130bf458894b98f0fff7c666b0 100644 --- a/src/cutecoin/gui/transfer.py +++ b/src/cutecoin/gui/transfer.py @@ -55,6 +55,12 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): recipient = self.edit_pubkey.text() amount = self.spinbox_amount.value() + if not amount: + QMessageBox.critical(self, "Money transfer", + "No amount. Please give the transfert amount", + QMessageBox.Ok) + return + password = self.password_asker.exec_() if self.password_asker.result() == QDialog.Rejected: return