diff --git a/go.mod b/go.mod index e5c45f1bd..f7e130f6b 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/valyala/fasttemplate v1.2.2 github.com/valyala/gozstd v1.21.1 github.com/valyala/histogram v1.2.0 - github.com/valyala/quicktemplate v1.7.0 + github.com/valyala/quicktemplate v1.8.0 golang.org/x/oauth2 v0.21.0 golang.org/x/sys v0.21.0 google.golang.org/api v0.187.0 diff --git a/go.sum b/go.sum index 9e9db5e1e..417ded19b 100644 --- a/go.sum +++ b/go.sum @@ -86,8 +86,6 @@ github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 h1:t3eaIm0rUkzbrI github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= @@ -254,7 +252,6 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -362,8 +359,6 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00= @@ -492,7 +487,6 @@ github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fastrand v1.1.0 h1:f+5HkLW4rsgzdNoleUOB69hyT9IlD2ZQh9GyDMfb5G8= @@ -503,9 +497,8 @@ github.com/valyala/gozstd v1.21.1 h1:TQFZVTk5zo7iJcX3o4XYBJujPdO31LFb4fVImwK873A github.com/valyala/gozstd v1.21.1/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ= github.com/valyala/histogram v1.2.0 h1:wyYGAZZt3CpwUiIb9AU/Zbllg1llXyrtApRS815OLoQ= github.com/valyala/histogram v1.2.0/go.mod h1:Hb4kBwb4UxsaNbbbh+RRz8ZR6pdodR57tzWUS3BUzXY= -github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTcjMJzCM= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/valyala/quicktemplate v1.8.0 h1:zU0tjbIqTRgKQzFY1L42zq0qR3eh4WoQQdIdqCysW5k= +github.com/valyala/quicktemplate v1.8.0/go.mod h1:qIqW8/igXt8fdrUln5kOSb+KWMaJ4Y8QUsfd1k6L2jM= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= @@ -549,7 +542,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -616,8 +608,6 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= @@ -676,7 +666,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/github.com/valyala/quicktemplate/jsonstring.go b/vendor/github.com/valyala/quicktemplate/jsonstring.go index 9154770da..e9aef8308 100644 --- a/vendor/github.com/valyala/quicktemplate/jsonstring.go +++ b/vendor/github.com/valyala/quicktemplate/jsonstring.go @@ -1,6 +1,7 @@ package quicktemplate import ( + "bytes" "fmt" "strings" ) @@ -17,7 +18,10 @@ func hasSpecialChars(s string) bool { return false } -func appendJSONString(dst []byte, s string, addQuotes bool) []byte { +// AppendJSONString appends json-encoded string s to dst and returns the result. +// +// If addQuotes is true, then the appended json string is wrapped into double quotes. +func AppendJSONString(dst []byte, s string, addQuotes bool) []byte { if !hasSpecialChars(s) { // Fast path - nothing to escape. if !addQuotes { @@ -33,33 +37,64 @@ func appendJSONString(dst []byte, s string, addQuotes bool) []byte { if addQuotes { dst = append(dst, '"') } - bb := AcquireByteBuffer() - var tmp []byte - tmp, bb.B = bb.B, dst - _, err := jsonReplacer.WriteString(bb, s) - if err != nil { - panic(fmt.Errorf("BUG: unexpected error returned from jsonReplacer.WriteString: %s", err)) - } - dst, bb.B = bb.B, tmp - ReleaseByteBuffer(bb) + dst = jsonReplacer.AppendReplace(dst, s) if addQuotes { dst = append(dst, '"') } return dst } -var jsonReplacer = strings.NewReplacer(func() []string { - a := []string{ - "\n", `\n`, - "\r", `\r`, - "\t", `\t`, - "\"", `\"`, - "\\", `\\`, - "<", `\u003c`, - "'", `\u0027`, - } +var jsonReplacer = newByteReplacer(func() ([]byte, []string) { + oldChars := []byte("\n\r\t\b\f\"\\<'") + newStrings := []string{`\n`, `\r`, `\t`, `\b`, `\f`, `\"`, `\\`, `\u003c`, `\u0027`} for i := 0; i < 0x20; i++ { - a = append(a, string([]byte{byte(i)}), fmt.Sprintf(`\u%04x`, i)) + c := byte(i) + if n := bytes.IndexByte(oldChars, c); n >= 0 { + continue + } + oldChars = append(oldChars, byte(i)) + newStrings = append(newStrings, fmt.Sprintf(`\u%04x`, i)) } - return a -}()...) + return oldChars, newStrings +}()) + +type byteReplacer struct { + m [256]byte + newStrings []string +} + +func newByteReplacer(oldChars []byte, newStrings []string) *byteReplacer { + if len(oldChars) != len(newStrings) { + panic(fmt.Errorf("len(oldChars)=%d must be equal to len(newStrings)=%d", len(oldChars), len(newStrings))) + } + if len(oldChars) >= 255 { + panic(fmt.Errorf("len(oldChars)=%d must be smaller than 255", len(oldChars))) + } + + var m [256]byte + for i := range m[:] { + m[i] = 255 + } + for i, c := range oldChars { + m[c] = byte(i) + } + return &byteReplacer{ + m: m, + newStrings: newStrings, + } +} + +func (br *byteReplacer) AppendReplace(dst []byte, s string) []byte { + m := br.m + newStrings := br.newStrings + for i := 0; i < len(s); i++ { + c := s[i] + n := m[c] + if n == 255 { + dst = append(dst, c) + } else { + dst = append(dst, newStrings[n]...) + } + } + return dst +} diff --git a/vendor/github.com/valyala/quicktemplate/util_appengine.go b/vendor/github.com/valyala/quicktemplate/util_appengine.go index 7642bf7df..2b8f66d07 100644 --- a/vendor/github.com/valyala/quicktemplate/util_appengine.go +++ b/vendor/github.com/valyala/quicktemplate/util_appengine.go @@ -1,3 +1,4 @@ +//go:build appengine || appenginevm // +build appengine appenginevm package quicktemplate diff --git a/vendor/github.com/valyala/quicktemplate/util_noappengine.go b/vendor/github.com/valyala/quicktemplate/util_noappengine.go index f4da7ff6f..a288c50c7 100644 --- a/vendor/github.com/valyala/quicktemplate/util_noappengine.go +++ b/vendor/github.com/valyala/quicktemplate/util_noappengine.go @@ -1,3 +1,4 @@ +//go:build !appengine && !appenginevm // +build !appengine,!appenginevm package quicktemplate diff --git a/vendor/github.com/valyala/quicktemplate/writer.go b/vendor/github.com/valyala/quicktemplate/writer.go index b541dfdd0..283c78688 100644 --- a/vendor/github.com/valyala/quicktemplate/writer.go +++ b/vendor/github.com/valyala/quicktemplate/writer.go @@ -164,9 +164,9 @@ func (w *QWriter) FPrec(f float64, prec int) { func (w *QWriter) Q(s string) { bb, ok := w.w.(*ByteBuffer) if ok { - bb.B = appendJSONString(bb.B, s, true) + bb.B = AppendJSONString(bb.B, s, true) } else { - w.b = appendJSONString(w.b[:0], s, true) + w.b = AppendJSONString(w.b[:0], s, true) w.Write(w.b) } } @@ -184,9 +184,9 @@ func (w *QWriter) QZ(z []byte) { func (w *QWriter) J(s string) { bb, ok := w.w.(*ByteBuffer) if ok { - bb.B = appendJSONString(bb.B, s, false) + bb.B = AppendJSONString(bb.B, s, false) } else { - w.b = appendJSONString(w.b[:0], s, false) + w.b = AppendJSONString(w.b[:0], s, false) w.Write(w.b) } } diff --git a/vendor/modules.txt b/vendor/modules.txt index 982468ea9..3629c3a10 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -577,8 +577,8 @@ github.com/valyala/gozstd # github.com/valyala/histogram v1.2.0 ## explicit; go 1.12 github.com/valyala/histogram -# github.com/valyala/quicktemplate v1.7.0 -## explicit; go 1.11 +# github.com/valyala/quicktemplate v1.8.0 +## explicit; go 1.17 github.com/valyala/quicktemplate # github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 ## explicit; go 1.15