On Sun, 10 Feb 2019 at 02:16, Nikolay Sivov <nsivov(a)codeweavers.com> wrote:
+static ULONG STDMETHODCALLTYPE d2d_geometry_group_Release(ID2D1GeometryGroup *iface) +{ + struct d2d_geometry *geometry = impl_from_ID2D1GeometryGroup(iface); + ULONG refcount = InterlockedDecrement(&geometry->refcount); + unsigned int i; + + TRACE("%p decreasing refcount to %u.\n", iface, refcount); + + if (!refcount) + { + for (i = 0; i < geometry->u.group.geometry_count; ++i) + ID2D1Geometry_Release(geometry->u.group.src_geometries[i]); + d2d_geometry_cleanup(geometry); + heap_free(geometry); + } This leaks "src_geometries".
+HRESULT d2d_geometry_group_init(struct d2d_geometry *geometry, ID2D1Factory *factory, + D2D1_FILL_MODE fill_mode, ID2D1Geometry **geometries, unsigned int geometry_count) +{ + unsigned int i; + + d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_geometry_group_vtbl); + + if (!(geometry->u.group.src_geometries = heap_alloc(geometry_count * sizeof(*geometries)))) I'd feel a little better if this used heap_calloc().