Signed-off-by: Eric Pouech epouech@codeweavers.com
-- v3: ntdll: Allow empty application nodes in actctx.
From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- dlls/kernel32/tests/actctx.c | 34 ++++++++++++++++++++++++++++++++++ dlls/ntdll/actctx.c | 9 +++++++++ 2 files changed, 43 insertions(+)
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c index d468777ac2f..fb035567c6e 100644 --- a/dlls/kernel32/tests/actctx.c +++ b/dlls/kernel32/tests/actctx.c @@ -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%5C%22%3Etrue</dpiAware>" +" </windowsSettings>" +" </application>" +" <application/>" +" <application xmlns="urn:schemas-microsoft-com:asm.v3">" +" <windowsSettings>" +" <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings%5C%22%3Etrue</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"/>" @@ -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 diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index 9f2c1d54720..d08519b83b8 100644 --- a/dlls/ntdll/actctx.c +++ b/dlls/ntdll/actctx.c @@ -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 )) {