Hans Leidekker : msi: Encode stream name in the callers of db_get_raw_stream.

Alexandre Julliard julliard at winehq.org
Fri Feb 19 09:21:35 CST 2010


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Feb 19 12:26:30 2010 +0100

msi: Encode stream name in the callers of db_get_raw_stream.

---

 dlls/msi/database.c |   23 ++++++++++-------------
 dlls/msi/table.c    |    8 +++++---
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/dlls/msi/database.c b/dlls/msi/database.c
index 757be67..8ec2411 100644
--- a/dlls/msi/database.c
+++ b/dlls/msi/database.c
@@ -125,20 +125,14 @@ static UINT clone_open_stream( MSIDATABASE *db, LPCWSTR name, IStream **stm )
 
 UINT db_get_raw_stream( MSIDATABASE *db, LPCWSTR stname, IStream **stm )
 {
-    LPWSTR encname;
     HRESULT r;
 
-    encname = encode_streamname(FALSE, stname);
-
-    TRACE("%s -> %s\n",debugstr_w(stname),debugstr_w(encname));
+    TRACE("%s\n", debugstr_w(stname));
 
-    if (clone_open_stream( db, encname, stm ) == ERROR_SUCCESS)
-    {
-        msi_free( encname );
+    if (clone_open_stream( db, stname, stm ) == ERROR_SUCCESS)
         return ERROR_SUCCESS;
-    }
 
-    r = IStorage_OpenStream( db->storage, encname, NULL,
+    r = IStorage_OpenStream( db->storage, stname, NULL,
                              STGM_READ | STGM_SHARE_EXCLUSIVE, 0, stm );
     if( FAILED( r ) )
     {
@@ -147,15 +141,13 @@ UINT db_get_raw_stream( MSIDATABASE *db, LPCWSTR stname, IStream **stm )
         LIST_FOR_EACH_ENTRY( transform, &db->transforms, MSITRANSFORM, entry )
         {
             TRACE("looking for %s in transform storage\n", debugstr_w(stname) );
-            r = IStorage_OpenStream( transform->stg, encname, NULL,
+            r = IStorage_OpenStream( transform->stg, stname, NULL,
                                      STGM_READ | STGM_SHARE_EXCLUSIVE, 0, stm );
             if (SUCCEEDED(r))
                 break;
         }
     }
 
-    msi_free( encname );
-
     if( SUCCEEDED(r) )
     {
         MSISTREAM *stream;
@@ -181,10 +173,15 @@ UINT read_raw_stream_data( MSIDATABASE *db, LPCWSTR stname,
     ULONG sz, count;
     IStream *stm = NULL;
     STATSTG stat;
+    LPWSTR encname;
+
+    encname = encode_streamname( FALSE, stname );
+    r = db_get_raw_stream( db, encname, &stm );
+    msi_free( encname );
 
-    r = db_get_raw_stream( db, stname, &stm );
     if( r != ERROR_SUCCESS)
         return ret;
+
     r = IStream_Stat(stm, &stat, STATFLAG_NONAME );
     if( FAILED( r ) )
     {
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index cc40515..6737ac5 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1168,7 +1168,7 @@ static UINT TABLE_fetch_stream( struct tagMSIVIEW *view, UINT row, UINT col, ISt
 {
     MSITABLEVIEW *tv = (MSITABLEVIEW*)view;
     UINT r;
-    LPWSTR full_name = NULL;
+    LPWSTR encname, full_name = NULL;
 
     if( !view->ops->fetch_int )
         return ERROR_INVALID_PARAMETER;
@@ -1180,11 +1180,13 @@ static UINT TABLE_fetch_stream( struct tagMSIVIEW *view, UINT row, UINT col, ISt
         return r;
     }
 
-    r = db_get_raw_stream( tv->db, full_name, stm );
+    encname = encode_streamname( FALSE, full_name );
+    r = db_get_raw_stream( tv->db, encname, stm );
     if( r )
         ERR("fetching stream %s, error = %d\n",debugstr_w(full_name), r);
-    msi_free( full_name );
 
+    msi_free( full_name );
+    msi_free( encname );
     return r;
 }
 




More information about the wine-cvs mailing list