diff --git a/core/rawdb/database.go b/core/rawdb/database.go
index 353b7dce623d0ec475ca2351bdc9115456c6a466..838c084359ac8d5eea30b307c93e15358376362d 100644
--- a/core/rawdb/database.go
+++ b/core/rawdb/database.go
@@ -150,11 +150,10 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, freezer string, namespace st
 				}
 				// Database contains only older data than the freezer, this happens if the
 				// state was wiped and reinited from an existing freezer.
-			} else {
-				// Key-value store continues where the freezer left off, all is fine. We might
-				// have duplicate blocks (crash after freezer write but before kay-value store
-				// deletion, but that's fine).
 			}
+			// Otherwise, key-value store continues where the freezer left off, all is fine.
+			// We might have duplicate blocks (crash after freezer write but before key-value
+			// store deletion, but that's fine).
 		} else {
 			// If the freezer is empty, ensure nothing was moved yet from the key-value
 			// store, otherwise we'll end up missing data. We check block #1 to decide
@@ -167,9 +166,9 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, freezer string, namespace st
 					return nil, errors.New("ancient chain segments already extracted, please set --datadir.ancient to the correct path")
 				}
 				// Block #1 is still in the database, we're allowed to init a new feezer
-			} else {
-				// The head header is still the genesis, we're allowed to init a new feezer
 			}
+			// Otherwise, the head header is still the genesis, we're allowed to init a new
+			// feezer.
 		}
 	}
 	// Freezer is consistent with the key-value database, permit combining the two
diff --git a/core/vm/contracts.go b/core/vm/contracts.go
index 9b0ba09ed1842eda2ed312575bb3c26ab8e3ef5e..7d304613cedb5483c8f9dbec2b14afd8436d32e9 100644
--- a/core/vm/contracts.go
+++ b/core/vm/contracts.go
@@ -28,6 +28,8 @@ import (
 	"github.com/ethereum/go-ethereum/crypto/blake2b"
 	"github.com/ethereum/go-ethereum/crypto/bn256"
 	"github.com/ethereum/go-ethereum/params"
+
+	//lint:ignore SA1019 Needed for precompile
 	"golang.org/x/crypto/ripemd160"
 )
 
diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go
index b4a0c07dca907ed5d620ac5473cf3def6caa66fa..be003a60c95d2cc9b21c75b67489f4bd4e8b2787 100644
--- a/core/vm/contracts_test.go
+++ b/core/vm/contracts_test.go
@@ -29,7 +29,6 @@ import (
 // precompiledTest defines the input/output pairs for precompiled contract tests.
 type precompiledTest struct {
 	input, expected string
-	gas             uint64
 	name            string
 	noBenchmark     bool // Benchmark primarily the worst-cases
 }
@@ -418,6 +417,24 @@ func testPrecompiled(addr string, test precompiledTest, t *testing.T) {
 	})
 }
 
+func testPrecompiledOOG(addr string, test precompiledTest, t *testing.T) {
+	p := PrecompiledContractsIstanbul[common.HexToAddress(addr)]
+	in := common.Hex2Bytes(test.input)
+	contract := NewContract(AccountRef(common.HexToAddress("1337")),
+		nil, new(big.Int), p.RequiredGas(in)-1)
+	t.Run(fmt.Sprintf("%s-Gas=%d", test.name, contract.Gas), func(t *testing.T) {
+		_, err := RunPrecompiledContract(p, in, contract)
+		if err.Error() != "out of gas" {
+			t.Errorf("Expected error [out of gas], got [%v]", err)
+		}
+		// Verify that the precompile did not touch the input buffer
+		exp := common.Hex2Bytes(test.input)
+		if !bytes.Equal(in, exp) {
+			t.Errorf("Precompiled %v modified input data", addr)
+		}
+	})
+}
+
 func testPrecompiledFailure(addr string, test precompiledFailureTest, t *testing.T) {
 	p := PrecompiledContractsIstanbul[common.HexToAddress(addr)]
 	in := common.Hex2Bytes(test.input)
@@ -541,6 +558,13 @@ func BenchmarkPrecompiledBn256Add(bench *testing.B) {
 	}
 }
 
+// Tests OOG
+func TestPrecompiledModExpOOG(t *testing.T) {
+	for _, test := range modexpTests {
+		testPrecompiledOOG("05", test, t)
+	}
+}
+
 // Tests the sample inputs from the elliptic curve scalar multiplication EIP 213.
 func TestPrecompiledBn256ScalarMul(t *testing.T) {
 	for _, test := range bn256ScalarMulTests {
diff --git a/core/vm/stack.go b/core/vm/stack.go
index 4c1b9e80370709f359fb86ce439e7b7d7d86d25c..c9c3d07f4b6f8b6fe5c8b2af1d67a5cb97af4f2e 100644
--- a/core/vm/stack.go
+++ b/core/vm/stack.go
@@ -74,13 +74,6 @@ func (st *Stack) Back(n int) *big.Int {
 	return st.data[st.len()-n-1]
 }
 
-func (st *Stack) require(n int) error {
-	if st.len() < n {
-		return fmt.Errorf("stack underflow (%d <=> %d)", len(st.data), n)
-	}
-	return nil
-}
-
 // Print dumps the content of the stack
 func (st *Stack) Print() {
 	fmt.Println("### stack ###")