Commit Graph
46013 Commits
Author SHA1 Message Date
Scott Mansell 4782a04c20 GCZ: use 64-bit for m_data_offset
A malicious GCZ file could probably force this to be negative.
Shouldn't cause any issues other than file read failures, but need to fix
because it is causing errors on MSVC.
2026-07-28 19:44:49 +12:00
Scott Mansell feeb36bf07 GCZ: validate while loading 2026-07-28 19:44:49 +12:00
Scott Mansell ffb0e2c594 GCZ: Don't trust block_num either
SectorReader::ReadChunk does do some validation on it, but it only
checks against the original disc size (reported by the GCZ file).
It has no idea how many blocks the header claimed the disc had.

A maliciously crafted GCZ file could trigger read overflows off the end
of the m_block_pointers/m_hashes arrays.
2026-07-28 19:44:49 +12:00
Scott Mansell a3740b5f71 GCZ: Don't trust GetBlockCompressedSize
It comes unverified from the file, and a maliciously crafted file could
trigger not one, but two buffer overflows in the heap.
2026-07-28 19:44:49 +12:00
Scott Mansell 8fb464040c DolReader: Fix integer wraparound
A malicious dol could theoretically use integer wraparound to bypass
bounds checking and cause DolReader to read past the end of m_bytes.

Could result in crashes, wasting large amounts of memory, or even the
disclosure of heap memory contents.
2026-07-27 21:15:51 +12:00
Joshua Vandaële 55c015e6ac AchievementApprovedHash: Automatically generate hash using CMake 2026-07-27 07:09:11 +02:00
slick-daddy aa2167d473 Return m_devices directly in GetAllDevices(). 2026-07-27 06:15:36 +03:00
Matheus Willder 7788e6824e Update codes to unlock Black Edition and Collector's Edition in Need for Speed 2026-07-26 16:26:12 +00:00
JosJuice d742aa8b4c Merge pull request #14756 from JoshuaVandaele/gcc16-warns-fix
Resolve various warnings
2026-07-26 17:37:10 +02:00
JosJuice 8a90cbf638 IOS/FS: Fix loading savestate when files are open
We already had code to close open host files when reading or writing a
savestate, but due to d35fe1b we also need to close open guest files
when reading a savestate, otherwise DoStateRead fails to delete them.

I was considering an alternative solution where instead of copying and
clearing m_handles, we just set `handle.opened = false;` for each handle
before reading a savestate (but not before writing a savestate).
However, this wouldn't solve the problem of DoStateWriteOrMeasure's
calls to OpenFile failing due to all handles being open. I'm not aware
of any games that have that many handles open, though.
2026-07-26 11:01:01 +02:00
matellush 47d82300a9 Flatpak: Bump libevdev to the latest version 2026-07-25 19:22:35 +02:00
Joshua Vandaële 24361f49d1 CMake: Enforce minimum stdlib versions 2026-07-25 06:10:43 +02:00
Joshua Vandaële 32c5f09767 Socket: Resolve incorrect include warning
This is a musl warning, according to fcntl.h's man page, the include should always be <fcntl.h> anyways
2026-07-25 05:19:26 +02:00
Joshua Vandaële f1a639b12b CWDemangler: Resolve missing-declarations warnings 2026-07-25 05:19:26 +02:00
Joshua Vandaële b0a46872eb DolphinQt/Config: Resolve sign-compare warnings 2026-07-25 05:19:26 +02:00
Joshua Vandaële 682490c220 FileSystemCommon: Resolve maybe-uninitialized warning 2026-07-25 05:19:26 +02:00
Joshua Vandaële 69527ec44b DirectoryBlob: Resolve reorder warning 2026-07-25 05:19:26 +02:00
Joshua Vandaële 1edea92358 HSP_DeviceGBPlayer: Resolve shadowed variable warning 2026-07-25 05:19:26 +02:00
Joshua Vandaële d7615aa0b0 AboutDialog: Report the SDL version being used 2026-07-25 04:42:07 +02:00
Joshua Vandaële 13238340ae CMake: Enforce minimum toolset versions 2026-07-25 04:32:28 +02:00
Joshua Vandaële f98c974a0d CMake: Update compiler version checking
We now only show the minimum version of the compiler being used to build Dolphin instead of all supported compilers.
2026-07-25 04:32:28 +02:00
OatmealDome 707d3c7a73 Merge pull request #14475 from JoshuaVandaele/cmake-replaces-vs
CMake: Replace the Visual Studio project
2026-07-24 22:28:25 -04:00
Joshua Vandaële 9cd05b9387 Externals/SDL: Update to release-3.4.12
We are updating from 3.4.8

Changes relevant to us include:
3.4.10:
- Added controller sensor support for GameInput v3
- Fixed Ipega controllers being ignored in keyboard mode
- Added support for GameCube rumble when the adapter is in PC mode and has the latest firmware
- Fixed rumble on the new Steam Controller
- Added support for the GameSir Super Nova in Xbox 360 mode
- Added support for the PDP Afterglow Wave Wireless Controller for Switch
3.4.12:
- Added hotplug detection support when using libusb for HIDAPI controllers
- Fixed flipped Xbox 360 controller axes on macOS

It's not in the changelogs, but 3.4.10 is the revision which allowed for my Steam Controller's gyro to properly work in Dolphin
2026-07-24 21:02:45 +02:00
Joshua Vandaële 6ec57bcc5d windeployqt: Disable uneeded DLLs
Since our bump to Qt, dxcompiler.dll and dxil.dll have been added alongside other Qt dlls as part of QtGui. Those DLLs are not needed since we use QtWidgets and not QML.
2026-07-24 20:56:31 +02:00
Joshua Vandaële c1261e7406 CMake: Introduce Presets, replacing Settings
This introduces a CMakePresets file for both Unix-likes and Windows that replace the old CMakeSettings.

It adds presets for **Debug** and **Release** profiles for both **x64** and **ARM64** architectures, as well as **Generic builds**.
Presets can be used using[ Visual Studio's built-in CMakePresets support](https://learn.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-170), or [Visual Studio Code's CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) extension.

They can also be used from the command line, like so:

- x64/Unix-like/Ninja:
  - Configure: `cmake --preset ninja-release-x64`
  - Build: `cmake --build --preset ninja-build-release-x64`
  - Configure + Build: `cmake --workflow --preset ninja-release-x64`
- ARM64/Windows/Visual Studio:
  - Configure: `cmake --preset visualstudio-release-arm64`
  - Build: `cmake --build --preset visualstudio-build-release-arm64`
  - Configure + Build: `cmake --workflow --preset visualstudio-release-arm64`

The Ninja generator is available to both Windows and Unix-likes, while the Visual Studio Generator is only available on Windows.

**Cross-compiling**

On **Windows**, the Visual Studio generator automatically takes care of everything, you just need to select an ARM64 preset.

On **Unix-likes**, to cross-compile you need to install a cross-compiler and (optionally) a sysroot of the target system.
Here is an example to compile from x64 to ARM64 with a sysroot:

- `cmake --preset ninja-release-arm64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSROOT=/opt/sysroots/aarch64-linux-gnu`
- `cmake --build --preset ninja-build-release-arm64`

You will need a sysroot to link against Qt, since we do not vendor it in on platforms other than Windows.

**User presets**

A `CMakeUserPresets.json` file may be created locally at the root of the project to further customize your presets.
For example, here are the user presets I used to test this PR on Arch Linux with a generic Arch Linux ARM sysroot:

```json
{
  "version": 10,
  "configurePresets": [
    {
      "name": "gcc-debug-arm64",
      "inherits": "ninja-debug-arm64",
      "cacheVariables": {
        "CMAKE_C_COMPILER": "aarch64-linux-gnu-gcc",
        "CMAKE_CXX_COMPILER": "aarch64-linux-gnu-g++",
        "CMAKE_EXE_LINKER_FLAGS": "-L/opt/sysroots/ArchLinuxARM/lib",
        "CMAKE_SYSROOT": "/opt/sysroots/ArchLinuxARM"
      }
    },
    {
      "name": "clang-debug-arm64",
      "inherits": "ninja-debug-arm64",
      "cacheVariables": {
        "CMAKE_C_COMPILER": "clang",
        "CMAKE_CXX_COMPILER": "clang++",
        "CMAKE_C_FLAGS": "-target aarch64-linux-gnu",
        "CMAKE_CXX_FLAGS": "-target aarch64-linux-gnu",
        "CMAKE_SYSROOT": "/opt/sysroots/ArchLinuxARM"
      }
    },
    {
      "name": "clang-debug-x64",
      "inherits": "ninja-debug-x64",
      "cacheVariables": {
        "CMAKE_C_COMPILER": "clang",
        "CMAKE_CXX_COMPILER": "clang++"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "gcc-build-debug-arm64",
      "configurePreset": "gcc-debug-arm64"
    },
    {
      "name": "clang-build-debug-arm64",
      "configurePreset": "clang-debug-arm64"
    },
    {
      "name": "clang-build-debug-x64",
      "configurePreset": "clang-debug-x64"
    }
  ],
  "workflowPresets": [
    {
      "name": "gcc-debug-arm64",
      "steps": [
        { "type": "configure", "name": "gcc-debug-arm64" },
        { "type": "build", "name": "gcc-build-debug-arm64" }
      ]
    },
    {
      "name": "clang-debug-arm64",
      "steps": [
        { "type": "configure", "name": "clang-debug-arm64" },
        { "type": "build", "name": "clang-build-debug-arm64" }
      ]
    },
    {
      "name": "clang-debug-x64",
      "steps": [
        { "type": "configure", "name": "clang-debug-x64" },
        { "type": "build", "name": "clang-build-debug-x64" }
      ]
    }
  ]
}
```

They are then used like so:
Configure + Build with GCC: `cmake --workflow --preset gcc-debug-arm64`
Configure + Build with Clang: `cmake --workflow --preset clang-debug-arm64`
Configure + Build with Clang (x64): `cmake --workflow --preset clang-debug-x64`

*Addendum: It should also now be possible to cross-compile from Windows to Unix-likes, and Unix-like to other Unix-like (e.g. Linux -> FreeBSD), however this is untested.*
2026-07-24 03:45:13 +02:00
Joshua Vandaële c7b621ad08 CMake: Set VS startup project to dolphin-emu 2026-07-24 03:45:13 +02:00
Joshua Vandaële fa83b0fe49 CMake: Disable install targets on Windows 2026-07-24 03:45:13 +02:00
Joshua Vandaële 8366609fc1 CMake: Error out if trying to build generic builds on Windows
Generic builds have never been supported on Windows.
2026-07-24 03:45:13 +02:00
Joshua Vandaële 808a82d5dd CMake: Bump minimum requirement to 3.25 2026-07-24 03:45:13 +02:00
Joshua Vandaële 6da4bc38e1 CMake: Unify output directory 2026-07-24 03:45:13 +02:00
Joshua Vandaële 3d9f46cd64 CMake: Remove LINUX_LOCAL_DEV and symlink required files 2026-07-24 03:45:13 +02:00
Joshua Vandaële fa2a250f01 CMake: Unify sys directories 2026-07-24 03:45:13 +02:00
Joshua Vandaële a30aa5cf36 CMake: Unify translation directories 2026-07-24 03:45:13 +02:00
Joshua Vandaële 20bded8066 CMake: PDBs outside of Binaries 2026-07-24 03:45:13 +02:00
Joshua Vandaële d2833fb788 Remove Visual Studio Projects and Solutions in favor of CMake 2026-07-24 03:45:13 +02:00
Joshua Vandaële 2eebf6fc28 Flatpak: Use vendored-in SDL 2026-07-24 02:53:28 +02:00
OatmealDome d6e803e63d Merge pull request #14737 from matellush/flatpak-runtime
Flatpak: Update runtime to `6.11`
2026-07-23 20:02:57 -04:00
matellush a7f5427279 Flatpak: Update runtime to 6.11 2026-07-23 22:46:23 +02:00
OatmealDome e2013caea0 Merge pull request #14748 from OatmealDome/mac-ccache
BuildMacOSUniversalBinary: Add flag to enable CCache
2026-07-22 20:32:09 -04:00
Scott Mansell 03e409a3e1 Merge pull request #14749 from tygyh/Replace-conditions-with-regex
UICommon: Replace `find != std::npos` with `contains`
2026-07-23 09:27:47 +12:00
OatmealDome c490bc2c2e BuildMacOSUniversalBinary: Add flag to enable CCache 2026-07-22 17:11:18 -04:00
Admiral H. Curtiss af38db4a23 HW/DSPHLE/AXVoice: Prefer BitCastPtr over BitCastToArray in ApplyUpdatesForMs() 2026-07-22 12:18:43 +02:00
Dr. Dystopia 2ca2a5c875 UICommon: Replace find != std::npos with contains 2026-07-22 12:15:55 +02:00
Admiral H. Curtiss d5d2f7c8fb HW/DSPHLE/AXVoice: Check array bounds in ApplyUpdatesForMs()
Fixes https://github.com/dolphin-emu/dolphin/security/advisories/GHSA-4q28-hhjv-hf3f
2026-07-22 11:53:12 +02:00
Scott Mansell b008142f72 Merge pull request #14436 from cbartondock/master
Loading custom textures using combination of elf/dol game ids and iso game ids.
2026-07-22 09:54:01 +12:00
Scott Mansell 00626b263f Merge pull request #14744 from acts-1631/security/elf-reader-bounds
Core/Boot: validate standalone ELF input ranges
2026-07-21 14:58:38 +12:00
Jordan Woyak b24783f84d Merge pull request #14743 from AdmiralCurtiss/sockaddr-init
IOS/NetIPTopDevice: Zero-initialize sockaddr structs
2026-07-20 20:17:44 -05:00
Acts1631 49453c045c Core: log invalid ELF input
Log each rejected ELF header, range, and symbol reference. This
provides actionable diagnostics for malformed files without changing the
validation behavior.
2026-07-20 21:10:29 -04:00
Acts1631 24aafdeb47 Core: validate standalone ELF input ranges
ElfReader trusted table offsets and counts from standalone ELF files.
Malformed input could make it read and write past the loaded file buffer.

Validate the ELF header, table ranges, segment data, section data, and
string-table references before accessing them. Invalid files use the
existing executable boot failure path.
2026-07-20 19:50:54 -04:00
Admiral H. Curtiss 95ee7de40e IOS/NetIPTopDevice: Zero-initialize sockaddr structs
Fixes https://github.com/dolphin-emu/dolphin/security/advisories/GHSA-5fqv-9qrg-gm4j
2026-07-21 01:30:30 +02:00