diff --git a/configure.ac b/configure.ac index 5b1bd6a2a..72e76439a 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 16) -define(_CLIENT_VERSION_REVISION, 2) +define(_CLIENT_VERSION_REVISION, 3) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2018) diff --git a/doc/man/litecoin-cli.1 b/doc/man/litecoin-cli.1 index acf03ed9f..1b14f0119 100644 --- a/doc/man/litecoin-cli.1 +++ b/doc/man/litecoin-cli.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIN-CLI "1" "August 2018" "litecoin-cli v0.16.2.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH BITCOIN-CLI "1" "September 2018" "bitcoin-cli v0.16.3.0" "User Commands" .SH NAME -litecoin-cli \- manual page for litecoin-cli v0.16.2.0 +bitcoin-cli \- manual page for bitcoin-cli v0.16.3.0 .SH DESCRIPTION -Litecoin Core RPC client version v0.16.2.0 +Bitcoin Core RPC client version v0.16.3.0 .SS "Usage:" .TP litecoin\-cli [options] [params] diff --git a/doc/man/litecoin-qt.1 b/doc/man/litecoin-qt.1 index b3b938471..350a5beda 100644 --- a/doc/man/litecoin-qt.1 +++ b/doc/man/litecoin-qt.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIN-QT "1" "August 2018" "litecoin-qt v0.16.2.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH BITCOIN-QT "1" "September 2018" "bitcoin-qt v0.16.3.0" "User Commands" .SH NAME -litecoin-qt \- manual page for litecoin-qt v0.16.2.0 +bitcoin-qt \- manual page for bitcoin-qt v0.16.3.0 .SH DESCRIPTION -Litecoin Core version v0.16.2.0 (64\-bit) +Bitcoin Core version v0.16.3.0 (64\-bit) Usage: .IP litecoin\-qt [command\-line options] diff --git a/doc/man/litecoin-tx.1 b/doc/man/litecoin-tx.1 index f98f4ce05..c685808b3 100644 --- a/doc/man/litecoin-tx.1 +++ b/doc/man/litecoin-tx.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIN-TX "1" "August 2018" "litecoin-tx v0.16.2.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH BITCOIN-TX "1" "September 2018" "bitcoin-tx v0.16.3.0" "User Commands" .SH NAME -litecoin-tx \- manual page for litecoin-tx v0.16.2.0 +bitcoin-tx \- manual page for bitcoin-tx v0.16.3.0 .SH DESCRIPTION -Litecoin Core litecoin\-tx utility version v0.16.2.0 +Bitcoin Core bitcoin\-tx utility version v0.16.3.0 .SS "Usage:" .TP litecoin\-tx [options] [commands] diff --git a/doc/man/litecoind.1 b/doc/man/litecoind.1 index e009d4577..14b42f084 100644 --- a/doc/man/litecoind.1 +++ b/doc/man/litecoind.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIND "1" "August 2018" "litecoind v0.16.2.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH BITCOIND "1" "September 2018" "bitcoind v0.16.3.0" "User Commands" .SH NAME -litecoind \- manual page for litecoind v0.16.2.0 +bitcoind \- manual page for bitcoind v0.16.3.0 .SH DESCRIPTION -Litecoin Core Daemon version v0.16.2.0 +Bitcoin Core Daemon version v0.16.3.0 .SS "Usage:" .TP litecoind [options] diff --git a/doc/release-notes.md b/doc/release-notes.md index f8b9192ab..631eb0833 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,6 +1,6 @@ -Bitcoin Core version 0.16.x is now available from: +Bitcoin Core version 0.16.3 is now available from: - + This is a new minor version release, with various bugfixes as well as updated translations. @@ -49,22 +49,42 @@ frequently tested on them. Notable changes =============== -(to be filled in) +Denial-of-Service vulnerability +------------------------------- -0.16.x change log +A denial-of-service vulnerability exploitable by miners has been discovered in +Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of +the vulnerable versions to 0.16.3 as soon as possible. + +0.16.3 change log ------------------ -(to be filled in) +### Consensus +- #14249 `696b936` Fix crash bug with duplicate inputs within a transaction (TheBlueMatt, sdaftuar) + +### RPC and other APIs +- #13547 `212ef1f` Make `signrawtransaction*` give an error when amount is needed but missing (ajtowns) + +### Miscellaneous +- #13655 `1cdbea7` bitcoinconsensus: invalid flags error should be set to `bitcoinconsensus_err` (afk11) + +### Documentation +- #13844 `11b9dbb` correct the help output for -prune (hebasto) Credits ======= Thanks to everyone who directly contributed to this release: -(to be filled in) +- Anthony Towns +- Hennadii Stepanov +- Matt Corallo +- Suhas Daftuar +- Thomas Kerin +- Wladimir J. van der Laan And to those that reported security issues: -(to be filled in) +- beardnboobies As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/src/validation.cpp b/src/validation.cpp index 86655cc9e..3c2fd3fda 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3033,7 +3033,7 @@ bool CheckBlock(const CBlock& block, CValidationState& state, const Consensus::P // Check transactions for (const auto& tx : block.vtx) - if (!CheckTransaction(*tx, state, false)) + if (!CheckTransaction(*tx, state, true)) return state.Invalid(false, state.GetRejectCode(), state.GetRejectReason(), strprintf("Transaction check failed (tx hash %s) %s", tx->GetHash().ToString(), state.GetDebugMessage())); diff --git a/test/functional/p2p_invalid_block.py b/test/functional/p2p_invalid_block.py index 024e0dc1d..1544a1e39 100755 --- a/test/functional/p2p_invalid_block.py +++ b/test/functional/p2p_invalid_block.py @@ -98,7 +98,18 @@ class InvalidBlockRequestTest(ComparisonTestFramework): assert(block2_orig.vtx != block2.vtx) self.tip = block2.sha256 - yield TestInstance([[block2, RejectResult(16, b'bad-txns-duplicate')], [block2_orig, True]]) + yield TestInstance([[block2, RejectResult(16, b'bad-txns-duplicate')]]) + + # Check transactions for duplicate inputs + self.log.info("Test duplicate input block.") + + block2_dup = copy.deepcopy(block2_orig) + block2_dup.vtx[2].vin.append(block2_dup.vtx[2].vin[0]) + block2_dup.vtx[2].rehash() + block2_dup.hashMerkleRoot = block2_dup.calc_merkle_root() + block2_dup.rehash() + block2_dup.solve() + yield TestInstance([[block2_dup, RejectResult(16, b'bad-txns-inputs-duplicate')], [block2_orig, True]]) height += 1 '''