Added user input max ledger seq offset limit config (#256)

- Added new config for max input ledger offset inside contract section.
- Updated implementation of getting and updating patch config inside node and c contracts.
- Skip inputs if max ledger offset exceeds, when handling user inputs and nup messages.
This commit is contained in:
Chalith Desaman
2021-02-24 09:19:36 +05:30
committed by GitHub
parent 137c199b07
commit 363116fc2a
6 changed files with 41 additions and 7 deletions

View File

@@ -176,6 +176,14 @@ namespace usr
uint64_t max_lcl_seq_no;
if (parser.extract_input_container(input_data, nonce, max_lcl_seq_no, input_container) != -1)
{
const p2p::sequence_hash lcl_id = ledger::ctx.get_lcl_id();
// Ignore the input if the max ledger seq number specified is beyond the max offeset.
if (conf::cfg.contract.max_input_ledger_offset != 0 && max_lcl_seq_no > lcl_id.seq_no + conf::cfg.contract.max_input_ledger_offset)
{
send_input_status(parser, user.session, msg::usrmsg::STATUS_REJECTED, msg::usrmsg::REASON_MAX_LEDGER_OFFSET_EXCEEDED, sig);
return -1;
}
// Check for max nonce size.
if (nonce.size() > MAX_INPUT_NONCE_SIZE)
{
@@ -384,6 +392,13 @@ namespace usr
const char *validate_user_input_submission(const std::string &user_pubkey, const usr::extracted_user_input &extracted_input,
const uint64_t lcl_seq_no, size_t &total_input_size, std::string &hash, util::buffer_view &input)
{
// Ignore the input if the max ledger seq number specified is beyond the max offeset.
if (conf::cfg.contract.max_input_ledger_offset != 0 && extracted_input.max_lcl_seq_no > lcl_seq_no + conf::cfg.contract.max_input_ledger_offset)
{
LOG_DEBUG << "User input bad max ledger seq beyond the max offset.";
return msg::usrmsg::REASON_MAX_LEDGER_OFFSET_EXCEEDED;
}
// Ignore the input if our ledger has passed the input TTL.
if (extracted_input.max_lcl_seq_no <= lcl_seq_no)
{