mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 17:58:18 +03:00
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.
This commit is contained in:
parent
b29a83d554
commit
75df45d709
Notes:
sideshowbarker
2024-07-19 13:38:16 +09:00
Author: https://github.com/bugaevc 🔰 Commit: https://github.com/SerenityOS/serenity/commit/75df45d7094 Pull-request: https://github.com/SerenityOS/serenity/pull/226
@ -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;
|
||||
});
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user