diff options
| author | Michael Anthony Knyszek <mknyszek@google.com> | 2025-01-07 16:01:46 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-01-07 10:08:42 -0800 |
| commit | d62154db837fef880714f710bafbe0af94034b40 (patch) | |
| tree | be95a2ae6eeebc994b14161e975e4c2841b788d9 /src/weak/pointer.go | |
| parent | 9d0772b23ed8dae1667a3328a72f384eccf812d7 (diff) | |
| download | go-d62154db837fef880714f710bafbe0af94034b40.tar.xz | |
weak: don't panic when calling Value on a zero Pointer
Currently weak.Pointer.Value will panic if the weak.Pointer is
uninitialized (zero value) which goes against it's documentation. Fix
this and add a test. While we're here, also add a test to ensure
weak.Make[T](nil) is equivalent to the zero value of weak.Pointer[T].
Fixes #71153.
Change-Id: I4d9196026360bc42a5bfcb33ce449131ec251dba
Reviewed-on: https://go-review.googlesource.com/c/go/+/641095
Reviewed-by: David Finkel <david.finkel@gmail.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Diffstat (limited to 'src/weak/pointer.go')
| -rw-r--r-- | src/weak/pointer.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/weak/pointer.go b/src/weak/pointer.go index 50af0c2fdc..39c512e76d 100644 --- a/src/weak/pointer.go +++ b/src/weak/pointer.go @@ -78,6 +78,9 @@ func Make[T any](ptr *T) Pointer[T] { // If a weak pointer points to an object with a finalizer, then Value will // return nil as soon as the object's finalizer is queued for execution. func (p Pointer[T]) Value() *T { + if p.u == nil { + return nil + } return (*T)(runtime_makeStrongFromWeak(p.u)) } |
