diff options
Diffstat (limited to 'src/qt/qrcodedialog.cpp')
-rw-r--r-- | src/qt/qrcodedialog.cpp | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/src/qt/qrcodedialog.cpp b/src/qt/qrcodedialog.cpp index 567cfa75f1..2a428fb79e 100644 --- a/src/qt/qrcodedialog.cpp +++ b/src/qt/qrcodedialog.cpp @@ -8,21 +8,19 @@ #include <qrencode.h> -#define EXPORT_IMAGE_SIZE 256 +#define EXPORT_IMAGE_SIZE 256 -QRCodeDialog::QRCodeDialog(const QString &title, const QString &addr, const QString &label, bool enableReq, QWidget *parent) : - QDialog(parent), - ui(new Ui::QRCodeDialog), - address(addr) +QRCodeDialog::QRCodeDialog(const QString &addr, const QString &label, bool enableReq, QWidget *parent) : + QDialog(parent), ui(new Ui::QRCodeDialog), address(addr) { ui->setupUi(this); - setWindowTitle(title); + setWindowTitle(QString("%1").arg(address)); setAttribute(Qt::WA_DeleteOnClose); - ui->chkReq->setVisible(enableReq); + ui->chkReqPayment->setVisible(enableReq); ui->lnReqAmount->setVisible(enableReq); - ui->lblAm1->setVisible(enableReq); - ui->lblAm2->setVisible(enableReq); + ui->lblAmount->setVisible(enableReq); + ui->lblBTC->setVisible(enableReq); ui->lnLabel->setText(label); @@ -37,8 +35,8 @@ QRCodeDialog::~QRCodeDialog() void QRCodeDialog::genCode() { QString uri = getURI(); - //qDebug() << "Encoding:" << uri.toUtf8().constData(); + if (uri != "") { ui->lblQRCode->setText(""); @@ -62,6 +60,8 @@ void QRCodeDialog::genCode() QRcode_free(code); ui->lblQRCode->setPixmap(QPixmap::fromImage(myImage).scaled(300, 300)); } + else + ui->lblQRCode->setText(tr("Resulting URI too long, try to reduce the text for label / message.")); } QString QRCodeDialog::getURI() @@ -69,41 +69,49 @@ QString QRCodeDialog::getURI() QString ret = QString("bitcoin:%1").arg(address); int paramCount = 0; - if(ui->chkReq->isChecked() && ui->lnReqAmount->text().isEmpty() == false) { - bool ok= false; - double amount = ui->lnReqAmount->text().toDouble(&ok); - if(ok) { - ret += QString("?amount=%1X8").arg(ui->lnReqAmount->text()); + if (ui->chkReqPayment->isChecked() && !ui->lnReqAmount->text().isEmpty()) + { + bool ok = false; + ui->lnReqAmount->text().toDouble(&ok); + if (ok) + { + ret += QString("?amount=%1").arg(ui->lnReqAmount->text()); paramCount++; } } - if(ui->lnLabel->text().isEmpty() == false) { + if (!ui->lnLabel->text().isEmpty()) + { QString lbl(QUrl::toPercentEncoding(ui->lnLabel->text())); ret += QString("%1label=%2").arg(paramCount == 0 ? "?" : "&").arg(lbl); paramCount++; } - if(ui->lnMessage->text().isEmpty() == false) { + if (!ui->lnMessage->text().isEmpty()) + { QString msg(QUrl::toPercentEncoding(ui->lnMessage->text())); ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg); paramCount++; } - return ret; + // limit URI length to 255 chars, to prevent a DoS against the QR-Code dialog + if (ret.length() < 256) + return ret; + else + return QString(""); } -void QRCodeDialog::on_lnReqAmount_textChanged(const QString &) +void QRCodeDialog::on_lnReqAmount_textChanged(const QString &arg1) { genCode(); } -void QRCodeDialog::on_lnLabel_textChanged(const QString &) +void QRCodeDialog::on_lnLabel_textChanged(const QString &arg1) { genCode(); } -void QRCodeDialog::on_lnMessage_textChanged(const QString &) +void QRCodeDialog::on_lnMessage_textChanged(const QString &arg1) { genCode(); } @@ -111,12 +119,11 @@ void QRCodeDialog::on_lnMessage_textChanged(const QString &) void QRCodeDialog::on_btnSaveAs_clicked() { QString fn = GUIUtil::getSaveFileName(this, tr("Save Image..."), QString(), tr("PNG Images (*.png)")); - if(!fn.isEmpty()) { + if (!fn.isEmpty()) myImage.scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE).save(fn); - } } -void QRCodeDialog::on_chkReq_toggled(bool) +void QRCodeDialog::on_chkReqPayment_toggled(bool) { genCode(); } |