Mengenai drama gosec G, atau cara saya menghadapi limpahan penukaran integer kembali dalam Go

WBOY
Lepaskan: 2024-09-10 08:30:32
asal
891 orang telah melayarinya

About the gosec G drama, or how I faced back integer conversion overflow in Go

Go ialah bahasa yang ditaip kuat, ia mengelak daripada membuat kesilapan.

Saya tersilap mengandaikan Go sedang mengendalikan limpahan integer dan melaporkan ralat.

Inilah dunia yang sempurna di mana segala-galanya berfungsi seperti yang diharapkan

a := int64(42)
b := uint8(a)
fmt.Println(b) // 42
Salin selepas log masuk

Jadi apakah kod berikut

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) // ?
Salin selepas log masuk

Inilah penyelesaiannya

Spoiler: ia tidak berfungsi seperti yang diharapkan, atau sekurang-kurangnya seperti yang kita jangkakan.

Jadi di sini Go sedang melakukan penukaran senyap, sudah tentu ia tidak boleh menyimpan nilai dalam jenis integer yang disediakan, tetapi tiada ralat sama sekali.

Terdapat akibat: CWE-190

  • Bayangkan anda mengakses sumber dengan pengecamnya, tetapi anda perlu menukar daripada jenis integer kepada yang lain, anda boleh membenarkan akses kepada sumber lain.

Disebabkan ini, gosec linter memfokuskan pada meningkatkan keselamatan dalam Go, menyediakan linter untuk mengesan isu: linter G115

Idea linter G115 adalah bagus.

Tetapi malangnya ia telah digabungkan dengan beberapa isu palsu, yang kini ditangani, kecuali beberapa isu.

Masalah menjadi besar selepas gosec v2.21.0 digabungkan menjadi golangci-lint

Ramai orang melumpuhkan gosec G115, kerana positif palsu dan bunyi bising yang dibawanya ke CI

Malangnya sekarang ramai orang telah melumpuhkan penyemak G115, anda boleh melihatnya dengan mudah di GitHub

Atas ialah kandungan terperinci Mengenai drama gosec G, atau cara saya menghadapi limpahan penukaran integer kembali dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan