Skip to content

Commit

Permalink
Limit PWS fields input according to UTF8 binary length #131
Browse files Browse the repository at this point in the history
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
  • Loading branch information
szszszsz committed Sep 1, 2016
1 parent 5320936 commit 593321c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/ui/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4148,20 +4148,25 @@ void MainWindow::on_radioButton_toggled(bool checked) {
}

void MainWindow::on_PWS_EditSlotName_textEdited(const QString &arg1) {
static QString valid_slotname;
int chars_left = PWS_SLOTNAME_LENGTH - strlen(arg1.toUtf8());
QString t = QString("%1").arg(chars_left);
ui->l_c_name->setText(t);
ui->PWS_EditSlotName->setValidator(
new utf8FieldLengthValidator(PWS_SLOTNAME_LENGTH, ui->PWS_EditSlotName));
}

void MainWindow::on_PWS_EditLoginName_textEdited(const QString &arg1) {
int chars_left = PWS_LOGINNAME_LENGTH - strlen(arg1.toUtf8());
QString t = QString("%1").arg(chars_left);
ui->l_c_login->setText(t);
ui->PWS_EditLoginName->setValidator(
new utf8FieldLengthValidator(PWS_LOGINNAME_LENGTH, ui->PWS_EditLoginName));
}

void MainWindow::on_PWS_EditPassword_textEdited(const QString &arg1) {
int chars_left = PWS_PASSWORD_LENGTH - strlen(arg1.toUtf8());
QString t = QString("%1").arg(chars_left);
ui->l_c_password->setText(t);
ui->PWS_EditPassword->setValidator(
new utf8FieldLengthValidator(PWS_PASSWORD_LENGTH, ui->PWS_EditPassword));
}
24 changes: 24 additions & 0 deletions src/ui/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#include "device.h"
#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QValidator>

#include <climits>

#define uint64_t unsigned long long
Expand Down Expand Up @@ -312,4 +314,26 @@ private slots:
void on_PWS_EditPassword_textEdited(const QString &arg1);
};

class utf8FieldLengthValidator : public QValidator {
Q_OBJECT
private:
int field_max_length;

public:
explicit utf8FieldLengthValidator(QObject *parent = 0);
explicit utf8FieldLengthValidator(int _field_max_length, QObject *parent = 0)
: QValidator(parent), field_max_length(_field_max_length) {}
virtual State validate(QString &input, int &) const {
if (input.isEmpty())
return Invalid;

int chars_left = field_max_length - strlen(input.toUtf8());

if (chars_left >= 0) {
return Acceptable;
}
return Invalid;
}
};

#endif // MAINWINDOW_H

0 comments on commit 593321c

Please sign in to comment.