Skip to content

Commit

Permalink
test: guarantee proper lifetime for temporary Rules object: (#4917)
Browse files Browse the repository at this point in the history
* Commit 01c37fe introduced a change to the STTx unit test where a local
  "defaultRules" object was created with a temporary inline "presets"
  value provided to the ctor. Rules::Impl stores a const ref to the
  presets provided to the ctor.  This particular call provided an inline
  temp variable, which goes out of scope as soon as the object is
  created. On Windows, attempting to use the presets (e.g. via the
  enabled() function) causes an access violation, which crashes the test
  run.
* An audit of the code indicates that all other instances of Rules use
  the Application's config.features list, which will have a sufficient
  lifetime.
  • Loading branch information
ximinez authored Feb 16, 2024
1 parent da68651 commit e74cb35
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/test/protocol/STTx_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1591,7 +1591,11 @@ class STTx_test : public beast::unit_test::suite
});
j.sign(keypair.first, keypair.second);

Rules defaultRules{{}};
// Rules store a reference to the presets. Create a local to guarantee
// proper lifetime.
std::unordered_set<uint256, beast::uhash<>> const presets;
Rules const defaultRules{presets};
BEAST_EXPECT(!defaultRules.enabled(featureExpandedSignerList));

unexpected(
!j.checkSign(STTx::RequireFullyCanonicalSig::yes, defaultRules),
Expand Down

0 comments on commit e74cb35

Please sign in to comment.