Просмотр исходного кода

appc: fix DomainRoutes copy

The non-referential copy destination doesn't extend the map contents,
but also the read of a non-key is returning a zero value not bound to
the map contents in any way.

Updates tailscale/corp#15657

Signed-off-by: James Tucker <[email protected]>
James Tucker 2 лет назад
Родитель
Сommit
245ddb157b
2 измененных файлов с 17 добавлено и 1 удалено
  1. 1 1
      appc/appconnector.go
  2. 16 0
      appc/appconnector_test.go

+ 1 - 1
appc/appconnector.go

@@ -113,7 +113,7 @@ func (e *AppConnector) DomainRoutes() map[string][]netip.Addr {
 
 	drCopy := make(map[string][]netip.Addr)
 	for k, v := range e.domains {
-		copy(drCopy[k], v)
+		drCopy[k] = append(drCopy[k], v...)
 	}
 
 	return drCopy

+ 16 - 0
appc/appconnector_test.go

@@ -5,6 +5,7 @@ package appc
 
 import (
 	"net/netip"
+	"reflect"
 	"slices"
 	"testing"
 
@@ -35,6 +36,21 @@ func TestUpdateDomains(t *testing.T) {
 	}
 }
 
+func TestDomainRoutes(t *testing.T) {
+	rc := &routeCollector{}
+	a := NewAppConnector(t.Logf, rc)
+	a.UpdateDomains([]string{"example.com"})
+	a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8"))
+
+	want := map[string][]netip.Addr{
+		"example.com": {netip.MustParseAddr("192.0.0.8")},
+	}
+
+	if got := a.DomainRoutes(); !reflect.DeepEqual(got, want) {
+		t.Fatalf("DomainRoutes: got %v, want %v", got, want)
+	}
+}
+
 func TestObserveDNSResponse(t *testing.T) {
 	rc := &routeCollector{}
 	a := NewAppConnector(t.Logf, rc)