From 994e437f2af7d24c6bd4ac955fb0a1a5307f7e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Garc=C3=ADa=20Montoro?= Date: Tue, 27 Feb 2024 13:52:52 +0100 Subject: [PATCH] MM-56780: Ensure p.Integration is not nil (#26301) * Ensure p.Integration is not nil A Sentry crash report showed that the check p.Integration.URL != input.integration.URL was dereferencing a nil pointer. At that point in the code, input.Integration is known to be non-nil, but we still need to check whether the original, p.Integration, is. Crash report: https://mattermost-mr.sentry.io/issues/4918263046/events/5738b67edcee4c9c883d40f7d26563a6 * Test nil original integration and both nil --- server/public/model/integration_action.go | 5 ++++ .../public/model/integration_action_test.go | 26 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/server/public/model/integration_action.go b/server/public/model/integration_action.go index 009995dcba..f9a06e80ae 100644 --- a/server/public/model/integration_action.go +++ b/server/public/model/integration_action.go @@ -122,6 +122,11 @@ func (p *PostAction) Equals(input *PostAction) bool { return p.Integration == nil } + // At this point, input is not nil, so return false if original is. + if p.Integration == nil { + return false + } + // Both are unequal and not nil. if p.Integration.URL != input.Integration.URL { return false diff --git a/server/public/model/integration_action_test.go b/server/public/model/integration_action_test.go index 1bf2a3ce23..c7b581d9d1 100644 --- a/server/public/model/integration_action_test.go +++ b/server/public/model/integration_action_test.go @@ -144,7 +144,7 @@ func TestPostActionIntegrationEquals(t *testing.T) { require.False(t, pa1.Equals(pa2)) }) - t.Run("nil check", func(t *testing.T) { + t.Run("nil check in input integration", func(t *testing.T) { pa1 := &PostAction{ Integration: &PostActionIntegration{}, } @@ -155,4 +155,28 @@ func TestPostActionIntegrationEquals(t *testing.T) { require.False(t, pa1.Equals(pa2)) }) + + t.Run("nil check in original integration", func(t *testing.T) { + pa1 := &PostAction{ + Integration: nil, + } + + pa2 := &PostAction{ + Integration: &PostActionIntegration{}, + } + + require.False(t, pa1.Equals(pa2)) + }) + + t.Run("both nil", func(t *testing.T) { + pa1 := &PostAction{ + Integration: nil, + } + + pa2 := &PostAction{ + Integration: nil, + } + + require.True(t, pa1.Equals(pa2)) + }) }