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:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user