Skip to content

Commit bf93227

Browse files
committed
fix: RGBFromString() maybe input overflow int value
1 parent 1905566 commit bf93227

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

color_rgb.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -156,17 +156,17 @@ func RGBFromString(rgb string, isBg ...bool) RGBColor {
156156
return emptyRGBColor
157157
}
158158

159-
var ar [3]int
159+
var ar [3]uint8
160160
for i, val := range ss {
161161
iv, err := strconv.Atoi(val)
162-
if err != nil {
162+
if err != nil || !isValidUint8(iv) {
163163
return emptyRGBColor
164164
}
165165

166-
ar[i] = iv
166+
ar[i] = uint8(iv)
167167
}
168168

169-
return RGB(uint8(ar[0]), uint8(ar[1]), uint8(ar[2]), isBg...)
169+
return RGB(ar[0], ar[1], ar[2], isBg...)
170170
}
171171

172172
// Set terminal by rgb/true color code

color_rgb_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ func TestRGBFromString(t *testing.T) {
9898

9999
c = RGBFromString("170,187,error")
100100
is.Equal("msg", c.Sprint("msg"))
101+
102+
c = RGBFromString("170,-187,-34")
103+
is.Equal("msg", c.Sprint("msg"))
101104
}
102105

103106
func TestHexToRGB(t *testing.T) {

utils.go

+5
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ func debugf(f string, v ...interface{}) {
184184
}
185185
}
186186

187+
// equals: return ok ? val1 : val2
188+
func isValidUint8(val int) bool {
189+
return val >= 0 && val < 256
190+
}
191+
187192
// equals: return ok ? val1 : val2
188193
func compareVal(ok bool, val1, val2 uint8) uint8 {
189194
if ok {

0 commit comments

Comments
 (0)