Fix variables with single quotes bug
This commit is contained in:
parent
7c02226016
commit
3f5727c22b
32
serv/args.go
32
serv/args.go
|
@ -42,7 +42,7 @@ func argMap(ctx context.Context, vars []byte) func(w io.Writer, tag string) (int
|
||||||
fields[0].Value = v[1 : len(v)-1]
|
fields[0].Value = v[1 : len(v)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
return w.Write(fields[0].Value)
|
return w.Write(escQuote(fields[0].Value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ func argList(ctx *coreContext, args [][]byte) ([]interface{}, error) {
|
||||||
if v, ok := fields[string(av)]; ok {
|
if v, ok := fields[string(av)]; ok {
|
||||||
switch v[0] {
|
switch v[0] {
|
||||||
case '[', '{':
|
case '[', '{':
|
||||||
vars[i] = v
|
vars[i] = escQuote(v)
|
||||||
default:
|
default:
|
||||||
var val interface{}
|
var val interface{}
|
||||||
if err := json.Unmarshal(v, &val); err != nil {
|
if err := json.Unmarshal(v, &val); err != nil {
|
||||||
|
@ -106,3 +106,31 @@ func argList(ctx *coreContext, args [][]byte) ([]interface{}, error) {
|
||||||
|
|
||||||
return vars, nil
|
return vars, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func escQuote(b []byte) []byte {
|
||||||
|
f := false
|
||||||
|
for i := range b {
|
||||||
|
if b[i] == '\'' {
|
||||||
|
f = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !f {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
s := 0
|
||||||
|
for i := range b {
|
||||||
|
if b[i] == '\'' {
|
||||||
|
buf.Write(b[s:i])
|
||||||
|
buf.WriteString(`''`)
|
||||||
|
s = i + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l := len(b)
|
||||||
|
if s < (l - 1) {
|
||||||
|
buf.Write(b[s:l])
|
||||||
|
}
|
||||||
|
return buf.Bytes()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue