From 781ab723afb1a55748405f91447a40d69c5442f7 Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Wed, 15 Jul 2026 19:24:31 +0100 Subject: [PATCH 1/3] ci: Fix workflow launch on matrix-unrelated labels (#7812) --- .github/workflows/on-pr.yml | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/.github/workflows/on-pr.yml b/.github/workflows/on-pr.yml index bbf6f8c39e..442a202a44 100644 --- a/.github/workflows/on-pr.yml +++ b/.github/workflows/on-pr.yml @@ -25,18 +25,11 @@ on: - unlabeled concurrency: - # Use a per-ref group so a newer run (a push, or a change to a label below) - # supersedes the in-progress one for that ref. Label events we don't act on get - # their own unique group (per run id) instead, keeping them out of the shared - # group so real builds keep running. Keep this list in sync with `should-run`. - group: >- - ${{ github.workflow }}-${{ github.ref }}${{ - ((github.event.action == 'labeled' || github.event.action == 'unlabeled') - && github.event.label.name != 'Ready to merge' - && github.event.label.name != 'DraftRunCI' - && github.event.label.name != 'Full CI build') - && format('-{0}', github.run_id) || '' - }} + # A single per-ref group with cancel-in-progress means any newer run (a push + # or a label change) supersedes the in-progress one for that ref. Keeping + # exactly one authoritative run per ref ensures a fast do-nothing run can never + # mask a real build's checks. + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true defaults: @@ -44,21 +37,17 @@ defaults: shell: bash jobs: - # This job determines whether the rest of the workflow should run. It runs - # when the PR is not a draft (which should also cover merge-group) or has the - # 'DraftRunCI' or 'Full CI build' label. For label events it only runs when the - # label added or removed is one we act on ('Ready to merge', 'DraftRunCI' or - # 'Full CI build'), so unrelated label changes do not trigger a redundant run. + # This job determines whether the rest of the workflow should run at all, + # based on the current set of labels: it runs when the PR is not a draft + # (which should also cover merge-group) or has the 'DraftRunCI' or + # 'Full CI build' label. Whether a build then happens, and whether it is the + # minimal or full matrix, is decided further below and in the strategy matrix. should-run: if: >- ${{ - ((github.event.action != 'labeled' && github.event.action != 'unlabeled') - || github.event.label.name == 'Ready to merge' - || github.event.label.name == 'DraftRunCI' - || github.event.label.name == 'Full CI build') - && (!github.event.pull_request.draft - || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') - || contains(github.event.pull_request.labels.*.name, 'Full CI build')) + !github.event.pull_request.draft + || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') + || contains(github.event.pull_request.labels.*.name, 'Full CI build') }} runs-on: ubuntu-latest steps: From 433e5f68968ea295abaae4948676e9be3879a0e2 Mon Sep 17 00:00:00 2001 From: Vlad <129996061+vvysokikh1@users.noreply.github.com> Date: Wed, 15 Jul 2026 23:08:45 +0100 Subject: [PATCH 2/3] fix: Reject zero CheckID in CheckCancel and CheckCash (#7685) --- src/libxrpl/tx/transactors/check/CheckCancel.cpp | 5 +++++ src/libxrpl/tx/transactors/check/CheckCash.cpp | 4 ++++ src/test/app/Check_test.cpp | 14 ++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/libxrpl/tx/transactors/check/CheckCancel.cpp b/src/libxrpl/tx/transactors/check/CheckCancel.cpp index ed60817224..f4602f98c6 100644 --- a/src/libxrpl/tx/transactors/check/CheckCancel.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCancel.cpp @@ -1,10 +1,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -19,6 +21,9 @@ namespace xrpl { NotTEC CheckCancel::preflight(PreflightContext const& ctx) { + if (ctx.rules.enabled(fixCleanup3_3_0) && ctx.tx[sfCheckID] == beast::kZero) + return temMALFORMED; + return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/check/CheckCash.cpp b/src/libxrpl/tx/transactors/check/CheckCash.cpp index 4e810d94cf..a8c989f4df 100644 --- a/src/libxrpl/tx/transactors/check/CheckCash.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCash.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -51,6 +52,9 @@ CheckCash::checkExtraFeatures(xrpl::PreflightContext const& ctx) NotTEC CheckCash::preflight(PreflightContext const& ctx) { + if (ctx.rules.enabled(fixCleanup3_3_0) && ctx.tx[sfCheckID] == beast::kZero) + return temMALFORMED; + // Exactly one of Amount or DeliverMin must be present. auto const optAmount = ctx.tx[~sfAmount]; auto const optDeliverMin = ctx.tx[~sfDeliverMin]; diff --git a/src/test/app/Check_test.cpp b/src/test/app/Check_test.cpp index b19a9f6894..840c06bd84 100644 --- a/src/test/app/Check_test.cpp +++ b/src/test/app/Check_test.cpp @@ -1257,6 +1257,13 @@ class Check_test : public beast::unit_test::Suite env.close(); } + // Can't run pre-amendment behavior due to assertion failure. + if (features[fixCleanup3_3_0]) + { + env(check::cash(bob, uint256{}, usd(20)), Ter(temMALFORMED)); + env.close(); + } + // alice creates her checks ahead of time. uint256 const chkIdU{getCheckIndex(alice, env.seq(alice))}; env(check::create(alice, bob, usd(20))); @@ -1704,6 +1711,13 @@ class Check_test : public beast::unit_test::Suite // Non-existent check. env(check::cancel(bob, getCheckIndex(alice, env.seq(alice))), Ter(tecNO_ENTRY)); env.close(); + + // Can't run pre-amendment behavior due to assertion failure. + if (features[fixCleanup3_3_0]) + { + env(check::cancel(bob, uint256{}), Ter(temMALFORMED)); + env.close(); + } } void From cd38c0e800fe3e8cd9d125b2b2ece0cb2666fdb2 Mon Sep 17 00:00:00 2001 From: Peter Chen <34582813+PeterChen13579@users.noreply.github.com> Date: Wed, 15 Jul 2026 16:47:22 -0700 Subject: [PATCH 3/3] chore: Update mpt-crypto-lib to 0.4.0-rc4 (#7813) --- conan.lock | 10 +++++----- conanfile.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conan.lock b/conan.lock index b6ddfa4e58..9dfbb86960 100644 --- a/conan.lock +++ b/conan.lock @@ -10,22 +10,22 @@ "rocksdb/10.5.1#4a197eca381a3e5ae8adf8cffa5aacd0%1782392413.075713", "re2/20251105#8579cfd0bda4daf0683f9e3898f964b4%1782392402.431897", "protobuf/6.33.5#ff253ead763bd8d9904a52979cd21e81%1782392410.233933", - "openssl/3.6.3#1163d4ddc603907084d08a6a0c6e580f%1782307150.583886", + "openssl/3.6.3#f806de8933e3bf6f01016c6a888cee2e%1783945160.863288", "nudb/2.0.9#11149c73f8f2baff9a0198fe25971fc7%1782392402.297166", - "mpt-crypto/0.4.0-rc2#a580f2f9ad0e795de696aa62d54fb9af%1782425834.488828", + "mpt-crypto/0.4.0-rc4#ffdba12f2332357f0d8b0ae944cfff52%1784138702.932355", "lz4/1.10.0#982d9b673900f665a1da109e09c17cab%1782392402.164188", "libiconv/1.17#9923bc6dc6f106646d6967e0039a5ada%1782392792.775744", "libbacktrace/cci.20210118#a7691bfccd8caaf66309df196790a5a1%1782392402.420732", "libarchive/3.8.7#c446109bd1f1d8ba7936c94189bc50e6%1782392403.066892", "jemalloc/5.3.1#1fc58d55316041f10fbc1e8a2eae632a%1776700028.228", "gtest/1.17.0#5224b3b3ff3b4ce1133cbdd27d53ee7d%1782392402.791979", - "grpc/1.81.1#5217e6ef0544c42b46f4af35d5e7f649%1782307148.845616", + "grpc/1.81.1#f729f6d75992d20f9c72828e9142d62f%1783945160.094135", "ed25519/2015.03#ae761bdc52730a843f0809bdf6c1b1f6%1782307148.15562", "date/3.0.4#862e11e80030356b53c2c38599ceb32b%1782392402.538492", "c-ares/1.34.6#545240bb1c40e2cacd4362d6b8967650%1782392402.681654", "bzip2/1.0.8#c470882369c2d95c5c77e970c0c7e321%1782392402.296732", "boost/1.91.0#ea540ca2133d831b560036aa24dece3c%1782392419.475605", - "abseil/20250127.0#bb0baf1f362bc4a725a24eddd419b8f7%1782307147.395833" + "abseil/20250127.0#9ef01c1451a8340f9022e46238c0fbb6%1783945159.651047" ], "build_requires": [ "zlib/1.3.2#1cb806da49011867778ffb6ac7190fcb%1782392402.122708", @@ -38,7 +38,7 @@ "b2/5.4.2#ffd6084a119587e70f11cd45d1a386e2%1782392402.624226", "automake/1.16.5#b91b7c384c3deaa9d535be02da14d04f%1755524470.56", "autoconf/2.71#51077f068e61700d65bb05541ea1e4b0%1731054366.86", - "abseil/20250127.0#bb0baf1f362bc4a725a24eddd419b8f7%1782307147.395833" + "abseil/20250127.0#9ef01c1451a8340f9022e46238c0fbb6%1783945159.651047" ], "python_requires": [], "overrides": { diff --git a/conanfile.py b/conanfile.py index db12dcb585..f0b10cf34b 100644 --- a/conanfile.py +++ b/conanfile.py @@ -134,7 +134,7 @@ class Xrpl(ConanFile): if self.options.jemalloc: self.requires("jemalloc/5.3.1") self.requires("lz4/1.10.0", force=True) - self.requires("mpt-crypto/0.4.0-rc2", transitive_headers=True) + self.requires("mpt-crypto/0.4.0-rc4", transitive_headers=True) self.requires("protobuf/6.33.5", force=True) if self.options.rocksdb: self.requires("rocksdb/10.5.1")