56 lines
1.5 KiB
Diff
56 lines
1.5 KiB
Diff
# UNDF: UNDF-2026-000000179
|
|
# UNDF: (leave blank)
|
|
--- a/server/reload.go
|
|
+++ b/server/reload.go
|
|
@@ -2605,26 +2605,27 @@ func diffProxiesTrustedKeys(old, new []*ProxyConfig) ([]string, []string) {
|
|
// diffRoutes diffs the old routes and the new routes and returns the ones that
|
|
// should be added and removed from the server.
|
|
func diffRoutes(old, new []*url.URL) (add, remove []*url.URL) {
|
|
- // Find routes to remove.
|
|
-removeLoop:
|
|
- for _, oldRoute := range old {
|
|
- for _, newRoute := range new {
|
|
- if urlsAreEqual(oldRoute, newRoute) {
|
|
- continue removeLoop
|
|
- }
|
|
+ // Build O(1)-lookup sets from each list's canonical URL strings.
|
|
+ // This replaces two O(R²) nested loops with two O(R) passes.
|
|
+ newSet := make(map[string]struct{}, len(new))
|
|
+ for _, u := range new {
|
|
+ if u != nil {
|
|
+ newSet[u.String()] = struct{}{}
|
|
}
|
|
- remove = append(remove, oldRoute)
|
|
}
|
|
-
|
|
- // Find routes to add.
|
|
-addLoop:
|
|
- for _, newRoute := range new {
|
|
- for _, oldRoute := range old {
|
|
- if urlsAreEqual(oldRoute, newRoute) {
|
|
- continue addLoop
|
|
- }
|
|
+ oldSet := make(map[string]struct{}, len(old))
|
|
+ for _, u := range old {
|
|
+ if u != nil {
|
|
+ oldSet[u.String()] = struct{}{}
|
|
}
|
|
- add = append(add, newRoute)
|
|
}
|
|
|
|
+ for _, oldRoute := range old {
|
|
+ if oldRoute != nil {
|
|
+ if _, found := newSet[oldRoute.String()]; !found {
|
|
+ remove = append(remove, oldRoute)
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ for _, newRoute := range new {
|
|
+ if newRoute != nil {
|
|
+ if _, found := oldSet[newRoute.String()]; !found {
|
|
+ add = append(add, newRoute)
|
|
+ }
|
|
+ }
|
|
+ }
|
|
return add, remove
|
|
}
|