From 95a7661bb1b9d55492ccdee52915f47c8187d021 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Tue, 24 Jan 2023 19:33:14 +0900 Subject: [PATCH] Sanitize input strings that should be a single line --- src/options.go | 12 ++++++++---- src/terminal.go | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/options.go b/src/options.go index deff0c8d..86a168c0 100644 --- a/src/options.go +++ b/src/options.go @@ -248,6 +248,10 @@ func (a previewOpts) sameContentLayout(b previewOpts) bool { return a.wrap == b.wrap && a.headerLines == b.headerLines } +func firstLine(s string) string { + return strings.SplitN(s, "\n", 2)[0] +} + // Options stores the values of command-line options type Options struct { Fuzzy bool @@ -1658,10 +1662,10 @@ func parseOptions(opts *Options, allArgs []string) { case "--prompt": opts.Prompt = nextString(allArgs, &i, "prompt string required") case "--pointer": - opts.Pointer = nextString(allArgs, &i, "pointer sign string required") + opts.Pointer = firstLine(nextString(allArgs, &i, "pointer sign string required")) validatePointer = true case "--marker": - opts.Marker = nextString(allArgs, &i, "selected sign string required") + opts.Marker = firstLine(nextString(allArgs, &i, "selected sign string required")) validateMarker = true case "--sync": opts.Sync = true @@ -1776,10 +1780,10 @@ func parseOptions(opts *Options, allArgs []string) { } else if match, value := optString(arg, "--prompt="); match { opts.Prompt = value } else if match, value := optString(arg, "--pointer="); match { - opts.Pointer = value + opts.Pointer = firstLine(value) validatePointer = true } else if match, value := optString(arg, "--marker="); match { - opts.Marker = value + opts.Marker = firstLine(value) validateMarker = true } else if match, value := optString(arg, "-n", "--nth="); match { opts.Nth = splitNth(value) diff --git a/src/terminal.go b/src/terminal.go index b09c47dd..03cbdd68 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -731,6 +731,7 @@ func (t *Terminal) ansiLabelPrinter(str string, color *tui.ColorPair, fill bool) } // Extract ANSI color codes + str = firstLine(str) text, colors, _ := extractColor(str, nil, nil) runes := []rune(text) @@ -785,6 +786,7 @@ func (t *Terminal) ansiLabelPrinter(str string, color *tui.ColorPair, fill bool) func (t *Terminal) parsePrompt(prompt string) (func(), int) { var state *ansiState + prompt = firstLine(prompt) trimmed, colors, _ := extractColor(prompt, state, nil) item := &Item{text: util.ToChars([]byte(trimmed)), colors: colors}