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

CNA snapshot 3b43bd86  ·  Known Issues › Functional gaps  ·  source links pinned to 3b43bd86

✓

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

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.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.