Repository navigation
merge Master378 to release - #4628
Merged
Merged
Conversation
# Description Remove unused fields from ReferenceNodeManager
# Description Backport the essential incomplete-message memory protection from 57c0a32 without changing public/protected APIs or configuration schemas. - Introduce a server-wide budget for retained intermediate chunks, with reliable buffer cleanup on completion, rejection, and channel shutdown. - Restrict channels without activated sessions to a 50% total-usage threshold. Track live session membership so full-budget eligibility follows activation, transfer, closure, and expiration cleanup. _Put an `x` in the boxes that apply. You can complete these step by step after opening the PR._ - [x] I have signed the [CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf) and read the [CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md) doc. - [x] I have added tests that prove my fix is effective or that my feature works and increased code coverage. - [ ] I have added all necessary documentation. - [ ] I have verified that my changes do not introduce (new) build or analyzer warnings. - [ ] I ran **all** tests locally using the **UA.slnx** solution against at least .net **framework** and .net **10**, and all passed. - [ ] I fixed **all** failing and flaky tests in the CI pipelines and **all** CodeQL warnings. - [ ] I have addressed **all** PR feedback received. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…gement checks (#4592) Populate ApplicationUri and ProductUri from application configuration, guarding absent optional nodes. Add push tests verifying both values match the advertised server identity. # Description Addresses the reported CTT complaint for Push Model for Global Certificate and TrustList Management, where these ServerConfiguration properties returned null: - ApplicationUri (ns=0;i=25706) - ProductUri (ns=0;i=25725) Initializes both properties from the application configuration, with guards for absent optional nodes. Validation: regression tests verify Good status and nonempty values matching the advertised server identity. All five variants pass; the full push fixture reports 116 passed, 9 expected skips, and no failures on .NET 10. CTT itself has not been rerun. ## Checklist _Put an `x` in the boxes that apply. You can complete these step by step after opening the PR._ - [X ] I have signed the [CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf) and read the [CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md) doc. - [X] I have added tests that prove my fix is effective or that my feature works and increased code coverage. - [ ] I have added all necessary documentation. - [X] I have verified that my changes do not introduce (new) build or analyzer warnings. - [ ] I ran **all** tests locally using the **UA.slnx** solution against at least .net **framework** and .net **10**, and all passed. - [ ] I fixed **all** failing and flaky tests in the CI pipelines and **all** CodeQL warnings. - [ ] I have addressed **all** PR feedback received.
…ubSub metadata (#4603) Minimal backports to the 1.5.378 line of three findings from the codec audit behind #4599 / #4602 (B1-1, X1-1, P1-1). All three can be reached from untrusted input. The changes are kept small, and the performance of legitimate messages is unchanged. ## Changes **B1-1: nested array preallocation (`BinaryDecoder`)** Variant, DataValue, ExtensionObject and encodeable arrays were allocated at the full length prefix before any element was read. Arrays nested in the first element of their parent all see the same remaining message, so a chain of them multiplied the allocation: about 1 KB of input in `RequestHeader.AdditionalHeader` preallocated about 200 MB before authentication. - These arrays now use the #4602 budget. An array is allocated at full length only while all such arrays still being read take at most 8 bytes per remaining message byte. Otherwise it starts at 16 KB and grows as elements are read. - The reservation is released in a `finally`. - Leaf arrays (numbers, strings, NodeIds, …) are unchanged and stay bounded by MaxArrayLength. **X1-1: XML element depth (`XmlDecoder`, `BinaryDecoder`, `JsonDecoder`)** The depth of XmlElement values and XML ExtensionObject bodies was unbounded, and the `InnerXml` setter and `CloneNode(true)` recurse once per level. A known-type XML body of about 200 KB inside a binary message terminated the process with a stack overflow. - Before any network XML is loaded into a DOM, it is now checked with a streaming reader. XML nested deeper than `MaxEncodingNestingLevels` (default 200, the same limit master uses) is rejected with `BadEncodingLimitsExceeded`. - Master's node-by-node copier is not ported. **P1-1: inbound DataSetMetaData (`UaPubSubConnection`)** Received metadata is not authenticated, yet it replaced the metadata of every reader with a matching DataSetWriterId, whichever publisher sent it. - It now only updates readers whose PublisherId filter accepts the sender, using the same rule as data messages. A reader without a PublisherId still accepts any publisher. - Master's registry cap is not needed, because 378 has no registry. ## Verification (net10.0 unless noted) | Check | Result | |---|---| | Nested Variant-array chain, 995 bytes | 199.2 MB → 3.3 MB allocated | | Known-type XML body 30 000 levels deep inside binary | process crash → `BadEncodingLimitsExceeded` | | `Opc.Ua.Types.Tests` (incl. new `DecoderNestingLimitTests`) | 327 / 327; new tests also 9 / 9 on net48 | | `Opc.Ua.Encoders.Fuzz.Tests` (crash/timeout/slow corpus) | 150 / 150 | | `Opc.Ua.Core.Tests` (Encoders + Types) | 6 327 passed, 0 failed | | `Opc.Ua.PubSub.Tests` (without broker-dependent MQTT/UDP) + new `MetaDataPublisherFilterTests` | 617 + 4 passed, 13 skipped | | Types / Core / PubSub build, all TFMs | 0 warnings | **Performance vs. db39629:** - Test cases: decoding `Variant[100000]`, `Variant(Variant[])`, `DataValue[10000]`, `ReadValueId[20000]` and `ExtensionObject[20000]`. - Allocations are byte-identical to the baseline. - Median times are within run-to-run noise over two interleaved rounds. - The only new cost is one extra streaming parse for XmlElement values. ## Notes for review - If a deployment raises `MaxEncodingNestingLevels` well above the default, the allowed XML depth rises with it. Master behaves the same way. - No public API changes. The XML depth helper is internal to `Opc.Ua.Types`, and `JsonDecoder` in `Opc.Ua.Core` has a private copy. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: romanett <7413710+romanett@users.noreply.github.com>
…fer (#4622) Force a fresh queue check after transfer so the first Publish returns saved data instead of an empty keep-alive. Reset the subscription’s expiration counter after transfer. Add tests for queued data delivery, the timing bug, and an empty keep-alive after all queued values have been delivered. # Description A durable subscription could return an empty keep-alive on the first Publish after transfer, even when values had accumulated while the client was disconnected. The server could reuse its previous keep-alive state before checking the queues. This change forces a fresh queue check after transfer and resets the subscription's expiration counter. Queued values are delivered first; normal keep-alives resume once the queues are drained. Tests cover the timing bug, data delivery after reconnecting with SendInitialValues=false, and a keep-alive after draining all queued writes, including across multiple Publish responses. ## Checklist _Put an `x` in the boxes that apply. You can complete these step by step after opening the PR._ - [x] I have signed the [CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf) and read the [CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md) doc. - [x] I have added tests that prove my fix is effective or that my feature works and increased code coverage. - [ ] I have added all necessary documentation. - [ ] I have verified that my changes do not introduce (new) build or analyzer warnings. - [ ] I ran **all** tests locally using the **UA.slnx** solution against at least .net **framework** and .net **10**, and all passed. - [ ] I fixed **all** failing and flaky tests in the CI pipelines and **all** CodeQL warnings. - [ ] I have addressed **all** PR feedback received.
## Proposed changes Minimal backport of the `GlobalDiscoveryServerClient` keep-alive part of #4158 to `master378`. On a bad keep-alive, `Session_KeepAliveAsync` took `m_lock` and called `Session.Dispose()` on the keep-alive worker. `Session.Dispose()` waits for that worker to stop, so the client deadlocked while holding `m_lock`, and every later call (for example `FindApplicationAsync`) hung. The handler now returns right away and runs the cleanup with `Task.Run`, so the keep-alive worker can stop before the session is disposed. The cleanup skips its work if the client was disposed in the meantime (it handles `ObjectDisposedException` on the lock and checks `m_disposed`). `BackgroundTaskScope` from #4158 is not on 1.5.378, so this uses a plain `Task.Run`. No public API changes. ## Related Issues - Fixes #4621 ## Types of changes - [x] Bugfix (non-breaking change which fixes an issue) ## Checklist - [x] Existing GDS client tests pass locally (`Opc.Ua.Gds.Tests` `ClientTest`, net10.0: 102/102) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
mrsuciu
approved these changes
Oct 2, 2026
This was referenced Oct 5, 2026
GoetzGoerisch
pushed a commit
to umati/connect
that referenced
this pull request
Oct 5, 2026
…5.378.182 (#52) This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [OPCFoundation.NetStandard.Opc.Ua](https://github.com/OPCFoundation/UA-.NETStandard) | `1.5.378.176` → `1.5.378.182` |  |  | --- ### Release Notes <details> <summary>OPCFoundation/UA-.NETStandard (OPCFoundation.NetStandard.Opc.Ua)</summary> ### [`v1.5.378.182`](https://github.com/OPCFoundation/UA-.NETStandard/releases/tag/1.5.378.182): OPC UA 1.05 Maintenance Update [Compare Source](OPCFoundation/UA-.NETStandard@1.5.378.176...1.5.378.182) Maintenance Release for fixing bugs found on the main378 development branch. #### Released packages [OPCFoundation.NetStandard.Opc.Ua](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Core](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Core/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Security.Certificates](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Security.Certificates/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Configuration](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Configuration/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Server](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Server/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Client](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Client/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Bindings.Https](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Bindings.Https/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.PubSub](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.PubSub/1.5.378.182) #### What's Changed - Remove unused fields from ReferenceNodeManager by [@​mrsuciu](https://github.com/mrsuciu) in [#​4472](OPCFoundation/UA-.NETStandard#4472) - Master378 fix incomplete message buffering by [@​mrsuciu](https://github.com/mrsuciu) in [#​4550](OPCFoundation/UA-.NETStandard#4550) - Fix ServerConfiguration URI values for CTT push-management checks by [@​mrsuciu](https://github.com/mrsuciu) in [#​4592](OPCFoundation/UA-.NETStandard#4592) - Bound nested array preallocation, XML depth and inbound PubSub metadata by [@​romanett](https://github.com/romanett) in [#​4603](OPCFoundation/UA-.NETStandard#4603) - Fix queued data delivery after durable subscription transfer by [@​mrsuciu](https://github.com/mrsuciu) in [#​4622](OPCFoundation/UA-.NETStandard#4622) - Fix GDS client deadlock after a failed keep-alive by [@​romanett](https://github.com/romanett) in [#​4623](OPCFoundation/UA-.NETStandard#4623) - merge Master378 to release by [@​romanett](https://github.com/romanett) in [#​4628](OPCFoundation/UA-.NETStandard#4628) **Full Changelog**: <OPCFoundation/UA-.NETStandard@1.5.378.176...1.5.378.182> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - Between 12:00 AM and 03:59 AM (`* 0-3 * * *`) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzIuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzMi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://codeberg.org/umati/connect/pulls/52 Signed-off-by: umati-bot <git-bot@umati.org>
GoetzGoerisch
pushed a commit
to umati/connect
that referenced
this pull request
Oct 5, 2026
…r to 1.5.378.182 (#53) This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [OPCFoundation.NetStandard.Opc.Ua.Server](https://github.com/OPCFoundation/UA-.NETStandard) | `1.5.378.176` → `1.5.378.182` |  |  | --- ### Release Notes <details> <summary>OPCFoundation/UA-.NETStandard (OPCFoundation.NetStandard.Opc.Ua.Server)</summary> ### [`v1.5.378.182`](https://github.com/OPCFoundation/UA-.NETStandard/releases/tag/1.5.378.182): OPC UA 1.05 Maintenance Update [Compare Source](OPCFoundation/UA-.NETStandard@1.5.378.176...1.5.378.182) Maintenance Release for fixing bugs found on the main378 development branch. #### Released packages [OPCFoundation.NetStandard.Opc.Ua](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Core](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Core/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Security.Certificates](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Security.Certificates/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Configuration](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Configuration/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Server](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Server/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Client](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Client/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.Bindings.Https](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.Bindings.Https/1.5.378.182) [OPCFoundation.NetStandard.Opc.Ua.PubSub](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua.PubSub/1.5.378.182) #### What's Changed - Remove unused fields from ReferenceNodeManager by [@​mrsuciu](https://github.com/mrsuciu) in [#​4472](OPCFoundation/UA-.NETStandard#4472) - Master378 fix incomplete message buffering by [@​mrsuciu](https://github.com/mrsuciu) in [#​4550](OPCFoundation/UA-.NETStandard#4550) - Fix ServerConfiguration URI values for CTT push-management checks by [@​mrsuciu](https://github.com/mrsuciu) in [#​4592](OPCFoundation/UA-.NETStandard#4592) - Bound nested array preallocation, XML depth and inbound PubSub metadata by [@​romanett](https://github.com/romanett) in [#​4603](OPCFoundation/UA-.NETStandard#4603) - Fix queued data delivery after durable subscription transfer by [@​mrsuciu](https://github.com/mrsuciu) in [#​4622](OPCFoundation/UA-.NETStandard#4622) - Fix GDS client deadlock after a failed keep-alive by [@​romanett](https://github.com/romanett) in [#​4623](OPCFoundation/UA-.NETStandard#4623) - merge Master378 to release by [@​romanett](https://github.com/romanett) in [#​4628](OPCFoundation/UA-.NETStandard#4628) **Full Changelog**: <OPCFoundation/UA-.NETStandard@1.5.378.176...1.5.378.182> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - Between 12:00 AM and 03:59 AM (`* 0-3 * * *`) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzIuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://codeberg.org/umati/connect/pulls/53 Signed-off-by: umati-bot <git-bot@umati.org>
This was referenced Oct 8, 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.
No description provided.