{"record":{"id":"2a97516b07092743","repo":"nextcloud/all-in-one","slug":"you-entered-unallowed-characters-problematic-is","errorCode":null,"errorMessage":"You entered unallowed characters! Problematic is ${entry}","messagePattern":"You entered unallowed characters! Problematic is (.+?)","errorType":"validation","errorClass":"InvalidSettingConfigurationException","httpStatus":422,"severity":"warning","filePath":"php/src/Data/ConfigurationManager.php","lineNumber":986,"sourceCode":"    }\n\n    public function deleteDailyBackupTime() : void {\n        if (file_exists(DataConst::GetDailyBackupTimeFile())) {\n            unlink(DataConst::GetDailyBackupTimeFile());\n        }\n        $this->dailyBackupFileCache = '';\n        $this->dailyBackupFileMtime = 0;\n    }\n\n    public function setAdditionalBackupDirectories(string $additionalBackupDirectories) : void {\n        $additionalBackupDirectoriesArray = explode(\"\\n\", $additionalBackupDirectories);\n        $validDirectories = '';\n        foreach($additionalBackupDirectoriesArray as $entry) {\n            // Trim all unwanted chars on both sites\n            $entry = trim($entry);\n            if ($entry !== \"\") {\n                if (!preg_match(\"#^/[.0-9a-zA-Z/_-]+$#\", $entry) && !preg_match(\"#^[.0-9a-zA-Z_-]+$#\", $entry)) {\n                    throw new InvalidSettingConfigurationException(\"You entered unallowed characters! Problematic is \" . $entry);\n                }\n                $validDirectories .= rtrim($entry, '/') . PHP_EOL;\n            }\n        }\n\n        if ($validDirectories === '') {\n            unlink(DataConst::GetAdditionalBackupDirectoriesFile());\n        } else {\n            file_put_contents(DataConst::GetAdditionalBackupDirectoriesFile(), $validDirectories);\n        }\n    }\n\n    public function getAdditionalBackupDirectoriesString() : string {\n        if (!file_exists(DataConst::GetAdditionalBackupDirectoriesFile())) {\n            return '';\n        }\n        return (string)file_get_contents(DataConst::GetAdditionalBackupDirectoriesFile());\n    }","sourceCodeStart":968,"sourceCodeEnd":1004,"githubUrl":"https://github.com/nextcloud/all-in-one/blob/6b788eec5e61733cf03ed380a3572e43ae3f11ce/php/src/Data/ConfigurationManager.php#L968-L1004","documentation":"Thrown by setAdditionalBackupDirectories when a line of the newline-separated input matches neither ^/[.0-9a-zA-Z/_-]+$ (absolute path) nor ^[.0-9a-zA-Z_-]+$ (bare name treated as a host directory under the docker volumes prefix). Entries are trimmed first, so whitespace alone is fine; any other character (colon, space inside the path, unicode, backslash) rejects that line.","triggerScenarios":"Submitting additional_backup_directories containing entries like 'C:\\data' (backslash), '/mnt/my data' (space), '/backups:ro' (colon), or relative paths with dots not matching the bare-name pattern such as '../etc'.","commonSituations":"Windows-style paths pasted into the form; copy-pasting paths with trailing remarks or spaces inside; assuming docker-style volume syntax (host:container:mode) is accepted here.","solutions":["Use plain absolute Linux paths containing only letters, digits, dots, underscores, hyphens and slashes, one per line.","Remove spaces, colons and backslashes from each entry.","For directories with disallowed characters, create a symlink with a clean name on the host and add the symlink path instead."],"exampleFix":"// before\n$dirs = \"/mnt/backup data\\n/backups:ro\";\n\n// after\n$dirs = \"/mnt/backup_data\\n/backups\";","handlingStrategy":"validation","validationCode":"$ok = preg_match('#^/[.0-9a-zA-Z/_-]+$#', $entry) || preg_match('#^[.0-9a-zA-Z_-]+$#', $entry);\nif (!$ok) {\n    // sanitize or reject the line before submitting the form\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Normalize paths to POSIX style and strip spaces/colons before submission.","Symlink oddly-named directories to clean names on the host."],"tags":["php","nextcloud-aio","input-validation","path-validation","backup"],"backgroundTag":"invalid-characters-in-path","analyzedSha":"6b788eec5e61733cf03ed380a3572e43ae3f11ce","analyzedAt":"2026-08-21T05:47:24.382Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}