aboutsummaryrefslogtreecommitdiff
path: root/src/init.cpp
diff options
context:
space:
mode:
authorMatt Corallo <git@bluematt.me>2016-11-29 16:50:49 -0800
committerMatt Corallo <git@bluematt.me>2016-12-23 21:30:15 -0500
commit2b5f085ad11b4b354f48d77e66698fa386c8abbd (patch)
treec4271c5b5007958565d443d76829d8dbf5135981 /src/init.cpp
parentc8042a48f01aaf306e108683e40db4bfaf0bbcaa (diff)
downloadbitcoin-2b5f085ad11b4b354f48d77e66698fa386c8abbd.tar.xz
Fix non-const mapMultiArgs[] access after init.
Swap mapMultiArgs for a const-reference to a _mapMultiArgs which is only accessed in util.cpp
Diffstat (limited to 'src/init.cpp')
-rw-r--r--src/init.cpp60
1 files changed, 34 insertions, 26 deletions
diff --git a/src/init.cpp b/src/init.cpp
index e642729a99..ecfd33fb62 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -717,7 +717,7 @@ void InitParameterInteraction()
LogPrintf("%s: parameter interaction: -whitebind set -> setting -listen=1\n", __func__);
}
- if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) {
+ if (mapMultiArgs.count("-connect") && mapMultiArgs.at("-connect").size() > 0) {
// when only connecting to trusted nodes, do not seed via DNS, or listen by default
if (SoftSetBoolArg("-dnsseed", false))
LogPrintf("%s: parameter interaction: -connect set -> setting -dnsseed=0\n", __func__);
@@ -880,11 +880,13 @@ bool AppInitParameterInteraction()
// ********************************************************* Step 3: parameter-to-internal-flags
- fDebug = !mapMultiArgs["-debug"].empty();
+ fDebug = mapMultiArgs.count("-debug");
// Special-case: if -debug=0/-nodebug is set, turn off debugging messages
- const vector<string>& categories = mapMultiArgs["-debug"];
- if (GetBoolArg("-nodebug", false) || find(categories.begin(), categories.end(), string("0")) != categories.end())
- fDebug = false;
+ if (fDebug) {
+ const vector<string>& categories = mapMultiArgs.at("-debug");
+ if (GetBoolArg("-nodebug", false) || find(categories.begin(), categories.end(), string("0")) != categories.end())
+ fDebug = false;
+ }
// Check for -debugnet
if (GetBoolArg("-debugnet", false))
@@ -1003,12 +1005,12 @@ bool AppInitParameterInteraction()
fEnableReplacement = (std::find(vstrReplacementModes.begin(), vstrReplacementModes.end(), "fee") != vstrReplacementModes.end());
}
- if (!mapMultiArgs["-bip9params"].empty()) {
+ if (mapMultiArgs.count("-bip9params")) {
// Allow overriding BIP9 parameters for testing
if (!chainparams.MineBlocksOnDemand()) {
return InitError("BIP9 parameters may only be overridden on regtest.");
}
- const vector<string>& deployments = mapMultiArgs["-bip9params"];
+ const vector<string>& deployments = mapMultiArgs.at("-bip9params");
for (auto i : deployments) {
std::vector<std::string> vDeploymentParams;
boost::split(vDeploymentParams, i, boost::is_any_of(":"));
@@ -1154,11 +1156,13 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
// sanitize comments per BIP-0014, format user agent and check total size
std::vector<string> uacomments;
- BOOST_FOREACH(string cmt, mapMultiArgs["-uacomment"])
- {
- if (cmt != SanitizeString(cmt, SAFE_CHARS_UA_COMMENT))
- return InitError(strprintf(_("User Agent comment (%s) contains unsafe characters."), cmt));
- uacomments.push_back(SanitizeString(cmt, SAFE_CHARS_UA_COMMENT));
+ if (mapMultiArgs.count("-uacomment")) {
+ BOOST_FOREACH(string cmt, mapMultiArgs.at("-uacomment"))
+ {
+ if (cmt != SanitizeString(cmt, SAFE_CHARS_UA_COMMENT))
+ return InitError(strprintf(_("User Agent comment (%s) contains unsafe characters."), cmt));
+ uacomments.push_back(cmt);
+ }
}
strSubVersion = FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, uacomments);
if (strSubVersion.size() > MAX_SUBVERSION_LENGTH) {
@@ -1166,9 +1170,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
strSubVersion.size(), MAX_SUBVERSION_LENGTH));
}
- if (mapArgs.count("-onlynet")) {
+ if (mapMultiArgs.count("-onlynet")) {
std::set<enum Network> nets;
- BOOST_FOREACH(const std::string& snet, mapMultiArgs["-onlynet"]) {
+ BOOST_FOREACH(const std::string& snet, mapMultiArgs.at("-onlynet")) {
enum Network net = ParseNetwork(snet);
if (net == NET_UNROUTABLE)
return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet));
@@ -1181,8 +1185,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
}
}
- if (mapArgs.count("-whitelist")) {
- BOOST_FOREACH(const std::string& net, mapMultiArgs["-whitelist"]) {
+ if (mapMultiArgs.count("-whitelist")) {
+ BOOST_FOREACH(const std::string& net, mapMultiArgs.at("-whitelist")) {
CSubNet subnet;
LookupSubNet(net.c_str(), subnet);
if (!subnet.IsValid())
@@ -1234,14 +1238,16 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
if (fListen) {
bool fBound = false;
- if (mapArgs.count("-bind") || mapArgs.count("-whitebind")) {
- BOOST_FOREACH(const std::string& strBind, mapMultiArgs["-bind"]) {
+ if (mapMultiArgs.count("-bind")) {
+ BOOST_FOREACH(const std::string& strBind, mapMultiArgs.at("-bind")) {
CService addrBind;
if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false))
return InitError(ResolveErrMsg("bind", strBind));
fBound |= Bind(connman, addrBind, (BF_EXPLICIT | BF_REPORT_ERROR));
}
- BOOST_FOREACH(const std::string& strBind, mapMultiArgs["-whitebind"]) {
+ }
+ if (mapMultiArgs.count("-whitebind")) {
+ BOOST_FOREACH(const std::string& strBind, mapMultiArgs.at("-whitebind")) {
CService addrBind;
if (!Lookup(strBind.c_str(), addrBind, 0, false))
return InitError(ResolveErrMsg("whitebind", strBind));
@@ -1250,7 +1256,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
fBound |= Bind(connman, addrBind, (BF_EXPLICIT | BF_REPORT_ERROR | BF_WHITELIST));
}
}
- else {
+ if (!mapMultiArgs.count("-bind") && !mapMultiArgs.count("-whitebind")) {
struct in_addr inaddr_any;
inaddr_any.s_addr = INADDR_ANY;
fBound |= Bind(connman, CService(in6addr_any, GetListenPort()), BF_NONE);
@@ -1260,8 +1266,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
return InitError(_("Failed to listen on any port. Use -listen=0 if you want this."));
}
- if (mapArgs.count("-externalip")) {
- BOOST_FOREACH(const std::string& strAddr, mapMultiArgs["-externalip"]) {
+ if (mapMultiArgs.count("-externalip")) {
+ BOOST_FOREACH(const std::string& strAddr, mapMultiArgs.at("-externalip")) {
CService addrLocal;
if (Lookup(strAddr.c_str(), addrLocal, GetListenPort(), fNameLookup) && addrLocal.IsValid())
AddLocal(addrLocal, LOCAL_MANUAL);
@@ -1270,8 +1276,10 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
}
}
- BOOST_FOREACH(const std::string& strDest, mapMultiArgs["-seednode"])
- connman.AddOneShot(strDest);
+ if (mapMultiArgs.count("-seednode")) {
+ BOOST_FOREACH(const std::string& strDest, mapMultiArgs.at("-seednode"))
+ connman.AddOneShot(strDest);
+ }
#if ENABLE_ZMQ
pzmqNotificationInterface = CZMQNotificationInterface::CreateWithArguments(mapArgs);
@@ -1519,9 +1527,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
std::vector<boost::filesystem::path> vImportFiles;
- if (mapArgs.count("-loadblock"))
+ if (mapMultiArgs.count("-loadblock"))
{
- BOOST_FOREACH(const std::string& strFile, mapMultiArgs["-loadblock"])
+ BOOST_FOREACH(const std::string& strFile, mapMultiArgs.at("-loadblock"))
vImportFiles.push_back(strFile);
}