Module: wine Branch: master Commit: 687c4f5c8dc65def6fc066d5d802d7448db70d7f URL: https://gitlab.winehq.org/wine/wine/-/commit/687c4f5c8dc65def6fc066d5d802d74...
Author: Alex Henrie alexhenrie24@gmail.com Date: Fri Feb 3 22:52:07 2023 -0700
msi: Handle memory allocation failure in get_link_file (cppcheck).
---
dlls/msi/action.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index b6f22308e3a..8b3d1c42aa5 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -3655,7 +3655,7 @@ static UINT ACTION_UnregisterTypeLibraries( MSIPACKAGE *package ) static WCHAR *get_link_file( MSIPACKAGE *package, MSIRECORD *row ) { LPCWSTR directory, extension, link_folder; - LPWSTR link_file, filename; + WCHAR *link_file = NULL, *filename, *new_filename;
directory = MSI_RecordGetString( row, 2 ); link_folder = msi_get_target_folder( package, directory ); @@ -3668,18 +3668,22 @@ static WCHAR *get_link_file( MSIPACKAGE *package, MSIRECORD *row ) msi_create_full_path( package, link_folder );
filename = msi_dup_record_field( row, 3 ); + if (!filename) return NULL; msi_reduce_to_long_filename( filename );
extension = wcsrchr( filename, '.' ); if (!extension || wcsicmp( extension, L".lnk" )) { int len = lstrlenW( filename ); - filename = realloc( filename, len * sizeof(WCHAR) + sizeof(L".lnk") ); + new_filename = realloc( filename, len * sizeof(WCHAR) + sizeof(L".lnk") ); + if (!new_filename) goto done; + filename = new_filename; memcpy( filename + len, L".lnk", sizeof(L".lnk") ); } link_file = msi_build_directory_name( 2, link_folder, filename ); - free( filename );
+done: + free( filename ); return link_file; }