mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-04-14 05:38:37 +00:00
core/vm/runtime: don't overwrite user input with default value (#33510)
runtime.setDefaults was unconditionally assigning cfg.Random =
&common.Hash{}, which silently overwrote any caller-provided Random
value. This made it impossible to simulate a specific PREVRANDAO and
also forced post-merge rules whenever London was active, regardless of
the intended environment.
This change only initializes cfg.Random when it is nil, matching how
other fields in Config are defaulted. Existing callers that did not set
Random keep the same behavior (a non-nil zero hash still enables
post-merge semantics), while callers that explicitly set Random now get
their value respected.
This commit is contained in:
parent
4da1e29320
commit
527ea11e50
2 changed files with 18 additions and 1 deletions
|
|
@ -109,7 +109,9 @@ func setDefaults(cfg *Config) {
|
|||
if cfg.BlobBaseFee == nil {
|
||||
cfg.BlobBaseFee = big.NewInt(params.BlobTxMinBlobGasprice)
|
||||
}
|
||||
cfg.Random = &(common.Hash{})
|
||||
if cfg.Random == nil {
|
||||
cfg.Random = new(common.Hash)
|
||||
}
|
||||
}
|
||||
|
||||
// Execute executes the code using the input as call data during the execution.
|
||||
|
|
|
|||
|
|
@ -65,6 +65,21 @@ func TestDefaults(t *testing.T) {
|
|||
if cfg.BlockNumber == nil {
|
||||
t.Error("expected block number to be non nil")
|
||||
}
|
||||
if cfg.Random == nil {
|
||||
t.Error("expected Random to be non nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDefaultsPreserveRandom(t *testing.T) {
|
||||
h := common.HexToHash("0x01")
|
||||
cfg := &Config{Random: &h}
|
||||
setDefaults(cfg)
|
||||
if cfg.Random == nil {
|
||||
t.Fatal("expected Random to remain non-nil")
|
||||
}
|
||||
if *cfg.Random != h {
|
||||
t.Fatalf("expected Random to be preserved, got %x, want %x", *cfg.Random, h)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEVM(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue