Skip to content

Commit

Permalink
ntdll: Allow empty application nodes in actctx.
Browse files Browse the repository at this point in the history
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
  • Loading branch information
Eric Pouech authored and julliard committed Sep 19, 2023
1 parent 1155a19 commit 6558611
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
34 changes: 34 additions & 0 deletions dlls/kernel32/tests/actctx.c
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,23 @@ static const char settings_manifest3[] =
" </asmv3:application>"
"</assembly>";

static const char settings_manifest4[] =
"<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">"
" <assemblyIdentity version=\"1.0.0.0\" name=\"Wine.Test\" type=\"win32\"></assemblyIdentity>"
" <application/>"
" <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">"
" <windowsSettings>"
" <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>"
" </windowsSettings>"
" </application>"
" <application/>"
" <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">"
" <windowsSettings>"
" <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">true</dpiAwareness>"
" </windowsSettings>"
" </application>"
"</assembly>";

static const char two_dll_manifest_dll[] =
"<assembly xmlns=\"urn:schemas-microsoft-com:asm.v3\" manifestVersion=\"1.0\">"
" <assemblyIdentity type=\"win32\" name=\"sxs_dll\" version=\"1.0.0.0\" processorArchitecture=\"x86\" publicKeyToken=\"0000000000000000\"/>"
Expand Down Expand Up @@ -3405,6 +3422,23 @@ static void test_settings(void)
ok( !ret, "QueryActCtxSettingsW succeeded\n" );
ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %lu\n", GetLastError() );
ReleaseActCtx(handle);

/* lookup occurs in first non empty node */
create_manifest_file( "manifest_settings4.manifest", settings_manifest4, -1, NULL, NULL );
handle = test_create("manifest_settings4.manifest");
ok( handle != INVALID_HANDLE_VALUE, "handle == INVALID_HANDLE_VALUE, error %lu\n", GetLastError() );
DeleteFileA( "manifest_settings3.manifest" );
SetLastError( 0xdeadbeef );
size = 0xdead;
memset( buffer, 0xcc, sizeof(buffer) );
ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwareW, buffer, 80, &size );
ok( ret, "QueryActCtxSettingsW failed\n" );
SetLastError( 0xdeadbeef );
size = 0xdead;
memset( buffer, 0xcc, sizeof(buffer) );
ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwarenessW, buffer, 80, &size );
ok( !ret, "QueryActCtxSettingsW succeeded\n" );
ReleaseActCtx(handle);
}

typedef struct
Expand Down
9 changes: 9 additions & 0 deletions dlls/ntdll/actctx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2564,6 +2564,15 @@ static void parse_application_elem( xmlbuf_t *xmlbuf, struct assembly *assembly,
struct actctx_loader *acl, const struct xml_elem *parent )
{
struct xml_elem elem;
struct xml_attr attr;
BOOL end = FALSE;

while (next_xml_attr(xmlbuf, &attr, &end))
{
if (!is_xmlns_attr( &attr )) WARN( "unknown attr %s\n", debugstr_xml_attr(&attr) );
}

if (end) return;

while (next_xml_elem( xmlbuf, &elem, parent ))
{
Expand Down

0 comments on commit 6558611

Please sign in to comment.