[PATCH 2/4] winemenubuilder: Fix memory leak in write_desktop_entry (Coverity)

Alex Henrie alexhenrie24 at gmail.com
Tue Dec 28 22:14:09 CST 2021


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 programs/winemenubuilder/winemenubuilder.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index 620086f9776..1a11afb7791 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -1251,6 +1251,7 @@ static BOOL write_desktop_entry(const WCHAR *link, const WCHAR *location, const
     int needs_chmod = FALSE;
     const WCHAR *name;
     const WCHAR *prefix = _wgetenv( L"WINECONFIGDIR" );
+    WCHAR *default_location = NULL;
 
     WINE_TRACE("(%s,%s,%s,%s,%s,%s,%s,%s,%s)\n", wine_dbgstr_w(link), wine_dbgstr_w(location),
                wine_dbgstr_w(linkname), wine_dbgstr_w(path), wine_dbgstr_w(args),
@@ -1260,13 +1261,17 @@ static BOOL write_desktop_entry(const WCHAR *link, const WCHAR *location, const
     name = PathFindFileNameW( linkname );
     if (!location)
     {
-        location = heap_wprintf(L"%s\\%s.desktop", xdg_desktop_dir, name);
+        default_location = heap_wprintf(L"%s\\%s.desktop", xdg_desktop_dir, name);
+        location = default_location;
         needs_chmod = TRUE;
     }
 
     file = _wfopen( location, L"wb" );
     if (file == NULL)
+    {
+        heap_free(default_location);
         return FALSE;
+    }
 
     fprintf(file, "[Desktop Entry]\n");
     fprintf(file, "Name=%s\n", wchars_to_utf8_chars(name));
@@ -1303,9 +1308,13 @@ static BOOL write_desktop_entry(const WCHAR *link, const WCHAR *location, const
     {
         DWORD ret = register_menus_entry(location, link);
         if (ret != ERROR_SUCCESS)
+        {
+            heap_free(default_location);
             return FALSE;
+        }
     }
 
+    heap_free(default_location);
     return TRUE;
 }
 
-- 
2.34.1




More information about the wine-devel mailing list