Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Plain parsing accepts trailing data, and custom URL validation mishandles query-only or malformed templates.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds configurable custom HTTP manifest sources with {gid} URL templates and selectable response formats while preserving built-in providers and Lua precedence.
Changes:
- Adds
plainandsteamruncustom manifest parsers. - Updates configuration fallback behavior and documentation.
- Normalizes line endings in touched files.
File summaries
| File | Summary |
|---|---|
src/xinput1_4/xinput1_4.def |
Line-ending normalization. |
src/Utils/SteamMetadata/ManifestClient.h |
Custom provider API declarations. |
src/Utils/SteamMetadata/ManifestClient.cpp |
Custom URL providers and response parsing; URL validation and strict parsing findings remain. |
src/Utils/Logging/Log.h |
Line-ending normalization. |
src/Utils/Config/LuaFileWatcher.h |
Line-ending normalization. |
src/Utils/Config/Config.h |
Manifest configuration documentation updates. |
src/Utils/Config/Config.cpp |
Manifest format loading and provider fallback handling. |
src/Hook/Hooks_Package.h |
Line-ending normalization. |
src/Hook/Hooks_CallBack.h |
Line-ending normalization. |
src/Hook/Hooks_CallBack.cpp |
Line-ending normalization. |
src/dwmapi/dwmapi.cpp |
Line-ending normalization. |
src/dllmain.h |
Line-ending normalization. |
README.md |
English documentation updates. |
README_ZH.md |
Chinese documentation updates. |
README_ES.md |
Spanish documentation updates. |
opensteamtool.example.toml |
Custom manifest configuration example. |
build.bat |
Line-ending normalization. |
.github/workflows/ci.yml |
Line-ending normalization. |
Review details
Suppressed comments (1)
src/Utils/SteamMetadata/ManifestClient.cpp:75
IsCustomTemplateaccepts query-only URLs such ashttps://host?gid={gid}, butOSTPlatform::Http::ParseUrltreats the wholehost?gid=...string as the hostname when there is no slash, soWinHttpConnectcannot resolve the request. Since the new setting is documented as an arbitraryhttp(s)URL template, either normalize this valid URI form in the HTTP parser or reject/document it explicitly instead of activating a provider that will fail on every request.
const bool http = url.starts_with("http://") || url.starts_with("https://");
return http && url.find("{gid}") != std::string_view::npos;
- Files reviewed: 8/18 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
aitronz
force-pushed
the
manifest-custom-sources
branch
5 times, most recently
from
September 13, 2026 19:03
3a745e2 to
96fca33
Compare
[manifest] url now accepts a built-in provider name or a custom
http(s) URL template containing {gid}. A new [manifest] format key
("plain" | "steamrun", default "plain") selects the response
parser for custom URLs; built-in providers keep their hardcoded
parsers. Invalid values warn and fall back to opensteamtool.
aitronz
force-pushed
the
manifest-custom-sources
branch
from
September 13, 2026 19:09
96fca33 to
3d7bf81
Compare
aitronz
added a commit
to aitronz/OpenSteamTool-exp
that referenced
this pull request
Sep 13, 2026
…t] url template + format (aitronz) # Conflicts: # README.md
YS-CODE-GO
added a commit
to YS-CODE-GO/OpenSteamTool
that referenced
this pull request
Sep 14, 2026
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.
Why
Manifest providers are hardcoded: 3 entries in
kProviders(src/Utils/SteamMetadata/ManifestClient.cpp), selected by name through[manifest] url. Anyone running their own request-code endpoint had to patch code and rebuild to use it.What
[manifest] urlnow accepts a built-in name (opensteamtool/wudrm/steamrun) or a customhttp(s)URL template containing a{gid}placeholder.[manifest] formatkey selects the response parser for custom URLs:plain(bare digits, default) orsteamrun({"content":"..."}). Built-in providers keep their hardcoded parsers, so existing configs cannot break.Http::Executeenforces (non-empty host, valid:port), so a malformed URL warns and falls back to the default instead of installing a dead provider.plainparsing is strict (full-consumption viaNumbers::ParseUInt64, trailing newline tolerated), so error pages starting with digits are rejected rather than misread as codes.ManifestClient::kDefaultProviderName); invalidurl/ unknownformatlog a warning and fall back to it (existing fallback behavior).fetch_manifest_code/fetch_manifest_code_exkeep top priority, untouched.opensteamtool.example.toml+ EN/ES/ZH READMEs.Verification
git diff --checkclean on all touched files; content diffs reviewed.Numbers.cpp(strict rejections, newline tolerance, overflow, bad ports/hosts/schemes — all pass).Out of scope
Non request-code protocols (auth headers, app_id-keyed file-download APIs serving manifest ZIPs) cannot be expressed as a URL template — those belong in
manifest.lua(http_get/http_postwith headers), which already supports arbitrary endpoints.