mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
Merge pull request #5816 from PastaPastaPasta/develop-trivial-2024-01-10
backport: trivial 2024 01 10
This commit is contained in:
commit
dfc978adcc
23
configure.ac
23
configure.ac
@ -13,7 +13,7 @@ AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_MACRO_DIR([build-aux/m4])
|
||||
|
||||
m4_ifndef([PKG_PROG_PKG_CONFIG], [AC_MSG_ERROR([PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh])])
|
||||
m4_ifndef([PKG_PROG_PKG_CONFIG], [m4_fatal([PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh])])
|
||||
PKG_PROG_PKG_CONFIG
|
||||
if test "x$PKG_CONFIG" = x; then
|
||||
AC_MSG_ERROR([pkg-config not found])
|
||||
@ -1478,6 +1478,26 @@ if test x$build_bitcoin_cli$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$use_libevent = xyes; then
|
||||
TEMP_CXXFLAGS="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $EVENT_CFLAGS"
|
||||
AC_MSG_CHECKING([if evhttp_connection_get_peer expects const char**])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <cstdint>
|
||||
#include <event2/http.h>
|
||||
]], [[
|
||||
evhttp_connection *conn = (evhttp_connection *)1;
|
||||
const char *host;
|
||||
uint16_t port;
|
||||
|
||||
evhttp_connection_get_peer(conn, &host, &port);
|
||||
]])],
|
||||
[ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR], [1], [Define this symbol if evhttp_connection_get_peer expects const char**]) ],
|
||||
[ AC_MSG_RESULT([no]) ]
|
||||
)
|
||||
CXXFLAGS="$TEMP_CXXFLAGS"
|
||||
fi
|
||||
|
||||
dnl QR Code encoding library check
|
||||
|
||||
if test "x$use_qr" != xno; then
|
||||
@ -1787,6 +1807,7 @@ AC_SUBST(HAVE_MM_PREFETCH)
|
||||
AC_SUBST(HAVE_STRONG_GETAUXVAL)
|
||||
AC_SUBST(HAVE_GMTIME_R)
|
||||
AC_SUBST(ANDROID_ARCH)
|
||||
AC_SUBST(HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR)
|
||||
AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
|
||||
AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
|
||||
AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])])
|
||||
|
@ -1,12 +1,13 @@
|
||||
package=zeromq
|
||||
$(package)_version=4.3.1
|
||||
$(package)_version=4.3.4
|
||||
$(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/
|
||||
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=bcbabe1e2c7d0eec4ed612e10b94b112dd5f06fcefa994a0c79a45d835cd21eb
|
||||
$(package)_patches=remove_libstd_link.patch
|
||||
$(package)_sha256_hash=c593001a89f5a85dd2ddf564805deb860e02471171b3f204944857336295c3e5
|
||||
$(package)_patches=remove_libstd_link.patch netbsd_kevent_void.patch
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--without-docs --disable-shared --disable-curve --disable-curve-keygen --disable-perf
|
||||
$(package)_config_opts = --without-docs --disable-shared --disable-valgrind
|
||||
$(package)_config_opts += --disable-perf --disable-curve-keygen --disable-curve --disable-libbsd
|
||||
$(package)_config_opts += --without-libsodium --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci
|
||||
$(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov --disable-dependency-tracking
|
||||
$(package)_config_opts += --disable-Werror --disable-drafts --enable-option-checking
|
||||
@ -20,10 +21,12 @@ endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 < $($(package)_patch_dir)/remove_libstd_link.patch && \
|
||||
patch -p1 < $($(package)_patch_dir)/netbsd_kevent_void.patch && \
|
||||
cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub config
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
./autogen.sh && \
|
||||
$($(package)_autoconf)
|
||||
endef
|
||||
|
||||
|
57
depends/patches/zeromq/netbsd_kevent_void.patch
Normal file
57
depends/patches/zeromq/netbsd_kevent_void.patch
Normal file
@ -0,0 +1,57 @@
|
||||
commit 129137d5182967dbfcfec66bad843df2a992a78f
|
||||
Author: fanquake <fanquake@gmail.com>
|
||||
Date: Mon Jan 3 20:13:33 2022 +0800
|
||||
|
||||
problem: kevent udata is now void* on NetBSD Current (10)
|
||||
|
||||
solution: check for the intptr_t variant in configure.
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 1a571291..402f8b86 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -307,6 +307,27 @@ case "${host_os}" in
|
||||
if test "x$libzmq_netbsd_has_atomic" = "xno"; then
|
||||
AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
|
||||
fi
|
||||
+ # NetBSD Current (to become 10) has changed the type of udata in it's
|
||||
+ # kevent struct from intptr_t to void * to align with darwin and other
|
||||
+ # BSDs, see upstream commit:
|
||||
+ # https://github.com/NetBSD/src/commit/e5ead823eb916b56589d2c6c560dbcfe4a2d0afc
|
||||
+ AC_MSG_CHECKING([whether kevent udata type is intptr_t])
|
||||
+ AC_LANG_PUSH([C++])
|
||||
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
||||
+ [[#include <sys/types.h>
|
||||
+ #include <sys/event.h>
|
||||
+ #include <sys/time.h>]],
|
||||
+ [[struct kevent ev;
|
||||
+ intptr_t udata;
|
||||
+ EV_SET(&ev, 0, 0, EV_ADD, 0, 0, udata);
|
||||
+ return 0;]])],
|
||||
+ [libzmq_netbsd_kevent_udata_intptr_t=yes],
|
||||
+ [libzmq_netbsd_kevent_udata_intptr_t=no])
|
||||
+ AC_LANG_POP([C++])
|
||||
+ AC_MSG_RESULT([$libzmq_netbsd_kevent_udata_intptr_t])
|
||||
+ if test "x$libzmq_netbsd_kevent_udata_intptr_t" = "xyes"; then
|
||||
+ AC_DEFINE(ZMQ_NETBSD_KEVENT_UDATA_INTPTR_T, 1, [kevent udata type is intptr_t])
|
||||
+ fi
|
||||
;;
|
||||
*openbsd*|*bitrig*)
|
||||
# Define on OpenBSD to enable all library features
|
||||
diff --git a/src/kqueue.cpp b/src/kqueue.cpp
|
||||
index 53d82ac4..a6a7a7f2 100644
|
||||
--- a/src/kqueue.cpp
|
||||
+++ b/src/kqueue.cpp
|
||||
@@ -46,9 +46,9 @@
|
||||
#include "i_poll_events.hpp"
|
||||
#include "likely.hpp"
|
||||
|
||||
-// NetBSD defines (struct kevent).udata as intptr_t, everyone else
|
||||
-// as void *.
|
||||
-#if defined ZMQ_HAVE_NETBSD
|
||||
+// NetBSD up to version 9 defines (struct kevent).udata as intptr_t,
|
||||
+// everyone else as void *.
|
||||
+#if defined ZMQ_HAVE_NETBSD && defined(ZMQ_NETBSD_KEVENT_UDATA_INTPTR_T)
|
||||
#define kevent_udata_t intptr_t
|
||||
#else
|
||||
#define kevent_udata_t void *
|
@ -123,6 +123,7 @@ Only supports JSON as output format.
|
||||
|
||||
Returns transactions in the TX mempool.
|
||||
Only supports JSON as output format.
|
||||
Refer to the `getrawmempool` RPC help for details.
|
||||
|
||||
Risks
|
||||
-------------
|
||||
|
@ -24,22 +24,19 @@ template<unsigned int BITS>
|
||||
class base_uint
|
||||
{
|
||||
protected:
|
||||
static_assert(BITS / 32 > 0 && BITS % 32 == 0, "Template parameter BITS must be a positive multiple of 32.");
|
||||
static constexpr int WIDTH = BITS / 32;
|
||||
uint32_t pn[WIDTH];
|
||||
public:
|
||||
|
||||
base_uint()
|
||||
{
|
||||
static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32.");
|
||||
|
||||
for (int i = 0; i < WIDTH; i++)
|
||||
pn[i] = 0;
|
||||
}
|
||||
|
||||
base_uint(const base_uint& b)
|
||||
{
|
||||
static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32.");
|
||||
|
||||
for (int i = 0; i < WIDTH; i++)
|
||||
pn[i] = b.pn[i];
|
||||
}
|
||||
@ -53,8 +50,6 @@ public:
|
||||
|
||||
base_uint(uint64_t b)
|
||||
{
|
||||
static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32.");
|
||||
|
||||
pn[0] = (unsigned int)b;
|
||||
pn[1] = (unsigned int)(b >> 32);
|
||||
for (int i = 2; i < WIDTH; i++)
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include <netaddress.h>
|
||||
#include <node/ui_interface.h>
|
||||
#include <sync.h>
|
||||
#include <util/system.h>
|
||||
#include <util/time.h>
|
||||
#include <util/translation.h>
|
||||
@ -39,18 +40,23 @@ BanMan::~BanMan()
|
||||
|
||||
void BanMan::DumpBanlist()
|
||||
{
|
||||
SweepBanned(); // clean unused entries (if bantime has expired)
|
||||
|
||||
if (!BannedSetIsDirty()) return;
|
||||
|
||||
int64_t n_start = GetTimeMillis();
|
||||
static Mutex dump_mutex;
|
||||
LOCK(dump_mutex);
|
||||
|
||||
banmap_t banmap;
|
||||
GetBanned(banmap);
|
||||
if (m_ban_db.Write(banmap)) {
|
||||
{
|
||||
LOCK(m_cs_banned);
|
||||
SweepBanned();
|
||||
if (!BannedSetIsDirty()) return;
|
||||
banmap = m_banned;
|
||||
SetBannedSetDirty(false);
|
||||
}
|
||||
|
||||
int64_t n_start = GetTimeMillis();
|
||||
if (!m_ban_db.Write(banmap)) {
|
||||
SetBannedSetDirty(true);
|
||||
}
|
||||
|
||||
LogPrint(BCLog::NET, "Flushed %d banned node addresses/subnets to disk %dms\n", banmap.size(),
|
||||
GetTimeMillis() - n_start);
|
||||
}
|
||||
|
@ -35,7 +35,10 @@ static void CCheckQueueSpeedPrevectorJob(benchmark::Bench& bench)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void swap(PrevectorJob& x){p.swap(x.p);};
|
||||
void swap(PrevectorJob& x) noexcept
|
||||
{
|
||||
p.swap(x.p);
|
||||
};
|
||||
};
|
||||
CCheckQueue<PrevectorJob> queue {QUEUE_BATCH_SIZE};
|
||||
|
||||
|
@ -70,7 +70,7 @@ public:
|
||||
);
|
||||
}
|
||||
|
||||
void swap(CHDChain& first, CHDChain& second) // nothrow
|
||||
void swap(CHDChain& first, CHDChain& second) noexcept
|
||||
{
|
||||
// enable ADL (not necessary in our case, but good practice)
|
||||
using std::swap;
|
||||
|
@ -2,6 +2,10 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config/bitcoin-config.h>
|
||||
#endif
|
||||
|
||||
#include <httpserver.h>
|
||||
|
||||
#include <chainparamsbase.h>
|
||||
@ -597,7 +601,13 @@ CService HTTPRequest::GetPeer() const
|
||||
// evhttp retains ownership over returned address string
|
||||
const char* address = "";
|
||||
uint16_t port = 0;
|
||||
|
||||
#ifdef HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR
|
||||
evhttp_connection_get_peer(con, &address, &port);
|
||||
#else
|
||||
evhttp_connection_get_peer(con, (char**)&address, &port);
|
||||
#endif // HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR
|
||||
|
||||
peer = LookupNumeric(address, port);
|
||||
}
|
||||
return peer;
|
||||
|
@ -2209,7 +2209,7 @@ void CConnman::SetTryNewOutboundPeer(bool flag)
|
||||
|
||||
// Return the number of peers we have over our outbound connection limit
|
||||
// Exclude peers that are marked for disconnect, or are going to be
|
||||
// disconnected soon (eg one-shots and feelers)
|
||||
// disconnected soon (eg ADDR_FETCH and FEELER)
|
||||
// Also exclude peers that haven't finished initial connection handshake yet
|
||||
// (so that we don't decide we're over our desired connection limit, and then
|
||||
// evict some peer that has finished the handshake)
|
||||
|
17
src/net.h
17
src/net.h
@ -161,10 +161,19 @@ enum class ConnectionType {
|
||||
MANUAL,
|
||||
|
||||
/**
|
||||
* Feeler connections are short lived connections used to increase the
|
||||
* number of connectable addresses in our AddrMan. Approximately every
|
||||
* FEELER_INTERVAL, we attempt to connect to a random address from the new
|
||||
* table. If successful, we add it to the tried table.
|
||||
* Feeler connections are short-lived connections made to check that a node
|
||||
* is alive. They can be useful for:
|
||||
* - test-before-evict: if one of the peers is considered for eviction from
|
||||
* our AddrMan because another peer is mapped to the same slot in the tried table,
|
||||
* evict only if this longer-known peer is offline.
|
||||
* - move node addresses from New to Tried table, so that we have more
|
||||
* connectable addresses in our AddrMan.
|
||||
* Note that in the literature ("Eclipse Attacks on Bitcoin’s Peer-to-Peer Network")
|
||||
* only the latter feature is referred to as "feeler connections",
|
||||
* although in our codebase feeler connections encompass test-before-evict as well.
|
||||
* We make these connections approximately every FEELER_INTERVAL:
|
||||
* first we resolve previously found collisions if they exist (test-before-evict),
|
||||
* otherwise connect to a node from the new table.
|
||||
*/
|
||||
FEELER,
|
||||
|
||||
|
@ -475,7 +475,8 @@ public:
|
||||
return *item_ptr(size() - 1);
|
||||
}
|
||||
|
||||
void swap(prevector<N, T, Size, Diff>& other) {
|
||||
void swap(prevector<N, T, Size, Diff>& other) noexcept
|
||||
{
|
||||
std::swap(_union, other._union);
|
||||
std::swap(_size, other._size);
|
||||
}
|
||||
|
@ -11,6 +11,8 @@
|
||||
|
||||
#include <cassert>
|
||||
|
||||
static constexpr auto MAX_DIGITS_BTC = 16;
|
||||
|
||||
BitcoinUnits::BitcoinUnits(QObject *parent):
|
||||
QAbstractListModel(parent),
|
||||
unitlist(availableUnits())
|
||||
@ -129,7 +131,9 @@ QString BitcoinUnits::format(int unit, const CAmount& nIn, bool fPlus, Separator
|
||||
qint64 n_abs = (n > 0 ? n : -n);
|
||||
qint64 quotient = n_abs / coin;
|
||||
QString quotient_str = QString::number(quotient);
|
||||
if (justify) quotient_str = quotient_str.rightJustified(16 - num_decimals, ' ');
|
||||
if (justify) {
|
||||
quotient_str = quotient_str.rightJustified(MAX_DIGITS_BTC - num_decimals, ' ');
|
||||
}
|
||||
|
||||
// Use SI-style thin space separators as these are locale independent and can't be
|
||||
// confused with the decimal marker.
|
||||
|
@ -14,8 +14,9 @@
|
||||
#include <QTemporaryFile>
|
||||
#include <QVariant>
|
||||
#ifdef USE_DBUS
|
||||
#include <stdint.h>
|
||||
#include <QDBusMetaType>
|
||||
#include <QtDBus>
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef Q_OS_MAC
|
||||
#include <qt/macnotificationhandler.h>
|
||||
@ -73,8 +74,6 @@ public:
|
||||
FreedesktopImage() {}
|
||||
explicit FreedesktopImage(const QImage &img);
|
||||
|
||||
static int metaType();
|
||||
|
||||
// Image to variant that can be marshalled over DBus
|
||||
static QVariant toVariant(const QImage &img);
|
||||
|
||||
@ -136,15 +135,10 @@ const QDBusArgument &operator>>(const QDBusArgument &a, FreedesktopImage &i)
|
||||
return a;
|
||||
}
|
||||
|
||||
int FreedesktopImage::metaType()
|
||||
{
|
||||
return qDBusRegisterMetaType<FreedesktopImage>();
|
||||
}
|
||||
|
||||
QVariant FreedesktopImage::toVariant(const QImage &img)
|
||||
{
|
||||
FreedesktopImage fimg(img);
|
||||
return QVariant(FreedesktopImage::metaType(), &fimg);
|
||||
return QVariant(qDBusRegisterMetaType<FreedesktopImage>(), &fimg);
|
||||
}
|
||||
|
||||
void Notificator::notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout)
|
||||
|
@ -557,9 +557,8 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent *event)
|
||||
case Qt::Key_Down: if(obj == ui->lineEdit) { browseHistory(1); return true; } break;
|
||||
case Qt::Key_PageUp: /* pass paging keys to messages widget */
|
||||
case Qt::Key_PageDown:
|
||||
if(obj == ui->lineEdit)
|
||||
{
|
||||
QApplication::postEvent(ui->messagesWidget, new QKeyEvent(*keyevt));
|
||||
if (obj == ui->lineEdit) {
|
||||
QApplication::sendEvent(ui->messagesWidget, keyevt);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
@ -567,7 +566,7 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent *event)
|
||||
case Qt::Key_Enter:
|
||||
// forward these events to lineEdit
|
||||
if (obj == autoCompleter->popup()) {
|
||||
QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt));
|
||||
QApplication::sendEvent(ui->lineEdit, keyevt);
|
||||
autoCompleter->popup()->hide();
|
||||
return true;
|
||||
}
|
||||
@ -581,7 +580,7 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent *event)
|
||||
((mod & Qt::ShiftModifier) && key == Qt::Key_Insert)))
|
||||
{
|
||||
ui->lineEdit->setFocus();
|
||||
QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt));
|
||||
QApplication::sendEvent(ui->lineEdit, keyevt);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ struct FakeCheck {
|
||||
{
|
||||
return true;
|
||||
}
|
||||
void swap(FakeCheck& x){};
|
||||
void swap(FakeCheck& x) noexcept {};
|
||||
};
|
||||
|
||||
struct FakeCheckCheckCompletion {
|
||||
@ -37,7 +37,7 @@ struct FakeCheckCheckCompletion {
|
||||
n_calls.fetch_add(1, std::memory_order_relaxed);
|
||||
return true;
|
||||
}
|
||||
void swap(FakeCheckCheckCompletion& x){};
|
||||
void swap(FakeCheckCheckCompletion& x) noexcept {};
|
||||
};
|
||||
|
||||
struct FailingCheck {
|
||||
@ -48,7 +48,7 @@ struct FailingCheck {
|
||||
{
|
||||
return !fails;
|
||||
}
|
||||
void swap(FailingCheck& x)
|
||||
void swap(FailingCheck& x) noexcept
|
||||
{
|
||||
std::swap(fails, x.fails);
|
||||
};
|
||||
@ -66,7 +66,10 @@ struct UniqueCheck {
|
||||
results.insert(check_id);
|
||||
return true;
|
||||
}
|
||||
void swap(UniqueCheck& x) { std::swap(x.check_id, check_id); };
|
||||
void swap(UniqueCheck& x) noexcept
|
||||
{
|
||||
std::swap(x.check_id, check_id);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -94,7 +97,10 @@ struct MemoryCheck {
|
||||
{
|
||||
fake_allocated_memory.fetch_sub(b, std::memory_order_relaxed);
|
||||
};
|
||||
void swap(MemoryCheck& x) { std::swap(b, x.b); };
|
||||
void swap(MemoryCheck& x) noexcept
|
||||
{
|
||||
std::swap(b, x.b);
|
||||
};
|
||||
};
|
||||
|
||||
struct FrozenCleanupCheck {
|
||||
@ -118,7 +124,10 @@ struct FrozenCleanupCheck {
|
||||
cv.wait(l, []{ return nFrozen.load(std::memory_order_relaxed) == 0;});
|
||||
}
|
||||
}
|
||||
void swap(FrozenCleanupCheck& x){std::swap(should_freeze, x.should_freeze);};
|
||||
void swap(FrozenCleanupCheck& x) noexcept
|
||||
{
|
||||
std::swap(should_freeze, x.should_freeze);
|
||||
};
|
||||
};
|
||||
|
||||
// Static Allocations
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
// Unit tests for denial-of-service detection/prevention code
|
||||
|
||||
#include <arith_uint256.h>
|
||||
#include <banman.h>
|
||||
#include <chainparams.h>
|
||||
#include <llmq/context.h>
|
||||
@ -373,7 +372,7 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans)
|
||||
// ecdsa_signature_parse_der_lax are executed during this test.
|
||||
// Specifically branches that run only when an ECDSA
|
||||
// signature's R and S values have leading zeros.
|
||||
g_insecure_rand_ctx = FastRandomContext(ArithToUint256(arith_uint256(33)));
|
||||
g_insecure_rand_ctx = FastRandomContext{uint256{33}};
|
||||
|
||||
CKey key;
|
||||
MakeNewKeyWithFastRandomContext(key);
|
||||
|
@ -26,7 +26,7 @@ struct DumbCheck {
|
||||
return result;
|
||||
}
|
||||
|
||||
void swap(DumbCheck& x)
|
||||
void swap(DumbCheck& x) noexcept
|
||||
{
|
||||
}
|
||||
};
|
||||
|
@ -161,7 +161,7 @@ public:
|
||||
pre_vector.shrink_to_fit();
|
||||
}
|
||||
|
||||
void swap()
|
||||
void swap() noexcept
|
||||
{
|
||||
real_vector.swap(real_vector_alt);
|
||||
pre_vector.swap(pre_vector_alt);
|
||||
|
@ -2,7 +2,6 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <arith_uint256.h>
|
||||
#include <consensus/merkle.h>
|
||||
#include <merkleblock.h>
|
||||
#include <serialize.h>
|
||||
@ -107,13 +106,13 @@ BOOST_AUTO_TEST_CASE(pmt_test1)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(pmt_malleability)
|
||||
{
|
||||
std::vector<uint256> vTxid = {
|
||||
ArithToUint256(1), ArithToUint256(2),
|
||||
ArithToUint256(3), ArithToUint256(4),
|
||||
ArithToUint256(5), ArithToUint256(6),
|
||||
ArithToUint256(7), ArithToUint256(8),
|
||||
ArithToUint256(9), ArithToUint256(10),
|
||||
ArithToUint256(9), ArithToUint256(10),
|
||||
std::vector<uint256> vTxid{
|
||||
uint256{1}, uint256{2},
|
||||
uint256{3}, uint256{4},
|
||||
uint256{5}, uint256{6},
|
||||
uint256{7}, uint256{8},
|
||||
uint256{9}, uint256{10},
|
||||
uint256{9}, uint256{10},
|
||||
};
|
||||
std::vector<bool> vMatch = {false, false, false, false, false, false, false, false, false, true, true, false};
|
||||
|
||||
|
@ -165,7 +165,8 @@ public:
|
||||
test();
|
||||
}
|
||||
|
||||
void swap() {
|
||||
void swap() noexcept
|
||||
{
|
||||
real_vector.swap(real_vector_alt);
|
||||
pre_vector.swap(pre_vector_alt);
|
||||
test();
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <netaddress.h>
|
||||
#include <node/ui_interface.h>
|
||||
#include <sync.h>
|
||||
#include <tinyformat.h>
|
||||
#include <util/system.h>
|
||||
#include <util/translation.h>
|
||||
#include <warnings.h>
|
||||
@ -98,11 +99,12 @@ void AddTimeData(const CNetAddr& ip, int64_t nOffsetSample)
|
||||
}
|
||||
|
||||
if (LogAcceptCategory(BCLog::NET)) {
|
||||
std::string log_message{"time data samples: "};
|
||||
for (const int64_t n : vSorted) {
|
||||
LogPrint(BCLog::NET, "%+d ", n); /* Continued */
|
||||
log_message += strprintf("%+d ", n);
|
||||
}
|
||||
LogPrint(BCLog::NET, "| "); /* Continued */
|
||||
LogPrint(BCLog::NET, "nTimeOffset = %+d (%+d minutes)\n", nTimeOffset, nTimeOffset / 60);
|
||||
log_message += strprintf("| median offset = %+d (%+d minutes)", nTimeOffset, nTimeOffset / 60);
|
||||
LogPrint(BCLog::NET, "%s\n", log_message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -93,8 +93,7 @@ uint32_t Interpret(const std::vector<bool> &asmap, const std::vector<bool> &ip)
|
||||
jump = DecodeJump(pos, endpos);
|
||||
if (jump == INVALID) break; // Jump offset straddles EOF
|
||||
if (bits == 0) break; // No input bits left
|
||||
if (pos + jump < pos) break; // overflow
|
||||
if (pos + jump >= endpos) break; // Jumping past EOF
|
||||
if (int64_t{jump} >= int64_t{endpos - pos}) break; // Jumping past EOF
|
||||
if (ip[ip.size() - bits]) {
|
||||
pos += jump;
|
||||
}
|
||||
@ -156,8 +155,7 @@ bool SanityCheckASMap(const std::vector<bool>& asmap, int bits)
|
||||
} else if (opcode == Instruction::JUMP) {
|
||||
uint32_t jump = DecodeJump(pos, endpos);
|
||||
if (jump == INVALID) return false; // Jump offset straddles EOF
|
||||
if (pos + jump < pos) return false; // overflow
|
||||
if (pos + jump > endpos) return false; // Jump out of range
|
||||
if (int64_t{jump} > int64_t{endpos - pos}) return false; // Jump out of range
|
||||
if (bits == 0) return false; // Consuming bits past the end of the input
|
||||
--bits;
|
||||
uint32_t jump_offset = pos - begin + jump;
|
||||
|
@ -289,7 +289,8 @@ public:
|
||||
|
||||
bool operator()();
|
||||
|
||||
void swap(CScriptCheck &check) {
|
||||
void swap(CScriptCheck& check) noexcept
|
||||
{
|
||||
std::swap(ptxTo, check.ptxTo);
|
||||
std::swap(m_tx_out, check.m_tx_out);
|
||||
std::swap(nIn, check.nIn);
|
||||
|
@ -1240,9 +1240,8 @@ void CWallet::transactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRe
|
||||
// Handle transactions that were removed from the mempool because they
|
||||
// conflict with transactions in a newly connected block.
|
||||
if (reason == MemPoolRemovalReason::CONFLICT) {
|
||||
// Call SyncNotifications, so external -walletnotify notifications will
|
||||
// be triggered for these transactions. Set Status::UNCONFIRMED instead
|
||||
// of Status::CONFLICTED for a few reasons:
|
||||
// Trigger external -walletnotify notifications for these transactions.
|
||||
// Set Status::UNCONFIRMED instead of Status::CONFLICTED for a few reasons:
|
||||
//
|
||||
// 1. The transactionRemovedFromMempool callback does not currently
|
||||
// provide the conflicting block's hash and height, and for backwards
|
||||
|
@ -308,6 +308,10 @@ class RESTTest (BitcoinTestFramework):
|
||||
|
||||
# Check that there are our submitted transactions in the TX memory pool
|
||||
json_obj = self.test_rest_request("/mempool/contents")
|
||||
raw_mempool_verbose = self.nodes[0].getrawmempool(verbose=True)
|
||||
|
||||
assert_equal(json_obj, raw_mempool_verbose)
|
||||
|
||||
for i, tx in enumerate(txs):
|
||||
assert tx in json_obj
|
||||
assert_equal(json_obj[tx]['spentby'], txs[i + 1:i + 2])
|
||||
|
23
test/lint/lint-submodule.py
Executable file
23
test/lint/lint-submodule.py
Executable file
@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (c) 2022 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
"""
|
||||
This script checks for git modules
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def main():
|
||||
submodules_list = subprocess.check_output(['git', 'submodule', 'status', '--recursive'],
|
||||
universal_newlines = True, encoding = 'utf8').rstrip('\n')
|
||||
if submodules_list:
|
||||
print("These submodules were found, delete them:\n", submodules_list)
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2020 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# This script checks for git modules
|
||||
export LC_ALL=C
|
||||
EXIT_CODE=0
|
||||
|
||||
CMD=$(git submodule status --recursive)
|
||||
if test -n "$CMD";
|
||||
then
|
||||
echo These submodules were found, delete them:
|
||||
echo "$CMD"
|
||||
EXIT_CODE=1
|
||||
fi
|
||||
|
||||
exit $EXIT_CODE
|
||||
|
87
test/lint/lint-tests.py
Executable file
87
test/lint/lint-tests.py
Executable file
@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (c) 2018-2022 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
"""
|
||||
Check the test suite naming conventions
|
||||
"""
|
||||
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def grep_boost_fixture_test_suite():
|
||||
command = [
|
||||
"git",
|
||||
"grep",
|
||||
"-E",
|
||||
r"^BOOST_FIXTURE_TEST_SUITE\(",
|
||||
"--",
|
||||
"src/test/**.cpp",
|
||||
"src/wallet/test/**.cpp",
|
||||
]
|
||||
return subprocess.check_output(command, universal_newlines=True, encoding="utf8")
|
||||
|
||||
|
||||
def check_matching_test_names(test_suite_list):
|
||||
not_matching = [
|
||||
x
|
||||
for x in test_suite_list
|
||||
if re.search(r"/(.*?)\.cpp:BOOST_FIXTURE_TEST_SUITE\(\1, .*\)", x) is None
|
||||
]
|
||||
if len(not_matching) > 0:
|
||||
not_matching = "\n".join(not_matching)
|
||||
error_msg = (
|
||||
"The test suite in file src/test/foo_tests.cpp should be named\n"
|
||||
'"foo_tests". Please make sure the following test suites follow\n'
|
||||
"that convention:\n\n"
|
||||
f"{not_matching}\n"
|
||||
)
|
||||
print(error_msg)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def get_duplicates(input_list):
|
||||
"""
|
||||
From https://stackoverflow.com/a/9835819
|
||||
"""
|
||||
seen = set()
|
||||
dupes = set()
|
||||
for x in input_list:
|
||||
if x in seen:
|
||||
dupes.add(x)
|
||||
else:
|
||||
seen.add(x)
|
||||
return dupes
|
||||
|
||||
|
||||
def check_unique_test_names(test_suite_list):
|
||||
output = [re.search(r"\((.*?),", x) for x in test_suite_list]
|
||||
output = [x.group(1) for x in output if x is not None]
|
||||
output = get_duplicates(output)
|
||||
output = sorted(list(output))
|
||||
|
||||
if len(output) > 0:
|
||||
output = "\n".join(output)
|
||||
error_msg = (
|
||||
"Test suite names must be unique. The following test suite names\n"
|
||||
f"appear to be used more than once:\n\n{output}"
|
||||
)
|
||||
print(error_msg)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def main():
|
||||
test_suite_list = grep_boost_fixture_test_suite().splitlines()
|
||||
exit_code = check_matching_test_names(test_suite_list)
|
||||
exit_code |= check_unique_test_names(test_suite_list)
|
||||
sys.exit(exit_code)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -1,35 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2018 The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
# Check the test suite naming conventions
|
||||
|
||||
export LC_ALL=C
|
||||
EXIT_CODE=0
|
||||
|
||||
NAMING_INCONSISTENCIES=$(git grep -E '^BOOST_FIXTURE_TEST_SUITE\(' -- \
|
||||
"src/test/**.cpp" "src/wallet/test/**.cpp" | \
|
||||
grep -vE '/(.*?)\.cpp:BOOST_FIXTURE_TEST_SUITE\(\1, .*\)$')
|
||||
if [[ ${NAMING_INCONSISTENCIES} != "" ]]; then
|
||||
echo "The test suite in file src/test/foo_tests.cpp should be named"
|
||||
echo "\"foo_tests\". Please make sure the following test suites follow"
|
||||
echo "that convention:"
|
||||
echo
|
||||
echo "${NAMING_INCONSISTENCIES}"
|
||||
EXIT_CODE=1
|
||||
fi
|
||||
|
||||
TEST_SUITE_NAME_COLLISSIONS=$(git grep -E '^BOOST_FIXTURE_TEST_SUITE\(' -- \
|
||||
"src/test/**.cpp" "src/wallet/test/**.cpp" | cut -f2 -d'(' | cut -f1 -d, | \
|
||||
sort | uniq -d)
|
||||
if [[ ${TEST_SUITE_NAME_COLLISSIONS} != "" ]]; then
|
||||
echo "Test suite names must be unique. The following test suite names"
|
||||
echo "appear to be used more than once:"
|
||||
echo
|
||||
echo "${TEST_SUITE_NAME_COLLISSIONS}"
|
||||
EXIT_CODE=1
|
||||
fi
|
||||
|
||||
exit ${EXIT_CODE}
|
Loading…
Reference in New Issue
Block a user