Go ist eine stark typisierte Sprache, sie vermeidet Fehler.
Ich habe fälschlicherweise angenommen, dass Go Ganzzahlüberläufe verarbeitet, und einen Fehler gemeldet.
Hier ist die perfekte Welt, in der alles wie erwartet funktioniert
a := int64(42) b := uint8(a) fmt.Println(b) // 42
Was bedeutet also der folgende Code
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) // ?
Hier ist die Lösung
Spoiler: Es funktioniert nicht wie erwartet, oder zumindest nicht so, wie wir es erwarten könnten.
Hier führt Go also eine stille Konvertierung durch, natürlich kann der Wert nicht in den bereitgestellten Ganzzahltypen gespeichert werden, aber es liegt überhaupt kein Fehler vor.
Es gibt Konsequenzen: CWE-190
Aus diesem Grund hat gosec einen Linter zur Verfügung gestellt, der sich auf die Verbesserung der Sicherheit in Go konzentriert, um das Problem zu erkennen: den Linter G115
Die G115-Linter-Idee war gut.
Aber es wurde leider mit einigen falschen Problemen zusammengeführt, die jetzt behoben werden, bis auf ein paar.
Das Problem wird massiv, nachdem gosec v2.21.0 in golangci-lint integriert wurde
Viele Menschen deaktivierten Gosec G115 aufgrund der Fehlalarme und des Lärms, den es im CI verursachte
Jetzt haben leider viele Leute den G115-Checker deaktiviert, Sie können ihn leicht auf GitHub sehen
Das obige ist der detaillierte Inhalt vonÜber das Gosec-G-Drama oder darüber, wie ich mit dem Integer-Konvertierungsüberlauf in Go konfrontiert wurde. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!