formatter: guard diagnostics with no source range - #2562
Merged
Conversation
tmeijn
pushed a commit
to tmeijn/dotfiles
that referenced
this pull request
Jul 21, 2026
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [tflint](https://github.com/terraform-linters/tflint) | minor | `0.63.1` → `0.64.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>terraform-linters/tflint (tflint)</summary> ### [`v0.64.0`](https://github.com/terraform-linters/tflint/releases/tag/v0.64.0) [Compare Source](terraform-linters/tflint@v0.63.1...v0.64.0) #### What's Changed ##### Enhancements - cmd: include worker dir for no-range recursive issues by [@​Zakharden](https://github.com/Zakharden) in [#​2524](terraform-linters/tflint#2524) - config: add ignorable rule setting by [@​Zakharden](https://github.com/Zakharden) in [#​2525](terraform-linters/tflint#2525) - formatter(junit): include range in testcase name by [@​Zakharden](https://github.com/Zakharden) in [#​2538](terraform-linters/tflint#2538) ##### Bug Fixes - plugin: fetch attestation bundles from bundle\_url by [@​Kunalbehbud](https://github.com/Kunalbehbud) in [#​2593](terraform-linters/tflint#2593) - Merged as [#​2600](terraform-linters/tflint#2600) ##### Chores - Refactor formatter dispatch into format adapters by [@​bendrucker](https://github.com/bendrucker) in [#​2556](terraform-linters/tflint#2556) - Inline per-format print methods into their adapters by [@​bendrucker](https://github.com/bendrucker) in [#​2557](terraform-linters/tflint#2557) - build(deps): Bump docker/setup-buildx-action from 4.0.0 to 4.1.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2559](terraform-linters/tflint#2559) - build(deps): Bump github.com/mattn/go-colorable from 0.1.14 to 0.1.15 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2560](terraform-linters/tflint#2560) - build(deps): Bump golang from 1.26.3-alpine3.23 to 1.26.4-alpine3.23 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2558](terraform-linters/tflint#2558) - release: Set branch name for Homebrew tap by [@​wata727](https://github.com/wata727) in [#​2561](terraform-linters/tflint#2561) - Extract the shared runner-setup pipeline by [@​bendrucker](https://github.com/bendrucker) in [#​2555](terraform-linters/tflint#2555) - formatter: guard diagnostics with no source range by [@​bendrucker](https://github.com/bendrucker) in [#​2562](terraform-linters/tflint#2562) - docs: add Go install instructions to README by [@​RoseSecurity](https://github.com/RoseSecurity) in [#​2563](terraform-linters/tflint#2563) - build(deps): Bump actions/checkout from 6.0.2 to 6.0.3 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2565](terraform-linters/tflint#2565) - build(deps): Bump alpine from 3.23.4 to 3.24.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2566](terraform-linters/tflint#2566) - build(deps): Bump the go-x group with 2 updates by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2567](terraform-linters/tflint#2567) - build(deps): Bump github.com/sigstore/sigstore-go from 1.1.4 to 1.2.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2568](terraform-linters/tflint#2568) - fix(install): close download and zip readers by [@​RoseSecurity](https://github.com/RoseSecurity) in [#​2564](terraform-linters/tflint#2564) - build(deps): Bump alpine from 3.24.0 to 3.24.1 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2570](terraform-linters/tflint#2570) - build(deps): Bump golang.org/x/net from 0.55.0 to 0.56.0 in the go-x group by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2571](terraform-linters/tflint#2571) - build(deps): Bump github.com/sigstore/sigstore-go from 1.2.0 to 1.2.1 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2572](terraform-linters/tflint#2572) - build(deps): Bump actions/checkout from 6.0.3 to 7.0.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2579](terraform-linters/tflint#2579) - build(deps): Bump actions/setup-go from 6.4.0 to 6.5.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2580](terraform-linters/tflint#2580) - build(deps): Bump golangci/golangci-lint-action from 9.2.1 to 9.3.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2583](terraform-linters/tflint#2583) - build(deps): Bump goreleaser/goreleaser-action from 7.2.2 to 7.2.3 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2582](terraform-linters/tflint#2582) - build(deps): Bump actions/attest from 4.1.0 to 4.1.1 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2581](terraform-linters/tflint#2581) - build(deps): Bump docker/build-push-action from 7.2.0 to 7.3.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2584](terraform-linters/tflint#2584) - build(deps): Bump golang.org/x/text from 0.38.0 to 0.39.0 in the go-x group by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2585](terraform-linters/tflint#2585) - build(deps): Bump github.com/sigstore/sigstore-go from 1.2.1 to 1.2.2 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2588](terraform-linters/tflint#2588) - build(deps): Bump google.golang.org/grpc from 1.81.1 to 1.82.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2587](terraform-linters/tflint#2587) #### New Contributors - [@​Zakharden](https://github.com/Zakharden) made their first contribution in [#​2524](terraform-linters/tflint#2524) - [@​RoseSecurity](https://github.com/RoseSecurity) made their first contribution in [#​2563](terraform-linters/tflint#2563) - [@​Kunalbehbud](https://github.com/Kunalbehbud) made their first contribution in [#​2593](terraform-linters/tflint#2593) **Full Changelog**: <terraform-linters/tflint@v0.63.1...v0.64.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuNiIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi42IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
1 task
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Guards every formatter against an
hcl.Diagnosticwith a nilSubject. The JSON, SARIF, JUnit, Checkstyle, and Compact formatters all dereferenceddiag.Subjectunconditionally when rendering anhcl.Diagnosticserror, so a diagnostic without a source range crashes the process with a nil pointer panic. HCL documentsSubjectas optional ("some diagnostics have no source ranges at all").I couldn't reach this from current CLI input: every host-side diagnostic producer sets
Subject, and plugin diagnostics cross the gRPC boundary as plain strings rather thanhcl.Diagnostics. So this is hardening against a documented-nullable field, not a fix for a live crash. The SDK's ownhclextdecode does emit nil-Subjectdiagnostics ("Missing attribute/block"), so a future path that surfaces those host-side would hit it.Changes
diagRangehelper inerrors.gothat returns a zerohcl.RangewhenSubjectis nil.json.goomits the range whenSubjectis nil.JSONError.Rangeis already a pointer withomitemptyfor this.checkstyle.go,junit.go, andcompact.gorender throughdiagRange, so a missing subject yields an empty filename and zero line/column, matching how those formats already render empty issue ranges.sarif.goemits the result without a location whenSubjectis nil, mirroring the issue path that already attaches locations conditionally.The non-nil path is byte-for-byte unchanged in every format. The default (pretty) format was already safe because HCL's
DiagnosticTextWriterhandles a nilSubject.Testing
Adds a nil-
Subjectcase to each format's table test (json,sarif,junit,checkstyle,compact). Each case panics onmasterand passes here.