Guard against Gio's null-view detach event (recents-wipe SIGABRT) #1

Closed
gmp wants to merge 1 commits from fix/recents-wipe-jni-null-view into master
Owner

Gio's GioView.onDestroyView sends ViewEvent{View: 0} as its detach signal when the view is destroyed - i.e. the activity going away on a recents-wipe. handleEvent passed that zero straight through to InitPgp/registerFragment, whose GetObjectClass(null) aborts the process:

A fatal error has been detected by the Java Runtime Environment:
Internal Error (cgo/go.go:942), pid=27286, tid=0x0000b40562753b00
Detected error: JNI DETECTED ERROR IN APPLICATION: java_object == null
in call to GetObjectClass
from void registerFragment(_jobject*)

Reproduced on a Pixel 9 Pro (Android 17) with the equivalent app (pad): swiping the app away in recents crashes it. The pinned gio versions (2020-08) send the same empty ViewEvent{View: 0} from Java_org_gioui_GioView_onDestroyView.

Guard on both sides:

  • cmd/passgo-gui: handleEvent ignores the View == 0 detach signal (a re-attach arrives as a fresh event with a live view).
  • InitPgp returns early on a zero view, so callers that forward the event unfiltered are covered.
  • registerFragment null-checks as defense in depth.

Same fix as pad (gmp/pad@fdbffc9), verified there on-device: recents swipe closes cleanly, no tombstone.

Gio's `GioView.onDestroyView` sends `ViewEvent{View: 0}` as its detach signal when the view is destroyed - i.e. the activity going away on a recents-wipe. `handleEvent` passed that zero straight through to `InitPgp`/`registerFragment`, whose `GetObjectClass(null)` aborts the process: A fatal error has been detected by the Java Runtime Environment: Internal Error (cgo/go.go:942), pid=27286, tid=0x0000b40562753b00 Detected error: JNI DETECTED ERROR IN APPLICATION: java_object == null in call to GetObjectClass from void registerFragment(_jobject*) Reproduced on a Pixel 9 Pro (Android 17) with the equivalent app (pad): swiping the app away in recents crashes it. The pinned gio versions (2020-08) send the same empty `ViewEvent{View: 0}` from `Java_org_gioui_GioView_onDestroyView`. Guard on both sides: - `cmd/passgo-gui`: `handleEvent` ignores the `View == 0` detach signal (a re-attach arrives as a fresh event with a live view). - `InitPgp` returns early on a zero view, so callers that forward the event unfiltered are covered. - `registerFragment` null-checks as defense in depth. Same fix as pad (gmp/pad@fdbffc9), verified there on-device: recents swipe closes cleanly, no tombstone.
gmp added 1 commit 2026-08-20 22:54:16 -04:00
Gio's GioView.onDestroyView sends ViewEvent{View: 0} as its detach
signal when the view is destroyed — i.e. the activity going away on a
recents-wipe. handleEvent passed that zero straight through to
InitPgp/registerFragment, whose GetObjectClass(null) aborts the process
(JNI DETECTED ERROR: java_object == null in call to GetObjectClass).

Guard on both sides: handleEvent ignores the View == 0 detach signal
(a re-attach arrives as a fresh event with a live view), InitPgp
returns early on a zero view so unfiltered callers are covered, and
registerFragment null-checks as defense in depth. Same fix as pad
(fdbffc9); verified there on a Pixel 9 Pro / Android 17 where the
recents swipe used to crash the app.
gmp closed this pull request 2026-08-21 15:30:16 -04:00

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: gmp/passgo#1
No description provided.