mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
b559a8f904
* Backport Statoshi This backports some of https://github.com/jlopp/statoshi. Missing stuff: README.md and client name changes, segwit and fee estimation stats. Fix RejectCodeToString Fix copy-paste mistake s/InvalidBlockFound/InvalidChainFound/ * Merge #16728: move-only: move coins statistics utils out of RPC 8a3b2eb17572ca2131778d52cc25ec359470a90f move-only: move coins statistics utils out of RPC (James O'Beirne) Pull request description: This is part of the [assumeutxo project](https://github.com/bitcoin/bitcoin/projects/11): Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/master/proposal --- In the short-term, this move-only commit will help with fuzzing (https://github.com/bitcoin/bitcoin/pull/15606#issuecomment-524482297). Later, these procedures will be used to compute statistics (particularly a content hash) for UTXO sets coming in from snapshots. Most easily reviewed with `git ... --color-moved=dimmed_zebra`. A nice follow-up would be adding unittests, which I'll do if nobody else gets around to it. ACKs for top commit: MarcoFalke: ACK 8a3b2eb17572ca2131778d52cc25ec359470a90f, checked --color-moved=dimmed-zebra Tree-SHA512: a187d2f7590ad2450b8e8fa3d038c80a04fc3d903618c24222d7e3172250ce51badea35860c86101f2ba266eb4354e6efb8d7d508b353f29276e4665a1efdf74 * Fix 16728 * Modernize StatsdClient - Reuse some functionality from netbase - Switch from GetRand to FastRandomContext - Drop `using namespace std` and add `// namespace statsd` * Introduce PeriodicStats and make StatsdClient configurable via -stats<smth> (enabled/host/port/ns/period) * Move/rename tip stats from CheckBlock to ConnectBlock * Add new false positives to lint-format-strings.py * Add snprintf in statsd_client to the list of known violations in lint-locale-dependence.sh * Fix incorrect include guard * Use bracket syntax includes * Replace magic numbers with defaults * Move connection stats calculation into its own function And bail out early if stats are disabled * assert in PeriodicStats Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com> Co-authored-by: MarcoFalke <falke.marco@gmail.com> Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
242 lines
6.5 KiB
Bash
Executable File
242 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
export LC_ALL=C
|
|
|
|
KNOWN_VIOLATIONS=(
|
|
"src/base58.cpp:.*isspace"
|
|
"src/bench/string_cast.cpp.*atoi"
|
|
"src/dash-tx.cpp.*stoul"
|
|
"src/dash-tx.cpp.*trim_right"
|
|
"src/dash-tx.cpp:.*atoi"
|
|
"src/core_read.cpp.*is_digit"
|
|
"src/dbwrapper.cpp.*stoul"
|
|
"src/dbwrapper.cpp:.*vsnprintf"
|
|
"src/governance/governance-validators.cpp.*isspace"
|
|
"src/governance/governance-validators.cpp.*tolower"
|
|
"src/httprpc.cpp.*trim"
|
|
"src/init.cpp:.*atoi"
|
|
"src/netbase.cpp.*to_lower"
|
|
"src/qt/rpcconsole.cpp:.*atoi"
|
|
"src/qt/rpcconsole.cpp:.*isdigit"
|
|
"src/rest.cpp:.*strtol"
|
|
"src/rpc/server.cpp.*to_upper"
|
|
"src/rpc/blockchain.cpp.*atoi"
|
|
"src/rpc/governance.cpp.*atoi"
|
|
"src/rpc/masternode.cpp.*atoi"
|
|
"src/rpc/masternode.cpp.*tolower"
|
|
"src/rpc/server.cpp.*tolower"
|
|
"src/statsd_client.cpp:.*snprintf"
|
|
"src/test/dbwrapper_tests.cpp:.*snprintf"
|
|
"src/test/getarg_tests.cpp.*split"
|
|
"src/torcontrol.cpp:.*atoi"
|
|
"src/torcontrol.cpp:.*strtol"
|
|
"src/uint256.cpp:.*isspace"
|
|
"src/uint256.cpp:.*tolower"
|
|
"src/util.cpp:.*atoi"
|
|
"src/util.cpp:.*fprintf"
|
|
"src/util.cpp:.*tolower"
|
|
"src/utilmoneystr.cpp:.*isdigit"
|
|
"src/utilmoneystr.cpp:.*isspace"
|
|
"src/utilstrencodings.cpp:.*atoi"
|
|
"src/utilstrencodings.cpp:.*isspace"
|
|
"src/utilstrencodings.cpp:.*strtol"
|
|
"src/utilstrencodings.cpp:.*strtoll"
|
|
"src/utilstrencodings.cpp:.*strtoul"
|
|
"src/utilstrencodings.cpp:.*strtoull"
|
|
"src/utilstrencodings.h:.*atoi"
|
|
"src/wallet/wallet.cpp:.*atoi"
|
|
)
|
|
|
|
REGEXP_IGNORE_EXTERNAL_DEPENDENCIES="^src/(crypto/ctaes/|leveldb/|secp256k1/|tinyformat.h|univalue/)"
|
|
|
|
LOCALE_DEPENDENT_FUNCTIONS=(
|
|
alphasort # LC_COLLATE (via strcoll)
|
|
asctime # LC_TIME (directly)
|
|
asprintf # (via vasprintf)
|
|
atof # LC_NUMERIC (via strtod)
|
|
atoi # LC_NUMERIC (via strtol)
|
|
atol # LC_NUMERIC (via strtol)
|
|
atoll # (via strtoll)
|
|
atoq
|
|
btowc # LC_CTYPE (directly)
|
|
ctime # (via asctime or localtime)
|
|
dprintf # (via vdprintf)
|
|
fgetwc
|
|
fgetws
|
|
fold_case # boost::locale::fold_case
|
|
fprintf # (via vfprintf)
|
|
fputwc
|
|
fputws
|
|
fscanf # (via __vfscanf)
|
|
fwprintf # (via __vfwprintf)
|
|
getdate # via __getdate_r => isspace // __localtime_r
|
|
getwc
|
|
getwchar
|
|
is_digit # boost::algorithm::is_digit
|
|
is_space # boost::algorithm::is_space
|
|
isalnum # LC_CTYPE
|
|
isalpha # LC_CTYPE
|
|
isblank # LC_CTYPE
|
|
iscntrl # LC_CTYPE
|
|
isctype # LC_CTYPE
|
|
isdigit # LC_CTYPE
|
|
isgraph # LC_CTYPE
|
|
islower # LC_CTYPE
|
|
isprint # LC_CTYPE
|
|
ispunct # LC_CTYPE
|
|
isspace # LC_CTYPE
|
|
isupper # LC_CTYPE
|
|
iswalnum # LC_CTYPE
|
|
iswalpha # LC_CTYPE
|
|
iswblank # LC_CTYPE
|
|
iswcntrl # LC_CTYPE
|
|
iswctype # LC_CTYPE
|
|
iswdigit # LC_CTYPE
|
|
iswgraph # LC_CTYPE
|
|
iswlower # LC_CTYPE
|
|
iswprint # LC_CTYPE
|
|
iswpunct # LC_CTYPE
|
|
iswspace # LC_CTYPE
|
|
iswupper # LC_CTYPE
|
|
iswxdigit # LC_CTYPE
|
|
isxdigit # LC_CTYPE
|
|
localeconv # LC_NUMERIC + LC_MONETARY
|
|
mblen # LC_CTYPE
|
|
mbrlen
|
|
mbrtowc
|
|
mbsinit
|
|
mbsnrtowcs
|
|
mbsrtowcs
|
|
mbstowcs # LC_CTYPE
|
|
mbtowc # LC_CTYPE
|
|
mktime
|
|
normalize # boost::locale::normalize
|
|
# printf # LC_NUMERIC
|
|
putwc
|
|
putwchar
|
|
scanf # LC_NUMERIC
|
|
setlocale
|
|
snprintf
|
|
sprintf
|
|
sscanf
|
|
stod
|
|
stof
|
|
stoi
|
|
stol
|
|
stold
|
|
stoll
|
|
stoul
|
|
stoull
|
|
strcasecmp
|
|
strcasestr
|
|
strcoll # LC_COLLATE
|
|
# strerror
|
|
strfmon
|
|
strftime # LC_TIME
|
|
strncasecmp
|
|
strptime
|
|
strtod # LC_NUMERIC
|
|
strtof
|
|
strtoimax
|
|
strtol # LC_NUMERIC
|
|
strtold
|
|
strtoll
|
|
strtoq
|
|
strtoul # LC_NUMERIC
|
|
strtoull
|
|
strtoumax
|
|
strtouq
|
|
strxfrm # LC_COLLATE
|
|
swprintf
|
|
to_lower # boost::locale::to_lower
|
|
to_title # boost::locale::to_title
|
|
to_upper # boost::locale::to_upper
|
|
tolower # LC_CTYPE
|
|
toupper # LC_CTYPE
|
|
towctrans
|
|
towlower # LC_CTYPE
|
|
towupper # LC_CTYPE
|
|
trim # boost::algorithm::trim
|
|
trim_left # boost::algorithm::trim_left
|
|
trim_right # boost::algorithm::trim_right
|
|
ungetwc
|
|
vasprintf
|
|
vdprintf
|
|
versionsort
|
|
vfprintf
|
|
vfscanf
|
|
vfwprintf
|
|
vprintf
|
|
vscanf
|
|
vsnprintf
|
|
vsprintf
|
|
vsscanf
|
|
vswprintf
|
|
vwprintf
|
|
wcrtomb
|
|
wcscasecmp
|
|
wcscoll # LC_COLLATE
|
|
wcsftime # LC_TIME
|
|
wcsncasecmp
|
|
wcsnrtombs
|
|
wcsrtombs
|
|
wcstod # LC_NUMERIC
|
|
wcstof
|
|
wcstoimax
|
|
wcstol # LC_NUMERIC
|
|
wcstold
|
|
wcstoll
|
|
wcstombs # LC_CTYPE
|
|
wcstoul # LC_NUMERIC
|
|
wcstoull
|
|
wcstoumax
|
|
wcswidth
|
|
wcsxfrm # LC_COLLATE
|
|
wctob
|
|
wctomb # LC_CTYPE
|
|
wctrans
|
|
wctype
|
|
wcwidth
|
|
wprintf
|
|
)
|
|
|
|
function join_array {
|
|
local IFS="$1"
|
|
shift
|
|
echo "$*"
|
|
}
|
|
|
|
REGEXP_IGNORE_KNOWN_VIOLATIONS=$(join_array "|" "${KNOWN_VIOLATIONS[@]}")
|
|
|
|
# Invoke "git grep" only once in order to minimize run-time
|
|
REGEXP_LOCALE_DEPENDENT_FUNCTIONS=$(join_array "|" "${LOCALE_DEPENDENT_FUNCTIONS[@]}")
|
|
GIT_GREP_OUTPUT=$(git grep -E "[^a-zA-Z0-9_\`'\"<>](${REGEXP_LOCALE_DEPENDENT_FUNCTIONS}(_r|_s)?)[^a-zA-Z0-9_\`'\"<>]" -- "*.cpp" "*.h")
|
|
|
|
EXIT_CODE=0
|
|
for LOCALE_DEPENDENT_FUNCTION in "${LOCALE_DEPENDENT_FUNCTIONS[@]}"; do
|
|
MATCHES=$(grep -E "[^a-zA-Z0-9_\`'\"<>]${LOCALE_DEPENDENT_FUNCTION}(_r|_s)?[^a-zA-Z0-9_\`'\"<>]" <<< "${GIT_GREP_OUTPUT}" | \
|
|
grep -vE "\.(c|cpp|h):\s*(//|\*|/\*|\").*${LOCALE_DEPENDENT_FUNCTION}" | \
|
|
grep -vE 'fprintf\(.*(stdout|stderr)')
|
|
if [[ ${REGEXP_IGNORE_EXTERNAL_DEPENDENCIES} != "" ]]; then
|
|
MATCHES=$(grep -vE "${REGEXP_IGNORE_EXTERNAL_DEPENDENCIES}" <<< "${MATCHES}")
|
|
fi
|
|
if [[ ${REGEXP_IGNORE_KNOWN_VIOLATIONS} != "" ]]; then
|
|
MATCHES=$(grep -vE "${REGEXP_IGNORE_KNOWN_VIOLATIONS}" <<< "${MATCHES}")
|
|
fi
|
|
if [[ ${MATCHES} != "" ]]; then
|
|
echo "The locale dependent function ${LOCALE_DEPENDENT_FUNCTION}(...) appears to be used:"
|
|
echo "${MATCHES}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
if [[ ${EXIT_CODE} != 0 ]]; then
|
|
echo "Unnecessary locale dependence can cause bugs that are very"
|
|
echo "tricky to isolate and fix. Please avoid using locale dependent"
|
|
echo "functions if possible."
|
|
echo
|
|
echo "Advice not applicable in this specific case? Add an exception"
|
|
echo "by updating the ignore list in $0"
|
|
fi
|
|
exit ${EXIT_CODE}
|