kardiachain/go-kardia

Certik review 09/11

ngdlong91 opened this issue · 1 comments

Review report

PRE-KardiaChain-09_11_2020.html.zip

Created issues:

[CodeReview] Moves error into dedicated files #76
[CodeReview] Removes code panics #75
[CodeReview] Removes math/rand #74

Tasks

  • Use of weak random number generator

The code base is using math/rand, the random generation is weak and its not suited for sensitive implementations.
The implementation is part of the tool/ folder and it is part of the testing suite.
This exhibit is more of a warning rather than a critical finding. It serves as a reminder to avoid math.rand

PR #74

  • Code Panic

The code panics in various places without making sure that running processes are terminated properly.
This exhibit is just a example of the identified issue. The issue exists in various places within the codebase and its amplified by the fact that we are going to be running two main-net chains.

Reply: Code panic at the moments panic while starting node/network, wrong state data or consensus errors
For this milestones, we are sure all the panic code sections well-handed in its case.

  • Unsafe Pointer Access

Usafe memory access as the code base makes assumption that tx will be never nil.
This exhibit is a example, and while the code base follows a good handling of those issues for the most part of the code, some parts need refactoring for a more secure outcome under any case.
dbd705c

  • Function Visibility

The function is public and although it does not need to be.
ac32f8a

  • Redundant constant declaration

We recommend not declaring return variables on the functions signature.

  • Redundant Code

Redundant variable declaration.
KAR-05: Redundant const declaration > 45f993c
KAR-06-13: 4ed5e4b

  • Passing lock by value

Function is passing lock by value as BlockChain contains a mutex.
fc477ee

  • Defer usage

It is recommended to use defer in cases that are non access specific.
KAR-06: Return variable declaration >61c727f

Issues by severity

Critical

ID Title Example Status
KAR-01 Use of weak random number generator https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/tool/tx_generator.go#L284

Major

ID Title Example Status
KAR-02 Code Panic https://github.com/kardiachain/go-kardiamain/blob/ccf7672814d10ada7158803282dc873bb2b35523/kai/state/statedb.go#L576

Minor

ID Title Example Status
KAR-03 Unsafe Pointer Access https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/mainchain/tx_pool/tx_pool.go#L633

Informational

ID Title Example Status
KAR-04 Function Visibility https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/tool/tx_generator.go#L284
KAR-05 Redundant constant declaration https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/tool/tx_generator.go#L284
KAR-06 Return variable declaration https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/consensus/types/height_vote_set.go#L120
KAR-07 Redundant Code https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/lib/events/events.go#L56
KAR-08 Passing lock by value https://github.com/kardiachain/go-kardiamain/blob/6b2bec4fa98a80650280aaeb2d913f6c5fef8dad/lib/events/events.go#L56
KAR-09 Defer Usage

P1 Completed