From f7af3680761627a20ab35bbf0bbace896e0f08bc Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 10:45:40 -0400 Subject: [PATCH 1/7] Add semgrep rule to ensure 'err' is checked after 'if !d.IsNewResource() && tfresource.NotFound(err)'. --- .ci/semgrep/errors/error-checks.yml | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.ci/semgrep/errors/error-checks.yml b/.ci/semgrep/errors/error-checks.yml index cc7967d72517..77b40b7a80bf 100644 --- a/.ci/semgrep/errors/error-checks.yml +++ b/.ci/semgrep/errors/error-checks.yml @@ -57,3 +57,34 @@ rules: - pattern-not-inside: | tfresource.RetryWhen(...) severity: ERROR + + - id: isnewresource-notfound-without-err-checks + languages: [go] + message: When checking for !d.IsNewResource() && tfresource.NotFound() errors, typically other error conditions should be checked. + patterns: + - pattern: | + if !d.IsNewResource() && tfresource.NotFound($ERR) { ... } + - pattern-not-inside: | + if !d.IsNewResource() && tfresource.NotFound($ERR) { ... } + if $ERR != nil { ... } + # e.g. internal/service/dms/s3_endpoint.go + - pattern-not-inside: | + if !d.IsNewResource() && tfresource.NotFound($ERR) { ... } + if $ERR == nil && ... { + ... + err = ... + ... + } + if $ERR != nil { ... } + # e.g. internal/service/quicksight/analysis.go + - pattern-not-inside: | + if !d.IsNewResource() && tfresource.NotFound($ERR) { ... } + if !d.IsNewResource() && ... { ... } + if $ERR != nil { ... } + # e.g. internal/service/sagemaker/app.go + - pattern-not-inside: | + if err != nil { + if !d.IsNewResource() && tfresource.NotFound($ERR) { ... } + return ... + } + severity: ERROR \ No newline at end of file From 228b7dbe5a0afd8e54ccad916c380bd9a2f50c21 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 11:00:55 -0400 Subject: [PATCH 2/7] Check 'err != nil' after '!d.IsNewResource() && tfresource.NotFound()' - chime. --- internal/service/chime/voice_connector_logging.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/service/chime/voice_connector_logging.go b/internal/service/chime/voice_connector_logging.go index 252f36c3ef6a..6dbfef750cc2 100644 --- a/internal/service/chime/voice_connector_logging.go +++ b/internal/service/chime/voice_connector_logging.go @@ -92,6 +92,10 @@ func resourceVoiceConnectorLoggingRead(ctx context.Context, d *schema.ResourceDa return diags } + if err != nil { + return sdkdiag.AppendErrorf(diags, "reading Chime Voice Connector logging configuration (%s): %s", d.Id(), err) + } + d.Set("enable_media_metric_logs", resp.EnableMediaMetricLogs) d.Set("enable_sip_logs", resp.EnableSIPLogs) d.Set("voice_connector_id", d.Id()) From c47d16281a34431e3e25f676b9e4c5c7d60bf43a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 11:00:55 -0400 Subject: [PATCH 3/7] Check 'err != nil' after '!d.IsNewResource() && tfresource.NotFound()' - chimesdkvoice. --- internal/service/chimesdkvoice/sip_media_application.go | 4 ++++ internal/service/chimesdkvoice/sip_rule.go | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/internal/service/chimesdkvoice/sip_media_application.go b/internal/service/chimesdkvoice/sip_media_application.go index 4dd6fcf3b482..0db3ff0507b9 100644 --- a/internal/service/chimesdkvoice/sip_media_application.go +++ b/internal/service/chimesdkvoice/sip_media_application.go @@ -106,6 +106,10 @@ func resourceSipMediaApplicationRead(ctx context.Context, d *schema.ResourceData return diags } + if err != nil { + return sdkdiag.AppendErrorf(diags, "reading Chime Sip Media Application (%s): %s", d.Id(), err) + } + d.Set(names.AttrARN, resp.SipMediaApplicationArn) d.Set("aws_region", resp.AwsRegion) d.Set(names.AttrName, resp.Name) diff --git a/internal/service/chimesdkvoice/sip_rule.go b/internal/service/chimesdkvoice/sip_rule.go index 3a7a7909a221..f830f0a44d1e 100644 --- a/internal/service/chimesdkvoice/sip_rule.go +++ b/internal/service/chimesdkvoice/sip_rule.go @@ -122,6 +122,10 @@ func resourceSipRuleRead(ctx context.Context, d *schema.ResourceData, meta inter return diags } + if err != nil { + return sdkdiag.AppendErrorf(diags, "reading ChimeSKVoice Sip Rule (%s): %s", d.Id(), err) + } + d.Set(names.AttrName, resp.Name) d.Set("disabled", resp.Disabled) d.Set("trigger_type", resp.TriggerType) From 51e716832de6af4024d86879b51c500d83fa6010 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 11:01:13 -0400 Subject: [PATCH 4/7] Check 'err != nil' after '!d.IsNewResource() && tfresource.NotFound()' - timestreamwrite. --- internal/service/timestreamwrite/table.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/service/timestreamwrite/table.go b/internal/service/timestreamwrite/table.go index 0fe061447804..fed164e0c6ab 100644 --- a/internal/service/timestreamwrite/table.go +++ b/internal/service/timestreamwrite/table.go @@ -233,6 +233,10 @@ func resourceTableRead(ctx context.Context, d *schema.ResourceData, meta interfa return diags } + if err != nil { + return sdkdiag.AppendErrorf(diags, "reading Timestream Table (%s): %s", d.Id(), err) + } + d.Set(names.AttrARN, table.Arn) d.Set(names.AttrDatabaseName, table.DatabaseName) if err := d.Set("magnetic_store_write_properties", flattenMagneticStoreWriteProperties(table.MagneticStoreWriteProperties)); err != nil { From 493af763b659c31198ed370e090af3504dcc5f0a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 11:05:54 -0400 Subject: [PATCH 5/7] Add CHANGELOG entry. --- .changelog/#####.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/#####.txt diff --git a/.changelog/#####.txt b/.changelog/#####.txt new file mode 100644 index 000000000000..e4a0ef394c5d --- /dev/null +++ b/.changelog/#####.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_timestreamwrite_table: Fix `runtime error: invalid memory address or nil pointer dereference` panic when reading a non-existent table +``` \ No newline at end of file From f32b12e5b4e8cd26e8e4e5bb0d8f4faf85b940c8 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 11:11:54 -0400 Subject: [PATCH 6/7] Correct CHANGELOG entry file name. --- .changelog/{#####.txt => 38512.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .changelog/{#####.txt => 38512.txt} (100%) diff --git a/.changelog/#####.txt b/.changelog/38512.txt similarity index 100% rename from .changelog/#####.txt rename to .changelog/38512.txt From 0bae0cb522bf68d7afd110f813359e17c76f7049 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 24 Jul 2024 11:16:02 -0400 Subject: [PATCH 7/7] Fix yamllint '[new-line-at-end-of-file] no new line character at the end of file'. --- .ci/semgrep/errors/error-checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/semgrep/errors/error-checks.yml b/.ci/semgrep/errors/error-checks.yml index 77b40b7a80bf..23a92d44e909 100644 --- a/.ci/semgrep/errors/error-checks.yml +++ b/.ci/semgrep/errors/error-checks.yml @@ -87,4 +87,4 @@ rules: if !d.IsNewResource() && tfresource.NotFound($ERR) { ... } return ... } - severity: ERROR \ No newline at end of file + severity: ERROR