mlang: fix memory leaks in error path (found by Smatch).

Michael Stefaniuc mstefani at redhat.com
Mon Sep 24 09:53:11 CDT 2007


Tijl Coosemans wrote:
> On Monday 24 September 2007 14:20:51 Lionel_Debroux wrote:
>> ConvertINetString leaks some heap memory in an error path. Found in
>> Michael Stefaniuc's list of Wine potential bugs detected by Smatch.
>>
>> 2007-09-24  Lionel Debroux <lionel_debroux at yahoo.fr>
>>        * dlls/mlang/mlang.c:
>>        mlang: fix memory leaks in error path (found by Smatch).
>>
>> diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c
>> index eb14ad0..c6274c5 100644
>> --- a/dlls/mlang/mlang.c
>> +++ b/dlls/mlang/mlang.c
>> @@ -635,9 +635,10 @@ HRESULT WINAPI ConvertINetString(
>>          pDstStrW = HeapAlloc(GetProcessHeap(), 0, cDstSizeW * sizeof(WCHAR));
>>          hr = ConvertINetMultiByteToUnicode(pdwMode, dwSrcEncoding, pSrcStr, pcSrcSize, pDstStrW, &cDstSizeW);
>>          if (hr != S_OK)
>> -            return hr;
>> +            goto cleanup;
>>  
>>          hr = ConvertINetUnicodeToMultiByte(pdwMode, dwDstEncoding, pDstStrW, &cDstSizeW, pDstStr, pcDstSize);
>> +cleanup:
>>          HeapFree(GetProcessHeap(), 0, pDstStrW);
>>          return hr;
>>      }
> 
> This is a bikeshed issue really, but I wonder what Wine's policy on
> gotos like this is. Imo, it's better to add the HeapFree call to the if
> block and let the compiler work it out.
It really depends on the code. If you have a lot of error paths with a
lot of cleanup to do in them then gotos are way cleaner and easier to read.

bye
	michael
-- 
Michael Stefaniuc               Tel.: +49-711-96437-199
Sr. Network Engineer            Fax.: +49-711-96437-111
--------------------------------------------------------------------
Reg. Adresse: Red Hat GmbH, Hauptstätter Strasse 58, 70178 Stuttgart
Handelsregister: Amtsgericht Stuttgart HRB 153243
Geschäftsführer: Brendan Lane, Charlie Peters, Michael Cunningham,
                 Werner Knoblich



More information about the wine-devel mailing list