Commit Graph
67 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 283ec4db4c Atrac: Fix host heap overflow from a loop start past the end of the file
A crafted RIFF smpl chunk could put the stream read offset past the end
of the file. CalculateStreamInfo() and AddStreamData() then subtracted it
from the file size in unsigned arithmetic, the remaining size wrapped, and
the guest's data was copied to a guest-chosen distance past dataBuf_.

Check the offset before subtracting, and route every copy into dataBuf_
through a helper that clamps it to the file. SeekToSample() no longer
prefills from past the end, and dataBuf_'s slack covers a whole frame.

This is the old Atrac implementation, which is only used when chosen in
the config or when loading old savestates.

Discovered and reported by redthing1 (https://github.com/redthing1) of
V12 Security.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 14:27:01 +02:00
Henrik Rydgård 4d7b51d8cb Reimplement AA3 header parsing 2025-07-22 17:48:20 +02:00
Henrik Rydgård 5c77ff9147 Atrac: Rework the header dependencies 2025-06-25 11:34:07 +02:00
Henrik Rydgård ea29fd284f sceAtrac: Logging improvements, constification (and not) 2025-06-24 21:36:04 +02:00
Henrik Rydgård 870995a767 Mostly restore the old code path 2025-03-25 22:19:09 +01:00
Henrik Rydgård 5ea7729f66 More work on atrac-through-sas 2025-03-25 22:01:33 +01:00
Henrik Rydgård 172e54286e Refactor a bit to make it easier to expose the streaming state to the debugger. 2025-03-25 22:01:33 +01:00
Henrik Rydgård 1bd5cffa1d Initial work on re-implementing atrac-through-sas 2025-03-25 22:01:30 +01:00
Henrik Rydgård e70dd3b2df Break out AtracTrack into its own file. Add a little atrac analysis tool to ImDebugger (for future use) 2025-03-19 16:15:51 +01:00
Henrik Rydgård ec169e9fa9 Sol Trigger fix 2025-03-19 11:41:13 +01:00
Henrik Rydgård da2b3fdd13 Warning fixes. Don't clamp readsize to reported file size. 2025-03-19 10:42:32 +01:00
Henrik Rydgård 6d7625ea6b Implement save state support, with backwards compatibility. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 89a73be155 Compute the joint-stereo flag as needed instead of storing it. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 01076d2a4f InitLowLevel parameter cleanup 2025-03-18 09:36:33 +01:00
Henrik Rydgård 4a4332b22e Remove hack where we snuck AtracID into the contexts. Not suppose to be there. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 34c21ed271 track_ removal, part 2 - done! 2025-03-18 09:36:33 +01:00
Henrik Rydgård 02f06faad1 Atrac2 track_ removal, part 1 2025-03-18 09:36:33 +01:00
Henrik Rydgård 4379c1ad49 Rebase fixups 2025-03-18 09:36:33 +01:00
Henrik Rydgård bb436cda8f Reimplement a lot of logic, implement loop streaming properly 2025-03-18 09:36:33 +01:00
Henrik Rydgård b99348383c Some new findings, loop work 2025-03-18 09:36:33 +01:00
Henrik Rydgård 4d7a8b8233 Some type and comment cleanup 2025-03-18 09:36:33 +01:00
Henrik Rydgård 92737be87e Minor simplification 2025-03-18 09:36:33 +01:00
Henrik Rydgård 9623cd4897 Fix playback of fully loaded tracks, fix memory leak 2025-03-18 09:36:33 +01:00
Henrik Rydgård 8b02766702 Some cleanup and refactor. 2025-03-18 09:36:33 +01:00
Henrik Rydgård bab09ea30a Implement sceAtracGetInternalError 2025-03-18 09:36:33 +01:00
Henrik Rydgård 54acb07ded ImDebugger: Add more atrac information 2025-03-18 09:36:32 +01:00
Henrik Rydgård 724fc1dd95 Work on the new implementation. 2025-03-18 09:36:32 +01:00
Henrik Rydgård 818e7a99bd minor refactor 2025-03-17 11:02:59 +01:00
Henrik Rydgård 63c997b973 Fix an ordering issue in Atrac context creation 2025-03-16 22:46:44 +01:00
Henrik Rydgård b7782d98f3 Prepare for Atrac context data to work the new way. Not actually active yet. Also restrict old versions to 4 contexts. 2025-03-16 19:32:03 +01:00
Henrik Rydgård 4fbdb58beb Merge the "Analyze" function into SetData 2025-03-16 19:32:00 +01:00
Henrik Rydgård 3979b6af54 Combine the two Analyze functions 2025-03-16 12:59:32 +01:00
Henrik Rydgård 8ab41e387e Reorganize to make the next step easier 2025-03-16 12:21:55 +01:00
Henrik Rydgård bcf89754c7 First step: Split out the track analysis. 2025-03-16 12:21:55 +01:00
Henrik Rydgård 3d143a0cba Finally get rid of the GetTrack() accessor 2025-03-16 11:29:00 +01:00
Henrik Rydgård a3b43d8283 Refactor CurrentSample and ResetPlayPosition 2025-03-16 11:18:33 +01:00
Henrik Rydgård fd9564166b More GetTrack removal 2025-03-16 11:06:52 +01:00
Henrik Rydgård b406f3a9d1 Move the GetSoundSample implementation behind the AtracBase interface 2025-03-16 09:48:13 +01:00
Henrik Rydgård 5bd1ae5bae Move more validation logic into AtracBase 2025-03-16 09:48:13 +01:00
Henrik Rydgård beaced1c87 Move loop status and reset info param validation in behind the AtracBase interface 2025-03-16 09:48:13 +01:00
Henrik Rydgård 9788a770a7 Add a DecodeLowLevel wrapper to the AtracBase interface 2025-03-16 09:47:36 +01:00
Henrik Rydgård c33a86561f Remove the strange "successCode" argument to SetData 2025-03-16 09:00:27 +01:00
Henrik Rydgård 812b22a224 Atrac: Forward-port comments from the other branches 2025-03-08 23:39:15 +01:00
Henrik Rydgård 59a4eb0ea5 Add Atrac error codes to the big enum 2025-02-24 12:07:21 -06:00
Henrik Rydgård 2eaffcf510 ImDebugger: Add atrac context viewer 2024-11-15 15:59:16 +01:00
Henrik Rydgård 917f5897bd Add back a lost-in-refactoring hack for the SasAudio/sceAtrac integration.
Fixes #19075
2024-04-29 19:58:11 +02:00
Henrik Rydgård 5b625bfd3e Share GetSecondBufferInfo between implementations 2024-04-16 23:07:03 +02:00
Henrik Rydgård f05f9a6de3 Code cleanup and comments 2024-04-16 22:54:53 +02:00
Henrik Rydgård f3d6c93339 Add empty AtracCtx2 implementation, and a dev setting to select it. Savestates don't work. 2024-04-15 13:50:16 +02:00
Henrik Rydgård 5e8a46fde0 Slim down the AtracBase class 2024-04-15 12:50:51 +02:00