msi: Decode stream names in load_streams.

This commit is contained in:
Hans Leidekker 2015-03-04 14:29:29 +01:00 committed by Alexandre Julliard
parent a85d23bfc3
commit af6281701d
1 changed files with 13 additions and 10 deletions

View File

@ -425,23 +425,22 @@ static MSISTREAM *find_stream( MSIDATABASE *db, const WCHAR *name )
static UINT append_stream( MSIDATABASE *db, const WCHAR *name, IStream *stream )
{
WCHAR decoded[MAX_STREAM_NAME_LEN + 1];
UINT i = db->num_streams;
if (!streams_resize_table( db, db->num_streams + 1 ))
return ERROR_OUTOFMEMORY;
decode_streamname( name, decoded );
db->streams[i].str_index = msi_add_string( db->strings, decoded, -1, StringNonPersistent );
db->streams[i].str_index = msi_add_string( db->strings, name, -1, StringNonPersistent );
db->streams[i].stream = stream;
db->num_streams++;
TRACE("added %s\n", debugstr_w( decoded ));
TRACE("added %s\n", debugstr_w( name ));
return ERROR_SUCCESS;
}
static UINT load_streams( MSIDATABASE *db )
{
WCHAR decoded[MAX_STREAM_NAME_LEN + 1];
IEnumSTATSTG *stgenum;
STATSTG stat;
HRESULT hr;
@ -460,25 +459,29 @@ static UINT load_streams( MSIDATABASE *db )
break;
/* table streams are not in the _Streams table */
if (stat.type != STGTY_STREAM || *stat.pwcsName == 0x4840 ||
find_stream( db, stat.pwcsName ))
if (stat.type != STGTY_STREAM || *stat.pwcsName == 0x4840)
{
CoTaskMemFree( stat.pwcsName );
continue;
}
TRACE("found new stream %s\n", debugstr_w( stat.pwcsName ));
decode_streamname( stat.pwcsName, decoded );
if (find_stream( db, decoded ))
{
CoTaskMemFree( stat.pwcsName );
continue;
}
TRACE("found new stream %s\n", debugstr_w( decoded ));
hr = open_stream( db, stat.pwcsName, &stream );
CoTaskMemFree( stat.pwcsName );
if (FAILED( hr ))
{
ERR("unable to open stream %08x\n", hr);
CoTaskMemFree( stat.pwcsName );
r = ERROR_FUNCTION_FAILED;
break;
}
r = append_stream( db, stat.pwcsName, stream );
CoTaskMemFree( stat.pwcsName );
r = append_stream( db, decoded, stream );
if (r != ERROR_SUCCESS)
break;
}