fix(provider/aws): null pointer when records mailformed (#5639)

* fix(provider/aws): null pointer when records mailformed

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* fix(provider/aws): null pointer when records mailformed

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* fix(provider/aws): null pointer when records mailformed

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
This commit is contained in:
Ivan Ka 2025-07-12 18:41:29 +01:00 committed by GitHub
parent 18c47f0ac3
commit 179bbb56b7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 0 deletions

View File

@ -641,6 +641,10 @@ func (p *AWSProvider) createUpdateChanges(newEndpoints, oldEndpoints []*endpoint
var updates []*endpoint.Endpoint
for i, newE := range newEndpoints {
if i >= len(oldEndpoints) || oldEndpoints[i] == nil {
log.Debugf("skip %s as endpoint not found in current endpoints", newE.DNSName)
continue
}
oldE := oldEndpoints[i]
if p.requiresDeleteCreate(oldE, newE) {
deletes = append(deletes, oldE)

View File

@ -2817,3 +2817,36 @@ func TestGeoProximityWithBias(t *testing.T) {
})
}
}
func TestAWSProvider_createUpdateChanges_NewMoreThanOld(t *testing.T) {
provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"foo.bar."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), true, false, nil)
oldEndpoints := []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("record1.foo.bar.", endpoint.RecordTypeA, endpoint.TTL(300), "1.1.1.1"),
nil,
}
newEndpoints := []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("record1.foo.bar.", endpoint.RecordTypeA, endpoint.TTL(300), "1.1.1.1"),
endpoint.NewEndpointWithTTL("record2.foo.bar.", endpoint.RecordTypeA, endpoint.TTL(300), "2.2.2.2"),
endpoint.NewEndpointWithTTL("record3.foo.bar.", endpoint.RecordTypeA, endpoint.TTL(300), "3.3.3.3"),
}
changes := provider.createUpdateChanges(newEndpoints, oldEndpoints)
// record2 should be created, record1 should be upserted
var creates, upserts, deletes int
for _, c := range changes {
switch c.Action {
case route53types.ChangeActionCreate:
creates++
case route53types.ChangeActionUpsert:
upserts++
case route53types.ChangeActionDelete:
deletes++
}
}
require.Equal(t, 0, creates, "should create the extra new endpoint")
require.Equal(t, 1, upserts, "should upsert the matching endpoint")
require.Equal(t, 0, deletes, "should not delete anything")
}