From 1f792faf34f74f7c01181470dd91453ff1d3b760 Mon Sep 17 00:00:00 2001 From: Max Wipfli Date: Tue, 6 Jul 2021 12:05:50 +0200 Subject: Kernel: Add KLexicalPath::try_join and use it This adds KLexicalPath::try_join(). As this cannot be done without allocation, it uses KString and can fail. This patch also uses it at one place. All the other cases of String::formatted("{}/{}", ...) currently rely on the return value being a String, which means they cannot easily be converted to use the new API. --- Kernel/FileSystem/VirtualFileSystem.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Kernel/FileSystem/VirtualFileSystem.cpp') diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index c67a38a6dc..be3993fcb1 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -361,7 +361,10 @@ KResult VFS::mknod(StringView path, mode_t mode, dev_t dev, Custody& base) KResultOr> VFS::create(StringView path, int options, mode_t mode, Custody& parent_custody, Optional owner) { auto basename = KLexicalPath::basename(path); - if (auto result = validate_path_against_process_veil(String::formatted("{}/{}", parent_custody.absolute_path(), basename), options); result.is_error()) + auto full_path = KLexicalPath::try_join(parent_custody.absolute_path(), basename); + if (!full_path) + return ENOMEM; + if (auto result = validate_path_against_process_veil(full_path->view(), options); result.is_error()) return result; if (!is_socket(mode) && !is_fifo(mode) && !is_block_device(mode) && !is_character_device(mode)) { -- cgit v1.2.3