From 7642f639ef1ae7b178def73e070171e188db3c10 Mon Sep 17 00:00:00 2001
From: Vincent Texier <vit@free.fr>
Date: Mon, 9 Feb 2015 21:30:01 +0100
Subject: [PATCH] check password for non printable chars

fix bug on request if transfert amount is 0
---
 src/cutecoin/gui/password_asker.py | 31 +++++++++++++++++++++++-------
 src/cutecoin/gui/transfer.py       |  6 ++++++
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/src/cutecoin/gui/password_asker.py b/src/cutecoin/gui/password_asker.py
index 96d1dbcd..82bad7c5 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 344a7d13..2d3c5314 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
-- 
GitLab