diff --git a/.github/workflows/check-easyjson.yml b/.github/workflows/check-easyjson.yml index 84fd85cdd19..2aa4193db80 100644 --- a/.github/workflows/check-easyjson.yml +++ b/.github/workflows/check-easyjson.yml @@ -2,7 +2,7 @@ name: Check easyjson generated files env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: diff --git a/.github/workflows/check-go-dependencies-task.yml b/.github/workflows/check-go-dependencies-task.yml index c54558672b4..6c3dd0a8316 100644 --- a/.github/workflows/check-go-dependencies-task.yml +++ b/.github/workflows/check-go-dependencies-task.yml @@ -3,7 +3,7 @@ name: Check Go Dependencies env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows on: diff --git a/.github/workflows/check-go-task.yml b/.github/workflows/check-go-task.yml index 91c417f179c..06cf002052e 100644 --- a/.github/workflows/check-go-task.yml +++ b/.github/workflows/check-go-task.yml @@ -3,7 +3,7 @@ name: Check Go env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: @@ -116,7 +116,7 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v6 with: - version: v1.57 + version: v1.63 - name: Check style env: diff --git a/.github/workflows/check-i18n-task.yml b/.github/workflows/check-i18n-task.yml index d6500c6964f..6529e473c42 100644 --- a/.github/workflows/check-i18n-task.yml +++ b/.github/workflows/check-i18n-task.yml @@ -2,7 +2,7 @@ name: Check Internationalization env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: diff --git a/.github/workflows/check-markdown-task.yml b/.github/workflows/check-markdown-task.yml index 5e8a72add69..c65ac00a55c 100644 --- a/.github/workflows/check-markdown-task.yml +++ b/.github/workflows/check-markdown-task.yml @@ -5,7 +5,7 @@ env: # See: https://github.com/actions/setup-node/#readme NODE_VERSION: 16.x # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows on: diff --git a/.github/workflows/check-mkdocs-task.yml b/.github/workflows/check-mkdocs-task.yml index 228a288d785..7962ea205c1 100644 --- a/.github/workflows/check-mkdocs-task.yml +++ b/.github/workflows/check-mkdocs-task.yml @@ -3,7 +3,7 @@ name: Check Website env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python PYTHON_VERSION: "3.9" diff --git a/.github/workflows/check-protobuf-task.yml b/.github/workflows/check-protobuf-task.yml index 2953edf467a..df8c5fbf2df 100644 --- a/.github/workflows/check-protobuf-task.yml +++ b/.github/workflows/check-protobuf-task.yml @@ -2,7 +2,7 @@ name: Check Protocol Buffers env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: diff --git a/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml b/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml index da7e07b514a..8cd5c0c9c9e 100644 --- a/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml +++ b/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml @@ -3,7 +3,7 @@ name: Deploy Website env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python PYTHON_VERSION: "3.9" diff --git a/.github/workflows/i18n-weekly-pull.yaml b/.github/workflows/i18n-weekly-pull.yaml index d8fcd8a41ec..55f7ad22307 100644 --- a/.github/workflows/i18n-weekly-pull.yaml +++ b/.github/workflows/i18n-weekly-pull.yaml @@ -2,7 +2,7 @@ name: i18n-weekly-pull env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" COVERAGE_ARTIFACT: coverage-data on: diff --git a/.github/workflows/test-go-task.yml b/.github/workflows/test-go-task.yml index c686489edbf..98f869598f3 100644 --- a/.github/workflows/test-go-task.yml +++ b/.github/workflows/test-go-task.yml @@ -3,7 +3,7 @@ name: Test Go env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.22" + GO_VERSION: "1.23" COVERAGE_ARTIFACT: coverage-data # See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows diff --git a/.golangci.yml b/.golangci.yml index 5d01dc9aa88..a39df11a1b5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -15,7 +15,7 @@ linters: #- thelper - errorlint - dupword - - exportloopref + - copyloopvar - forbidigo - gofmt - goimports diff --git a/.licenses/go/fortio.org/safecast.dep.yml b/.licenses/go/fortio.org/safecast.dep.yml new file mode 100644 index 00000000000..35c4304dcf1 --- /dev/null +++ b/.licenses/go/fortio.org/safecast.dep.yml @@ -0,0 +1,214 @@ +--- +name: fortio.org/safecast +version: v1.0.0 +type: go +summary: Package safecast allows you to safely cast between numeric types in Go and + return errors (or panic when using the Must* variants) when the cast would result + in a loss of precision, range or sign. +homepage: https://godoc.org/fortio.org/safecast +license: apache-2.0 +licenses: +- sources: LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/golang.org/x/crypto/sha3.dep.yml b/.licenses/go/golang.org/x/crypto/sha3.dep.yml deleted file mode 100644 index d6c8d29f5d5..00000000000 --- a/.licenses/go/golang.org/x/crypto/sha3.dep.yml +++ /dev/null @@ -1,63 +0,0 @@ ---- -name: golang.org/x/crypto/sha3 -version: v0.31.0 -type: go -summary: Package sha3 implements the SHA-3 fixed-output-length hash functions and - the SHAKE variable-output-length hash functions defined by FIPS-202. -homepage: https://pkg.go.dev/golang.org/x/crypto/sha3 -license: bsd-3-clause -licenses: -- sources: crypto@v0.31.0/LICENSE - text: | - Copyright 2009 The Go Authors. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google LLC nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.31.0/PATENTS - text: | - Additional IP Rights Grant (Patents) - - "This implementation" means the copyrightable works distributed by - Google as part of the Go project. - - Google hereby grants to You a perpetual, worldwide, non-exclusive, - no-charge, royalty-free, irrevocable (except as stated in this section) - patent license to make, have made, use, offer to sell, sell, import, - transfer and otherwise run, modify and propagate the contents of this - implementation of Go, where such license applies only to those patent - claims, both currently owned or controlled by Google and acquired in - the future, licensable by Google that are necessarily infringed by this - implementation of Go. This grant does not include claims that would be - infringed only as a consequence of further modification of this - implementation. If you or your agent or exclusive licensee institute or - order or agree to the institution of patent litigation against any - entity (including a cross-claim or counterclaim in a lawsuit) alleging - that this implementation of Go or any code incorporated within this - implementation of Go constitutes direct or contributory patent - infringement, or inducement of patent infringement, then any patent - rights granted to you under this License for this implementation of Go - shall terminate as of the date such litigation is filed. -notices: [] diff --git a/DistTasks.yml b/DistTasks.yml index 81ddb43e607..43beff81061 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -19,7 +19,7 @@ version: "3" vars: CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild" - GO_VERSION: "1.22.9" + GO_VERSION: "1.23.4" tasks: Windows_32bit: diff --git a/commands/instances.go b/commands/instances.go index 3c023301cd4..c208b053c8c 100644 --- a/commands/instances.go +++ b/commands/instances.go @@ -340,7 +340,7 @@ func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCor logrus.WithField("index", indexFile).Info("Loading libraries index file") li, err := librariesindex.LoadIndex(indexFile) if err != nil { - s := status.Newf(codes.FailedPrecondition, i18n.Tr("Loading index file: %v", err)) + s := status.New(codes.FailedPrecondition, i18n.Tr("Loading index file: %v", err)) responseError(s) li = librariesindex.EmptyIndex } diff --git a/commands/service_debug_config.go b/commands/service_debug_config.go index f755b68adb5..4f69fc791e6 100644 --- a/commands/service_debug_config.go +++ b/commands/service_debug_config.go @@ -270,7 +270,7 @@ func (s *arduinoCoreServerImpl) getDebugProperties(req *rpc.GetDebugConfigReques }, nil } -// Extract a JSON from a given properies.Map and converts key-indexed arrays +// Extract a JSON from a given properties.Map and converts key-indexed arrays // like: // // my.indexed.array.0=first diff --git a/go.mod b/go.mod index 3cfd8236a24..d91627f08c8 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,12 @@ module github.com/arduino/arduino-cli -go 1.22.9 +go 1.23.4 // We must use this fork until https://github.com/mailru/easyjson/pull/372 is merged replace github.com/mailru/easyjson => github.com/cmaglie/easyjson v0.8.1 require ( + fortio.org/safecast v1.0.0 github.com/ProtonMail/go-crypto v1.1.3 github.com/arduino/go-paths-helper v1.12.1 github.com/arduino/go-properties-orderedmap v1.8.1 diff --git a/go.sum b/go.sum index 18131cd7a72..94b85fdd2a2 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +fortio.org/safecast v1.0.0 h1:dr3131WPX8iS1pTf76+39WeXbTrerDYLvi9s7Oi3wiY= +fortio.org/safecast v1.0.0/go.mod h1:xZmcPk3vi4kuUFf+tq4SvnlVdwViqf6ZSZl91Jr9Jdg= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= diff --git a/internal/arduino/builder/recipe.go b/internal/arduino/builder/recipe.go index 5e71010c32c..c8fa8962850 100644 --- a/internal/arduino/builder/recipe.go +++ b/internal/arduino/builder/recipe.go @@ -16,7 +16,6 @@ package builder import ( - "fmt" "sort" "strings" @@ -27,7 +26,7 @@ import ( // RunRecipe fixdoc func (b *Builder) RunRecipe(prefix, suffix string, skipIfOnlyUpdatingCompilationDatabase bool) error { - logrus.Debugf(fmt.Sprintf("Looking for recipes like %s", prefix+"*"+suffix)) + logrus.Debugf("Looking for recipes like %s", prefix+"*"+suffix) // TODO is it necessary to use Clone? buildProperties := b.buildProperties.Clone() @@ -36,7 +35,7 @@ func (b *Builder) RunRecipe(prefix, suffix string, skipIfOnlyUpdatingCompilation // TODO is it necessary to use Clone? properties := buildProperties.Clone() for _, recipe := range recipes { - logrus.Debugf(fmt.Sprintf("Running recipe: %s", recipe)) + logrus.Debugf("Running recipe: %s", recipe) command, err := b.prepareCommandForRecipe(properties, recipe, false) if err != nil { diff --git a/internal/arduino/builder/sketch.go b/internal/arduino/builder/sketch.go index 1dda735138f..45612d9d313 100644 --- a/internal/arduino/builder/sketch.go +++ b/internal/arduino/builder/sketch.go @@ -24,6 +24,7 @@ import ( "strconv" "strings" + "fortio.org/safecast" f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/arduino/arduino-cli/internal/i18n" @@ -297,8 +298,12 @@ func merge(builtSketchPath, bootloaderPath, mergedSketchPath *paths.Path, maximu if segment.Address < initialAddress { initialAddress = segment.Address } - if segment.Address+uint32(len(segment.Data)) > lastAddress { - lastAddress = segment.Address + uint32(len(segment.Data)) + lenData, err := safecast.Convert[uint32](len(segment.Data)) + if err != nil { + return err + } + if segment.Address+lenData > lastAddress { + lastAddress = segment.Address + lenData } } for _, segment := range memSketch.GetDataSegments() { @@ -308,8 +313,12 @@ func merge(builtSketchPath, bootloaderPath, mergedSketchPath *paths.Path, maximu if segment.Address < initialAddress { initialAddress = segment.Address } - if segment.Address+uint32(len(segment.Data)) > lastAddress { - lastAddress = segment.Address + uint32(len(segment.Data)) + lenData, err := safecast.Convert[uint32](len(segment.Data)) + if err != nil { + return err + } + if segment.Address+lenData > lastAddress { + lastAddress = segment.Address + lenData } } @@ -323,7 +332,11 @@ func merge(builtSketchPath, bootloaderPath, mergedSketchPath *paths.Path, maximu // Write out a .bin if the addresses doesn't go too far away from origin // (and consequently produce a very large bin) size := lastAddress - initialAddress - if size > uint32(maximumBinSize) { + maximumBinSizeUint32, err := safecast.Convert[uint32](maximumBinSize) + if err != nil { + return nil + } + if size > maximumBinSizeUint32 { return nil } mergedSketchPathBin := paths.New(strings.TrimSuffix(mergedSketchPath.String(), ".hex") + ".bin") diff --git a/internal/arduino/cores/cores.go b/internal/arduino/cores/cores.go index 79464ed9b46..25c73508b76 100644 --- a/internal/arduino/cores/cores.go +++ b/internal/arduino/cores/cores.go @@ -328,14 +328,14 @@ func (platform *Platform) latestReleaseVersion() *semver.Version { if len(versions) == 0 { return nil } - max := versions[0] + maximum := versions[0] for i := 1; i < len(versions); i++ { - if versions[i].GreaterThan(max) { - max = versions[i] + if versions[i].GreaterThan(maximum) { + maximum = versions[i] } } - return max + return maximum } // GetAllInstalled returns all installed PlatformRelease diff --git a/internal/arduino/libraries/librariesindex/json.go b/internal/arduino/libraries/librariesindex/json.go index 926ed39edca..c5c8dd4de90 100644 --- a/internal/arduino/libraries/librariesindex/json.go +++ b/internal/arduino/libraries/librariesindex/json.go @@ -126,7 +126,7 @@ func (indexLib *indexRelease) extractReleaseIn(library *Library) { func (indexLib *indexRelease) extractDependencies() []*Dependency { res := []*Dependency{} - if indexLib.Dependencies == nil || len(indexLib.Dependencies) == 0 { + if len(indexLib.Dependencies) == 0 { return res } for _, indexDep := range indexLib.Dependencies { diff --git a/internal/arduino/libraries/librariesmanager/librariesmanager.go b/internal/arduino/libraries/librariesmanager/librariesmanager.go index f5883d6673b..457d20b32ff 100644 --- a/internal/arduino/libraries/librariesmanager/librariesmanager.go +++ b/internal/arduino/libraries/librariesmanager/librariesmanager.go @@ -210,7 +210,7 @@ func (lm *LibrariesManager) loadLibrariesFromDir(librariesDir *LibrariesDir) []* return statuses } if err != nil { - s := status.Newf(codes.FailedPrecondition, i18n.Tr("reading dir %[1]s: %[2]s", librariesDir.Path, err)) + s := status.New(codes.FailedPrecondition, i18n.Tr("reading dir %[1]s: %[2]s", librariesDir.Path, err)) return append(statuses, s) } d.FilterDirs() @@ -221,7 +221,7 @@ func (lm *LibrariesManager) loadLibrariesFromDir(librariesDir *LibrariesDir) []* for _, libDir := range libDirs { library, err := libraries.Load(libDir, librariesDir.Location) if err != nil { - s := status.Newf(codes.Internal, i18n.Tr("loading library from %[1]s: %[2]s", libDir, err)) + s := status.New(codes.Internal, i18n.Tr("loading library from %[1]s: %[2]s", libDir, err)) statuses = append(statuses, s) continue } diff --git a/internal/arduino/libraries/librariesresolver/cpp.go b/internal/arduino/libraries/librariesresolver/cpp.go index e842b764ace..0b1d770671f 100644 --- a/internal/arduino/libraries/librariesresolver/cpp.go +++ b/internal/arduino/libraries/librariesresolver/cpp.go @@ -123,7 +123,7 @@ func (resolver *Cpp) ResolveFor(header, architecture string) *libraries.Library logrus. WithField("lib", lib.Name). WithField("prio", fmt.Sprintf("%03X", libPriority)). - Infof(msg) + Info(msg) } if found == nil { return nil diff --git a/internal/cli/lib/examples.go b/internal/cli/lib/examples.go index 3b418809dfc..da0ee4c418e 100644 --- a/internal/cli/lib/examples.go +++ b/internal/cli/lib/examples.go @@ -104,7 +104,7 @@ func (ir libraryExamplesResult) Data() interface{} { } func (ir libraryExamplesResult) String() string { - if ir.Examples == nil || len(ir.Examples) == 0 { + if len(ir.Examples) == 0 { return i18n.Tr("No libraries found.") } diff --git a/internal/go-configmap/configuration.go b/internal/go-configmap/configuration.go index e1a9dbb791e..165cb66fa4e 100644 --- a/internal/go-configmap/configuration.go +++ b/internal/go-configmap/configuration.go @@ -19,6 +19,8 @@ import ( "fmt" "reflect" "strings" + + "fortio.org/safecast" ) type Map struct { @@ -88,7 +90,7 @@ func tryConversion(current any, desiredType reflect.Type) (any, error) { return uint(currentFloat), nil } if currentInt, ok := current.(int); ok { - return uint(currentInt), nil + return safecast.Convert[uint](currentInt) } case reflect.Int: // Exception for JSON decoder: json decoder will decode all numbers as float64