fix(fifa17): make an unhandled club defId= list visible instead of silent

A health sweep of all 51 host routes found no errors, but did find a gap against
the documented club grammar: the client may send a comma-joined `defId=` list
INSTEAD of the filter block, and `parse_club_query` handled nine parameters
without it. Today such a request is answered with the whole filtered club rather
than the requested definitions — silently.

Deliberately NOT implementing the filter. That grammar is single-source (one
decompile plus one live log line, and the log line carried no defId), so the
reading of "definition id" is unconfirmed against any observed request. Narrowing
on a wrong reading would turn "too many items" into "zero items", which is the
worse failure and the harder one to diagnose.

So the parameter is parsed and reported instead: the filter summary gains
`defId=<n>` and the host logs a NOTICE naming the ids and saying plainly that the
response was not narrowed. The first real occurrence is then impossible to miss,
and the filter can be written against a captured request rather than a guess.

Verified live: the notice fires and total stays 1966.
This commit is contained in:
funman300
2026-08-21 21:58:29 +00:00
parent d74aee33f7
commit d76c184cf1
2 changed files with 59 additions and 0 deletions
+16
View File
@@ -2206,6 +2206,22 @@ pub fn handle_club(query: &str, deps: &ClubDeps<'_>) -> (WireResponse, ClubLog)
if !deps.hidden.is_empty() {
filter.push_str(&format!(",hidden={}", deps.hidden.len()));
}
// The documented club grammar allows a comma-joined `defId=` list INSTEAD of
// the filter block, and this host does not narrow on it. That grammar is
// single-source and no observed request has ever carried one, so guessing the
// semantics could turn "too many items" into "zero items". Make the first
// real occurrence impossible to miss instead of silently answering wrong.
if !raw.def_ids.is_empty() {
filter.push_str(&format!(",defId={}", raw.def_ids.len()));
eprintln!(
"utas-host owner=RUST route=club NOTICE unhandled defId list ({} id(s): {:?}) \
the response is NOT narrowed to them. This is the first observation of a \
parameter only ever seen in a decompile; capture the full request and \
implement the filter against it.",
raw.def_ids.len(),
&raw.def_ids[..raw.def_ids.len().min(8)]
);
}
match deps.core.query_owned(&base.to_query_pairs()) {
Ok(page) => {