windows.networking.hostname: Duplicate passed HSTRING in IHostNameFactory::CreateHostName().

This commit is contained in:
Mohamad Al-Jaf 2023-07-08 00:49:25 -04:00 committed by Alexandre Julliard
parent 95bfbdc87f
commit ce3ccccb2c
2 changed files with 12 additions and 4 deletions

View file

@ -120,7 +120,7 @@ struct hostname
IHostName IHostName_iface; IHostName IHostName_iface;
LONG ref; LONG ref;
HSTRING rawname; HSTRING raw_name;
}; };
static inline struct hostname *impl_from_IHostName( IHostName *iface ) static inline struct hostname *impl_from_IHostName( IHostName *iface )
@ -161,7 +161,15 @@ static ULONG WINAPI hostname_Release( IHostName *iface )
{ {
struct hostname *impl = impl_from_IHostName( iface ); struct hostname *impl = impl_from_IHostName( iface );
ULONG ref = InterlockedDecrement( &impl->ref ); ULONG ref = InterlockedDecrement( &impl->ref );
TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref ); TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref );
if (!ref)
{
WindowsDeleteString( impl->raw_name );
free( impl );
}
return ref; return ref;
} }
@ -196,7 +204,7 @@ static HRESULT WINAPI hostname_get_RawName( IHostName *iface, HSTRING *value )
TRACE( "iface %p, value %p.\n", iface, value ); TRACE( "iface %p, value %p.\n", iface, value );
if (!value) return E_INVALIDARG; if (!value) return E_INVALIDARG;
return WindowsDuplicateString( impl->rawname, value ); return WindowsDuplicateString( impl->raw_name, value );
} }
static HRESULT WINAPI hostname_get_DisplayName( IHostName *iface, HSTRING *value ) static HRESULT WINAPI hostname_get_DisplayName( IHostName *iface, HSTRING *value )
@ -255,7 +263,7 @@ static HRESULT WINAPI hostname_factory_CreateHostName( IHostNameFactory *iface,
impl->IHostName_iface.lpVtbl = &hostname_vtbl; impl->IHostName_iface.lpVtbl = &hostname_vtbl;
impl->ref = 1; impl->ref = 1;
impl->rawname = name; WindowsDuplicateString( name, &impl->raw_name );
*value = &impl->IHostName_iface; *value = &impl->IHostName_iface;
TRACE( "created IHostName %p.\n", *value ); TRACE( "created IHostName %p.\n", *value );

View file

@ -101,7 +101,7 @@ static void test_HostnameStatics(void)
hr = WindowsCompareStringOrdinal( str, rawname, &res ); hr = WindowsCompareStringOrdinal( str, rawname, &res );
ok( hr == S_OK, "got hr %#lx.\n", hr ); ok( hr == S_OK, "got hr %#lx.\n", hr );
ok( !res, "got unexpected string %s.\n", debugstr_hstring(rawname) ); ok( !res, "got unexpected string %s.\n", debugstr_hstring(rawname) );
todo_wine ok( str != rawname, "got same HSTRINGs %p, %p.\n", str, rawname ); ok( str != rawname, "got same HSTRINGs %p, %p.\n", str, rawname );
WindowsDeleteString( str ); WindowsDeleteString( str );
WindowsDeleteString( rawname ); WindowsDeleteString( rawname );