Commit Graph
101 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5 016f976b1f Fix a batch of missing or wrong range validation
Memory::IsValidAddress and friends tested the extended-RAM range with
(address & 0x3F000000), i.e. at 16MB granularity, so they accepted the whole 16MB
block containing the end of RAM. That's harmless at 32MB and 64MB, but the Sora no
Kiseki SC/3rd HD remasters run with 0x04C00000, so addresses from 0x0CC00000 to
0x0CFFFFFF read as valid, and MaxSizeAtAddress then underflowed to ~4GB there -
which defeats ClampValidSizeAt and IsValidRange entirely for that window. Mask
with 0x3FFFFFFF instead, in all five helpers and the copies in MemMapFunctions.cpp.

IsValidTextureAddress's extended-RAM branch repeated the first branch's whole mask
rather than just its alignment bits, so it was dead code and extended RAM was never
accepted as a texture source.

ComputeTextureHash checked IsValidAddress(addr + sizeInRAM), i.e. only the end
address, which can land in a different valid region than the start - a VRAM texture
with a large enough computed size ends exactly at the base of RAM and "passes"
while reading far past the 8MB VRAM view. Use IsValidRange.

TextureReplacer::ComputeHash's strided path had no range check at all, unlike the
contiguous path right above it. Also clamp the pack-supplied reduce-hash factor to
1.0 - it's a reduction, and the ini parser only rejects exactly 0.

ZipExtractFileToMemory read an uninitialized zip_stat when zip_stat_index failed
(it ignored the return value) and sized a host allocation directly from the zip's
declared uncompressed size. Reached just by opening an archive.

Memory::Reinit ignored Init()'s return value, and DoState fed it a memory size
taken straight from the savestate. A bogus size made the map fail to allocate and
left base null, after which DoMemoryVoid wrote RAM through it. Validate the size,
propagate the failure, and roll back to the previous size if reinit fails.

314 pspautotests pass, all unit tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DCPmm7FoQUoqrbMdhfqhQ2
2026-08-30 23:05:04 +02:00
Henrik Rydgård de7989ae56 Add TextureReplacer unit test; make replacer testable standalone
Add unittest/TestTextureReplacer which creates a fictive texture pack
(textures.ini with readable invented hashes plus real PNG files), loads
it via the replacer, and verifies lookups, filtering, hashranges, mip
levels, and missing/ignored entries.

To make the replacer runnable outside the emulator:
- The constructor now accepts a null DrawContext (formats just default
  to unsupported).
- FindReplacement/FindFiltering use the replaceEnabled_ member instead
  of the global config.
- Added TextureReplacer::LoadPackForTesting() to load an ini from a
  path directly.
2026-08-03 18:55:33 +02:00
Henrik Rydgård 5e6a051952 Fix path traversal in texture pack filenames; use HasPathTraversal in savestate migration
Texture pack filenames/aliases from textures.ini were used to build read
and write paths with no '..' check, letting a malicious pack read or
write files outside the pack directory.

- LoadIniValues rejects entries with a parent dir component via
  HasParentDirComponent.
- ReplacedTexture::Prepare skips such filenames as defense in depth.
- PSPLoaders savestate migration now uses the shared HasPathTraversal
  helper instead of inline separator checks.
2026-08-01 13:16:22 +02:00
Henrik Rydgård 2a79257551 Merge pull request #21667 from dsprogrammingprojects/Texture-Replacement-Double-Wildcard
Texture replacement addition for Address Only case
2026-07-24 21:40:02 +02:00
Henrik Rydgård 2931e9e5d2 TextureReplacer: We don't need to check for files that are missing from the alias list. 2026-07-18 18:00:54 +02:00
Henrik Rydgård 53c57bf95f Minor cleanups in replacer 2026-07-18 18:00:54 +02:00
Henrik Rydgård d7c8d6bd80 Clean up cachekey handling in texture replacer 2026-07-18 18:00:51 +02:00
Henrik Rydgård 0b39cde3a3 LookupWildCard: Remove a redundant argument and a constant template argument 2026-07-18 17:55:04 +02:00
Henrik Rydgård c278fdf5a3 Rename some vars, move a function from header to cpp 2026-07-16 15:03:20 +02:00
Henrik Rydgård 28166cb35d Add "allocation slack" to our pushbuffers. Fixes a memory overwrite bug
Reported by Joseph on Discord.

Sometimes, things could align perfectly so allocations happend exactly
at the end of a pushbuffer. At the same time, we allow our vertex decoder to write an extra few
bytes if it needs to for speed. Unfortunately I missed this interaction,
resulting in some uncommon crashes that were especially common with
heavy-geometry things like modified GTA LCS with PS2 assets, for
example.

The problem was reported with Vulkan, but our OpenGL backend had the
same issue too.
2026-05-13 15:55:34 +02:00
dsprogrammingprojects b5524db1b4 Update TextureReplacer.cpp
Moved addition to above final check for Clang to pass on final return
2026-05-12 15:12:21 -07:00
dsprogrammingprojects 8ddd833c83 Texture Replacement for Double Wildcard
Address Only addition for Texture Replacement
2026-05-12 11:59:23 -07:00
ChrisF ca8736fc6a Adds one more image size (128x128) option for DXT1 block skipping in texture replacement 2026-03-06 14:07:03 -05:00
Henrik Rydgård 3ecb54e70a More tweaking of gamelist icons 2026-02-11 01:24:11 +01:00
Henrik Rydgård 14ddad5ce3 Change how defaults work in the inifile reader (more flexible this way) 2025-10-31 21:57:52 +01:00
Henrik Rydgård 947ddf865f Extract some duplicated code into a pngSave function 2025-09-15 11:46:54 -06:00
Henrik Rydgård 58dd4677e3 Fix issue with toggling texture saving via shortcut.
Fixes #20581
2025-07-08 13:51:09 +02:00
Henrik Rydgård c87a169563 Add missing string, ignore override ini filenames if "true" 2025-06-14 15:42:17 +02:00
Henrik Rydgård fba2489c79 Remove dubious parallelization in ELF loading, initialize a var, add some checks 2025-05-15 09:48:23 +02:00
Henrik Rydgård b7dae29865 Don't unnecessarily reload the ini file when entering/leaving settings 2025-04-22 20:42:53 +02:00
Henrik Rydgård 176edb93a5 IniFile: Add faster way of reading everything in a section, use it when reading hashes for texreplace 2025-04-22 17:35:40 +02:00
Henrik Rydgård b7cec64fb2 ZipFileReader: Small performance optimization when reading by filename 2025-02-13 11:42:46 -06:00
Henrik Rydgård eb10247d77 Skip showing regular notifications that don't have messages 2025-01-20 17:48:16 +01:00
Henrik Rydgård df6ed8cfc9 Do some cleanup of #includes in GPU 2024-12-18 13:57:26 +01:00
Henrik Rydgård 6a375b0ddc TextureReplacer: Load the ini, even if just saving. 2024-12-13 13:49:09 +01:00
Henrik Rydgård ec19c47b89 Add special texture hashing mode solving the Tag Force problem.
Don't want to build some complicated rule-based thing until we have more
use cases, so this is quite specialized.

See #19714
2024-12-10 19:24:20 +01:00
Henrik Rydgård 61d2459e94 Minor code cleanup 2024-12-10 19:24:02 +01:00
Henrik Rydgård 7f13bc1a34 Add new log category for texture replacements 2024-12-01 14:17:01 +01:00
Henrik Rydgård b195061a45 Add texture cache stats to ImDebugger 2024-12-01 13:57:07 +01:00
Henrik Rydgård c9df030703 TextureReplacer: Improve ini file loading error reporting 2024-11-30 13:52:08 +01:00
Henrik Rydgård e4c0ed7078 TextureReplacement: Call CloseFile as early as possible when loading textures. 2024-11-30 11:56:27 +01:00
Henrik Rydgård 7cc59dcda1 Savedata multiload: Do a directory listing so we can filter missing directories faster. 2024-11-30 02:44:01 +01:00
Henrik Rydgård a545d3074f Do some renaming, dedupe some strings (old commit resurrected), add an assert 2024-10-22 22:28:06 +02:00
Henrik Rydgård 6797a24199 Texture saving: Try to limp along if memory allocation of buffer memory fails 2024-10-10 16:01:00 +02:00
Henrik Rydgård 9b8f18298a Translation fixes, etc
Thanks @TotalCaesar659
2024-09-27 10:15:52 +02:00
Herman Semenov 192650f551 [Core/HLE/GPU/D3D11/GLES] Using for based loop C++17 and replaced on structured binding map C++17 2024-09-18 11:10:10 +02:00
Henrik Rydgård e01ca5b057 Logging API change (refactor) (#19324)
* Rename LogType to Log

* Explicitly use the Log:: enum when logging. Allows for autocomplete when editing.

* Mac/ARM64 buildfix

* Do the same with the hle result log macros

* Rename the log names to mixed case while at it.

* iOS buildfix

* Qt buildfix attempt, ARM32 buildfix
2024-07-14 14:42:59 +02:00
Henrik Rydgård 6575ba5487 Make screenshot notifications clickable (on platforms where it's possible) 2024-04-10 13:21:23 +02:00
Herman Semenov b57dab2812 [GPU] Make static and const methods if possible 2024-04-05 17:04:31 +03:00
Henrik Rydgård c5791764d8 Make the i18n T function use std::string_view
Buildfixes, crashfixes

One more

Android buildfix

Buildfix Qt
2024-02-12 18:44:39 +01:00
Henrik Rydgård 768520dd0e Separate out the checks for save vs replace textures more, fixing some issues 2024-01-23 01:07:31 +01:00
Henrik Rydgård c6c0d0bf42 Android memstick folder moves: Do recursive moves if in the same device. Drastically faster. 2024-01-22 16:26:29 +01:00
Henrik Rydgård 6ae9d42516 Preparations for reworking the memstick folder move functionality 2024-01-22 15:56:07 +01:00
Henrik Rydgård d45f95e304 Limit to Windows to fix linker error 2024-01-18 16:08:23 +01:00
Henrik Rydgård daa9fab32a Don't try to replace textures if there's just an empty TEXTURES/{GAMEID} folder. 2023-12-29 19:06:43 +01:00
Henrik Rydgård 3ffcf267cb Allow replacing mip levels of a texture even without a ini file. Probably niche. 2023-12-29 19:06:20 +01:00
Henrik Rydgård 80c6dbfdfe Minor: bugfix in texreplacer, darker alpha chessboard in texture viewer 2023-12-28 19:46:36 +01:00
Henrik Rydgård 3895cfff74 Add "Analog trigger threshold" setting, for conversion of analog trigger inputs to digital button inputs. 2023-12-28 13:36:03 +01:00
Henrik Rydgård faef4aae2c Add a comment on how to fix the actual bug. 2023-12-25 17:39:28 +01:00
Henrik Rydgård c2963c7941 Fix issue where "Texture replacement pack activated" wasn't displayed without an ini 2023-12-25 13:25:28 +01:00