fix(security): count only this page's references in the browse-filter summary

On a BrowseNext the references list already carries the earlier pages, so the
summary's denominator counted them again. Log accuracy only — the filtering
itself was already scoped to this call's appended range.

Claude-Session: https://claude.ai/code/session_015p7wGqy3YpZNCpDzTpGMKo
This commit is contained in:
Joseph Doherty
2026-08-01 09:39:51 -04:00
parent 00aa486677
commit ce404df970
2 changed files with 16 additions and 1 deletions
@@ -2754,8 +2754,11 @@ public sealed class OtOpcUaNodeManager : CustomNodeManager2
if (source is not null && !Permits(identity, OpcUaOperation.Browse, source))
throw new ServiceResultException(StatusCodes.BadUserAccessDenied);
// Only the references THIS call appends are ours to filter — on a BrowseNext the list already
// carries the earlier pages, and re-examining them would both waste work and skew the summary.
var before = references.Count;
base.Browse(context, ref continuationPoint, references);
var returned = references.Count - before;
var filtered = 0;
for (var ii = references.Count - 1; ii >= before; ii--)
@@ -2773,7 +2776,7 @@ public sealed class OtOpcUaNodeManager : CustomNodeManager2
filtered++;
}
LogAclFiltering("Browse", identity, filtered, references.Count + filtered);
LogAclFiltering("Browse", identity, filtered, returned);
}
/// <inheritdoc />