Skip to content

Commit

Permalink
net: use strings.LastIndex to parse header
Browse files Browse the repository at this point in the history
Use strings.LastIndex instead of strings.Split to reduce memory allocations.

See #3403 for details.

Signed-off-by: Alexander Yastrebov <alexander.yastrebov@zalando.de>
  • Loading branch information
AlexanderYastrebov committed Feb 11, 2025
1 parent 30f0005 commit b18b987
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
6 changes: 4 additions & 2 deletions net/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,10 @@ func RemoteAddrFromLast(r *http.Request) netip.Addr {
// RemoteHostFromLast is *deprecated* use RemoteAddrFromLast instead
func RemoteHostFromLast(r *http.Request) net.IP {
ffs := r.Header.Get("X-Forwarded-For")
ffa := strings.Split(ffs, ",")
ff := ffa[len(ffa)-1]
ff := ffs
if i := strings.LastIndex(ffs, ","); i != -1 {
ff = ffs[i+1:]
}
if ff != "" {
if ip := parse(strings.TrimSpace(ff)); ip != nil {
return ip
Expand Down
5 changes: 4 additions & 1 deletion net/net_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,11 @@ func TestRemoteHostFromLast(t *testing.T) {
{"no header2", "1.2.3.4", net.IPv4(1, 2, 3, 4), []string{}},
{"no header3", "100.200.300.400", nil, []string{}},
{"no header4", "127.0.0.1:8080", net.IPv4(127, 0, 0, 1), []string{}},
{"empty header", "127.0.0.1", net.IPv4(127, 0, 0, 1), []string{""}},
{"single header", "127.0.0.1", net.IPv4(172, 16, 0, 1), []string{"172.16.0.1"}},
{"invalid header", "127.0.0.1", net.IPv4(127, 0, 0, 1), []string{"invalid header"}},
{"invalid header", "127.0.0.1", net.IPv4(127, 0, 0, 1), []string{"invalid header"}},
{"invalid header entry", "127.0.0.1", net.IPv4(127, 0, 0, 1), []string{"172.16.0.1", "invalid header"}},
{"empty header entry", "127.0.0.1", net.IPv4(127, 0, 0, 1), []string{"172.16.0.1", ""}},
{"multiple entries", "127.0.0.1", net.IPv4(8, 7, 6, 5), []string{"172.16.0.1", "1.2.3.4", "8.7.6.5"}},
{"2 entries", "127.0.0.1", net.IPv4(8, 7, 6, 5), []string{"1.2.3.4", "8.7.6.5"}},
{"single header2", "127.0.0.1", net.IPv4(8, 7, 6, 5), []string{"8.7.6.5"}},
Expand Down

0 comments on commit b18b987

Please sign in to comment.