Module: wine Branch: master Commit: eb18bd9403e1054bd071c0939da69823d7d32744 URL: http://source.winehq.org/git/wine.git/?a=commit;h=eb18bd9403e1054bd071c0939d...
Author: Mike McCormack mike@codeweavers.com Date: Wed Oct 11 16:27:15 2006 +0900
msi: Check transforms have the correct storage guid.
---
dlls/msi/msiquery.c | 28 ++++++++++++++++++++-------- 1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/dlls/msi/msiquery.c b/dlls/msi/msiquery.c index 824a5be..1346969 100644 --- a/dlls/msi/msiquery.c +++ b/dlls/msi/msiquery.c @@ -37,6 +37,8 @@ #include "winnls.h"
#include "query.h"
+#include "initguid.h" + WINE_DEFAULT_DEBUG_CHANNEL(msi);
static void MSI_CloseView( MSIOBJECTHDR *arg ) @@ -737,30 +739,40 @@ MSIHANDLE WINAPI MsiGetLastErrorRecord(
DEFINE_GUID( CLSID_MsiTransform, 0x000c1082, 0x0000, 0x0000, 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
-UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db, +UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db, LPCWSTR szTransformFile, int iErrorCond ) { - UINT r; + HRESULT r; + UINT ret = ERROR_FUNCTION_FAILED; IStorage *stg = NULL; - + STATSTG stat; + TRACE("%p %s %d\n", db, debugstr_w(szTransformFile), iErrorCond);
r = StgOpenStorage( szTransformFile, NULL, STGM_DIRECT|STGM_READ|STGM_SHARE_DENY_WRITE, NULL, 0, &stg); - if( r ) - return r; + if ( FAILED(r) ) + return ret; + + r = IStorage_Stat( stg, &stat, STATFLAG_NONAME ); + if ( FAILED( r ) ) + goto end; + + if ( !IsEqualGUID( &stat.clsid, &CLSID_MsiTransform ) ) + goto end;
if( TRACE_ON( msi ) ) enum_stream_names( stg );
- r = msi_table_apply_transform( db, stg ); + ret = msi_table_apply_transform( db, stg );
+end: IStorage_Release( stg );
- return r; + return ret; }
-UINT WINAPI MsiDatabaseApplyTransformW( MSIHANDLE hdb, +UINT WINAPI MsiDatabaseApplyTransformW( MSIHANDLE hdb, LPCWSTR szTransformFile, int iErrorCond) { MSIDATABASE *db;