From b33efcb983441473e64e2137011e1e9e37bfd34e Mon Sep 17 00:00:00 2001 From: Oleksander Piskun Date: Thu, 8 Jan 2026 11:38:55 +0200 Subject: [PATCH 1/2] fix(daemon-name): check for forbidden character in daemon name Signed-off-by: Oleksander Piskun [skip ci] --- lib/Service/DaemonConfigService.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/Service/DaemonConfigService.php b/lib/Service/DaemonConfigService.php index 2a3e9ea4a..46a8673b8 100644 --- a/lib/Service/DaemonConfigService.php +++ b/lib/Service/DaemonConfigService.php @@ -30,6 +30,14 @@ public function __construct( ) { } + /** + * Validate that a string does not contain control characters. + * Control characters (0x00-0x1F and 0x7F) can cause issues with URL routing and display. + */ + private function containsControlCharacters(string $value): bool { + return preg_match('/[\x00-\x1F\x7F]/', $value) === 1; + } + public function registerDaemonConfig(array $params): ?DaemonConfig { $bad_patterns = ['http', 'https', 'tcp', 'udp', 'ssh']; $docker_host = (string)$params['host']; @@ -117,6 +125,12 @@ public function getDaemonConfigByName(string $name): ?DaemonConfig { } public function updateDaemonConfig(DaemonConfig $daemonConfig): ?DaemonConfig { + $name = $daemonConfig->getName() ?? ''; + if ($name === '' || $this->containsControlCharacters($name)) { + $this->logger->error('Failed to update daemon configuration: `name` contains invalid characters or is empty.'); + return null; + } + try { return $this->mapper->update($daemonConfig); } catch (Exception $e) { From 58ea4eeccfe405d5719f29062b6ce252f988dcbd Mon Sep 17 00:00:00 2001 From: Oleksander Piskun Date: Fri, 9 Jan 2026 13:01:04 +0200 Subject: [PATCH 2/2] corrected backported Signed-off-by: Oleksander Piskun --- lib/Service/DaemonConfigService.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/Service/DaemonConfigService.php b/lib/Service/DaemonConfigService.php index 46a8673b8..80d8700bd 100644 --- a/lib/Service/DaemonConfigService.php +++ b/lib/Service/DaemonConfigService.php @@ -39,6 +39,12 @@ private function containsControlCharacters(string $value): bool { } public function registerDaemonConfig(array $params): ?DaemonConfig { + $name = $params['name'] ?? ''; + if ($name === '' || $this->containsControlCharacters($name)) { + $this->logger->error('Failed to register daemon configuration: `name` contains invalid characters or is empty.'); + return null; + } + $bad_patterns = ['http', 'https', 'tcp', 'udp', 'ssh']; $docker_host = (string)$params['host']; foreach ($bad_patterns as $bad_pattern) {