Commit ce3ccccb authored by Mohamad Al-Jaf's avatar Mohamad Al-Jaf Committed by Alexandre Julliard

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

parent 95bfbdc8
...@@ -120,7 +120,7 @@ struct hostname ...@@ -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 ) ...@@ -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 ) ...@@ -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, ...@@ -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 );
......
...@@ -101,7 +101,7 @@ static void test_HostnameStatics(void) ...@@ -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 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment