Hans Leidekker : msi: Properly build the shortcut target path.

Alexandre Julliard julliard at winehq.org
Tue Oct 11 14:03:38 CDT 2011


Module: wine
Branch: master
Commit: e973115a798380fb5ebd87377492c04307afca22
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e973115a798380fb5ebd87377492c04307afca22

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Oct 11 11:03:02 2011 +0200

msi: Properly build the shortcut target path.

---

 dlls/msi/action.c |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 80bcfc8..72d431a 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -3611,9 +3611,26 @@ static UINT ITERATE_CreateShortcuts(MSIRECORD *row, LPVOID param)
     target = MSI_RecordGetString(row, 5);
     if (strchrW(target, '['))
     {
-        deformat_string(package, target, &deformated);
-        IShellLinkW_SetPath(sl,deformated);
-        msi_free(deformated);
+        int len;
+        WCHAR *format_string, *p;
+
+        if (!(p = strchrW( target, ']' ))) goto err;
+        len = p - target + 1;
+        format_string = msi_alloc( (len + 1) * sizeof(WCHAR) );
+        memcpy( format_string, target, len * sizeof(WCHAR) );
+        format_string[len] = 0;
+        deformat_string( package, format_string, &deformated );
+        msi_free( format_string );
+
+        path = msi_alloc( (strlenW( deformated ) + strlenW( p + 1 ) + 2) * sizeof(WCHAR) );
+        strcpyW( path, deformated );
+        PathAddBackslashW( path );
+        strcatW( path, p + 1 );
+        TRACE("target path is %s\n", debugstr_w(path));
+
+        IShellLinkW_SetPath( sl, path );
+        msi_free( deformated );
+        msi_free( path );
     }
     else
     {




More information about the wine-cvs mailing list