summaryrefslogtreecommitdiff
path: root/user/gitlab-runner/posix-shell-escape.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/gitlab-runner/posix-shell-escape.patch')
-rw-r--r--user/gitlab-runner/posix-shell-escape.patch139
1 files changed, 139 insertions, 0 deletions
diff --git a/user/gitlab-runner/posix-shell-escape.patch b/user/gitlab-runner/posix-shell-escape.patch
new file mode 100644
index 000000000..b454141ed
--- /dev/null
+++ b/user/gitlab-runner/posix-shell-escape.patch
@@ -0,0 +1,139 @@
+--- gitlab-runner-v12.1.0/helpers/shell_escape.go 2019-07-19 12:13:32.000000000 +0000
++++ gitlab-runner-v12.1.0/helpers/shell_escape.go 2020-04-26 23:12:59.813309281 +0000
+@@ -4,7 +4,6 @@ package helpers
+
+ import (
+ "bytes"
+- "encoding/hex"
+ "strings"
+ )
+
+@@ -13,35 +12,10 @@ import (
+ */
+
+ const (
+- ACK = 6
+- TAB = 9
+- LF = 10
+- CR = 13
+- US = 31
+- SPACE = 32
+- AMPERSTAND = 38
+ SINGLE_QUOTE = 39
+- PLUS = 43
+- NINE = 57
+- QUESTION = 63
+- LOWERCASE_Z = 90
+- OPEN_BRACKET = 91
+ BACKSLASH = 92
+- UNDERSCORE = 95
+- CLOSE_BRACKET = 93
+- BACKTICK = 96
+- TILDA = 126
+- DEL = 127
+ )
+
+-// ShellEscape is taken from https://github.com/solidsnack/shell-escape/blob/master/Text/ShellEscape/Bash.hs
+-/*
+-A Bash escaped string. The strings are wrapped in @$\'...\'@ if any
+-bytes within them must be escaped; otherwise, they are left as is.
+-Newlines and other control characters are represented as ANSI escape
+-sequences. High bytes are represented as hex codes. Thus Bash escaped
+-strings will always fit on one line and never contain non-ASCII bytes.
+-*/
+ func ShellEscape(str string) string {
+ if str == "" {
+ return "''"
+@@ -50,85 +24,20 @@ func ShellEscape(str string) string {
+ out := bytes.NewBuffer(make([]byte, 0, len(str)*2))
+ i := 0
+ l := len(in)
+- escape := false
+-
+- hex := func(char byte) {
+- escape = true
+-
+- data := []byte{BACKSLASH, 'x', 0, 0}
+- hex.Encode(data[2:], []byte{char})
+- out.Write(data)
+- }
+-
+- backslash := func(char byte) {
+- escape = true
+- out.Write([]byte{BACKSLASH, char})
+- }
+-
+- escaped := func(str string) {
+- escape = true
+- out.WriteString(str)
+- }
+-
+- quoted := func(char byte) {
+- escape = true
+- out.WriteByte(char)
+- }
+-
+- literal := func(char byte) {
+- out.WriteByte(char)
+- }
+
++ out.WriteByte(SINGLE_QUOTE)
+ for i < l {
+ char := in[i]
+- switch {
+- case char == TAB:
+- escaped(`\t`)
+- case char == LF:
+- escaped(`\n`)
+- case char == CR:
+- escaped(`\r`)
+- case char <= US:
+- hex(char)
+- case char <= AMPERSTAND:
+- quoted(char)
+- case char == SINGLE_QUOTE:
+- backslash(char)
+- case char <= PLUS:
+- quoted(char)
+- case char <= NINE:
+- literal(char)
+- case char <= QUESTION:
+- quoted(char)
+- case char <= LOWERCASE_Z:
+- literal(char)
+- case char == OPEN_BRACKET:
+- quoted(char)
+- case char == BACKSLASH:
+- backslash(char)
+- case char <= CLOSE_BRACKET:
+- quoted(char)
+- case char == UNDERSCORE:
+- literal(char)
+- case char <= BACKTICK:
+- quoted(char)
+- case char <= TILDA:
+- quoted(char)
+- case char == DEL:
+- hex(char)
+- default:
+- hex(char)
++ if (char == SINGLE_QUOTE) {
++ out.Write([]byte{SINGLE_QUOTE, BACKSLASH, SINGLE_QUOTE, SINGLE_QUOTE})
++ } else {
++ out.WriteByte(char)
+ }
+ i++
+ }
++ out.WriteByte(SINGLE_QUOTE)
+
+- outStr := out.String()
+-
+- if escape {
+- outStr = "$'" + outStr + "'"
+- }
+-
+- return outStr
++ return out.String()
+ }
+
+ func ToBackslash(path string) string {