From 7ed9f8366235a70ce03cf3ab05fcfb6dbcfd9a10 Mon Sep 17 00:00:00 2001
From: Junegunn Choi <junegunn.c@gmail.com>
Date: Thu, 19 May 2016 01:46:22 +0900
Subject: [PATCH] Validate jump label characters

Also extend default jump labels
---
 src/constants.go |  2 +-
 src/options.go   | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/constants.go b/src/constants.go
index 8be40eda..c60c9582 100644
--- a/src/constants.go
+++ b/src/constants.go
@@ -38,7 +38,7 @@ const (
 	defaultHistoryMax int = 1000
 
 	// Jump labels
-	defaultJumpLabels string = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM,<.>/?!@#$%^&*<>/?()[{]}"
+	defaultJumpLabels string = "asdfghjklqwertyuiopzxcvbnm1234567890ASDFGHJKLQWERTYUIOPZXCVBNM`~;:,<.>/?'\"!@#$%^&*()[{]}-_=+"
 )
 
 // fzf events
diff --git a/src/options.go b/src/options.go
index 10a22287..ffd57e96 100644
--- a/src/options.go
+++ b/src/options.go
@@ -724,6 +724,7 @@ func parseOptions(opts *Options, allArgs []string) {
 			opts.History.maxSize = historyMax
 		}
 	}
+	validateJumpLabels := false
 	for i := 0; i < len(allArgs); i++ {
 		arg := allArgs[i]
 		switch arg {
@@ -817,6 +818,7 @@ func parseOptions(opts *Options, allArgs []string) {
 			opts.InlineInfo = false
 		case "--jump-labels":
 			opts.JumpLabels = nextString(allArgs, &i, "label characters required")
+			validateJumpLabels = true
 		case "-1", "--select-1":
 			opts.Select1 = true
 		case "+1", "--no-select-1":
@@ -927,6 +929,14 @@ func parseOptions(opts *Options, allArgs []string) {
 	if len(opts.JumpLabels) == 0 {
 		errorExit("empty jump labels")
 	}
+
+	if validateJumpLabels {
+		for _, r := range opts.JumpLabels {
+			if r < 32 || r > 126 {
+				errorExit("non-ascii jump labels are not allowed")
+			}
+		}
+	}
 }
 
 func postProcessOptions(opts *Options) {
-- 
GitLab