wbemprox: Fix handling of arrays as query results.

This commit is contained in:
Sebastian Lackner 2015-04-17 09:38:15 +02:00 committed by Alexandre Julliard
parent 856b03501a
commit 37b1048bd2
2 changed files with 22 additions and 7 deletions

View File

@ -938,7 +938,7 @@ struct record_service
struct record_sid
{
const WCHAR *accountname;
const UINT8 *binaryrepresentation;
const struct array *binaryrepresentation;
const WCHAR *referenceddomainname;
const WCHAR *sid;
UINT32 sidlength;
@ -2614,12 +2614,22 @@ static WCHAR *get_accountname( LSA_TRANSLATED_NAME *name )
if (!name || !name->Name.Buffer) return NULL;
return heap_strdupW( name->Name.Buffer );
}
static UINT8 *get_binaryrepresentation( PSID sid, UINT len )
static struct array *get_binaryrepresentation( PSID sid, UINT len )
{
struct array *array = heap_alloc( sizeof(struct array) );
if (array)
{
UINT8 *ret = heap_alloc( len );
if (!ret) return NULL;
if (ret)
{
memcpy( ret, sid, len );
return ret;
array->count = len;
array->ptr = ret;
return array;
}
heap_free( array );
}
return NULL;
}
static WCHAR *get_referenceddomainname( LSA_REFERENCED_DOMAIN_LIST *domain )
{

View File

@ -288,10 +288,15 @@ void free_row_values( const struct table *table, UINT row )
if (!(table->columns[i].type & COL_FLAG_DYNAMIC)) continue;
type = table->columns[i].type & COL_TYPE_MASK;
if (type == CIM_STRING || type == CIM_DATETIME || (type & CIM_FLAG_ARRAY))
if (type == CIM_STRING || type == CIM_DATETIME)
{
if (get_value( table, row, i, &val ) == S_OK) heap_free( (void *)(INT_PTR)val );
}
else if (type & CIM_FLAG_ARRAY)
{
if (get_value( table, row, i, &val ) == S_OK)
destroy_array( (void *)(INT_PTR)val, type & CIM_TYPE_MASK );
}
}
}