diff --git a/src/ripple/app/tx/impl/Transactor.cpp b/src/ripple/app/tx/impl/Transactor.cpp index a6df144c2..55b19ddd0 100644 --- a/src/ripple/app/tx/impl/Transactor.cpp +++ b/src/ripple/app/tx/impl/Transactor.cpp @@ -1015,7 +1015,7 @@ Transactor::checkMultiSign(PreclaimContext const& ctx) if (!allowedSigners) return allowedSigners.error(); - // Build lookup map for O(1) signer validation and weight retrieval + // Build lookup map for signer validation and weight retrieval std::map signerWeights; uint32_t totalWeight{0}, cyclicWeight{0}; for (auto const& entry : *allowedSigners) diff --git a/src/test/app/MultiSign_test.cpp b/src/test/app/MultiSign_test.cpp index 51bff953f..1c1611ab9 100644 --- a/src/test/app/MultiSign_test.cpp +++ b/src/test/app/MultiSign_test.cpp @@ -1466,7 +1466,7 @@ public: // Leaf signer: set Account + SigningPubKey + TxnSignature { STObject signer(sfSigner); - signer.setAccountID(sfAccount, AccountID{1}); + signer.setAccountID(sfAccount, bogie.id()); signer.setFieldVL(sfSigningPubKey, Blob(33, 0x02)); signer.setFieldVL(sfTxnSignature, Blob(64, 0xAA)); signer.applyTemplateFromSField(sfSigner); @@ -1487,7 +1487,7 @@ public: // Nested signer: set Account + Signers { STObject signer(sfSigner); - signer.setAccountID(sfAccount, AccountID{2}); + signer.setAccountID(sfAccount, demon.id()); signer.setFieldArray(sfSigners, STArray{}); signer.applyTemplateFromSField(sfSigner); @@ -1504,7 +1504,7 @@ public: // Invalid: all 4 fields set (both leaf and nested fields) { STObject signer(sfSigner); - signer.setAccountID(sfAccount, AccountID{3}); + signer.setAccountID(sfAccount, ghost.id()); signer.setFieldVL(sfSigningPubKey, Blob(33, 0x02)); signer.setFieldVL(sfTxnSignature, Blob(64, 0xAA)); signer.setFieldArray(sfSigners, STArray{}); diff --git a/src/test/protocol/STTx_test.cpp b/src/test/protocol/STTx_test.cpp index be818ec7b..a11bcde36 100644 --- a/src/test/protocol/STTx_test.cpp +++ b/src/test/protocol/STTx_test.cpp @@ -1793,14 +1793,23 @@ public: testMalformedSigningAccount(soTest1, true); } - /*{ // RHNOTE: featureNestedMultiSign covers this in the - checkMultiSign() + { // Test case 2. Omit sfSigningPubKey from SigningAccount. + // With featureNestedMultiSign, sfSigningPubKey is optional in the + // template so serialization succeeds. But the validation layer + // (isValidSignerEntry) correctly rejects {Account + TxnSignature} + // as neither a valid leaf nor nested signer. STObject soTest2(sfSigner); soTest2.setAccountID(sfAccount, id2); soTest2.setFieldVL(sfTxnSignature, saMultiSignature); - testMalformedSigningAccount(soTest2, false); - }*/ + testMalformedSigningAccount(soTest2, true); // serializes OK now + + // But validation-layer helpers reject it + soTest2.applyTemplateFromSField(sfSigner); + BEAST_EXPECT(!isLeafSigner(soTest2)); + BEAST_EXPECT(!isNestedSigner(soTest2)); + BEAST_EXPECT(!isValidSignerEntry(soTest2)); + } { // Test case 3. Extra sfAmount in SigningAccount. STObject soTest3(sfSigner);