CNA-GAP-057: CNA::Devices host dialogs are minimal: message boxes are unparented, tray icons have no image API, and UrlLauncher passes any string to the OS
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 3b43bd86; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
MessageBox passes a null parent window, SystemTray offers only a tooltip and menu, and UrlLauncher::Open forwards its argument unvalidated to the platform (SDL_OpenURL on the SDL3 platform).
- Identifier
CNA-GAP-057- Category
- Functional gap
- Subsystem
- Platforms
- Status
- Narrowed (partially fixed; describes only what survives)
- Verified against
- CNA
3b43bd86(3b43bd8687ed46523d873f9bec4b32bd8481dcb5) - Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- CNA::Devices::MessageBox::Show, CNA::Devices::SystemTray, CNA::Devices::UrlLauncher::Open
Expected behaviour
Desktop message boxes are usually modal to the game window; tray icons usually carry an application image; a URL launcher usually restricts itself to URL schemes.
Actual behaviour at TARGET
MessageBox.cpp passes nullptr as the parent to ShowMessageBox. SystemTray.hpp has no icon-image member. UrlLauncher.cpp forwards the string to IPlatformSystemInfo::OpenUrl, and the SDL3 implementation (Sdl3SystemInfo::OpenUrl in Sdl3SystemServices.cpp) passes it unchanged to SDL_OpenURL, which hands it to the operating system's default handler; CNA applies no scheme check on the way. UrlLauncher.hpp asks for “A valid URL/URI” but CNA does not check it.
Source locations
modules/devices-ext/src/MessageBox.cpp— null parent windowmodules/platform/src/Sdl3/Sdl3SystemServices.cpp— ShowMessageBox: Enter and Escape defaults since aff773b3b; Sdl3SystemInfo::OpenUrl: SDL_OpenURL, no scheme checkmodules/devices-ext/include/CNA/Devices/SystemTray.hpp— tooltip and menu onlymodules/devices-ext/src/UrlLauncher.cpp— UrlLauncher::Open forwards unvalidated
Evidence
Checked by reading at 3b43bd86; not executed.
Narrowed at c6dec91f: aff773b3b (2026-10-23) gave the SDL3 message box keyboard defaults: the first button takes Enter and the last takes Escape (Sdl3DialogKeyboardTest in Sdl3SystemServicesTests.cpp). The unparented dialog, the missing tray image and the unchecked URL are unchanged.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
devices-ext tests use canned platforms (MessageBoxTests.cpp, SystemTrayTests.cpp, UrlLauncherTests.cpp).
Regression test
If added: a parent-window argument, an icon API and a scheme allow-list, each with a canned-platform test.
Blast radius
Applications using these CNA extensions: dialogs can appear behind a fullscreen game; untrusted strings passed to UrlLauncher reach the operating system's URL handler unchecked.
Workaround
Validate URLs (scheme allow-list) before calling UrlLauncher::Open.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Internals
- Device extensions: dialogs
- Deep dives
- Host devices: wrapper map
- Known issues
- Functional gap index