Go は強力に型指定された言語であり、間違いを避けることができます。
私は Go が整数オーバーフローを処理していると誤って思い込み、エラーを報告しました。
ここはすべてが期待通りに機能する完璧な世界です
a := int64(42) b := uint8(a) fmt.Println(b) // 42
では、次のコードは何をするのでしょうか
a = 255 + 1 // 255 is the higher value an uint8 can reach b = uint8(a) fmt.Println(b) // ? a = -1 b = uint8(a) fmt.Println(b) // ?
これが解決策です
ネタバレ: 期待どおりには機能しません。少なくとも期待どおりには機能しません。
ここで Go はサイレント変換を行っています。もちろん、提供された整数型に値を格納することはできませんが、エラーはまったくありません。
結果はあります: CWE-190
このため、Gosec リンターは Go のセキュリティの向上に重点を置き、問題を検出するためのリンター G115 を提供しました
G115 リンターのアイデアは良かったです。
しかし、残念ながら、いくつかの誤った問題と統合されており、現在は一部を除いて解決されています。
gosec v2.21.0 が golangci-lint にマージされた後、問題は大規模になります
多くの人が gosec G115 を無効にしました。これは、CI に誤検知とノイズがもたらされていたためです
現在、多くの人が残念ながら G115 チェッカーを無効にしていますが、GitHub で簡単に確認できます
以上がGosec G ドラマについて、または Go で整数変換オーバーフローにどのように対処したかについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。