diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -456,6 +456,10 @@ QString name = path.empty() ? QString("[" + tr("default wallet") + "]") : QString::fromStdString(path); + // Menu items remove single &. Single & are shown when && is in + // the string, but only the first occurrence. So replace only + // the first & with && + name.replace(name.indexOf(QChar('&')), 1, QString("&&")); QAction *action = m_open_wallet_menu->addAction(name); if (i.second) { diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -309,7 +309,9 @@ QString amount = BitcoinUnits::formatWithUnit( model->getOptionsModel()->getDisplayUnit(), rcp.amount); if (model->isMultiwallet()) { - amount.append(tr(" from wallet '%1'").arg(model->getWalletName())); + amount.append( + tr(" from wallet '%1'") + .arg(GUIUtil::HtmlEscape(model->getWalletName()))); } // generate address string QString address = rcp.address; @@ -324,7 +326,8 @@ if (rcp.label.length() > 0) { // label with address recipientElement.append( - tr("%1 to '%2'").arg(amount, rcp.label)); + tr("%1 to '%2'") + .arg(amount, GUIUtil::HtmlEscape(rcp.label))); recipientElement.append(QString(" (%1)").arg(address)); } else { // just address diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp --- a/src/qt/walletcontroller.cpp +++ b/src/qt/walletcontroller.cpp @@ -73,7 +73,7 @@ QMessageBox box(parent); box.setWindowTitle(tr("Close wallet")); box.setText(tr("Are you sure you wish to close wallet %1?") - .arg(wallet_model->getDisplayName())); + .arg(GUIUtil::HtmlEscape(wallet_model->getDisplayName()))); box.setInformativeText( tr("Closing the wallet for too long can result in having to resync the " "entire chain if pruning is enabled.")); diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -202,13 +202,13 @@ QModelIndex index = ttm->index(start, 0, parent); QString address = ttm->data(index, TransactionTableModel::AddressRole).toString(); - QString label = - ttm->data(index, TransactionTableModel::LabelRole).toString(); + QString label = GUIUtil::HtmlEscape( + ttm->data(index, TransactionTableModel::LabelRole).toString()); - Q_EMIT incomingTransaction(date, - walletModel->getOptionsModel()->getDisplayUnit(), - int64_t(amount) * SATOSHI, type, address, label, - walletModel->getWalletName()); + Q_EMIT incomingTransaction( + date, walletModel->getOptionsModel()->getDisplayUnit(), + int64_t(amount) * SATOSHI, type, address, label, + GUIUtil::HtmlEscape(walletModel->getWalletName())); } void WalletView::gotoOverviewPage() {