Repository navigation
Conversation
The catalogue check on dev (2e9cb42) lets a game arriving from a peer be tracked at a folder the save catalogue names for it. Inside the game's install folder that went too far: "<base>/**/*.sav" and "<base>/<storeUserId>/..." stand for save files, but matched as a folder they took in any subfolder of the install - Binaries, Engine - and a paired device could then sync files into the game's own program folder. About 110 catalogue entries have such a pattern. Inside an install folder a folder is now vouched for only as the catalogue names it, never through a wildcard, and never when it already holds a program or library. Outside install folders nothing changes.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Oct 27, 2026
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The folder-trust work from
dev, re-cut ondev-public(951cee6). It undoes the part of the 2.4.1 security fix (CVE-2026-103398) that made games wait on Home, and still doesn't let a peer choose folders.The problem. Since 2.4.1, a game arriving from another device is tracked by itself only at a folder this device's own scan has already seen. Anything else waits on Home. On a new PC, or for a game not played on this one yet, that is almost every game, so a second PC had to have each game placed by hand.
The change:
presets.CatalogueSaveLocation), or in Steam's ownuserdata/<user>/<appid>folder (SteamSaveLocation), even if the game hasn't been played here yet. The check is per game: it matches by App ID, or by name when there is no App ID. A broad root never counts (a drive, home, Documents, AppData, or the game's install folder). A catalogue wildcard never vouches for a folder inside a game's install: that is your 0eec6a3, cherry-picked with its authorship.opensave peers trust <device> on|off). For your own devices, a game goes in the folder that device names, as before 2.4.1.loadManifestIndexWithin, built on Don't hold the window for a game database rebuild #102'sloadManifestIndexNoWait.Migration 0044 (
peer_folder_trust). 0042 and 0043 are taken by open PRs (#118/#127/#128, and ChakraFusion's series againstmain). It usesIF NOT EXISTSbecause somedevbuilds created the same table as 0038.Changelog: left to your batch. Suggested wording:
opensave peers trust <device> on). It is off until you turn it on, asks first, and is removed when the device is unpaired.Tests:
presets/verify_test.go: the game's own folder before it exists; nothing else; Steam's folder; inside the install folder; the 2 s bound.p2p/cve_2026_103398_test.go: a trusted device's folder is tracked; trust is per device; trust needs the proven device; an offer clears once its folder is known; an offer is logged once. The last one fails without the fix.store/peer_folder_trust_test.go,storeoffered games.e2e/folder_choice_test.go: a catalogue game arrives before its folder exists; a trusted device's own folder syncs; an offer clears when its folder becomes known.Seen by hand. Scratch daemons built from
dev-publicwith and without this PR, plus a released 2.4.1. A fresh "Steam Deck" was paired with a "Gaming PC" that had Terraria (at the catalogue's folder) and Celeste (a plain folder).dev-public: both wait on Home. The other device's sync attempts log the offer six times in a minute.Checks:
dev-public(951cee6), the full Windows unit and e2e suites pass, with one exception:TestBuildManifest_SurvivesFilesVanishingDuringTheWalk(delta), which fails in over half of runs on this PC ondev-publicanddevalike and isn't touched here. After Games from your other devices set themselves up again; trust your own devices to choose folders #132's last commit (a fix to how the catalogue check reads the index after a rebuild),presets,p2p,daemonandapiand the folder, offer and rollback e2e tests were run again, and pass.-raceon Linux (WSL Ubuntu) passes forpresets,daemon,p2p/...,api,store,cliapp,fsx,watcherandsnapshot, and for the folder, offer and rollback e2e tests.TestSignIn_AnOldAttemptsTimerLeavesTheNewListeneronce reported a data race in its cleanup; it does the same on plaindev-public.dev-public(sync: a peer that pulled says what it now holds, so the base is recorded at once #51, Let awails devwindow reach its daemon #87, Deck: a game's start waits for its save, and its play is told to the daemon #109, sync: a game being played is held back from syncing until the session ends #117, device settings: find a game's settings by what they hold, and give back what is a save #118, i18n: extract the conflict modals and the Settings page #124, Track game: the games running now come first #126, A game tracked without an App ID is offered its game database link #127, sessions: see protected games and games installed anywhere; a safety net for the rest #128, fix(daemon): fail-closed game ownership checks and transactional path admission #131): no conflicts, and each merge builds and vets.dev-public; this PR adds no file to those conflicts.