allow overflow in imaging

This commit is contained in:
tobi 2024-09-02 15:08:07 +02:00
parent 666b8bc4f2
commit 8db3d6b700

View file

@ -399,25 +399,9 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
g16 := uint16(s[1]) g16 := uint16(s[1])
b16 := uint16(s[2]) b16 := uint16(s[2])
a16 := uint16(a) a16 := uint16(a)
d[0] = uint8(r16 * 0xff / a16) // #nosec G115 -- Overflow desired.
d0 := r16 * 0xff / a16 d[1] = uint8(g16 * 0xff / a16) // #nosec G115 -- Overflow desired.
if d0 > math.MaxUint8 { d[2] = uint8(b16 * 0xff / a16) // #nosec G115 -- Overflow desired.
panic("overflow d0")
}
d1 := g16 * 0xff / a16
if d1 > math.MaxUint8 {
panic("overflow d1")
}
d2 := b16 * 0xff / a16
if d2 > math.MaxUint8 {
panic("overflow d2")
}
d[0] = uint8(d0) // #nosec G115 -- Just checked.
d[1] = uint8(d1) // #nosec G115 -- Just checked.
d[2] = uint8(d2) // #nosec G115 -- Just checked.
d[3] = a d[3] = a
} }
j += 4 j += 4
@ -447,25 +431,9 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
g32 := uint32(s[2])<<8 | uint32(s[3]) g32 := uint32(s[2])<<8 | uint32(s[3])
b32 := uint32(s[4])<<8 | uint32(s[5]) b32 := uint32(s[4])<<8 | uint32(s[5])
a32 := uint32(s[6])<<8 | uint32(s[7]) a32 := uint32(s[6])<<8 | uint32(s[7])
d[0] = uint8((r32 * 0xffff / a32) >> 8) // #nosec G115 -- Overflow desired.
d0 := (r32 * 0xffff / a32) >> 8 d[1] = uint8((g32 * 0xffff / a32) >> 8) // #nosec G115 -- Overflow desired.
if d0 > math.MaxUint8 { d[2] = uint8((b32 * 0xffff / a32) >> 8) // #nosec G115 -- Overflow desired.
panic("overflow d0")
}
d1 := (g32 * 0xffff / a32) >> 8
if d1 > math.MaxUint8 {
panic("overflow d1")
}
d2 := (b32 * 0xffff / a32) >> 8
if d2 > math.MaxUint8 {
panic("overflow d2")
}
d[0] = uint8(d0) // #nosec G115 -- Just checked.
d[1] = uint8(d1) // #nosec G115 -- Just checked.
d[2] = uint8(d2) // #nosec G115 -- Just checked.
} }
d[3] = a d[3] = a
j += 4 j += 4
@ -546,9 +514,6 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
} else { } else {
r = ^(r >> 31) r = ^(r >> 31)
} }
if r > math.MaxUint8 {
panic("overflow r")
}
g := yy1 - 22554*cb1 - 46802*cr1 g := yy1 - 22554*cb1 - 46802*cr1
if uint32(g)&0xff000000 == 0 { if uint32(g)&0xff000000 == 0 {
@ -556,9 +521,6 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
} else { } else {
g = ^(g >> 31) g = ^(g >> 31)
} }
if g > math.MaxUint8 {
panic("overflow g")
}
b := yy1 + 116130*cb1 b := yy1 + 116130*cb1
if uint32(b)&0xff000000 == 0 { if uint32(b)&0xff000000 == 0 {
@ -566,14 +528,11 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
} else { } else {
b = ^(b >> 31) b = ^(b >> 31)
} }
if b > math.MaxUint8 {
panic("overflow b")
}
d := dst[j : j+4 : j+4] d := dst[j : j+4 : j+4]
d[0] = uint8(r) // #nosec G115 -- Just checked. d[0] = uint8(r) // #nosec G115 -- Overflow desired.
d[1] = uint8(g) // #nosec G115 -- Just checked. d[1] = uint8(g) // #nosec G115 -- Overflow desired.
d[2] = uint8(b) // #nosec G115 -- Just checked. d[2] = uint8(b) // #nosec G115 -- Overflow desired.
d[3] = 0xff d[3] = 0xff
iy++ iy++
@ -610,24 +569,9 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
d := dst[j : j+4 : j+4] d := dst[j : j+4 : j+4]
switch a16 { switch a16 {
case 0xffff: case 0xffff:
d0 := r16 >> 8 d[0] = uint8(r16 >> 8) // #nosec G115 -- Overflow desired.
if d0 > math.MaxUint8 { d[1] = uint8(g16 >> 8) // #nosec G115 -- Overflow desired.
panic("overflow d0") d[2] = uint8(b16 >> 8) // #nosec G115 -- Overflow desired.
}
d1 := g16 >> 8
if d1 > math.MaxUint8 {
panic("overflow d1")
}
d2 := b16 >> 8
if d2 > math.MaxUint8 {
panic("overflow d2")
}
d[0] = uint8(d0) // #nosec G115 -- Just checked.
d[1] = uint8(d1) // #nosec G115 -- Just checked.
d[2] = uint8(d2) // #nosec G115 -- Just checked.
d[3] = 0xff d[3] = 0xff
case 0: case 0:
d[0] = 0 d[0] = 0
@ -635,30 +579,10 @@ func (s *scanner) scan(x1, y1, x2, y2 int, dst []uint8) {
d[2] = 0 d[2] = 0
d[3] = 0 d[3] = 0
default: default:
d0 := ((r16 * 0xffff) / a16) >> 8 d[0] = uint8(((r16 * 0xffff) / a16) >> 8) // #nosec G115 -- Overflow desired.
if d0 > math.MaxUint8 { d[1] = uint8(((g16 * 0xffff) / a16) >> 8) // #nosec G115 -- Overflow desired.
panic("overflow d0") d[2] = uint8(((b16 * 0xffff) / a16) >> 8) // #nosec G115 -- Overflow desired.
} d[3] = uint8(a16 >> 8) // #nosec G115 -- Overflow desired.
d1 := ((g16 * 0xffff) / a16) >> 8
if d1 > math.MaxUint8 {
panic("overflow d1")
}
d2 := ((b16 * 0xffff) / a16) >> 8
if d2 > math.MaxUint8 {
panic("overflow d2")
}
d3 := a16 >> 8
if d3 > math.MaxUint8 {
panic("overflow d3")
}
d[0] = uint8(d0) // #nosec G115 -- Just checked.
d[1] = uint8(d1) // #nosec G115 -- Just checked.
d[2] = uint8(d2) // #nosec G115 -- Just checked.
d[3] = uint8(d3) // #nosec G115 -- Just checked.
} }
j += 4 j += 4
} }