Replace strings.Index usages with strings.Cut (#4930)

This commit is contained in:
WilczyńskiT 2022-08-04 19:17:35 +02:00 committed by GitHub
parent 17ae5acaba
commit 2642bd72b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 32 additions and 33 deletions

View File

@ -189,12 +189,11 @@ func adaptByContentType(contentType string, body []byte) ([]byte, []Warning, err
} }
// adapter name should be suffix of MIME type // adapter name should be suffix of MIME type
slashIdx := strings.Index(ct, "/") _, adapterName, slashFound := strings.Cut(ct, "/")
if slashIdx < 0 { if !slashFound {
return nil, nil, fmt.Errorf("malformed Content-Type") return nil, nil, fmt.Errorf("malformed Content-Type")
} }
adapterName := ct[slashIdx+1:]
cfgAdapter := GetAdapter(adapterName) cfgAdapter := GetAdapter(adapterName)
if cfgAdapter == nil { if cfgAdapter == nil {
return nil, nil, fmt.Errorf("unrecognized config adapter '%s'", adapterName) return nil, nil, fmt.Errorf("unrecognized config adapter '%s'", adapterName)

View File

@ -387,11 +387,11 @@ func parseEnvFile(envInput io.Reader) (map[string]string, error) {
} }
// split line into key and value // split line into key and value
fields := strings.SplitN(line, "=", 2) before, after, isCut := strings.Cut(line, "=")
if len(fields) != 2 { if !isCut {
return nil, fmt.Errorf("can't parse line %d; line should be in KEY=VALUE format", lineNumber) return nil, fmt.Errorf("can't parse line %d; line should be in KEY=VALUE format", lineNumber)
} }
key, val := fields[0], fields[1] key, val := before, after
// sometimes keys are prefixed by "export " so file can be sourced in bash; ignore it here // sometimes keys are prefixed by "export " so file can be sourced in bash; ignore it here
key = strings.TrimPrefix(key, "export ") key = strings.TrimPrefix(key, "export ")

View File

@ -468,15 +468,15 @@ func ParseNetworkAddress(addr string) (NetworkAddress, error) {
} }
var start, end uint64 var start, end uint64
if port != "" { if port != "" {
ports := strings.SplitN(port, "-", 2) before, after, found := strings.Cut(port, "-")
if len(ports) == 1 { if !found {
ports = append(ports, ports[0]) after = before
} }
start, err = strconv.ParseUint(ports[0], 10, 16) start, err = strconv.ParseUint(before, 10, 16)
if err != nil { if err != nil {
return NetworkAddress{}, fmt.Errorf("invalid start port: %v", err) return NetworkAddress{}, fmt.Errorf("invalid start port: %v", err)
} }
end, err = strconv.ParseUint(ports[1], 10, 16) end, err = strconv.ParseUint(after, 10, 16)
if err != nil { if err != nil {
return NetworkAddress{}, fmt.Errorf("invalid end port: %v", err) return NetworkAddress{}, fmt.Errorf("invalid end port: %v", err)
} }
@ -498,9 +498,10 @@ func ParseNetworkAddress(addr string) (NetworkAddress, error) {
// SplitNetworkAddress splits a into its network, host, and port components. // SplitNetworkAddress splits a into its network, host, and port components.
// Note that port may be a port range (:X-Y), or omitted for unix sockets. // Note that port may be a port range (:X-Y), or omitted for unix sockets.
func SplitNetworkAddress(a string) (network, host, port string, err error) { func SplitNetworkAddress(a string) (network, host, port string, err error) {
if idx := strings.Index(a, "/"); idx >= 0 { beforeSlash, afterSlash, slashFound := strings.Cut(a, "/")
network = strings.ToLower(strings.TrimSpace(a[:idx])) if slashFound {
a = a[idx+1:] network = strings.ToLower(strings.TrimSpace(beforeSlash))
a = afterSlash
} }
if isUnixNetwork(network) { if isUnixNetwork(network) {
host = a host = a

View File

@ -324,11 +324,11 @@ func ParseStructTag(tag string) (map[string]string, error) {
if pair == "" { if pair == "" {
continue continue
} }
parts := strings.SplitN(pair, "=", 2) before, after, isCut := strings.Cut(pair, "=")
if len(parts) != 2 { if !isCut {
return nil, fmt.Errorf("missing key in '%s' (pair %d)", pair, i) return nil, fmt.Errorf("missing key in '%s' (pair %d)", pair, i)
} }
results[parts[0]] = parts[1] results[before] = after
} }
return results, nil return results, nil
} }

View File

@ -610,11 +610,11 @@ func (m *MatchQuery) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
if query == "" { if query == "" {
continue continue
} }
parts := strings.SplitN(query, "=", 2) before, after, found := strings.Cut(query, "=")
if len(parts) != 2 { if !found {
return d.Errf("malformed query matcher token: %s; must be in param=val format", d.Val()) return d.Errf("malformed query matcher token: %s; must be in param=val format", d.Val())
} }
url.Values(*m).Add(parts[0], parts[1]) url.Values(*m).Add(before, after)
} }
if d.NextBlock(0) { if d.NextBlock(0) {
return d.Err("malformed query matcher: blocks are not supported") return d.Err("malformed query matcher: blocks are not supported")

View File

@ -52,17 +52,16 @@ func parseLinkHeader(header string) []linkResource {
l.uri = strings.TrimSpace(link[li+1 : ri]) l.uri = strings.TrimSpace(link[li+1 : ri])
for _, param := range strings.Split(strings.TrimSpace(link[ri+1:]), semicolon) { for _, param := range strings.Split(strings.TrimSpace(link[ri+1:]), semicolon) {
parts := strings.SplitN(strings.TrimSpace(param), equal, 2) before, after, isCut := strings.Cut(strings.TrimSpace(param), equal)
key := strings.TrimSpace(parts[0]) key := strings.TrimSpace(before)
if key == "" { if key == "" {
continue continue
} }
if len(parts) == 1 { if isCut {
l.params[key] = strings.TrimSpace(after)
} else {
l.params[key] = key l.params[key] = key
} }
if len(parts) == 2 {
l.params[key] = strings.TrimSpace(parts[1])
}
} }
resources = append(resources, l) resources = append(resources, l)

View File

@ -80,9 +80,9 @@ func parseUpstreamDialAddress(upstreamAddr string) (string, string, error) {
scheme, host, port = toURL.Scheme, toURL.Hostname(), toURL.Port() scheme, host, port = toURL.Scheme, toURL.Hostname(), toURL.Port()
} else { } else {
// extract network manually, since caddy.ParseNetworkAddress() will always add one // extract network manually, since caddy.ParseNetworkAddress() will always add one
if idx := strings.Index(upstreamAddr, "/"); idx >= 0 { if beforeSlash, afterSlash, slashFound := strings.Cut(upstreamAddr, "/"); slashFound {
network = strings.ToLower(strings.TrimSpace(upstreamAddr[:idx])) network = strings.ToLower(strings.TrimSpace(beforeSlash))
upstreamAddr = upstreamAddr[idx+1:] upstreamAddr = afterSlash
} }
var err error var err error
host, port, err = net.SplitHostPort(upstreamAddr) host, port, err = net.SplitHostPort(upstreamAddr)

View File

@ -424,13 +424,13 @@ func (c *FCGIClient) Request(p map[string]string, req io.Reader) (resp *http.Res
resp.Header = http.Header(mimeHeader) resp.Header = http.Header(mimeHeader)
if resp.Header.Get("Status") != "" { if resp.Header.Get("Status") != "" {
statusParts := strings.SplitN(resp.Header.Get("Status"), " ", 2) statusNumber, statusInfo, statusIsCut := strings.Cut(resp.Header.Get("Status"), " ")
resp.StatusCode, err = strconv.Atoi(statusParts[0]) resp.StatusCode, err = strconv.Atoi(statusNumber)
if err != nil { if err != nil {
return return
} }
if len(statusParts) > 1 { if statusIsCut {
resp.Status = statusParts[1] resp.Status = statusInfo
} }
} else { } else {