Skip to content

Commit

Permalink
Merge #12650: gui: Fix issue: "default port not shown correctly in se…
Browse files Browse the repository at this point in the history
…ttings dialog"

Summary:
40c5886 Fix illegal default `addProxy` and `addrSeparateProxyTor` settings. (251)

Pull request description:

  In f05d349 the value of the `addrProxy` and `addrSeparateProxyTor` settings is set to an illegal default value, because the value of `DEFAULT_GUI_PROXY_PORT ` is passed to the `fieldWidth` parameter of the `QString QString::arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char( ' ' )) const` method:

  https://github.com/bitcoin/bitcoin/blob/29fad97c320c892ab6a480c81e2078ec22ab354b/src/qt/optionsmodel.cpp#L129

  https://github.com/bitcoin/bitcoin/blob/29fad97c320c892ab6a480c81e2078ec22ab354b/src/qt/optionsmodel.cpp#L139

  This will create a default proxy setting that consists of 9053 characters and ends with the string `127.0.0.1:%2`.

  This PR attempts to resolve #12623 by setting the correct value for the `addrProxy` and `addrSeparateProxyTor` settings (i) if the proxy setting does not exist; or (ii) if the proxy setting has an illegal value caused by to the aforementioned bug.

  The second condition is *only* relevant if we don't want Bitcoin Core 0.16.0 users to explicitly reset their settings to see the correct default proxy port value.

Tree-SHA512: 3dc3de2eb7da831f6e318797df67341ced2076b48f9b561c73677bf6beb67b259d8e413095f290356fb92e32e4e8162d48accbc575c4e612060fd5d6dde7ac8d

Backport of Core PR12650
bitcoin/bitcoin#12650

Test Plan:
  make check
  bitcoin-qt -> settings -> options -> network -> verify proxy port is 9050

Reviewers: deadalnix, Fabien, jasonbcox, O1 Bitcoin ABC, #bitcoin_abc

Reviewed By: jasonbcox, O1 Bitcoin ABC, #bitcoin_abc

Differential Revision: https://reviews.bitcoinabc.org/D3885
  • Loading branch information
laanwj authored and Nico Guiton committed Aug 16, 2019
1 parent 6ffbbc1 commit 97ff16f
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions src/qt/optionsmodel.cpp
Expand Up @@ -24,6 +24,8 @@

const char *DEFAULT_GUI_PROXY_HOST = "127.0.0.1";

static const QString GetDefaultProxyAddress();

OptionsModel::OptionsModel(interfaces::Node &node, QObject *parent,
bool resetSettings)
: QAbstractListModel(parent), m_node(node) {
Expand Down Expand Up @@ -149,9 +151,7 @@ void OptionsModel::Init(bool resetSettings) {
settings.setValue("fUseProxy", false);
}
if (!settings.contains("addrProxy")) {
settings.setValue("addrProxy",
QString("%1:%2").arg(DEFAULT_GUI_PROXY_HOST,
DEFAULT_GUI_PROXY_PORT));
settings.setValue("addrProxy", GetDefaultProxyAddress());
}
// Only try to set -proxy, if user has enabled fUseProxy
if (settings.value("fUseProxy").toBool() &&
Expand All @@ -167,9 +167,7 @@ void OptionsModel::Init(bool resetSettings) {
settings.setValue("fUseSeparateProxyTor", false);
}
if (!settings.contains("addrSeparateProxyTor")) {
settings.setValue("addrSeparateProxyTor",
QString("%1:%2").arg(DEFAULT_GUI_PROXY_HOST,
DEFAULT_GUI_PROXY_PORT));
settings.setValue("addrSeparateProxyTor", GetDefaultProxyAddress());
}
// Only try to set -onion, if user has enabled fUseSeparateProxyTor
if (settings.value("fUseSeparateProxyTor").toBool() &&
Expand Down Expand Up @@ -249,6 +247,12 @@ static void SetProxySetting(QSettings &settings, const QString &name,
settings.setValue(name, ip_port.ip + ":" + ip_port.port);
}

static const QString GetDefaultProxyAddress() {
return QString("%1:%2")
.arg(DEFAULT_GUI_PROXY_HOST)
.arg(DEFAULT_GUI_PROXY_PORT);
}

// read QSettings values and return them
QVariant OptionsModel::data(const QModelIndex &index, int role) const {
if (role == Qt::EditRole) {
Expand Down Expand Up @@ -502,4 +506,18 @@ void OptionsModel::checkAndMigrate() {

settings.setValue(strSettingsVersionKey, CLIENT_VERSION);
}

// Overwrite the 'addrProxy' setting in case it has been set to an illegal
// default value (see issue #12623; PR #12650).
if (settings.contains("addrProxy") &&
settings.value("addrProxy").toString().endsWith("%2")) {
settings.setValue("addrProxy", GetDefaultProxyAddress());
}

// Overwrite the 'addrSeparateProxyTor' setting in case it has been set to
// an illegal default value (see issue #12623; PR #12650).
if (settings.contains("addrSeparateProxyTor") &&
settings.value("addrSeparateProxyTor").toString().endsWith("%2")) {
settings.setValue("addrSeparateProxyTor", GetDefaultProxyAddress());
}
}

0 comments on commit 97ff16f

Please sign in to comment.