aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Dashjr <luke-jr+git@utopios.org>2014-12-17 09:34:09 +0000
committerWladimir J. van der Laan <laanwj@gmail.com>2014-12-31 10:53:26 +0100
commit1eadfd97538830a323c9ee40c18c6f8fb1e5ec36 (patch)
treec1f7b39e8d5c2946cea4dcf026acb41c7a06cf01
parent18021d08f76f966ca178a502c6223fab8e8cd960 (diff)
downloadbitcoin-1eadfd97538830a323c9ee40c18c6f8fb1e5ec36.tar.xz
Bugfix: prioritisetransaction: Do some basic sanity checking on txid
Besides giving a nicer error, this also prevents logging arbitrary data (which could have been used to exploit log readers) into debug.log Rebased-From: 7f718139191d67da29c5d856d29e035bbc51e659 Github-Pull: #5499
-rw-r--r--src/core_io.h1
-rw-r--r--src/core_read.cpp5
-rw-r--r--src/rpcmining.cpp3
3 files changed, 7 insertions, 2 deletions
diff --git a/src/core_io.h b/src/core_io.h
index aba1928a36..bc2eb1edd0 100644
--- a/src/core_io.h
+++ b/src/core_io.h
@@ -19,6 +19,7 @@ extern CScript ParseScript(std::string s);
extern bool DecodeHexTx(CTransaction& tx, const std::string& strHexTx);
extern bool DecodeHexBlk(CBlock&, const std::string& strHexBlk);
extern uint256 ParseHashUV(const UniValue& v, const std::string& strName);
+extern uint256 ParseHashStr(const std::string&, const std::string& strName);
extern std::vector<unsigned char> ParseHexUV(const UniValue& v, const std::string& strName);
// core_write.cpp
diff --git a/src/core_read.cpp b/src/core_read.cpp
index 65c3a08c55..beb746ce97 100644
--- a/src/core_read.cpp
+++ b/src/core_read.cpp
@@ -131,6 +131,11 @@ uint256 ParseHashUV(const UniValue& v, const string& strName)
string strHex;
if (v.isStr())
strHex = v.getValStr();
+ return ParseHashStr(strHex, strName); // Note: ParseHashStr("") throws a runtime_error
+}
+
+uint256 ParseHashStr(const std::string& strHex, const std::string& strName)
+{
if (!IsHex(strHex)) // Note: IsHex("") is false
throw runtime_error(strName+" must be hexadecimal string (not '"+strHex+"')");
diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp
index b406106ff2..86230521ce 100644
--- a/src/rpcmining.cpp
+++ b/src/rpcmining.cpp
@@ -288,8 +288,7 @@ Value prioritisetransaction(const Array& params, bool fHelp)
+ HelpExampleRpc("prioritisetransaction", "\"txid\", 0.0, 10000")
);
- uint256 hash;
- hash.SetHex(params[0].get_str());
+ uint256 hash = ParseHashStr(params[0].get_str(), "txid");
CAmount nAmount = params[2].get_int64();