diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2019-06-12 16:25:28 +0300 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-06-12 16:14:29 +0200 |
commit | 75df45d709445c8a74ea8b7be5c60ef3fe852a90 (patch) | |
tree | 0731f1c160ef5952d5d70de9029f6fcb52122764 /Kernel/FileSystem | |
parent | b29a83d554200182bd1bfb41b08e601c7944c4df (diff) | |
download | serenity-75df45d709445c8a74ea8b7be5c60ef3fe852a90.zip |
Kernel: Fix comparing StringViews with strcmp().
StringView character buffer is not guaranteed to be null-terminated;
in particular it will not be null-terminated when making a substring.
This means that the buffer can not be used with C functions that expect
a null-terminated string. Instead, StringView provides a convinient
operator == for comparing it with Strings and C stirngs, so use that.
This fixes /proc/self/... resolution failures in ProcFS, since the name
("self") passed to ProcFSInode::lookup() would not be null-terminated.
Diffstat (limited to 'Kernel/FileSystem')
-rw-r--r-- | Kernel/FileSystem/Ext2FileSystem.cpp | 4 | ||||
-rw-r--r-- | Kernel/FileSystem/ProcFS.cpp | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp index 0f85b40892..3ad2c9b306 100644 --- a/Kernel/FileSystem/Ext2FileSystem.cpp +++ b/Kernel/FileSystem/Ext2FileSystem.cpp @@ -767,7 +767,7 @@ KResult Ext2FSInode::add_child(InodeIdentifier child_id, const StringView& name, Vector<FS::DirectoryEntry> entries; bool name_already_exists = false; traverse_as_directory([&](auto& entry) { - if (!strcmp(entry.name, name.characters())) { + if (name == entry.name) { name_already_exists = true; return false; } @@ -812,7 +812,7 @@ KResult Ext2FSInode::remove_child(const StringView& name) Vector<FS::DirectoryEntry> entries; traverse_as_directory([&](auto& entry) { - if (strcmp(entry.name, name.characters()) != 0) + if (name != entry.name) entries.append(entry); return true; }); diff --git a/Kernel/FileSystem/ProcFS.cpp b/Kernel/FileSystem/ProcFS.cpp index aef44fcbe5..e197fd1c92 100644 --- a/Kernel/FileSystem/ProcFS.cpp +++ b/Kernel/FileSystem/ProcFS.cpp @@ -966,7 +966,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name) if (entry.name == nullptr) continue; if (entry.proc_file_type > __FI_Root_Start && entry.proc_file_type < __FI_Root_End) { - if (!strcmp(entry.name, name.characters())) { + if (name == entry.name) { return to_identifier(fsid(), PDI_Root, 0, (ProcFileType)entry.proc_file_type); } } @@ -988,7 +988,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name) if (proc_file_type == FI_Root_sys) { for (int i = 0; i < fs().m_sys_entries.size(); ++i) { auto& entry = fs().m_sys_entries[i]; - if (!strcmp(entry.name, name.characters())) + if (name == entry.name) return sys_var_to_identifier(fsid(), i); } return {}; @@ -1005,7 +1005,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name) continue; if (entry.name == nullptr) continue; - if (!strcmp(entry.name, name.characters())) { + if (name == entry.name) { return to_identifier(fsid(), PDI_PID, to_pid(identifier()), (ProcFileType)entry.proc_file_type); } } |