-
-
Notifications
You must be signed in to change notification settings - Fork 7.4k
[Go] defer file close #22595
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Go] defer file close #22595
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
9 issues found across 9 files
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them.
<file name="samples/openapi3/client/petstore/go/go-petstore/client.go">
<violation number="1" location="samples/openapi3/client/petstore/go/go-petstore/client.go:541">
P2: Resource leak: if `CreateFormFile` or `io.Copy` fails, the file handle is never closed. Use `defer file.Close()` immediately after opening the file to ensure cleanup in all error paths.</violation>
</file>
<file name="modules/openapi-generator/src/main/resources/go/client.mustache">
<violation number="1" location="modules/openapi-generator/src/main/resources/go/client.mustache:606">
P2: File descriptor leak on error paths. If `CreateFormFile` or `io.Copy` fails, the function returns without closing the file. Use `defer file.Close()` immediately after opening the file to ensure proper cleanup regardless of how the function exits.</violation>
</file>
<file name="samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/client.go">
<violation number="1" location="samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/client.go:491">
P2: File handle leak on error paths. If `CreateFormFile` or `io.Copy` fails, the function returns without closing the file. Use `defer file.Close()` immediately after opening the file to ensure proper cleanup in all code paths.</violation>
</file>
<file name="samples/client/echo_api/go-external-refs/client.go">
<violation number="1" location="samples/client/echo_api/go-external-refs/client.go:517">
P2: File handle may leak if `CreateFormFile` or `io.Copy` fails before `file.Close()` is reached. Use `defer file.Close()` immediately after the successful `os.Open()` to ensure the file is always closed regardless of error paths.</violation>
</file>
<file name="samples/openapi3/client/petstore/go-petstore-withXml/client.go">
<violation number="1" location="samples/openapi3/client/petstore/go-petstore-withXml/client.go:513">
P2: File handle will leak if `CreateFormFile` or `io.Copy` fails. Use `defer file.Close()` immediately after opening the file to ensure proper cleanup in all error paths.</violation>
</file>
<file name="samples/openapi3/client/petstore/go/go-petstore-aws-signature/client.go">
<violation number="1" location="samples/openapi3/client/petstore/go/go-petstore-aws-signature/client.go:545">
P2: File handle leak: if `CreateFormFile` or `io.Copy` fails, the function returns early without closing the opened file. Use `defer file.Close()` immediately after `os.Open()` to ensure the file is always closed.</violation>
</file>
<file name="samples/client/echo_api/go/client.go">
<violation number="1" location="samples/client/echo_api/go/client.go:517">
P2: File handle leaks if `CreateFormFile` or `io.Copy` fails. Add `defer file.Close()` immediately after opening the file to ensure the file is closed on all error paths. This is the idiomatic Go pattern for resource cleanup.</violation>
</file>
<file name="samples/client/petstore/go/go-petstore/client.go">
<violation number="1" location="samples/client/petstore/go/go-petstore/client.go:523">
P2: Resource leak: if `CreateFormFile` or `io.Copy` fails, the file handle is never closed. Use `defer file.Close()` immediately after opening the file to ensure cleanup on all error paths.</violation>
</file>
<file name="samples/openapi3/client/petstore/go-petstore-generateMarshalJSON-false/client.go">
<violation number="1" location="samples/openapi3/client/petstore/go-petstore-generateMarshalJSON-false/client.go:513">
P2: File resource leak on error paths. If `CreateFormFile` or `io.Copy` fails, the file handle is never closed. Use `defer file.Close()` immediately after opening the file to ensure cleanup on all code paths.</violation>
</file>
Reply to cubic to teach it or ask questions. Tag @cubic-dev-ai to re-run a review.
modules/openapi-generator/src/main/resources/go/client.mustache
Outdated
Show resolved
Hide resolved
samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/client.go
Show resolved
Hide resolved
| } | ||
| err = file.Close() | ||
|
|
||
| part, err := w.CreateFormFile(fieldName, filepath.Base(path)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2: Resource leak: if CreateFormFile or io.Copy fails, the file handle is never closed. Use defer file.Close() immediately after opening the file to ensure cleanup on all error paths.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At samples/client/petstore/go/go-petstore/client.go, line 523:
<comment>Resource leak: if `CreateFormFile` or `io.Copy` fails, the file handle is never closed. Use `defer file.Close()` immediately after opening the file to ensure cleanup on all error paths.</comment>
<file context>
@@ -519,17 +519,18 @@ func addFile(w *multipart.Writer, fieldName, path string) error {
}
- err = file.Close()
+
+ part, err := w.CreateFormFile(fieldName, filepath.Base(path))
if err != nil {
return err
</file context>
samples/openapi3/client/petstore/go-petstore-generateMarshalJSON-false/client.go
Outdated
Show resolved
Hide resolved
This reverts commit b35b9a2.
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)Summary by cubic
Fixes multipart file uploads in generated Go clients by closing the file after copying to the form part, preventing read-on-closed-file errors and ensuring proper resource cleanup.
Written for commit 6ca94d0. Summary will update automatically on new commits.