Skip to content

Commit 36e64ae

Browse files
authored
Fix index out of bounds error when building status (#3513)
Problem: There's a specific scenario where we can hit an out of bounds index while building route statuses. I don't know the exact scenario, but it involves a parentRef without a sectionName, on a Gateway with a single listener. Could possibly involve having multiple implementations being deployed as well. Solution: Adjust the logic to ensure we don't access indices that are out of bounds.
1 parent cb719a6 commit 36e64ae

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

internal/controller/status/prepare_requests.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ func removeDuplicateIndexParentRefs(parentRefs []graph.ParentRef) []graph.Parent
103103
idxToParentRef[ref.Idx] = append(idxToParentRef[ref.Idx], ref)
104104
}
105105

106-
results := make([]graph.ParentRef, len(idxToParentRef))
106+
results := make([]graph.ParentRef, 0, len(idxToParentRef))
107107

108108
for idx, refs := range idxToParentRef {
109109
if len(refs) == 1 {
110-
results[idx] = refs[0]
110+
results = append(results, refs[0])
111111
continue
112112
}
113113

@@ -124,7 +124,7 @@ func removeDuplicateIndexParentRefs(parentRefs []graph.ParentRef) []graph.Parent
124124
}
125125
}
126126
}
127-
results[idx] = winningParentRef
127+
results = append(results, winningParentRef)
128128
}
129129

130130
return results

internal/controller/status/prepare_requests_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ func TestBuildHTTPRouteStatuses(t *testing.T) {
445445

446446
err := k8sClient.Get(context.Background(), nsname, &hr)
447447
g.Expect(err).ToNot(HaveOccurred())
448-
g.Expect(helpers.Diff(expected, hr.Status)).To(BeEmpty())
448+
g.Expect(expected.RouteStatus.Parents).To(ConsistOf(hr.Status.Parents))
449449
}
450450
}
451451

@@ -524,7 +524,7 @@ func TestBuildGRPCRouteStatuses(t *testing.T) {
524524

525525
err := k8sClient.Get(context.Background(), nsname, &hr)
526526
g.Expect(err).ToNot(HaveOccurred())
527-
g.Expect(helpers.Diff(expected, hr.Status)).To(BeEmpty())
527+
g.Expect(expected.RouteStatus.Parents).To(ConsistOf(hr.Status.Parents))
528528
}
529529
}
530530

@@ -601,7 +601,7 @@ func TestBuildTLSRouteStatuses(t *testing.T) {
601601

602602
err := k8sClient.Get(context.Background(), nsname, &hr)
603603
g.Expect(err).ToNot(HaveOccurred())
604-
g.Expect(helpers.Diff(expected, hr.Status)).To(BeEmpty())
604+
g.Expect(expected.RouteStatus.Parents).To(ConsistOf(hr.Status.Parents))
605605
}
606606
}
607607

0 commit comments

Comments
 (0)