From 5b072fbbeced03e5cdd924a6521a96266b58a464 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Wed, 26 Dec 2007 11:02:55 +0000 Subject: [PATCH] msi: Fix several memory leaks after using IEnumSTATSTG_Next. The pwcsName field of STATSTG must be freed, otherwise the memory will be leaked. --- dlls/msi/streams.c | 5 +++++ dlls/msi/table.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/dlls/msi/streams.c b/dlls/msi/streams.c index bb86fd0e84c..9828b7f355c 100644 --- a/dlls/msi/streams.c +++ b/dlls/msi/streams.c @@ -408,17 +408,22 @@ static UINT add_streams_to_table(MSISTREAMSVIEW *sv) /* table streams are not in the _Streams table */ if (*stat.pwcsName == 0x4840) + { + CoTaskMemFree(stat.pwcsName); continue; + } stream = create_stream(sv, stat.pwcsName, TRUE, NULL); if (!stream) { count = -1; + CoTaskMemFree(stat.pwcsName); break; } IStorage_OpenStream(sv->db->storage, stat.pwcsName, 0, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stream->stream); + CoTaskMemFree(stat.pwcsName); if (!add_stream_to_table(sv, stream, count++)) { diff --git a/dlls/msi/table.c b/dlls/msi/table.c index 7824521c413..ca6fa1b911e 100644 --- a/dlls/msi/table.c +++ b/dlls/msi/table.c @@ -265,6 +265,7 @@ void enum_stream_names( IStorage *stg ) decode_streamname( stat.pwcsName, name ); TRACE("stream %2d -> %s %s\n", n, debugstr_w(stat.pwcsName), debugstr_w(name) ); + CoTaskMemFree( stat.pwcsName ); n++; } @@ -2577,6 +2578,7 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg ) break; decode_streamname( stat.pwcsName, name ); + CoTaskMemFree( stat.pwcsName ); if ( name[0] != 0x4840 ) continue; -- 2.11.4.GIT