ProcFS: make procfs$pid_fds always returns a valid JSON array.

Previously, procfs$pid_fds would return nothing when called
for a process that had either no open files or a non-existent
handle. This could cause problems when a userspace program
expected a valid Json response.

Procfs$pid_fs now returns an empty array in the aforementioned
cases.
This commit is contained in:
Drew Stratford 2019-10-23 02:48:17 +13:00 committed by Andreas Kling
parent d063734f69
commit 3014fdf3bd

View file

@ -198,15 +198,20 @@ ProcFS::~ProcFS()
Optional<KBuffer> procfs$pid_fds(InodeIdentifier identifier)
{
auto handle = ProcessInspectionHandle::from_pid(to_pid(identifier));
if (!handle)
return {};
auto& process = handle->process();
if (process.number_of_open_file_descriptors() == 0)
return {};
KBufferBuilder builder;
JsonArraySerializer array { builder };
auto handle = ProcessInspectionHandle::from_pid(to_pid(identifier));
if (!handle) {
array.finish();
return builder.build();
}
auto& process = handle->process();
if (process.number_of_open_file_descriptors() == 0) {
array.finish();
return builder.build();
}
for (int i = 0; i < process.max_open_file_descriptors(); ++i) {
auto* description = process.file_description(i);
if (!description)