diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index e4105369a..4fb20cdfd 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -23,4 +23,5 @@ Special thanks to external contributors on this release: ### BUG FIXES: - [kv indexer] \#2912 don't ignore key when executing CONTAINS +- [mempool] \#2994 Don't allow txs with negative gas wanted - [p2p] \#2715 fix a bug where seeds don't disconnect from a peer after 3h diff --git a/mempool/mempool.go b/mempool/mempool.go index a64ce9188..404683158 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -490,11 +490,15 @@ func (mem *Mempool) ReapMaxBytesMaxGas(maxBytes, maxGas int64) types.Txs { return txs } totalBytes += int64(len(memTx.tx)) + aminoOverhead - // Check total gas requirement - if maxGas > -1 && totalGas+memTx.gasWanted > maxGas { + // Check total gas requirement. + // If maxGas is negative, skip this check. + // Since newTotalGas < masGas, which + // must be non-negative, it follows that this won't overflow. + newTotalGas := totalGas + memTx.gasWanted + if maxGas > -1 && newTotalGas > maxGas { return txs } - totalGas += memTx.gasWanted + totalGas = newTotalGas txs = append(txs, memTx.tx) } return txs