gdiplus: Don't prematurely release stream.

This commit is contained in:
Evan Stade 2007-08-07 18:42:16 -07:00 committed by Alexandre Julliard
parent de351ab991
commit 7d03a41325
1 changed files with 11 additions and 9 deletions

View File

@ -803,6 +803,8 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
if(!hwmf || !metafile || !placeable) if(!hwmf || !metafile || !placeable)
return InvalidParameter; return InvalidParameter;
*metafile = NULL;
read = GetMetaFileBitsEx(hwmf, 0, NULL); read = GetMetaFileBitsEx(hwmf, 0, NULL);
if(!read) if(!read)
return GenericError; return GenericError;
@ -819,20 +821,20 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
if(CreateStreamOnHGlobal(copy, TRUE, &stream) != S_OK){ if(CreateStreamOnHGlobal(copy, TRUE, &stream) != S_OK){
ERR("could not make stream\n"); ERR("could not make stream\n");
goto end; GdipFree(copy);
goto err;
} }
*metafile = GdipAlloc(sizeof(GpMetafile)); *metafile = GdipAlloc(sizeof(GpMetafile));
if(!*metafile){ if(!*metafile){
retval = OutOfMemory; retval = OutOfMemory;
goto end; goto err;
} }
if(OleLoadPicture(stream, 0, FALSE, &IID_IPicture, if(OleLoadPicture(stream, 0, FALSE, &IID_IPicture,
(LPVOID*) &((*metafile)->image.picture)) != S_OK){ (LPVOID*) &((*metafile)->image.picture)) != S_OK)
GdipFree(*metafile); goto err;
goto end;
}
(*metafile)->image.type = ImageTypeMetafile; (*metafile)->image.type = ImageTypeMetafile;
(*metafile)->bounds.X = ((REAL) placeable->BoundingBox.Left) / ((REAL) placeable->Inch); (*metafile)->bounds.X = ((REAL) placeable->BoundingBox.Left) / ((REAL) placeable->Inch);
@ -846,11 +848,11 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
if(delete) if(delete)
DeleteMetaFile(hwmf); DeleteMetaFile(hwmf);
retval = Ok; return Ok;
end: err:
GdipFree(*metafile);
IStream_Release(stream); IStream_Release(stream);
GdipFree(copy);
return retval; return retval;
} }