Skip to content

Prevent duplicate event listener registrations#1748

Merged
kevinherron merged 1 commit into
eclipse-milo:mainfrom
kevinherron:codex/fix-event-listener-duplication-in-notifier
May 17, 2026
Merged

Prevent duplicate event listener registrations#1748
kevinherron merged 1 commit into
eclipse-milo:mainfrom
kevinherron:codex/fix-event-listener-duplication-in-notifier

Conversation

@kevinherron
Copy link
Copy Markdown
Contributor

Motivation

  • Fix a regression where the server EventNotifier allowed duplicate EventListener registrations, enabling a remote client to amplify event delivery work and cause unbounded listener growth (DoS risk).

Description

  • Replace the ServerEventNotifier backing collection from a synchronized List to a synchronized LinkedHashSet to make register() idempotent and prevent duplicate listener entries while preserving insertion order and snapshot-based delivery (List.copyOf(eventListeners)).
  • Add import for LinkedHashSet and change the field type to Set<EventListener> in opc-ua-sdk/sdk-server/src/main/java/org/eclipse/milo/opcua/sdk/server/OpcUaServer.java.
  • Add regression tests in opc-ua-sdk/sdk-server/src/test/java/org/eclipse/milo/opcua/sdk/server/ServerEventNotifierTest.java that assert repeated register() calls result in a single delivery and that a single unregister() removes the listener.

Codex Task

@kevinherron kevinherron added this to the 1.1.4 milestone May 17, 2026
@kevinherron kevinherron merged commit c8ef830 into eclipse-milo:main May 17, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant