Skip to content

Commit 77b79fa

Browse files
committed
refactor: Error message bilingual_str consistency
- Move the decision whether to translate an error message to where it is defined. This simplifies call sites: no more `InitError(Untranslated(...))`. - Make all functions in `util/error.h` consistently return a `bilingual_str`. We've decided to use this as error message type so let's roll with it. This has no functional changes: no messages are changed, no new translation messages are defined.
1 parent a79bca2 commit 77b79fa

File tree

10 files changed

+47
-41
lines changed

10 files changed

+47
-41
lines changed

src/init.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,7 +1465,7 @@ bool AppInitMain(const util::Ref& context, NodeContext& node)
14651465
if (Lookup(strAddr, addrLocal, GetListenPort(), fNameLookup) && addrLocal.IsValid())
14661466
AddLocal(addrLocal, LOCAL_MANUAL);
14671467
else
1468-
return InitError(Untranslated(ResolveErrMsg("externalip", strAddr)));
1468+
return InitError(ResolveErrMsg("externalip", strAddr));
14691469
}
14701470

14711471
// Read asmap file if configured
@@ -1904,21 +1904,21 @@ bool AppInitMain(const util::Ref& context, NodeContext& node)
19041904
for (const std::string& strBind : gArgs.GetArgs("-bind")) {
19051905
CService addrBind;
19061906
if (!Lookup(strBind, addrBind, GetListenPort(), false)) {
1907-
return InitError(Untranslated(ResolveErrMsg("bind", strBind)));
1907+
return InitError(ResolveErrMsg("bind", strBind));
19081908
}
19091909
connOptions.vBinds.push_back(addrBind);
19101910
}
19111911
for (const std::string& strBind : gArgs.GetArgs("-whitebind")) {
19121912
NetWhitebindPermissions whitebind;
1913-
std::string error;
1914-
if (!NetWhitebindPermissions::TryParse(strBind, whitebind, error)) return InitError(Untranslated(error));
1913+
bilingual_str error;
1914+
if (!NetWhitebindPermissions::TryParse(strBind, whitebind, error)) return InitError(error);
19151915
connOptions.vWhiteBinds.push_back(whitebind);
19161916
}
19171917

19181918
for (const auto& net : gArgs.GetArgs("-whitelist")) {
19191919
NetWhitelistPermissions subnet;
1920-
std::string error;
1921-
if (!NetWhitelistPermissions::TryParse(net, subnet, error)) return InitError(Untranslated(error));
1920+
bilingual_str error;
1921+
if (!NetWhitelistPermissions::TryParse(net, subnet, error)) return InitError(error);
19221922
connOptions.vWhitelistedRange.push_back(subnet);
19231923
}
19241924

src/net_permissions.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const std::vector<std::string> NET_PERMISSIONS_DOC{
1717
};
1818

1919
// The parse the following format "perm1,perm2@xxxxxx"
20-
bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, size_t& readen, std::string& error)
20+
bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, size_t& readen, bilingual_str& error)
2121
{
2222
NetPermissionFlags flags = PF_NONE;
2323
const auto atSeparator = str.find('@');
@@ -48,15 +48,15 @@ bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output,
4848
else if (permission == "relay") NetPermissions::AddFlag(flags, PF_RELAY);
4949
else if (permission.length() == 0); // Allow empty entries
5050
else {
51-
error = strprintf(_("Invalid P2P permission: '%s'").translated, permission);
51+
error = strprintf(_("Invalid P2P permission: '%s'"), permission);
5252
return false;
5353
}
5454
}
5555
readen++;
5656
}
5757

5858
output = flags;
59-
error = "";
59+
error = Untranslated("");
6060
return true;
6161
}
6262

@@ -71,7 +71,7 @@ std::vector<std::string> NetPermissions::ToStrings(NetPermissionFlags flags)
7171
return strings;
7272
}
7373

74-
bool NetWhitebindPermissions::TryParse(const std::string str, NetWhitebindPermissions& output, std::string& error)
74+
bool NetWhitebindPermissions::TryParse(const std::string str, NetWhitebindPermissions& output, bilingual_str& error)
7575
{
7676
NetPermissionFlags flags;
7777
size_t offset;
@@ -84,17 +84,17 @@ bool NetWhitebindPermissions::TryParse(const std::string str, NetWhitebindPermis
8484
return false;
8585
}
8686
if (addrBind.GetPort() == 0) {
87-
error = strprintf(_("Need to specify a port with -whitebind: '%s'").translated, strBind);
87+
error = strprintf(_("Need to specify a port with -whitebind: '%s'"), strBind);
8888
return false;
8989
}
9090

9191
output.m_flags = flags;
9292
output.m_service = addrBind;
93-
error = "";
93+
error = Untranslated("");
9494
return true;
9595
}
9696

97-
bool NetWhitelistPermissions::TryParse(const std::string str, NetWhitelistPermissions& output, std::string& error)
97+
bool NetWhitelistPermissions::TryParse(const std::string str, NetWhitelistPermissions& output, bilingual_str& error)
9898
{
9999
NetPermissionFlags flags;
100100
size_t offset;
@@ -104,12 +104,12 @@ bool NetWhitelistPermissions::TryParse(const std::string str, NetWhitelistPermis
104104
CSubNet subnet;
105105
LookupSubNet(net, subnet);
106106
if (!subnet.IsValid()) {
107-
error = strprintf(_("Invalid netmask specified in -whitelist: '%s'").translated, net);
107+
error = strprintf(_("Invalid netmask specified in -whitelist: '%s'"), net);
108108
return false;
109109
}
110110

111111
output.m_flags = flags;
112112
output.m_subnet = subnet;
113-
error = "";
113+
error = Untranslated("");
114114
return true;
115115
}

src/net_permissions.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#ifndef BITCOIN_NET_PERMISSIONS_H
1111
#define BITCOIN_NET_PERMISSIONS_H
1212

13+
struct bilingual_str;
14+
1315
extern const std::vector<std::string> NET_PERMISSIONS_DOC;
1416

1517
enum NetPermissionFlags
@@ -54,14 +56,14 @@ class NetPermissions
5456
class NetWhitebindPermissions : public NetPermissions
5557
{
5658
public:
57-
static bool TryParse(const std::string str, NetWhitebindPermissions& output, std::string& error);
59+
static bool TryParse(const std::string str, NetWhitebindPermissions& output, bilingual_str& error);
5860
CService m_service;
5961
};
6062

6163
class NetWhitelistPermissions : public NetPermissions
6264
{
6365
public:
64-
static bool TryParse(const std::string str, NetWhitelistPermissions& output, std::string& error);
66+
static bool TryParse(const std::string str, NetWhitelistPermissions& output, bilingual_str& error);
6567
CSubNet m_subnet;
6668
};
6769

src/rpc/util.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <tinyformat.h>
1111
#include <util/strencodings.h>
1212
#include <util/string.h>
13+
#include <util/translation.h>
1314

1415
#include <tuple>
1516

@@ -285,7 +286,7 @@ UniValue JSONRPCTransactionError(TransactionError terr, const std::string& err_s
285286
if (err_string.length() > 0) {
286287
return JSONRPCError(RPCErrorFromTransactionError(terr), err_string);
287288
} else {
288-
return JSONRPCError(RPCErrorFromTransactionError(terr), TransactionErrorString(terr));
289+
return JSONRPCError(RPCErrorFromTransactionError(terr), TransactionErrorString(terr).original);
289290
}
290291
}
291292

src/test/fuzz/kitchen_sink.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <test/fuzz/fuzz.h>
88
#include <test/fuzz/util.h>
99
#include <util/error.h>
10+
#include <util/translation.h>
1011

1112
#include <cstdint>
1213
#include <vector>

src/test/fuzz/net_permissions.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <test/fuzz/FuzzedDataProvider.h>
77
#include <test/fuzz/fuzz.h>
88
#include <test/fuzz/util.h>
9+
#include <util/translation.h>
910

1011
#include <cassert>
1112
#include <cstdint>
@@ -29,7 +30,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
2930
static_cast<NetPermissionFlags>(fuzzed_data_provider.ConsumeIntegral<uint32_t>());
3031

3132
NetWhitebindPermissions net_whitebind_permissions;
32-
std::string error_net_whitebind_permissions;
33+
bilingual_str error_net_whitebind_permissions;
3334
if (NetWhitebindPermissions::TryParse(s, net_whitebind_permissions, error_net_whitebind_permissions)) {
3435
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
3536
(void)NetPermissions::AddFlag(net_whitebind_permissions.m_flags, net_permission_flags);
@@ -39,7 +40,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
3940
}
4041

4142
NetWhitelistPermissions net_whitelist_permissions;
42-
std::string error_net_whitelist_permissions;
43+
bilingual_str error_net_whitelist_permissions;
4344
if (NetWhitelistPermissions::TryParse(s, net_whitelist_permissions, error_net_whitelist_permissions)) {
4445
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
4546
(void)NetPermissions::AddFlag(net_whitelist_permissions.m_flags, net_permission_flags);

src/test/netbase_tests.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <netbase.h>
77
#include <test/util/setup_common.h>
88
#include <util/strencodings.h>
9+
#include <util/translation.h>
910

1011
#include <string>
1112

@@ -325,15 +326,15 @@ BOOST_AUTO_TEST_CASE(netbase_parsenetwork)
325326

326327
BOOST_AUTO_TEST_CASE(netpermissions_test)
327328
{
328-
std::string error;
329+
bilingual_str error;
329330
NetWhitebindPermissions whitebindPermissions;
330331
NetWhitelistPermissions whitelistPermissions;
331332

332333
// Detect invalid white bind
333334
BOOST_CHECK(!NetWhitebindPermissions::TryParse("", whitebindPermissions, error));
334-
BOOST_CHECK(error.find("Cannot resolve -whitebind address") != std::string::npos);
335+
BOOST_CHECK(error.original.find("Cannot resolve -whitebind address") != std::string::npos);
335336
BOOST_CHECK(!NetWhitebindPermissions::TryParse("127.0.0.1", whitebindPermissions, error));
336-
BOOST_CHECK(error.find("Need to specify a port with -whitebind") != std::string::npos);
337+
BOOST_CHECK(error.original.find("Need to specify a port with -whitebind") != std::string::npos);
337338
BOOST_CHECK(!NetWhitebindPermissions::TryParse("", whitebindPermissions, error));
338339

339340
// If no permission flags, assume backward compatibility
@@ -377,11 +378,11 @@ BOOST_AUTO_TEST_CASE(netpermissions_test)
377378

378379
// Detect invalid flag
379380
BOOST_CHECK(!NetWhitebindPermissions::TryParse("bloom,forcerelay,[email protected]:32", whitebindPermissions, error));
380-
BOOST_CHECK(error.find("Invalid P2P permission") != std::string::npos);
381+
BOOST_CHECK(error.original.find("Invalid P2P permission") != std::string::npos);
381382

382383
// Check whitelist error
383384
BOOST_CHECK(!NetWhitelistPermissions::TryParse("bloom,forcerelay,[email protected]:32", whitelistPermissions, error));
384-
BOOST_CHECK(error.find("Invalid netmask specified in -whitelist") != std::string::npos);
385+
BOOST_CHECK(error.original.find("Invalid netmask specified in -whitelist") != std::string::npos);
385386

386387
// Happy path for whitelist parsing
387388
BOOST_CHECK(NetWhitelistPermissions::TryParse("[email protected]", whitelistPermissions, error));

src/util/error.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,37 @@
88
#include <util/system.h>
99
#include <util/translation.h>
1010

11-
std::string TransactionErrorString(const TransactionError err)
11+
bilingual_str TransactionErrorString(const TransactionError err)
1212
{
1313
switch (err) {
1414
case TransactionError::OK:
15-
return "No error";
15+
return Untranslated("No error");
1616
case TransactionError::MISSING_INPUTS:
17-
return "Missing inputs";
17+
return Untranslated("Missing inputs");
1818
case TransactionError::ALREADY_IN_CHAIN:
19-
return "Transaction already in block chain";
19+
return Untranslated("Transaction already in block chain");
2020
case TransactionError::P2P_DISABLED:
21-
return "Peer-to-peer functionality missing or disabled";
21+
return Untranslated("Peer-to-peer functionality missing or disabled");
2222
case TransactionError::MEMPOOL_REJECTED:
23-
return "Transaction rejected by AcceptToMemoryPool";
23+
return Untranslated("Transaction rejected by AcceptToMemoryPool");
2424
case TransactionError::MEMPOOL_ERROR:
25-
return "AcceptToMemoryPool failed";
25+
return Untranslated("AcceptToMemoryPool failed");
2626
case TransactionError::INVALID_PSBT:
27-
return "PSBT is not sane";
27+
return Untranslated("PSBT is not sane");
2828
case TransactionError::PSBT_MISMATCH:
29-
return "PSBTs not compatible (different transactions)";
29+
return Untranslated("PSBTs not compatible (different transactions)");
3030
case TransactionError::SIGHASH_MISMATCH:
31-
return "Specified sighash value does not match existing value";
31+
return Untranslated("Specified sighash value does not match existing value");
3232
case TransactionError::MAX_FEE_EXCEEDED:
33-
return "Fee exceeds maximum configured by -maxtxfee";
33+
return Untranslated("Fee exceeds maximum configured by -maxtxfee");
3434
// no default case, so the compiler can warn about missing cases
3535
}
3636
assert(false);
3737
}
3838

39-
std::string ResolveErrMsg(const std::string& optname, const std::string& strBind)
39+
bilingual_str ResolveErrMsg(const std::string& optname, const std::string& strBind)
4040
{
41-
return strprintf(_("Cannot resolve -%s address: '%s'").translated, optname, strBind);
41+
return strprintf(_("Cannot resolve -%s address: '%s'"), optname, strBind);
4242
}
4343

4444
bilingual_str AmountHighWarn(const std::string& optname)

src/util/error.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ enum class TransactionError {
3232
MAX_FEE_EXCEEDED,
3333
};
3434

35-
std::string TransactionErrorString(const TransactionError error);
35+
bilingual_str TransactionErrorString(const TransactionError error);
3636

37-
std::string ResolveErrMsg(const std::string& optname, const std::string& strBind);
37+
bilingual_str ResolveErrMsg(const std::string& optname, const std::string& strBind);
3838

3939
bilingual_str AmountHighWarn(const std::string& optname);
4040

src/wallet/wallet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2997,7 +2997,7 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CTransac
29972997
}
29982998

29992999
if (nFeeRet > m_default_max_tx_fee) {
3000-
error = Untranslated(TransactionErrorString(TransactionError::MAX_FEE_EXCEEDED));
3000+
error = TransactionErrorString(TransactionError::MAX_FEE_EXCEEDED);
30013001
return false;
30023002
}
30033003

0 commit comments

Comments
 (0)