Skip to content

Merge 2609a - #22

Merged
WhiteTPoison merged 12 commits into
masterfrom
merge-2609a
Oct 8, 2026
Merged

WhiteTPoison merged 12 commits into
masterfrom
merge-2609a

Conversation

@WhiteTPoison

Copy link
Copy Markdown
Collaborator

No description provided.

JosJuice and others added 12 commits October 7, 2026 19:55
Normally, Dolphin APKs have a lib folder that contains two subfolders:
arm64-v8a and x86_64. Both contain a libmain.so file, and arm64-v8a also
contains additional .so files for libadrenotools.

When we added netplay support for Android, we brought in Jetpack Compose
as a dependency, which in turn made libandroidx.graphics.path.so be
included in Dolphin APKs. Unfortunately, this .so file was included not
only for arm64-v8a and x86_64, but also for armeabi-v7a and x86. This
made Dolphin installable on devices that use one of these older ABIs,
but because libmain.so is missing, trying to start Dolphin on such a
device results in an instant crash. We have gotten a number of Google
Play reviews from armeabi-v7a users complaining about this crash.

This fixes the problem by setting abiFilters under ndk instead of under
cmake, as documented at https://developer.android.com/ndk/guides/abis.
These API levels don't allow color selectors to be used as backgrounds.

Switch to MaterialDivider and set the color via dividerColor instead of background.
Show the permission dialog the first time host or connect is clicked.

While the permission is not granted, show an info box at the bottom of the netplay setup screen explaining the need for the permission with a button to grant permission. Launch the app settings menu where the permission can be granted manually if the user has denied twice previously preventing us from showing the permission dialog.

Workarounds using the shouldShowRationale flag and detecting if the dialog showed via onPause to account for well known limitations in the android permissions API.
A NetPlay host could send an arbitrary buffer size to a client. The
client then tried to allocate input states until it reached that value.

Limit buffer sizes to the existing user-interface maximum. Invalid peer
values are ignored.
A handful of requested Gecko/AR codes and approvals for use with RetroAchievements.
The save sync parser preserved an oversized banner length after limiting
the copy into the fixed header buffer. The NAND writer then used the
untrusted length and read beyond the stack object.

Reject invalid or oversized lengths before copying the banner.
Save states restored video FIFO pointers from unchecked offsets. A
crafted offset could place a pointer outside its backing allocation and
turn the next gather-pipe copy into an out-of-bounds native write.

Require pointer offsets to stay within their backing array and reject a
state when either offset is invalid or the read pointer follows the write
pointer.
# Conflicts:
#	CMake/ScmRevGen.cmake
#	Data/Sys/GameSettings/GDJEB2.ini
#	Data/Sys/GameSettings/GF7E01.ini
#	Data/Sys/GameSettings/GFTE01.ini
#	Data/Sys/GameSettings/GPOE8P.ini
#	Data/Sys/GameSettings/GQPP78.ini
#	Data/Sys/GameSettings/R3R.ini
#	Data/Sys/GameSettings/RHO.ini
#	Source/Core/Core/NetPlayClient.cpp
#	Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp
@WhiteTPoison
WhiteTPoison merged commit 3e15d12 into master Oct 8, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants