Compare commits

..

122 Commits

Author SHA1 Message Date
Pratik Mankawde
2610e653d6 only for clang
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 17:58:59 +00:00
Pratik Mankawde
b6c313bb94 only use ignorelist in gcc
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 17:41:21 +00:00
Pratik Mankawde
a3e42a0d11 alternate approach
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 17:19:14 +00:00
Pratik Mankawde
92a6c986b3 try blacklist file
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 17:10:29 +00:00
Pratik Mankawde
dd0408ac53 added blacklist file
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 17:00:38 +00:00
Pratik Mankawde
0fcfcd059e more aggressive suppresions
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 16:37:10 +00:00
Pratik Mankawde
4c0f7a337a few more additions
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 15:59:44 +00:00
Pratik Mankawde
640f9ff5e2 Added more files to ubsan.supp
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 15:18:08 +00:00
Pratik Mankawde
42cab6c826 updated ubsan file
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 15:02:21 +00:00
Pratik Mankawde
9267756944 fixed generate.py file " issue
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 14:14:49 +00:00
Pratik Mankawde
3b1e82b412 revert back to clang-20
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 13:45:18 +00:00
Pratik Mankawde
7d7c659822 target clang-21
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 13:42:59 +00:00
Pratik Mankawde
a58df41a4d Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 13:42:12 +00:00
Pratik Mankawde
d01b1da80e cleaned up linker flags
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-18 11:55:24 +00:00
Bart
3fb6acd29e ci: Fix filtering out of Clang 20+ on ARM (#6046)
This change fixes the strategy matrix check to filter out the Clang 20+ on ARM, which still fail due to problems with Boost.
2025-11-17 21:54:13 +00:00
Bart
77b7cef5a7 ci: Use new Debian Trixie images (#6034)
This change uses the new Debian Trixie CI images added by XRPLF/ci#83.
2025-11-17 19:31:19 +00:00
Pratik Mankawde
216ecf67e1 updated tsan and ubsan
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-17 19:18:15 +00:00
Pratik Mankawde
d8c8900fbb updated supp files
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-17 18:43:39 +00:00
Pratik Mankawde
e2c75f5d60 Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-17 17:59:34 +00:00
Pratik Mankawde
2428c5c196 added more suppressions
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-17 17:58:08 +00:00
Pratik Mankawde
d8ff72b342 updated asan and lsan
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-17 17:11:36 +00:00
Pratik Mankawde
4fc5c00c24 added lsan and updated tsan
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-17 16:53:51 +00:00
Jingchen
2c187461cc refactor: Retire NegativeUNL amendment (#6033)
Amendments activated for more than 2 years can be retired. This change retires the NegativeUNL amendment.
2025-11-17 14:02:10 +00:00
Pratik Mankawde
5a9014912c trying without begin-regex
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-17 12:12:27 +00:00
Pratik Mankawde
8006a1e967 removed leak type
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-16 12:30:23 +00:00
Pratik Mankawde
6610f469df trying diff. asan supp options
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-16 11:23:38 +00:00
Pratik Mankawde
9f026929cf adding asio to tsan.supp
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 19:43:19 +00:00
Pratik Mankawde
a9d134af85 more chnages
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 19:13:26 +00:00
Pratik Mankawde
18b9b9da19 updated supp files
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 18:50:08 +00:00
Pratik Mankawde
6a89a544fe tsan race suppression
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 18:10:18 +00:00
Pratik Mankawde
427771775e added afew suppressors
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 17:43:15 +00:00
Pratik Mankawde
67946f4993 more cleanup
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 16:51:54 +00:00
Pratik Mankawde
8d8a0cb970 Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-14 16:25:11 +00:00
Pratik Mankawde
89f9ede1f5 cleanup
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 16:24:04 +00:00
Pratik Mankawde
aac1076d83 minor cleanup
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 13:01:30 +00:00
Pratik Mankawde
c0da02814b Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-14 12:53:30 +00:00
Pratik Mankawde
013ff18fce cleanup
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 12:51:47 +00:00
Pratik Mankawde
e1403d56ef skip mold, gold, lld
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 12:20:07 +00:00
Pratik Mankawde
58b248d9a4 pass lld flag to cmake
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 11:23:59 +00:00
Pratik Mankawde
f1561c5b48 use lld
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 10:57:11 +00:00
Pratik Mankawde
73ab466029 use gold+large
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-14 10:25:39 +00:00
Pratik Mankawde
4cf4802971 for tsan only use medium
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 16:54:41 +00:00
Pratik Mankawde
8d6d2ec455 trying with bfd
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 16:31:41 +00:00
Pratik Mankawde
4248a1fbb6 only set mcmodel=large for gcc
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 16:18:34 +00:00
Pratik Mankawde
7edba0a856 trying with mcmodel=large
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 16:01:36 +00:00
Pratik Mankawde
b38ef53c44 trying lld.
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 15:03:23 +00:00
Pratik Mankawde
baee65bd28 fixing minor spacing issue
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 13:01:32 +00:00
Pratik Mankawde
2e53c5ab80 changed linker for gcc
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-13 12:28:48 +00:00
Pratik Mankawde
09a6e46c39 pass sanitizer flags to linker as well
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 17:32:39 +00:00
Pratik Mankawde
a93052e765 added -fPIC flag
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 16:58:01 +00:00
Pratik Mankawde
1cc00cddd8 trying with " and dyn linking
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 16:19:34 +00:00
Pratik Mankawde
5f2a351e3f reverted mcmodel to medium
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 16:08:36 +00:00
Pratik Mankawde
5e89bce8d9 use mcmodel=large
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 14:48:10 +00:00
Pratik Mankawde
9b793cd429 linker flag correction
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 14:16:58 +00:00
Pratik Mankawde
b650852fa7 static liking for gcc
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 14:09:12 +00:00
Pratik Mankawde
1d76de83f6 minor correction
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 13:12:01 +00:00
Pratik Mankawde
ea4d062e68 added ubsan file
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 12:15:45 +00:00
Pratik Mankawde
dcd0553050 sanitizer builds only for gcc15 and clang20. no linking check for sanitizer builds
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 11:46:20 +00:00
Pratik Mankawde
6355eba88e Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-12 10:37:48 +00:00
Pratik Mankawde
2e5afa7556 updated asan suppressions file
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-12 10:36:02 +00:00
Pratik Mankawde
7d05090d68 setting variables in run
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 19:21:33 +00:00
Pratik Mankawde
916f00039c try 8
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 19:15:50 +00:00
Pratik Mankawde
e687ab8653 try 7
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 19:07:22 +00:00
Pratik Mankawde
b182b6abf7 try 6
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 19:02:08 +00:00
Pratik Mankawde
509d388f97 try 6
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:58:21 +00:00
Pratik Mankawde
fd712770e1 try 5
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:53:42 +00:00
Pratik Mankawde
695f4a2cc9 try 4
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:50:04 +00:00
Pratik Mankawde
5ea3b4327d try 3
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:46:13 +00:00
Pratik Mankawde
a9444d3a42 try 2
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:42:14 +00:00
Pratik Mankawde
20326a785b putting commented code back
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:39:00 +00:00
Pratik Mankawde
5ef2ced584 testing by printing asan_options
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:38:21 +00:00
Pratik Mankawde
a011d29fcb trying again with minor change
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:36:51 +00:00
Pratik Mankawde
9abec17536 commenting out windows and mac for now.
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:32:58 +00:00
Pratik Mankawde
2bc089a962 Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:30:47 +00:00
Pratik Mankawde
14f605b2f9 minor
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:29:52 +00:00
Pratik Mankawde
f2365543fb added variable in an early action
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:19:04 +00:00
Pratik Mankawde
d9c26bd7a9 another comb.
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 18:17:37 +00:00
Pratik Mankawde
937dc8740e another combi
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 17:53:16 +00:00
Pratik Mankawde
9b92aafe6d fixed path to atsan
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 17:42:23 +00:00
Pratik Mankawde
124b6ca4bd using GITHUB_WORKSPACE now
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 17:27:51 +00:00
Pratik Mankawde
28885a4638 path revert
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 17:13:45 +00:00
Pratik Mankawde
5478e4fee6 move working_dir up
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 16:57:32 +00:00
Pratik Mankawde
72b3a03538 Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-11 16:51:12 +00:00
Pratik Mankawde
18b65fd129 linked model flags specific to amd64
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 16:42:57 +00:00
Pratik Mankawde
ebf917ab15 no-var-tracking is gcc specific
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 15:33:17 +00:00
Pratik Mankawde
2178fb919f Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 15:08:00 +00:00
Pratik Mankawde
e156ed40ba minor formatting
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 15:06:47 +00:00
Pratik Mankawde
db5aa2d277 added no-var-tracking
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 15:03:20 +00:00
Pratik Mankawde
e347da9fac added mcmodel flags for linker
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 14:56:07 +00:00
Pratik Mankawde
6b8d5b57e1 updated suppression file paths
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 14:36:27 +00:00
Pratik Mankawde
0029210926 minor fix
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 14:16:39 +00:00
Pratik Mankawde
832c32d15c formatting changes
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 13:59:08 +00:00
Pratik Mankawde
39adc5a82b fixes forgcc compilation errors.
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 13:57:31 +00:00
Pratik Mankawde
1f88697f54 trying suppression files
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 12:42:36 +00:00
Pratik Mankawde
4a0fc0f686 formatting changes
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 11:22:51 +00:00
Pratik Mankawde
f5b473ccd1 Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 11:21:25 +00:00
Pratik Mankawde
71212677c0 don't build deps with sanitizers
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-11 11:02:16 +00:00
Pratik Mankawde
abfaac5c64 trying direct input placement
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 17:16:55 +00:00
Pratik Mankawde
cb5a76589e tryring escaped " in config file
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 17:02:50 +00:00
Pratik Mankawde
d077141d75 name to small case
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 16:46:41 +00:00
Pratik Mankawde
1eb3cc4ec7 fixed pre-commit check
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 16:44:37 +00:00
Pratik Mankawde
34b10b87e6 merged develop
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 16:13:08 +00:00
Pratik Mankawde
c0ecb9a0cd Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 16:02:33 +00:00
Pratik Mankawde
c15d6399fb minor revert in clang-format
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-10 15:58:17 +00:00
Pratik Mankawde
0b1bd42cc0 Add sanitizers to CI builds
- Added Address and Thread sanitizers for Debian Bookworm builds
- Updated build-deps action to support sanitizer flags
- Modified strategy matrix generation to include sanitizer configurations
- Updated Conan profiles for sanitizer support
- Added InsertNewlineAtEOF setting to clang-format
2025-11-10 15:54:44 +00:00
Pratik Mankawde
30f7ef7676 Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-06 10:11:55 +00:00
Pratik Mankawde
e7da05e44c added setting EOF-ExtraLine in clang-format
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-06 10:10:18 +00:00
Pratik Mankawde
1cdd0bf63e end of line
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-06 10:03:17 +00:00
Pratik Mankawde
48a3e5ea31 special case only for gcc
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-06 10:00:46 +00:00
Pratik Mankawde
10a422dd69 seperate clang and gcc
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 15:31:09 +00:00
Pratik Mankawde
b150feaab6 fixes sanitizer arg not available in build-test
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 15:14:29 +00:00
Pratik Mankawde
ada523071f passing sanitizers to on-pr and on-trigger
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 14:30:14 +00:00
Pratik Mankawde
ff0284e984 removed sanitizers from script
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 13:33:40 +00:00
Pratik Mankawde
0be98ac610 made sanitizers optional
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 13:29:58 +00:00
Pratik Mankawde
83eb93f5d7 added back type
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 13:22:31 +00:00
Pratik Mankawde
db74cebc8b added build with sanitizers ins.
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 12:49:08 +00:00
Pratik Mankawde
3b32210ef4 formatting changes
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 12:26:33 +00:00
Pratik Mankawde
21b9f6d1af Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds 2025-11-05 12:25:47 +00:00
Pratik Mankawde
977a087bb3 code review changes
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 12:25:29 +00:00
Pratik Mankawde
e95299dac5 code review changes
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-05 09:46:56 +00:00
Pratik Mankawde
7ae3a85f21 formatting correction
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-04 16:12:22 +00:00
Pratik Mankawde
c38b5aa2d4 Added flow for the sanitizers build
Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
2025-11-04 15:59:15 +00:00
30 changed files with 512 additions and 299 deletions

View File

@@ -38,6 +38,7 @@ runs:
mkdir -p "${BUILD_DIR}"
cd "${BUILD_DIR}"
conan install \
--profile ci \
--output-folder . \
--build="${BUILD_OPTION}" \
--options:host='&:tests=True' \

View File

@@ -28,7 +28,7 @@ runs:
shell: bash
run: |
echo 'Installing profile.'
conan config install conan/profiles/default -tf $(conan config home)/profiles/
conan config install conan/profiles/ -tf $(conan config home)/profiles/
echo 'Conan profile:'
conan profile show

View File

@@ -57,18 +57,18 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
if os['distro_name'] == 'debian':
skip = True
if os['distro_version'] == 'bookworm':
if f'{os['compiler_name']}-{os['compiler_version']}' == 'gcc-13' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'gcc-13' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
cmake_args = f'-DUNIT_TEST_REFERENCE_FEE=500 {cmake_args}'
skip = False
if f'{os['compiler_name']}-{os['compiler_version']}' == 'gcc-15' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'gcc-15' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
skip = False
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-16' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/arm64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'clang-16' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/arm64':
cmake_args = f'-Dvoidstar=ON {cmake_args}'
skip = False
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-17' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'clang-17' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
cmake_args = f'-DUNIT_TEST_REFERENCE_FEE=1000 {cmake_args}'
skip = False
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-20' and build_type == 'Debug' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'clang-20' and build_type == 'Debug' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
skip = False
if skip:
continue
@@ -79,10 +79,10 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
if os['distro_name'] == 'rhel':
skip = True
if os['distro_version'] == '9':
if f'{os['compiler_name']}-{os['compiler_version']}' == 'gcc-12' and build_type == 'Debug' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'gcc-12' and build_type == 'Debug' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
skip = False
elif os['distro_version'] == '10':
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-any' and build_type == 'Release' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'clang-any' and build_type == 'Release' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
skip = False
if skip:
continue
@@ -95,14 +95,14 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
if os['distro_name'] == 'ubuntu':
skip = True
if os['distro_version'] == 'jammy':
if f'{os['compiler_name']}-{os['compiler_version']}' == 'gcc-12' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/arm64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'gcc-12' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/arm64':
skip = False
elif os['distro_version'] == 'noble':
if f'{os['compiler_name']}-{os['compiler_version']}' == 'gcc-14' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'gcc-14' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/amd64':
skip = False
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-18' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'clang-18' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
skip = False
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-19' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/arm64':
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'clang-19' and build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'linux/arm64':
skip = False
if skip:
continue
@@ -117,10 +117,9 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
if os['distro_name'] == 'windows' and not (build_type == 'Release' and '-Dunity=ON' in cmake_args and architecture['platform'] == 'windows/amd64'):
continue
# Additional CMake arguments.
cmake_args = f'{cmake_args} -Dtests=ON -Dwerr=ON -Dxrpld=ON'
if not f'{os['compiler_name']}-{os['compiler_version']}' in ['gcc-12', 'clang-16']:
if not f'{os["compiler_name"]}-{os["compiler_version"]}' in ['gcc-12', 'clang-16']:
cmake_args = f'{cmake_args} -Dwextra=ON'
if build_type == 'Release':
cmake_args = f'{cmake_args} -Dassert=ON'
@@ -130,14 +129,16 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
if os['distro_name'] == 'rhel' and architecture['platform'] == 'linux/arm64':
continue
# We skip all clang-20 on arm64 due to boost 1.86 build error
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-20' and architecture['platform'] == 'linux/arm64':
# We skip all clang 20+ on arm64 due to Boost build error.
if f'{os["compiler_name"]}-{os["compiler_version"]}' in ['clang-20', 'clang-21'] and architecture['platform'] == 'linux/arm64':
continue
# Enable code coverage for Debian Bookworm using GCC 15 in Debug and no
cxx_flags = '-g'
# Enable code coverage for Debian Bookworm using GCC 14 in Debug and no
# Unity on linux/amd64
if f'{os['compiler_name']}-{os['compiler_version']}' == 'gcc-15' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
cmake_args = f'-Dcoverage=ON -Dcoverage_format=xml -DCODE_COVERAGE_VERBOSE=ON -DCMAKE_C_FLAGS=-O0 -DCMAKE_CXX_FLAGS=-O0 {cmake_args}'
if f'{os["compiler_name"]}-{os["compiler_version"]}' == 'gcc-14' and build_type == 'Debug' and '-Dunity=OFF' in cmake_args and architecture['platform'] == 'linux/amd64':
cmake_args = f'-Dcoverage=ON -Dcoverage_format=xml -DCODE_COVERAGE_VERBOSE=ON -DCMAKE_C_FLAGS=-O0 {cmake_args}'
cxx_flags = f'-O0 {cxx_flags}'
# Generate a unique name for the configuration, e.g. macos-arm64-debug
# or debian-bookworm-gcc-12-amd64-release-unity.
@@ -148,7 +149,7 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
config_name += f'-{n}'
if (n := os['compiler_version']) != '':
config_name += f'-{n}'
config_name += f'-{architecture['platform'][architecture['platform'].find('/')+1:]}'
config_name += f'-{architecture["platform"][architecture["platform"].find("/")+1:]}'
config_name += f'-{build_type.lower()}'
if '-Dunity=ON' in cmake_args:
config_name += '-unity'
@@ -156,15 +157,104 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
# Add the configuration to the list, with the most unique fields first,
# so that they are easier to identify in the GitHub Actions UI, as long
# names get truncated.
configurations.append({
'config_name': config_name,
'cmake_args': cmake_args,
'cmake_target': cmake_target,
'build_only': build_only,
'build_type': build_type,
'os': os,
'architecture': architecture,
})
# Add Address and Thread (both coupled with UB) sanitizers when the distro is bookworm.
if os['distro_version'] == 'bookworm' and f'{os["compiler_name"]}-{os["compiler_version"]}' in {'gcc-15', 'clang-20'}:
extra_warning_flags = ''
linker_relocation_flags = ''
linker_flags = ''
# Use large code model to avoid relocation errors with large binaries
# Only for x86-64 (amd64) - ARM64 doesn't support -mcmodel=large
if architecture['platform'] == 'linux/amd64' and os['compiler_name'] == 'gcc':
# Add -mcmodel=large and -fPIC to both compiler AND linker flags
# This is needed because sanitizers create very large binaries
# -fPIC enables position independent code to avoid relocation range issues
# large model removes the 2GB limitation that medium model has
cxx_flags += ' -mcmodel=large -fPIC'
linker_relocation_flags+=' -mcmodel=large -fPIC'
# Create default sanitizer flags
sanitizers_flags = 'undefined,float-divide-by-zero'
if os['compiler_name'] == 'gcc':
sanitizers_flags = f'{sanitizers_flags},signed-integer-overflow'
# Suppress false positive warnings in GCC with stringop-overflow
extra_warning_flags += ' -Wno-stringop-overflow'
# Disable mold, gold and lld linkers.
# Use default linker (bfd/ld) which is more lenient with mixed code models
cmake_args += ' -Duse_mold=OFF -Duse_gold=OFF -Duse_lld=OFF'
# Add linker flags for Sanitizers
linker_flags += f' -DCMAKE_EXE_LINKER_FLAGS="{linker_relocation_flags} -fsanitize=address,{sanitizers_flags}"'
linker_flags += f' -DCMAKE_SHARED_LINKER_FLAGS="{linker_relocation_flags} -fsanitize=address,{sanitizers_flags}"'
elif os['compiler_name'] == 'clang':
sanitizers_flags = f'{sanitizers_flags},signed-integer-overflow,unsigned-integer-overflow'
linker_flags += f' -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address,{sanitizers_flags}"'
linker_flags += f' -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=address,{sanitizers_flags}"'
# Sanitizers recommend minimum of -O1 for reasonable performance
if "-O0" in cxx_flags:
cxx_flags = cxx_flags.replace("-O0", "-O1")
else:
cxx_flags += " -O1"
# First create config for asan
cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS="-fsanitize=address,{sanitizers_flags} -fno-omit-frame-pointer {cxx_flags} {extra_warning_flags}" {linker_flags}'
# Add config with asan
configurations.append({
'config_name': config_name + "_asan",
'cmake_args': cmake_args_flags,
'cmake_target': cmake_target,
'build_only': build_only,
'build_type': build_type,
'os': os,
'architecture': architecture
})
linker_flags = ''
# Update configs for tsan
# gcc doesn't supports atomic_thread_fence with tsan. Suppress warnings.
# Also tsan doesn't work well with mcmode=large and bfd linker
if os['compiler_name'] == 'gcc':
extra_warning_flags += ' -Wno-tsan'
cxx_flags = cxx_flags.replace('-mcmodel=large', '-mcmodel=medium')
linker_relocation_flags = linker_relocation_flags.replace('-mcmodel=large', '-mcmodel=medium')
# Add linker flags for Sanitizers
linker_flags += f' -DCMAKE_EXE_LINKER_FLAGS="{linker_relocation_flags} -fsanitize=thread,{sanitizers_flags}"'
linker_flags += f' -DCMAKE_SHARED_LINKER_FLAGS="{linker_relocation_flags} -fsanitize=thread,{sanitizers_flags}"'
elif os['compiler_name'] == 'clang':
cxx_flags += ' -fsanitize-blacklist=$GITHUB_WORKSPACE/external/sanitizer-blacklist.txt'
linker_flags += f' -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread,{sanitizers_flags}"'
linker_flags += f' -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread,{sanitizers_flags}"'
# Note: We use $GITHUB_WORKSPACE environment variable which will be expanded by the shell
# before CMake processes it. This ensures the compiler receives an absolute path.
# CMAKE_SOURCE_DIR won't work here because it's inside CMAKE_CXX_FLAGS string.
cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS="-fsanitize=thread,{sanitizers_flags} -fno-omit-frame-pointer {cxx_flags} {extra_warning_flags}" {linker_flags}'
configurations.append({
'config_name': config_name+ "_tsan",
'cmake_args': cmake_args_flags,
'cmake_target': cmake_target,
'build_only': build_only,
'build_type': build_type,
'os': os,
'architecture': architecture
})
else:
if cxx_flags:
cmake_args_flags = f'{cmake_args} -DCMAKE_CXX_FLAGS={cxx_flags}'
else:
cmake_args_flags = f'{cmake_args}'
configurations.append({
'config_name': config_name,
'cmake_args': cmake_args_flags,
'cmake_target': cmake_target,
'build_only': build_only,
'build_type': build_type,
'os': os,
'architecture': architecture
})
return configurations

View File

@@ -15,63 +15,91 @@
"distro_version": "bookworm",
"compiler_name": "gcc",
"compiler_version": "12",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "gcc",
"compiler_version": "13",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "gcc",
"compiler_version": "14",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "gcc",
"compiler_version": "15",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "clang",
"compiler_version": "16",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "clang",
"compiler_version": "17",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "clang",
"compiler_version": "18",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "clang",
"compiler_version": "19",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "bookworm",
"compiler_name": "clang",
"compiler_version": "20",
"image_sha": "e1782cd"
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "trixie",
"compiler_name": "gcc",
"compiler_version": "14",
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "trixie",
"compiler_name": "gcc",
"compiler_version": "15",
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "trixie",
"compiler_name": "clang",
"compiler_version": "20",
"image_sha": "0525eae"
},
{
"distro_name": "debian",
"distro_version": "trixie",
"compiler_name": "clang",
"compiler_version": "21",
"image_sha": "0525eae"
},
{
"distro_name": "rhel",

View File

@@ -68,6 +68,7 @@ jobs:
env:
ENABLED_VOIDSTAR: ${{ contains(inputs.cmake_args, '-Dvoidstar=ON') }}
ENABLED_COVERAGE: ${{ contains(inputs.cmake_args, '-Dcoverage=ON') }}
ENABLED_SANITIZERS: ${{ contains(inputs.cmake_args, '-fsanitize') }}
steps:
- name: Cleanup workspace (macOS and Windows)
if: ${{ runner.os == 'macOS' || runner.os == 'Windows' }}
@@ -107,14 +108,12 @@ jobs:
working-directory: ${{ inputs.build_dir }}
env:
BUILD_TYPE: ${{ inputs.build_type }}
CMAKE_ARGS: ${{ inputs.cmake_args }}
run: |
cmake \
cmake .. \
-G '${{ runner.os == 'Windows' && 'Visual Studio 17 2022' || 'Ninja' }}' \
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
-DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
${CMAKE_ARGS} \
..
${{ inputs.cmake_args }}
- name: Build the binary
working-directory: ${{ inputs.build_dir }}
@@ -141,7 +140,7 @@ jobs:
if-no-files-found: error
- name: Check linking (Linux)
if: ${{ runner.os == 'Linux' }}
if: ${{ runner.os == 'Linux' && env.ENABLED_SANITIZERS == 'false' }}
working-directory: ${{ inputs.build_dir }}
run: |
ldd ./rippled
@@ -166,6 +165,10 @@ jobs:
BUILD_TYPE: ${{ inputs.build_type }}
PARALLELISM: ${{ runner.os == 'Windows' && '1' || steps.nproc.outputs.nproc }}
run: |
export ASAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/asan.supp"
export TSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/tsan.supp"
export UBSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/ubsan.supp"
export LSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/lsan.supp"
ctest \
--output-on-failure \
-C "${BUILD_TYPE}" \
@@ -177,6 +180,10 @@ jobs:
env:
BUILD_NPROC: ${{ steps.nproc.outputs.nproc }}
run: |
export ASAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/asan.supp"
export TSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/tsan.supp"
export UBSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/ubsan.supp"
export LSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/external/lsan.supp"
./rippled --unittest --unittest-jobs "${BUILD_NPROC}"
- name: Debug failure (Linux)

View File

@@ -360,6 +360,16 @@ tools.build:cxxflags=['-DBOOST_ASIO_DISABLE_CONCEPTS']
conan install .. --output-folder . --build missing --settings build_type=Debug
```
If you would like to activate `asan+ubsan`(`Address`) or `tsan+ubsan`(`Thread`) for the build,
declare an env. variable as follows and simply use the `sanitizers`
profile in the `conan install` command.
```
SANITIZERS=Address conan install .. --output-folder . --profile sanitizers --build missing --settings build_type=Debug
```
Available options for SANITIZERS: `Address` and `Thread`
To build Debug, in the next step, be sure to set `-DCMAKE_BUILD_TYPE=Debug`
For a single-configuration generator, e.g. `Unix Makefiles` or `Ninja`,

1
conan/profiles/ci Normal file
View File

@@ -0,0 +1 @@
include(./sanitizers)

50
conan/profiles/sanitizers Normal file
View File

@@ -0,0 +1,50 @@
include(./default)
{% set compiler, version, compiler_exe = detect_api.detect_default_compiler() %}
{% set default_sanitizer_flags = "undefined,float-divide-by-zero,signed-integer-overflow" %}
{% set sanitizers = os.getenv("SANITIZERS") %}
[settings]
{% if sanitizers == "Address" or sanitizers == "Thread" %}
user.package:sanitizers={{ sanitizers }}
tools.info.package_ids:confs+=["user.package:sanitizers"]
{% endif %}
[conf]
{% if compiler == "gcc" %}
{% set asan_sanitizer_flags = "-fsanitize=address,"~default_sanitizer_flags~" -mcmodel=large -fPIC" %}
{% set tsan_sanitizer_flags = "-fsanitize=thread,"~default_sanitizer_flags~" -mcmodel=medium -fPIC" %}
{% if sanitizers == "Address" %}
tools.build:cxxflags+=['{{asan_sanitizer_flags}} -fno-omit-frame-pointer -O1 -Wno-stringop-overflow']
tools.build:sharedlinkflags+=['{{asan_sanitizer_flags}}']
tools.build:exelinkflags+=['{{asan_sanitizer_flags}}']
tools.cmake.cmaketoolchain:extra_variables={"use_mold": "OFF", "use_gold": "OFF", "use_lld": "OFF"}
{% elif sanitizers == "Thread" %}
tools.build:cxxflags+=['{{tsan_sanitizer_flags}} -fno-omit-frame-pointer -O1 -Wno-stringop-overflow -Wno-tsan']
tools.build:sharedlinkflags+=['{{tsan_sanitizer_flags}}']
tools.build:exelinkflags+=['{{tsan_sanitizer_flags}}']
{% endif %}
{% elif compiler == "apple-clang" or compiler == "clang" %}
{% set asan_sanitizer_flags = "-fsanitize=address,"~default_sanitizer_flags~",unsigned-integer-overflow -fPIC" %}
{% set tsan_sanitizer_flags = "-fsanitize=thread,"~default_sanitizer_flags~",unsigned-integer-overflow -fPIC" %}
{% if sanitizers == "Address" %}
tools.build:cxxflags+=['{{asan_sanitizer_flags}} -fno-omit-frame-pointer -O1']
tools.build:sharedlinkflags+=['{{asan_sanitizer_flags}}']
tools.build:exelinkflags+=['{{asan_sanitizer_flags}}']
{% elif sanitizers == "Thread" %}
tools.build:cxxflags+=['{{tsan_sanitizer_flags}} -fno-omit-frame-pointer -O1']
tools.build:sharedlinkflags+=['{{tsan_sanitizer_flags}}']
tools.build:exelinkflags+=['{{tsan_sanitizer_flags}}']
{% endif %}
{% endif %}

16
external/asan.supp vendored Normal file
View File

@@ -0,0 +1,16 @@
# Suppress voilations in Boost libraries
interceptor_via_lib:^libboost_.*
# Suprpress voilations in external code
interceptor_name:^external/.*
# Boost
interceptor_name:.*/boost/asio/.*
# Leaks in Doctests
interceptor_name:.*/src/libxrpl/net/HTTPClient.cpp
interceptor_name:.*/src/libxrpl/net/RegisterSSLCerts.cpp
interceptor_name:.*/src/tests/libxrpl/net/HTTPClient.cpp
interceptor_name:.*/xrpl/net/AutoSocket.h
interceptor_name:.*/xrpl/net/HTTPClient.h
interceptor_name:.*/xrpl/net/HTTPClientSSLContext.h
interceptor_name:.*/xrpl/net/RegisterSSLCerts.h

12
external/lsan.supp vendored Normal file
View File

@@ -0,0 +1,12 @@
leak:.*/src/libxrpl/net/HTTPClient.cpp
leak:.*/src/libxrpl/net/RegisterSSLCerts.cpp
leak:.*/src/tests/libxrpl/net/HTTPClient.cpp
leak:.*/xrpl/net/AutoSocket.h
leak:.*/xrpl/net/HTTPClient.h
leak:.*/xrpl/net/HTTPClientSSLContext.h
leak:.*/xrpl/net/RegisterSSLCerts.h
leak:ripple::HTTPClient
leak:ripple::HTTPClientImp
leak:.*boost::asio::.*
leak:.*/boost/asio/.*

5
external/sanitizer-blacklist.txt vendored Normal file
View File

@@ -0,0 +1,5 @@
[thread]
src:.*/src/libxrpl/beast/utility/beast_Journal.cpp
src:.*/src/libxrpl/beast/utility/beast_PropertyStream.cpp
src:.*/src/test/beast/beast_PropertyStream_test.cpp
src:.*/src/xrpld/core/detail/Workers.cpp

67
external/tsan.supp vendored Normal file
View File

@@ -0,0 +1,67 @@
called_from_lib:^libboost_.*
# Suppress race in Boost ASIO scheduler detected by GCC-15
# This is a false positive in Boost's internal pipe() synchronization
race:.*/boost/asio/.*
race:.*/boost/context/.*
race:.*/boost/asio/executor.hpp
race:.*boost::asio::.*
race:.*/src/libxrpl/basics/make_SSLContext.cpp
race:.*/src/libxrpl/basics/Number.cpp
race:.*/src/libxrpl/json/json_value.cpp
race:.*/src/libxrpl/json/to_string.cpp
race:.*/src/libxrpl/ledger/OpenView.cpp
race:.*/src/libxrpl/net/HTTPClient.cpp
race:.*/src/libxrpl/nodestore/backend/NuDBFactory.cpp
race:.*/src/libxrpl/protocol/InnerObjectFormats.cpp
race:.*/src/libxrpl/protocol/STParsedJSON.cpp
race:.*/src/libxrpl/resource/ResourceManager.cpp
race:.*/src/test/app/Flow_test.cpp
race:.*/src/test/app/LedgerReplay_test.cpp
race:.*/src/test/app/NFToken_test.cpp
race:.*/src/test/app/Offer_test.cpp
race:.*/src/test/app/ValidatorSite_test.cpp
race:.*/src/test/consensus/NegativeUNL_test.cpp
race:.*/src/test/jtx/impl/Env.cpp
race:.*/src/test/jtx/impl/JSONRPCClient.cpp
race:.*/src/test/jtx/impl/pay.cpp
race:.*/src/test/jtx/impl/token.cpp
race:.*/src/test/rpc/Book_test.cpp
race:.*/src/xrpld/app/ledger/detail/InboundTransactions.cpp
race:.*/src/xrpld/app/main/Application.cpp
race:.*/src/xrpld/app/main/BasicApp.cpp
race:.*/src/xrpld/app/main/GRPCServer.cpp
race:.*/src/xrpld/app/misc/detail/AmendmentTable.cpp
race:.*/src/xrpld/app/misc/FeeVoteImpl.cpp
race:.*/src/xrpld/app/rdb/detail/Wallet.cpp
race:.*/src/xrpld/overlay/detail/OverlayImpl.cpp
race:.*/src/xrpld/peerfinder/detail/PeerfinderManager.cpp
race:.*/src/xrpld/peerfinder/detail/SourceStrings.cpp
race:.*/src/xrpld/rpc/detail/ServerHandler.cpp
race:.*/xrpl/server/detail/Door.h
race:.*/xrpl/server/detail/Spawn.h
race:.*/xrpl/server/detail/ServerImpl.h
race:.*/xrpl/nodestore/detail/DatabaseNodeImp.h
race:.*/src/libxrpl/beast/utility/beast_Journal.cpp
race:.*/src/test/beast/LexicalCast_test.cpp
race:crtstuff.c
race:pipe
race:ripple::ServerHandler
# Deadlock / lock-order-inversion suppressions
# Note: GCC's TSAN may not fully support all deadlock suppression patterns
deadlock:.*/src/libxrpl/beast/utility/beast_Journal.cpp
deadlock:.*/src/libxrpl/beast/utility/beast_PropertyStream.cpp
deadlock:.*/src/test/beast/beast_PropertyStream_test.cpp
deadlock:.*/src/xrpld/core/detail/Workers.cpp
# Suppress lock-order-inversion in recursive_mutex operations
deadlock:std::recursive_mutex::lock
deadlock:__gthread_recursive_mutex_lock
deadlock:pthread_mutex_lock
# Suppress by function names involved in the lock-order-inversion
deadlock:*PropertyStream*
deadlock:*find_one*
deadlock:*find_one_deep*

161
external/ubsan.supp vendored Normal file
View File

@@ -0,0 +1,161 @@
# Suppress UBSan errors in external code by source file path
# This matches any source file under the external/ directory
alignment:external/*
bool:external/*
bounds:external/*
cfi:external/*
enum:external/*
float-cast-overflow:external/*
float-divide-by-zero:external/*
function:external/*
implicit-integer-sign-change:external/*
implicit-signed-integer-truncation::external/*
implicit-signed-integer-truncation:external/*
implicit-unsigned-integer-truncation:external/*
integer-divide-by-zero:external/*
invalid-builtin-use:external/*
invalid-objc-cast:external/*
nonnull-attribute:external/*
null:external/*
nullability-arg:external/*
nullability-assign:external/*
nullability-return:external/*
object-size:external/*
pointer-overflow:external/*
return:external/*
returns-nonnull-attribute:external/*
shift-base:external/*
shift-exponent:external/*
signed-integer-overflow:external/*
undefined:external/*
unreachable:external/*
unsigned-integer-overflow:external/*
vla-bound:external/*
vptr_check:external/*
vptr:external/*
# Suppress all UBSan errors in Boost libraries
# This matches any files containing "boost" in its path or name
alignment:.*/boost/*
bool:.*/boost/*
bounds:.*/boost/*
cfi:.*/boost/*
enum:.*/boost/*
float-cast-overflow:.*/boost/*
float-divide-by-zero:.*/boost/*
function:.*/boost/*
implicit-integer-sign-change:.*/boost/*
implicit-signed-integer-truncation:.*/boost/*
implicit-unsigned-integer-truncation:.*/boost/*
integer-divide-by-zero:.*/boost/*
invalid-builtin-use:.*/boost/*
invalid-objc-cast:.*/boost/*
nonnull-attribute:.*/boost/*
null:.*/boost/*
nullability-arg:.*/boost/*
nullability-assign:.*/boost/*
nullability-return:.*/boost/*
object-size:.*/boost/*
pointer-overflow:.*/boost/*
return:.*/boost/*
returns-nonnull-attribute:.*/boost/*
shift-base:.*/boost/*
shift-exponent:.*/boost/*
signed-integer-overflow:.*/boost/*
undefined:.*/boost/*
unreachable:.*/boost/*
unsigned-integer-overflow:.*/boost/*
vla-bound:.*/boost/*
vptr_check:.*/boost/*
vptr:.*/boost/*
# basic_string.h:483:51: runtime error: unsigned integer overflow
unsigned-integer-overflow:.*/basic_string.h
unsigned-integer-overflow:.*/bits/chrono.h
unsigned-integer-overflow:.*/bits/random.h
unsigned-integer-overflow:.*/bits/random.tcc
unsigned-integer-overflow:.*/bits/stl_algobase.h
unsigned-integer-overflow:.*/bits/uniform_int_dist.h
unsigned-integer-overflow:.*/string_view
# runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'std::size_t' (aka 'unsigned long')
unsigned-integer-overflow:.*/src/libxrpl/basics/base64.cpp
unsigned-integer-overflow:.*/src/libxrpl/basics/Number.cpp
unsigned-integer-overflow:.*/src/libxrpl/crypto/RFC1751.cpp
unsigned-integer-overflow:.*/src/libxrpl/json/json_value.cpp
unsigned-integer-overflow:.*/src/libxrpl/ledger/ApplyView.cpp
unsigned-integer-overflow:.*/src/libxrpl/ledger/View.cpp
unsigned-integer-overflow:.*/src/libxrpl/protocol/Permissions.cpp
unsigned-integer-overflow:.*/src/libxrpl/protocol/STAmount.cpp
unsigned-integer-overflow:.*/src/libxrpl/protocol/STPathSet.cpp
unsigned-integer-overflow:.*/src/libxrpl/protocol/tokens.cpp
unsigned-integer-overflow:.*/src/libxrpl/shamap/SHAMap.cpp
unsigned-integer-overflow:.*/src/test/app/Batch_test.cpp
unsigned-integer-overflow:.*/src/test/app/Invariants_test.cpp
unsigned-integer-overflow:.*/src/test/app/NFToken_test.cpp
unsigned-integer-overflow:.*/src/test/app/Offer_test.cpp
unsigned-integer-overflow:.*/src/test/app/Path_test.cpp
unsigned-integer-overflow:.*/src/test/basics/XRPAmount_test.cpp
unsigned-integer-overflow:.*/src/test/beast/LexicalCast_test.cpp
unsigned-integer-overflow:.*/src/test/jtx/impl/acctdelete.cpp
unsigned-integer-overflow:.*/src/test/ledger/SkipList_test.cpp
unsigned-integer-overflow:.*/src/test/rpc/Subscribe_test.cpp
unsigned-integer-overflow:.*/src/tests/libxrpl/basics/RangeSet.cpp
unsigned-integer-overflow:.*/src/xrpld/app/main/BasicApp.cpp
unsigned-integer-overflow:.*/src/xrpld/app/misc/detail/AmendmentTable.cpp
unsigned-integer-overflow:.*/src/xrpld/app/misc/NetworkOPs.cpp
unsigned-integer-overflow:.*/src/xrpld/app/paths/detail/StrandFlow.h
unsigned-integer-overflow:.*/src/xrpld/app/tx/detail/NFTokenMint.cpp
unsigned-integer-overflow:.*/src/xrpld/app/tx/detail/SetOracle.cpp
unsigned-integer-overflow:.*/src/xrpld/rpc/detail/Role.cpp
unsigned-integer-overflow:.*/src/xrpld/rpc/handlers/GetAggregatePrice.cpp
unsigned-integer-overflow:.*/xrpl/basics/base_uint.h
unsigned-integer-overflow:.*/xrpl/basics/DecayingSample.h
unsigned-integer-overflow:.*/xrpl/beast/test/yield_to.h
unsigned-integer-overflow:.*/xrpl/beast/xor_shift_engine.h
unsigned-integer-overflow:.*/xrpl/nodestore/detail/varint.h
unsigned-integer-overflow:.*/xrpl/peerfinder/detail/Counts.h
unsigned-integer-overflow:.*/xrpl/protocol/nft.h
# Signed integer overflow suppressions
signed-integer-overflow:.*/src/test/beast/LexicalCast_test.cpp
# External library suppressions
unsigned-integer-overflow:.*/nudb/detail/xxhash.hpp
undefined:.*/src/libxrpl/basics/base64.cpp
undefined:.*/src/libxrpl/basics/Number.cpp
undefined:.*/src/libxrpl/crypto/RFC1751.cpp
undefined:.*/src/libxrpl/ledger/ApplyView.cpp
undefined:.*/src/libxrpl/ledger/View.cpp
undefined:.*/src/libxrpl/protocol/Permissions.cpp
undefined:.*/src/libxrpl/protocol/STAmount.cpp
undefined:.*/src/libxrpl/protocol/STPathSet.cpp
undefined:.*/src/libxrpl/protocol/tokens.cpp
undefined:.*/src/libxrpl/shamap/SHAMap.cpp
undefined:.*/src/test/app/Batch_test.cpp
undefined:.*/src/test/app/Invariants_test.cpp
undefined:.*/src/test/app/NFToken_test.cpp
undefined:.*/src/test/app/Offer_test.cpp
undefined:.*/src/test/app/Path_test.cpp
undefined:.*/src/test/basics/XRPAmount_test.cpp
undefined:.*/src/test/beast/LexicalCast_test.cpp
undefined:.*/src/test/jtx/impl/acctdelete.cpp
undefined:.*/src/test/ledger/SkipList_test.cpp
undefined:.*/src/test/rpc/Subscribe_test.cpp
undefined:.*/src/xrpld/app/main/BasicApp.cpp
undefined:.*/src/xrpld/app/misc/detail/AmendmentTable.cpp
undefined:.*/src/xrpld/app/misc/NetworkOPs.cpp
undefined:.*/src/xrpld/app/paths/detail/StrandFlow.h
undefined:.*/src/xrpld/app/tx/detail/NFTokenMint.cpp
undefined:.*/src/xrpld/app/tx/detail/SetOracle.cpp
undefined:.*/src/xrpld/rpc/detail/Role.cpp
undefined:.*/src/xrpld/rpc/handlers/GetAggregatePrice.cpp
undefined:.*/xrpl/basics/base_uint.h
undefined:.*/xrpl/basics/DecayingSample.h
undefined:.*/xrpl/beast/test/yield_to.h
undefined:.*/xrpl/beast/xor_shift_engine.h
undefined:.*/xrpl/nodestore/detail/varint.h
undefined:.*/xrpl/peerfinder/detail/Counts.h
undefined:.*/xrpl/protocol/nft.h

View File

@@ -13,28 +13,12 @@ class Number;
std::string
to_string(Number const& amount);
template <class T1, class T2>
concept ArithmeticWithNumber =
std::is_arithmetic_v<std::remove_reference_t<T1>> &&
std::is_convertible_v<T2, Number>;
template <class T1, class T2>
concept OneNumberParam =
ArithmeticWithNumber<T1, T2> || ArithmeticWithNumber<T2, T1>;
class Number
{
using rep = std::int64_t;
rep mantissa_{0};
int exponent_{std::numeric_limits<int>::lowest()};
using urep = std::make_unsigned_t<rep>;
template <class T>
rep
utoi(T mantissa)
requires std::is_unsigned_v<T>;
public:
// The range for the mantissa when normalized
constexpr static std::int64_t minMantissa = 1'000'000'000'000'000LL;
@@ -51,10 +35,7 @@ public:
explicit constexpr Number() = default;
template <class T>
explicit Number(T mantissa)
requires std::is_unsigned_v<T>;
explicit Number(rep mantissa);
Number(rep mantissa);
explicit Number(rep mantissa, int exponent);
explicit constexpr Number(rep mantissa, int exponent, unchecked) noexcept;
@@ -78,39 +59,13 @@ public:
Number&
operator+=(Number const& x);
template <class T>
Number&
operator+=(T x)
{
return operator+=(Number(x));
}
Number&
operator-=(Number const& x);
template <class T>
Number&
operator-=(T x)
{
return operator-=(Number(x));
}
Number&
operator*=(Number const& x);
template <class T>
Number&
operator*=(T x)
{
return operator*=(Number(x));
}
Number&
operator/=(Number const& x);
template <class T>
Number&
operator/=(T x)
{
return operator/=(Number(x));
}
static constexpr Number
min() noexcept;
@@ -132,26 +87,12 @@ public:
{
return x.mantissa_ == y.mantissa_ && x.exponent_ == y.exponent_;
}
template <class T1, class T2>
friend constexpr bool
operator==(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator==(Number(x), Number(y));
}
friend constexpr bool
operator!=(Number const& x, Number const& y) noexcept
{
return !(x == y);
}
template <class T1, class T2>
friend constexpr bool
operator!=(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator!=(Number(x), Number(y));
}
friend constexpr bool
operator<(Number const& x, Number const& y) noexcept
@@ -182,13 +123,6 @@ public:
// If equal exponents, compare mantissas
return x.mantissa_ < y.mantissa_;
}
template <class T1, class T2>
friend constexpr bool
operator<(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator<(Number(x), Number(y));
}
/** Return the sign of the amount */
constexpr int
@@ -220,39 +154,18 @@ public:
{
return y < x;
}
template <class T1, class T2>
friend constexpr bool
operator>(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator>(Number(x), Number(y));
}
friend constexpr bool
operator<=(Number const& x, Number const& y) noexcept
{
return !(y < x);
}
template <class T1, class T2>
friend constexpr bool
operator<=(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator<=(Number(x), Number(y));
}
friend constexpr bool
operator>=(Number const& x, Number const& y) noexcept
{
return !(x < y);
}
template <class T1, class T2>
friend constexpr bool
operator>=(T1&& x, T2&& y) noexcept
requires OneNumberParam<T1, T2>
{
return operator>=(Number(x), Number(y));
}
friend std::ostream&
operator<<(std::ostream& os, Number const& x)
@@ -279,16 +192,6 @@ private:
class Guard;
};
template <class T>
Number::rep
Number::utoi(T mantissa)
requires std::is_unsigned_v<T>
{
if (mantissa > std::numeric_limits<rep>::max())
throw std::overflow_error("too high");
return static_cast<rep>(mantissa);
}
inline constexpr Number::Number(rep mantissa, int exponent, unchecked) noexcept
: mantissa_{mantissa}, exponent_{exponent}
{
@@ -304,13 +207,6 @@ inline Number::Number(rep mantissa) : Number{mantissa, 0}
{
}
template <class T>
Number::Number(T mantissa)
requires std::is_unsigned_v<T>
: Number{utoi(mantissa), 0}
{
}
inline constexpr Number::rep
Number::mantissa() const noexcept
{
@@ -381,14 +277,6 @@ operator+(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator+(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator+(Number(x), Number(y));
}
inline Number
operator-(Number const& x, Number const& y)
{
@@ -397,14 +285,6 @@ operator-(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator-(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator-(Number(x), Number(y));
}
inline Number
operator*(Number const& x, Number const& y)
{
@@ -413,14 +293,6 @@ operator*(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator*(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator*(Number(x), Number(y));
}
inline Number
operator/(Number const& x, Number const& y)
{
@@ -429,14 +301,6 @@ operator/(Number const& x, Number const& y)
return z;
}
template <class T1, class T2>
constexpr Number
operator/(T1&& x, T2&& y)
requires OneNumberParam<T1, T2>
{
return operator/(Number(x), Number(y));
}
inline constexpr Number
Number::min() noexcept
{

View File

@@ -29,9 +29,7 @@ struct Fees
XRPAmount
accountReserve(std::size_t ownerCount) const
{
auto const p = ownerCount * increment;
auto const s = reserve + p;
return s;
return reserve + ownerCount * increment;
}
};

View File

@@ -42,7 +42,7 @@ public:
IOUAmount() = default;
explicit IOUAmount(Number const& other);
IOUAmount(beast::Zero);
IOUAmount(std::int64_t mantissa, int exponent = 0);
IOUAmount(std::int64_t mantissa, int exponent);
IOUAmount& operator=(beast::Zero);

View File

@@ -64,7 +64,7 @@ public:
operator Number() const noexcept
{
return Number{value()};
return value();
}
/** Return the sign of the amount */

View File

@@ -20,9 +20,7 @@ namespace ripple {
class XRPAmount : private boost::totally_ordered<XRPAmount>,
private boost::additive<XRPAmount>,
private boost::equality_comparable<XRPAmount, std::int64_t>,
private boost::equality_comparable<XRPAmount, int>,
private boost::additive<XRPAmount, std::int64_t>,
private boost::additive<XRPAmount, int>
private boost::additive<XRPAmount, std::int64_t>
{
public:
using unit_type = unit::dropTag;
@@ -70,13 +68,11 @@ public:
return XRPAmount{drops_ * rhs};
}
template <class T>
friend constexpr XRPAmount
operator*(T lhs, XRPAmount const& rhs)
requires std::is_convertible_v<T, value_type>
operator*(value_type lhs, XRPAmount const& rhs)
{
// multiplication is commutative
return rhs.operator*(lhs);
return rhs * lhs;
}
XRPAmount&
@@ -131,12 +127,6 @@ public:
{
return drops_ == other;
}
friend bool
operator==(value_type lhs, XRPAmount const& rhs)
{
// multiplication is commutative
return rhs.operator==(lhs);
}
bool
operator<(XRPAmount const& other) const
@@ -153,7 +143,7 @@ public:
operator Number() const noexcept
{
return Number{drops()};
return drops();
}
/** Return the sign of the amount */

View File

@@ -66,7 +66,6 @@ XRPL_FEATURE(XRPFees, Supported::yes, VoteBehavior::DefaultNo
XRPL_FEATURE(DisallowIncoming, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FIX (RemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes)
XRPL_FEATURE(FlowSortStrands, Supported::yes, VoteBehavior::DefaultYes)
XRPL_FEATURE(NegativeUNL, Supported::yes, VoteBehavior::DefaultYes)
XRPL_FEATURE(RequireFullyCanonicalSig, Supported::yes, VoteBehavior::DefaultYes)
XRPL_FEATURE(DeletableAccounts, Supported::yes, VoteBehavior::DefaultYes)
XRPL_FEATURE(Checks, Supported::yes, VoteBehavior::DefaultYes)
@@ -130,6 +129,7 @@ XRPL_RETIRE_FEATURE(HardenedValidations)
XRPL_RETIRE_FEATURE(ImmediateOfferKilled)
XRPL_RETIRE_FEATURE(MultiSign)
XRPL_RETIRE_FEATURE(MultiSignReserve)
XRPL_RETIRE_FEATURE(NegativeUNL)
XRPL_RETIRE_FEATURE(NonFungibleTokensV1_1)
XRPL_RETIRE_FEATURE(PayChan)
XRPL_RETIRE_FEATURE(SortedDirectories)

View File

@@ -2884,7 +2884,7 @@ assetsToSharesDeposit(
Number(assets.mantissa(), assets.exponent() + vault->at(sfScale))
.truncate()};
Number const shareTotal = Number{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
shares = ((shareTotal * assets) / assetTotal).truncate();
return shares;
}
@@ -2913,7 +2913,7 @@ sharesToAssetsDeposit(
shares.exponent() - vault->at(sfScale),
false};
Number const shareTotal{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
assets = (assetTotal * shares) / shareTotal;
return assets;
}
@@ -2939,7 +2939,7 @@ assetsToSharesWithdraw(
STAmount shares{vault->at(sfShareMPTID)};
if (assetTotal == 0)
return shares;
Number const shareTotal{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
Number result = (shareTotal * assets) / assetTotal;
if (truncate == TruncateShares::yes)
result = result.truncate();
@@ -2967,7 +2967,7 @@ sharesToAssetsWithdraw(
STAmount assets{vault->at(sfAsset)};
if (assetTotal == 0)
return assets;
Number const shareTotal{issuance->at(sfOutstandingAmount)};
Number const shareTotal = issuance->at(sfOutstandingAmount);
assets = (assetTotal * shares) / shareTotal;
return assets;
}

View File

@@ -16,12 +16,6 @@ QualityFunction::QualityFunction(
{
if (quality.rate() <= beast::zero)
Throw<std::runtime_error>("QualityFunction quality rate is 0.");
static_assert(std::is_arithmetic_v<std::remove_reference_t<int>>);
static_assert(std::is_convertible_v<ripple::STAmount, Number>);
static_assert(ripple::OneNumberParam<int, ripple::STAmount>);
static_assert(!ripple::OneNumberParam<Number, Number>);
b_ = 1 / quality.rate();
}

View File

@@ -15,7 +15,6 @@ namespace test {
/*
* This file implements the following negative UNL related tests:
* -- test filling and applying ttUNL_MODIFY Tx and ledger update
* -- test ttUNL_MODIFY Tx failure without featureNegativeUNL amendment
* -- test the NegativeUNLVote class. The test cases are split to multiple
* test classes to allow parallel execution.
* -- test the negativeUNLFilter function
@@ -208,7 +207,7 @@ class NegativeUNL_test : public beast::unit_test::suite
testcase("Create UNLModify Tx and apply to ledgers");
jtx::Env env(*this, jtx::testable_amendments() | featureNegativeUNL);
jtx::Env env(*this, jtx::testable_amendments());
std::vector<PublicKey> publicKeys = createPublicKeys(3);
// genesis ledger
auto l = std::make_shared<Ledger>(
@@ -216,7 +215,6 @@ class NegativeUNL_test : public beast::unit_test::suite
env.app().config(),
std::vector<uint256>{},
env.app().getNodeFamily());
BEAST_EXPECT(l->rules().enabled(featureNegativeUNL));
// Record the public keys and ledger sequences of expected negative UNL
// validators when we build the ledger history
@@ -500,44 +498,6 @@ class NegativeUNL_test : public beast::unit_test::suite
}
};
class NegativeUNLNoAmendment_test : public beast::unit_test::suite
{
void
testNegativeUNLNoAmendment()
{
testcase("No negative UNL amendment");
jtx::Env env(*this, jtx::testable_amendments() - featureNegativeUNL);
std::vector<PublicKey> publicKeys = createPublicKeys(1);
// genesis ledger
auto l = std::make_shared<Ledger>(
create_genesis,
env.app().config(),
std::vector<uint256>{},
env.app().getNodeFamily());
BEAST_EXPECT(!l->rules().enabled(featureNegativeUNL));
// generate more ledgers
for (auto i = 0; i < 256 - 1; ++i)
{
l = std::make_shared<Ledger>(
*l, env.app().timeKeeper().closeTime());
}
BEAST_EXPECT(l->seq() == 256);
auto txDisable_0 = createTx(true, l->seq(), publicKeys[0]);
OpenView accum(&*l);
BEAST_EXPECT(applyAndTestResult(env, accum, txDisable_0, false));
accum.apply(*l);
BEAST_EXPECT(negUnlSizeTest(l, 0, false, false));
}
void
run() override
{
testNegativeUNLNoAmendment();
}
};
/**
* Utility class for creating validators and ledger history
*/
@@ -563,7 +523,7 @@ struct NetworkHistory
};
NetworkHistory(beast::unit_test::suite& suite, Parameter const& p)
: env(suite, jtx::testable_amendments() | featureNegativeUNL)
: env(suite, jtx::testable_amendments())
, param(p)
, validations(env.app().getValidations())
{
@@ -1867,7 +1827,6 @@ class NegativeUNLVoteFilterValidations_test : public beast::unit_test::suite
};
BEAST_DEFINE_TESTSUITE(NegativeUNL, consensus, ripple);
BEAST_DEFINE_TESTSUITE(NegativeUNLNoAmendment, consensus, ripple);
BEAST_DEFINE_TESTSUITE(NegativeUNLVoteInternal, consensus, ripple);
BEAST_DEFINE_TESTSUITE_MANUAL(NegativeUNLVoteScoreTable, consensus, ripple);

View File

@@ -142,34 +142,6 @@ public:
}
};
/*
template <class T1, class T2>
concept STAmountParams =
std::is_convertible_v<T1, STAmount> && std::is_convertible_v<T2, STAmount>;
template <class T1, class T2>
STAmount
operator-(T2&& lhs, T1&& rhs)
requires STAmountParams<T1, T2>
{
return STAmount(lhs) - STAmount(rhs);
}
*/
/*
STAmount
operator-(PrettyAmount&& lhs, STAmount const& rhs)
{
return STAmount(lhs) - rhs;
}
STAmount
operator-(STAmount const& lhs, PrettyAmount&& rhs)
{
return lhs - STAmount(rhs);
}
*/
inline bool
operator==(PrettyAmount const& lhs, PrettyAmount const& rhs)
{

View File

@@ -370,7 +370,6 @@ public:
env(pay(alice, bob, USD(1)), sendmax(USD(10)));
env.close();
auto const ten = USD(10);
env.require(balance(alice, USD(10) - amountWithRate));
env.require(balance(bob, USD(1)));
}

View File

@@ -124,7 +124,8 @@ class Feature_test : public beast::unit_test::suite
featureToName(fixRemoveNFTokenAutoTrustLine) ==
"fixRemoveNFTokenAutoTrustLine");
BEAST_EXPECT(featureToName(featureFlow) == "Flow");
BEAST_EXPECT(featureToName(featureNegativeUNL) == "NegativeUNL");
BEAST_EXPECT(
featureToName(featureDeletableAccounts) == "DeletableAccounts");
BEAST_EXPECT(
featureToName(fixIncludeKeyletFields) == "fixIncludeKeyletFields");
BEAST_EXPECT(featureToName(featureTokenEscrow) == "TokenEscrow");

View File

@@ -731,7 +731,6 @@ class Simulate_test : public beast::unit_test::suite
{
auto validateOutput = [&](Json::Value const& resp,
Json::Value const& tx) {
static_assert(ArithmeticWithNumber<XRPAmount, int>);
auto result = resp[jss::result];
checkBasicReturnValidity(
result,

View File

@@ -346,9 +346,7 @@ RCLConsensus::Adaptor::onClose(
prevLedger, validations, initialSet, j_);
}
}
else if (
prevLedger->isVotingLedger() &&
prevLedger->rules().enabled(featureNegativeUNL))
else if (prevLedger->isVotingLedger())
{
// previous ledger was a voting ledger,
// so the current consensus session is for a flag ledger,
@@ -1015,8 +1013,7 @@ RCLConsensus::Adaptor::preStartRound(
inboundTransactions_.newRound(prevLgr.seq());
// Notify NegativeUNLVote that new validators are added
if (prevLgr.ledger_->rules().enabled(featureNegativeUNL) &&
!nowTrusted.empty())
if (!nowTrusted.empty())
nUnlVote_.newValidators(prevLgr.seq() + 1, nowTrusted);
// propose only if we're in sync with the network (and validating)

View File

@@ -28,7 +28,7 @@ buildLedgerImpl(
{
auto built = std::make_shared<Ledger>(*parent, closeTime);
if (built->isFlagLedger() && built->rules().enabled(featureNegativeUNL))
if (built->isFlagLedger())
{
built->updateNegativeUNL();
}

View File

@@ -2063,8 +2063,7 @@ NetworkOPsImp::beginConsensus(
"ripple::NetworkOPsImp::beginConsensus : closedLedger parent matches "
"hash");
if (prevLedger->rules().enabled(featureNegativeUNL))
app_.validators().setNegativeUNL(prevLedger->negativeUNL());
app_.validators().setNegativeUNL(prevLedger->negativeUNL());
TrustChanges const changes = app_.validators().updateTrusted(
app_.getValidations().getCurrentNodeIDs(),
closingInfo.parentCloseTime,

View File

@@ -51,13 +51,6 @@ Transactor::invokePreflight<Change>(PreflightContext const& ctx)
return temBAD_SEQUENCE;
}
if (ctx.tx.getTxnType() == ttUNL_MODIFY &&
!ctx.rules.enabled(featureNegativeUNL))
{
JLOG(ctx.j.warn()) << "Change: NegativeUNL not enabled";
return temDISABLED;
}
return tesSUCCESS;
}