Skip to content

Commit ca9a493

Browse files
style: enable gosec linter (#1202)
Signed-off-by: Jonathan Oppenheimer <147infiniti@gmail.com> Signed-off-by: Jonathan Oppenheimer <jonathan.oppenheimer@avalabs.org> Co-authored-by: Stephen Buttolph <stephen@avalabs.org>
1 parent b1a920f commit ca9a493

File tree

12 files changed

+89
-27
lines changed

12 files changed

+89
-27
lines changed

.avalanche-golangci.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ linters:
6161
- goconst
6262
- gocritic
6363
- goprintffuncname
64-
# - gosec
64+
- gosec
6565
- govet
6666
- importas
6767
- ineffassign
@@ -244,3 +244,12 @@ linters:
244244
- common-false-positives
245245
- legacy
246246
- std-error-handling
247+
rules:
248+
# Exclude some linters from running on test files.
249+
# 1. Exclude the top level tests/ directory.
250+
# 2. Exclude any file prefixed with test_ in any directory.
251+
# 3. Exclude any directory suffixed with test.
252+
# 4. Exclude any file suffixed with _test.go.
253+
- path: "(^tests/)|(^(.*/)*test_[^/]*\\.go$)|(.*test/.*)|(.*_test\\.go$)"
254+
linters:
255+
- gosec

cmd/simulator/metrics/metrics.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"github.com/ava-labs/libevm/log"
1515
"github.com/prometheus/client_golang/prometheus"
1616
"github.com/prometheus/client_golang/prometheus/promhttp"
17+
18+
"github.com/ava-labs/coreth/rpc"
1719
)
1820

1921
type Metrics struct {
@@ -66,7 +68,8 @@ func (m *Metrics) Serve(ctx context.Context, metricsPort string, metricsEndpoint
6668
ctx, cancel := context.WithCancel(ctx)
6769
// Create a prometheus server to expose individual tx metrics
6870
server := &http.Server{
69-
Addr: ":" + metricsPort,
71+
Addr: ":" + metricsPort,
72+
ReadHeaderTimeout: rpc.DefaultHTTPTimeouts.ReadHeaderTimeout,
7073
}
7174

7275
// Start up go routine to listen for SIGINT notifications to gracefully shut down server

core/blockchain_ext_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,7 @@ func ReexecCorruptedStateTest(t *testing.T, create ReexecTestFunc) {
16781678
require.NoError(t, blockchain.Accept(chain[0]))
16791679

16801680
// Simulate a crash by updating the acceptor tip
1681-
blockchain.writeBlockAcceptedIndices(chain[1])
1681+
require.NoError(t, blockchain.writeBlockAcceptedIndices(chain[1]))
16821682
blockchain.Stop()
16831683

16841684
// Restart blockchain with existing state

core/extstate/database_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ func (fs *fuzzState) deleteStorage(accountIndex int, storageIndexInput uint64) {
311311
func FuzzTree(f *testing.F) {
312312
f.Fuzz(func(t *testing.T, randSeed int64, byteSteps []byte) {
313313
fuzzState := newFuzzState(t)
314-
rand := rand.New(rand.NewSource(randSeed))
314+
rand := rand.New(rand.NewSource(randSeed)) // this isn't a good fuzz test, but it is reproducible.
315315

316316
for range 10 {
317317
fuzzState.createAccount()

network/network.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,11 @@ func (n *network) SendAppRequestAny(ctx context.Context, minVersion *version.App
177177

178178
n.lock.Lock()
179179
defer n.lock.Unlock()
180-
if nodeID, ok := n.peers.GetAnyPeer(minVersion); ok {
180+
nodeID, ok, err := n.peers.GetAnyPeer(minVersion)
181+
if err != nil {
182+
return ids.EmptyNodeID, err
183+
}
184+
if ok {
181185
return nodeID, n.sendAppRequest(ctx, nodeID, request, handler)
182186
}
183187

network/peer_tracker.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package network
55

66
import (
77
"math"
8-
"math/rand"
98
"time"
109

1110
"github.com/ava-labs/avalanchego/ids"
@@ -14,6 +13,8 @@ import (
1413
"github.com/ava-labs/libevm/log"
1514
"github.com/ava-labs/libevm/metrics"
1615

16+
"github.com/ava-labs/coreth/utils/rand"
17+
1718
safemath "github.com/ava-labs/avalanchego/utils/math"
1819
)
1920

@@ -66,17 +67,21 @@ func NewPeerTracker() *peerTracker {
6667

6768
// shouldTrackNewPeer returns true if we are not connected to enough peers.
6869
// otherwise returns true probabilistically based on the number of tracked peers.
69-
func (p *peerTracker) shouldTrackNewPeer() bool {
70+
func (p *peerTracker) shouldTrackNewPeer() (bool, error) {
7071
numResponsivePeers := p.responsivePeers.Len()
7172
if numResponsivePeers < desiredMinResponsivePeers {
72-
return true
73+
return true, nil
7374
}
7475
if len(p.trackedPeers) >= len(p.peers) {
7576
// already tracking all the peers
76-
return false
77+
return false, nil
7778
}
7879
newPeerProbability := math.Exp(-float64(numResponsivePeers) * newPeerConnectFactor)
79-
return rand.Float64() < newPeerProbability
80+
randomValue, err := rand.SecureFloat64()
81+
if err != nil {
82+
return false, err
83+
}
84+
return randomValue < newPeerProbability, nil
8085
}
8186

8287
// getResponsivePeer returns a random [ids.NodeID] of a peer that has responded
@@ -94,8 +99,12 @@ func (p *peerTracker) getResponsivePeer() (ids.NodeID, safemath.Averager, bool)
9499
return nodeID, peer.bandwidth, true
95100
}
96101

97-
func (p *peerTracker) GetAnyPeer(minVersion *version.Application) (ids.NodeID, bool) {
98-
if p.shouldTrackNewPeer() {
102+
func (p *peerTracker) GetAnyPeer(minVersion *version.Application) (ids.NodeID, bool, error) {
103+
shouldTrackNewPeer, err := p.shouldTrackNewPeer()
104+
if err != nil {
105+
return ids.NodeID{}, false, err
106+
}
107+
if shouldTrackNewPeer {
99108
for nodeID := range p.peers {
100109
// if minVersion is specified and peer's version is less, skip
101110
if minVersion != nil && p.peers[nodeID].version.Compare(minVersion) < 0 {
@@ -106,7 +115,7 @@ func (p *peerTracker) GetAnyPeer(minVersion *version.Application) (ids.NodeID, b
106115
continue
107116
}
108117
log.Debug("peer tracking: connecting to new peer", "trackedPeers", len(p.trackedPeers), "nodeID", nodeID)
109-
return nodeID, true
118+
return nodeID, true, nil
110119
}
111120
}
112121
var (
@@ -115,18 +124,23 @@ func (p *peerTracker) GetAnyPeer(minVersion *version.Application) (ids.NodeID, b
115124
random bool
116125
averager safemath.Averager
117126
)
118-
if rand.Float64() < randomPeerProbability {
127+
randomValue, err := rand.SecureFloat64()
128+
switch {
129+
case err != nil:
130+
return ids.NodeID{}, false, err
131+
case randomValue < randomPeerProbability:
119132
random = true
120133
nodeID, averager, ok = p.getResponsivePeer()
121-
} else {
134+
default:
122135
nodeID, averager, ok = p.bandwidthHeap.Pop()
123136
}
124137
if ok {
125138
log.Debug("peer tracking: popping peer", "nodeID", nodeID, "bandwidth", averager.Read(), "random", random)
126-
return nodeID, true
139+
return nodeID, true, err
127140
}
128141
// if no nodes found in the bandwidth heap, return a tracked node at random
129-
return p.trackedPeers.Peek()
142+
nodeID, ok = p.trackedPeers.Peek()
143+
return nodeID, ok, nil
130144
}
131145

132146
func (p *peerTracker) TrackPeer(nodeID ids.NodeID) {

network/peer_tracker_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ func TestPeerTracker(t *testing.T) {
2828

2929
// Expect requests to go to new peers until we have desiredMinResponsivePeers responsive peers.
3030
for i := 0; i < desiredMinResponsivePeers+numExtraPeers/2; i++ {
31-
peer, ok := p.GetAnyPeer(nil)
31+
peer, ok, err := p.GetAnyPeer(nil)
32+
require.NoError(err)
3233
require.True(ok)
3334
require.NotNil(peer)
3435

@@ -54,7 +55,8 @@ func TestPeerTracker(t *testing.T) {
5455
// Expect requests to go to responsive or new peers, so long as they are available
5556
numRequests := 50
5657
for i := 0; i < numRequests; i++ {
57-
peer, ok := p.GetAnyPeer(nil)
58+
peer, ok, err := p.GetAnyPeer(nil)
59+
require.NoError(err)
5860
require.True(ok)
5961
require.NotNil(peer)
6062

@@ -78,7 +80,8 @@ func TestPeerTracker(t *testing.T) {
7880
}
7981

8082
// Requests should fall back on non-responsive peers when no other choice is left
81-
peer, ok := p.GetAnyPeer(nil)
83+
peer, ok, err := p.GetAnyPeer(nil)
84+
require.NoError(err)
8285
require.True(ok)
8386
require.NotNil(peer)
8487

plugin/evm/customtypes/header_ext_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func allFieldsSet[T interface {
142142
if fieldValue.Kind() == reflect.Ptr {
143143
require.Falsef(t, fieldValue.IsNil(), "field %q is nil", field.Name)
144144
}
145-
fieldValue = reflect.NewAt(fieldValue.Type(), unsafe.Pointer(fieldValue.UnsafeAddr())).Elem() //nolint:gosec
145+
fieldValue = reflect.NewAt(fieldValue.Type(), unsafe.Pointer(fieldValue.UnsafeAddr())).Elem()
146146
}
147147

148148
switch f := fieldValue.Interface().(type) {

plugin/evm/message/block_request_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,10 @@ func TestMarshalBlockResponse(t *testing.T) {
4747
_, err := rand.Read(blocksBytes[i])
4848
require.NoError(t, err)
4949
}
50-
5150
blockResponse := BlockResponse{
5251
Blocks: blocksBytes,
5352
}
54-
5553
base64BlockResponse := "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"
56-
5754
blockResponseBytes, err := Codec.Marshal(Version, blockResponse)
5855
require.NoError(t, err)
5956
require.Equal(t, base64BlockResponse, base64.StdEncoding.EncodeToString(blockResponseBytes))

plugin/evm/message/code_request_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func TestMarshalCodeResponse(t *testing.T) {
3737
// generate some random code data
3838
// set random seed for deterministic random
3939
rand := rand.New(rand.NewSource(1))
40+
4041
codeData := make([]byte, 50)
4142
_, err := rand.Read(codeData)
4243
require.NoError(t, err)
@@ -46,7 +47,6 @@ func TestMarshalCodeResponse(t *testing.T) {
4647
}
4748

4849
base64CodeResponse := "AAAAAAABAAAAMlL9/AchgmVPFj9fD5piHXKVZsdNEAN8TXu7BAfR4sZJgYVa2GgdDYbR6R4AFnk5y2aU"
49-
5050
codeResponseBytes, err := Codec.Marshal(Version, codeResponse)
5151
require.NoError(t, err)
5252
require.Equal(t, base64CodeResponse, base64.StdEncoding.EncodeToString(codeResponseBytes))

0 commit comments

Comments
 (0)