Переглянути джерело

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.
Drew Stratford 5 роки тому
батько
коміт
3014fdf3bd
1 змінених файлів з 11 додано та 6 видалено
  1. 11 6
      Kernel/FileSystem/ProcFS.cpp

+ 11 - 6
Kernel/FileSystem/ProcFS.cpp

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