github-vet / github-vet/rangeloop-pointer-findings

sarahc0nn0r/ultranet: backend/lib/server.go; 6 LoC

Open
#7,568 0 comments 0 reactions 0 assignees View on GitHub
fresh tiny
Dominant language
No language data
Stars
0
Forks
0
PR merge metrics
PR metrics pending

Description

Found a possible issue in [sarahc0nn0r/ultranet](https://www.github.com/sarahc0nn0r/ultranet) at [backend/lib/server.go](https://github.com/sarahc0nn0r/ultranet/blob/45bb70e1d26173e7427c0eedbfb7c8d0d37d4837/backend/lib/server.go#L843-L848)

Below is the message reported by the analyzer for this snippet of code. Beware that the analyzer only reports the first
issue it finds, so please do not limit your consideration to the contents of the below message.

> function call which takes a reference to blockHash at line 846 may start a goroutine

[Click here to see the code in its original context.](https://github.com/sarahc0nn0r/ultranet/blob/45bb70e1d26173e7427c0eedbfb7c8d0d37d4837/backend/lib/server.go#L843-L848)

Click here to show the 6 line(s) of Go which triggered the analyzer.

```go
for blockHash, serverMessage := range srv.requestedBlocks {
if serverMessage.Peer != nil && serverMessage.Peer.ID == pp.ID {
delete(srv.requestedBlocks, blockHash)
srv.inventoryBeingProcessed.DeleteBlockHash(&blockHash)
}
}

```

Click here to show extra information the analyzer produced.

```
The following paths through the callgraph could lead to a goroutine:
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (QueueMessageWithEncoding, 3)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_loop, 4) -> (IPToNetAddr, 2) -> (HostToNetAddress, 3)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_negotiateVersion, 3)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 0) -> (Bytea64, 1) -> (initChainState, 0) -> (flushToDB, 0) -> (dbStoreBlockNode, 2) -> (Header, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (NewReader, 6) -> (readFilterBlock, 1) -> (readRawBlock, 2) -> (NewLogger, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (NotifyNewTransactions, 1) -> (NotifyNewTransactionsAsync, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Dial, 1) -> (Fail, 0) -> (NewClient, 3) -> (HandleChannelOpen, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Connect, 1) -> (Dial, 1) -> (Fail, 0) -> (NewClient, 3) -> (HandleChannelOpen, 1)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (remove, 1) -> (EvictNS, 1) -> (remove, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_connectPeer, 2) -> (_logVersionSuccess, 0) -> (sendVerack, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (generateBlocks, 1) -> (submitBlock, 1) -> (UpdateBlockTime, 1) -> (checkConnectBlock, 4)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (finish, 0) -> (computeCompaction, 0) -> (logf, 5) -> (Pow, 2) -> (solveBlock, 1)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (Release, 0) -> (releaseNB, 0) -> (addFileRef, 2) -> (delete, 5)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (BroadcastTxn, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handleControlMessages, 1) -> (_handleBitcoinManagerUpdate, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (Errorf, 2) -> (printf, 3) -> (output, 5) -> (putBuffer, 1)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (NewReader, 6) -> (readFilterBlock, 1) -> (TestKV, 0) -> (NewLogger, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (TestIter, 3) -> (Release, 0) -> (releaseNB, 0) -> (mpoolPut, 1) -> (delete, 5)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (finish, 0) -> (computeCompaction, 0) -> (logf, 5) -> (Pow, 2) -> (solveBlock, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (Release, 0) -> (releaseNB, 0) -> (addFileRef, 2) -> (Delete, 2)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (Next, 0) -> (post, 0) -> (PostFn, 1) -> (flushDaemon, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (handleQuery, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (DoDBTesting, 1) -> (Release, 0) -> (releaseNB, 0) -> (addFileRef, 2) -> (delete, 5)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handleHeaderBundle, 2) -> (headerTip, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (Get, 1) -> (CompareAndSwapUint32, 3) -> (num, 1) -> (contains, 3)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (Next, 0) -> (post, 0) -> (PostFn, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (DoIteratorTesting, 1) -> (SeekKey, 1) -> (post, 0) -> (PostFn, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (NotifyBlocks, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (newTestingDB, 3) -> (HaveOccurred, 0) -> (openDB, 1) -> (mCompaction, 0) -> (NewBufferPool, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_loop, 4) -> (IPToNetAddr, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Dial, 1) -> (Fail, 0) -> (NewClient, 3)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Connect, 1) -> (Dial, 1) -> (Fail, 0) -> (NewClient, 3) -> (HandleChannelOpen, 1) -> (forward, 3)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (printWithFileLine, 5) -> (output, 5) -> (AddInt64, 2)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (Release, 0) -> (releaseNB, 0) -> (addFileRef, 2) -> (Delete, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Connect, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handlePeerMessages, 1) -> (_handleInv, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handlePeerMessages, 1) -> (_handleInv, 2) -> (GetListings, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_processTransaction, 6) -> (BroadcastTransaction, 1) -> (_addNewTxnAndRelay, 4)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (initChainState, 0) -> (flushToDB, 0) -> (dbStoreBlockNode, 2) -> (Header, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (newTestingDB, 3) -> (HaveOccurred, 0) -> (openDB, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (OffsetOf, 1) -> (newErrCorruptedBH, 2) -> (blockKind, 1) -> (NewLogger, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (handleFailedConn, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handleHeaderBundle, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (ProcessBlock, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (Shutdown, 0) -> (cleanup, 0) -> (drop, 0) -> (newErrInternalKeyCorrupted, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (Close, 0) -> (CloseHandle, 1) -> (error, 1) -> (FileType, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_loop, 4)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Accept, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (handleBlockMsg, 1) -> (BlockLocator, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Dial, 1) -> (Fail, 0) -> (NewClient, 3) -> (HandleChannelOpen, 1) -> (forward, 3)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (SeedFromDNS, 4)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handleControlMessages, 1) -> (_handleBitcoinManagerUpdate, 1) -> (LatestHeaderLocator, 0)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_handleGetAddrMessage, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (handleBlockMsg, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (_mineAndProcessSingleBlock, 1) -> (float32, 1)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (SendMessage, 2) -> (NewEncoder, 1) -> (updateUserFields, 2) -> (UtxoEntryToResponse, 2)
(DeleteBlockHash, 1) -> (Lock, 0) -> (lock, 2) -> (close, 1) -> (New, 2) -> (wsReconnectHandler, 0) -> (Done, 0) -> (Disconnected, 0) -> (Connect, 1) -> (Dial, 1) -> (Fail, 0) -> (NewClient, 3)
(DeleteBlockHash, 1) -> (deleteInvVect, 1) -> (Remove, 1) -> (DeleteSubKey, 1) -> (Close, 0) -> (CloseHandle, 1) -> (error, 1) -> (FileType, 1)

```

Leave a reaction on this issue to contribute to the project by classifying this instance as a **Bug** :-1:, **Mitigated** :+1:, or **Desirable Behavior** :rocket:
See the descriptions of the classifications [here](https://github.com/github-vet/rangeclosure-findings#how-can-i-help) for more information.

commit ID: 45bb70e1d26173e7427c0eedbfb7c8d0d37d4837

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.