-
Notifications
You must be signed in to change notification settings - Fork 156
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
PANIC=Format method: runtime error: invalid memory address or nil pointer dereference with go 1.17 #77
Comments
Yes, also getting a panic for time pointers %!v(PANIC=Format method: value method time.Time.GoString called using nil *Time pointer) with a *time.Time in a struct that = nil Go 1.17.6 |
Some relevant info in https://go.dev/issue/20995. |
Same issue. How to fix ? |
Still observing this on Go 1.18.5. |
So the go dev issue 20995 says that the workaround (while a bit ugly) is to essentially check to see if you have a pointer, and whether the Elem of the pointer has the method:
Essentially you are saying "oh, I have a nil pointer, let me check if the method is defined on the Value (non-pointer) of this type". |
This handles a few cases (similar to how fmt %#v does): 1. A GoString method on a value receiver, called with a nil pointer 2. A GoString method on a pointer receiver that doesn't check for nil 3. A GoString method that panics in some other way Because Go 1.17 added a method Time.GoString with value receiver, this broke structs that had *time.Time fields with nil values (which is common!). Also added a bunch of tests for these cases. Fixes kr#77
This handles a few cases (similar to how fmt %#v does): - A GoString method on a value receiver, called with a nil pointer - A GoString method on a pointer receiver that doesn't check for nil - A GoString method that panics in some other way Because Go 1.17 added a method Time.GoString with value receiver, this broke structs that had *time.Time fields with nil values (which is common!). Also added a bunch of tests for these cases. This should address kr#77 Co-authored-by: Jordan Barrett <jordan.barrett@canonical.com>
We fixed this in our |
#14493 This pulls through a fix for issue kr/pretty#77 which was causing some of our logs to format like this: ``` [LOG] 0:00.001 DEBUG juju.kubernetes.provider.application creating storage class for gitlab filesystem database: &v1.StorageClass{ %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference) [LOG] 0:00.001 DEBUG juju.kubernetes.provider.application using persistent volume claim for gitlab filesystem database: v1.PersistentVolumeClaim{ %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference) ``` We've pushed the patch upstream, but [kr/pretty](https://github.com/kr/pretty) doesn't look actively maintained anymore. Until they accept our patch, we will use our fork at [canonical/pretty](https://github.com/canonical/pretty) instead. ## QA steps ```sh go test -v ./caas/kubernetes/provider/application -check.f applicationSuite.TestEnsureStateful -check.vv ``` Verify that the structs are printed correctly in the logs.
This handles a few cases (similar to how fmt %#v does): - A GoString method on a value receiver, called with a nil pointer - A GoString method on a pointer receiver that doesn't check for nil - A GoString method that panics in some other way Because Go 1.17 added a method Time.GoString with value receiver, this broke structs that had *time.Time fields with nil values (which is common!). Also added a bunch of tests for these cases. Fixes #77 Co-authored-by: Jordan Barrett <jordan.barrett@canonical.com>
Shouldn't there be a new proper release with this fix integrated? |
Yes indeed. Just tagged v0.3.1. Thank you. |
* Update Dependencies (kr#75) This updates github.com/rogpeppe/go-internal from 1.6.1 to 1.8.0 and the github action 'setup-go' from v1 to v2. It also adds a config file for dependabot to automatically check this repo for new dependency versions weekly. * Bump actions/checkout from 2 to 3 (kr#84) Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Catch panics when calling GoString like fmt %#v does (kr#87) This handles a few cases (similar to how fmt %#v does): - A GoString method on a value receiver, called with a nil pointer - A GoString method on a pointer receiver that doesn't check for nil - A GoString method that panics in some other way Because Go 1.17 added a method Time.GoString with value receiver, this broke structs that had *time.Time fields with nil values (which is common!). Also added a bunch of tests for these cases. Fixes kr#77 Co-authored-by: Jordan Barrett <jordan.barrett@canonical.com> * Bump github.com/rogpeppe/go-internal from 1.8.0 to 1.9.0 (kr#88) This change bumps github.com/rogpeppe/go-internal from version 1.8.0 to 1.9.0. Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix failing test * bump go version to same as zk, and update workflow * update go.sum * update go.sum - again --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Matthieu MOREL <mmorel-35@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ben Hoyt <benhoyt@gmail.com> Co-authored-by: Jordan Barrett <jordan.barrett@canonical.com> Co-authored-by: tjex <tjex@tjex.net>
When I run the following short script with Go 1.17 it prints a
PANIC=Format method
message$ go1.17 run ./ v1.Secret{ %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference)
The text was updated successfully, but these errors were encountered: