From adfcffa5d7e4168948df60b73e189e241af387eb Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 20 Apr 2025 21:18:23 +0530 Subject: [PATCH] Various fixes to make CodeQL happy --- tools/tui/loop/key-encoding.go | 24 ++++++++++++------------ tools/tui/sgr/insert-formatting.go | 8 ++++++-- tools/utils/paths.go | 2 +- tools/utils/shlex/ansi_c_escapes.go | 3 +-- tools/utils/style/indent-and-wrap.go | 10 +++++++--- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/tools/tui/loop/key-encoding.go b/tools/tui/loop/key-encoding.go index 9a0bf9bb4..b056cf319 100644 --- a/tools/tui/loop/key-encoding.go +++ b/tools/tui/loop/key-encoding.go @@ -144,25 +144,25 @@ func KeyEventFromCSI(csi string) *KeyEvent { csi = csi[:len(csi)-1] sections := strings.Split(csi, ";") - get_sub_sections := func(section string, missing int) []int { + get_sub_sections := func(section string, missing int32) []int32 { p := strings.Split(section, ":") - ans := make([]int, len(p)) + ans := make([]int32, len(p)) for i, x := range p { if x == "" { ans[i] = missing } else { - q, err := strconv.Atoi(x) + q, err := strconv.ParseUint(x, 10, 32) if err != nil { return nil } - ans[i] = q + ans[i] = int32(q) } } return ans } first_section := get_sub_sections(sections[0], 0) - second_section := []int{} - third_section := []int{} + second_section := []int32{} + third_section := []int32{} if len(sections) > 1 { second_section = get_sub_sections(sections[1], 1) } @@ -170,9 +170,9 @@ func KeyEventFromCSI(csi string) *KeyEvent { third_section = get_sub_sections(sections[2], 0) } var ans = KeyEvent{Type: PRESS, CSI: orig_csi} - var keynum int + var keynum int32 if val, ok := letter_trailer_to_csi_number_map[last_char]; ok { - keynum = val + keynum = int32(val) } else { if len(first_section) == 0 { return nil @@ -180,7 +180,7 @@ func KeyEventFromCSI(csi string) *KeyEvent { keynum = first_section[0] } - key_name := func(keynum int) string { + key_name := func(keynum int32) string { switch keynum { case 0: return "" @@ -190,11 +190,11 @@ func KeyEventFromCSI(csi string) *KeyEvent { } return "F3" default: - if val, ok := csi_number_to_functional_number_map[keynum]; ok { - keynum = val + if val, ok := csi_number_to_functional_number_map[int(keynum)]; ok { + keynum = int32(val) } ans := "" - if val, ok := functional_key_number_to_name_map[keynum]; ok { + if val, ok := functional_key_number_to_name_map[int(keynum)]; ok { ans = val } else { ans = string(rune(keynum)) diff --git a/tools/tui/sgr/insert-formatting.go b/tools/tui/sgr/insert-formatting.go index a92c7c3e8..51948c695 100644 --- a/tools/tui/sgr/insert-formatting.go +++ b/tools/tui/sgr/insert-formatting.go @@ -70,18 +70,22 @@ func (self *Color) FromNumber(n uint8) { self.Is_numbered, self.Red = true, n } +func as_uint8(x int) uint8 { + return uint8(uint(x) & 0xff) +} + func (self *Color) FromExtended(nums ...int) bool { switch nums[0] { case 5: if len(nums) > 1 { - self.Red = uint8(nums[1]) + self.Red = as_uint8(nums[1]) self.Is_numbered = true return true } case 2: if len(nums) > 3 { self.Is_numbered = false - self.Red, self.Green, self.Blue = uint8(nums[1]), uint8(nums[2]), uint8(nums[3]) + self.Red, self.Green, self.Blue = as_uint8(nums[1]), as_uint8(nums[2]), as_uint8(nums[3]) return true } } diff --git a/tools/utils/paths.go b/tools/utils/paths.go index 48b3e75eb..2af521bc8 100644 --- a/tools/utils/paths.go +++ b/tools/utils/paths.go @@ -69,7 +69,7 @@ func Abspath(path string) string { var KittyExe = sync.OnceValue(func() string { if kitty_pid := os.Getenv("KITTY_PID"); kitty_pid != "" { - if kp, err := strconv.Atoi(kitty_pid); err == nil { + if kp, err := strconv.ParseInt(kitty_pid, 10, 32); err == nil { if p, err := process.NewProcess(int32(kp)); err == nil { if exe, err := p.Exe(); err == nil && filepath.IsAbs(exe) && filepath.Base(exe) == "kitty" { return exe diff --git a/tools/utils/shlex/ansi_c_escapes.go b/tools/utils/shlex/ansi_c_escapes.go index 945c85c01..7e2d1f8bd 100644 --- a/tools/utils/shlex/ansi_c_escapes.go +++ b/tools/utils/shlex/ansi_c_escapes.go @@ -38,8 +38,7 @@ func is_oct_char(ch rune) bool { func (self *ansi_c) write_digits(base int) { if self.digit_idx > 0 { text := string(self.digits[:self.digit_idx]) - val, err := strconv.ParseUint(text, base, 32) - if err == nil { + if val, err := strconv.ParseUint(text, base, 32); err == nil && val <= 0x10ffff { self.output.WriteRune(rune(val)) } } diff --git a/tools/utils/style/indent-and-wrap.go b/tools/utils/style/indent-and-wrap.go index 9adf36a97..d961aeeae 100644 --- a/tools/utils/style/indent-and-wrap.go +++ b/tools/utils/style/indent-and-wrap.go @@ -35,6 +35,10 @@ func (self sgr_color) as_sgr(base int) string { return fmt.Sprintf("%d:2:%d:%d:%d", base+8, self.color.Red, self.color.Green, self.color.Blue) } +func as_uint8(x int) uint8 { + return uint8(uint(x) & 0xff) +} + func (self *sgr_color) from_extended(nums []int) bool { switch nums[0] { case 5: @@ -45,9 +49,9 @@ func (self *sgr_color) from_extended(nums []int) bool { case 2: if len(nums) > 3 { self.number = -1 - self.color.Red = uint8(nums[1]) - self.color.Green = uint8(nums[2]) - self.color.Blue = uint8(nums[3]) + self.color.Red = as_uint8(nums[1]) + self.color.Green = as_uint8(nums[2]) + self.color.Blue = as_uint8(nums[3]) return true } }