瀏覽代碼

LibC: Stop leaking FILE* from use of getgrnam and getgrgid

Andrew Kaster 3 年之前
父節點
當前提交
6eb9ebec5f
共有 1 個文件被更改,包括 3 次插入0 次删除
  1. 3 0
      Userland/Libraries/LibC/grp.cpp

+ 3 - 0
Userland/Libraries/LibC/grp.cpp

@@ -5,6 +5,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <AK/ScopeGuard.h>
 #include <AK/String.h>
 #include <AK/Vector.h>
 #include <errno.h>
@@ -58,6 +59,7 @@ void endgrent()
 struct group* getgrgid(gid_t gid)
 {
     setgrent();
+    ScopeGuard guard = [] { endgrent(); };
     while (auto* gr = getgrent()) {
         if (gr->gr_gid == gid)
             return gr;
@@ -68,6 +70,7 @@ struct group* getgrgid(gid_t gid)
 struct group* getgrnam(char const* name)
 {
     setgrent();
+    ScopeGuard guard = [] { endgrent(); };
     while (auto* gr = getgrent()) {
         if (!strcmp(gr->gr_name, name))
             return gr;