From 055ce47224d9ea2bd258f6f9de1fa591bf90a4de Mon Sep 17 00:00:00 2001 From: Joe Lim <50560759+joelim-work@users.noreply.github.com> Date: Mon, 4 Mar 2024 10:11:42 +1100 Subject: [PATCH] Fix crash if tags/marks contains invalid entry (#1614) * Fix crash if tags file contains invalid entry * Fix crash if marks file contains invalid entry --- nav.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/nav.go b/nav.go index 8acedde6..31788001 100644 --- a/nav.go +++ b/nav.go @@ -1868,9 +1868,12 @@ func (nav *nav) readMarks() error { scanner := bufio.NewScanner(f) for scanner.Scan() { - toks := strings.SplitN(scanner.Text(), ":", 2) - if _, ok := nav.marks[toks[0]]; !ok { - nav.marks[toks[0]] = toks[1] + mark, path, found := strings.Cut(scanner.Text(), ":") + if !found { + return fmt.Errorf("invalid marks file entry: %s", scanner.Text()) + } + if _, ok := nav.marks[mark]; !ok { + nav.marks[mark] = path } } @@ -1923,12 +1926,12 @@ func (nav *nav) readTags() error { scanner := bufio.NewScanner(f) for scanner.Scan() { - text := scanner.Text() - ind := strings.LastIndex(text, ":") - path := text[0:ind] - mark := text[ind+1:] + path, tag, found := strings.Cut(scanner.Text(), ":") + if !found { + return fmt.Errorf("invalid tags file entry: %s", scanner.Text()) + } if _, ok := nav.tags[path]; !ok { - nav.tags[path] = mark + nav.tags[path] = tag } }