From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- dlls/kernel32/tests/actctx.c | 23 +++++++++++++++++++++++ dlls/ntdll/actctx.c | 7 +++++++ 2 files changed, 30 insertions(+)
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c index d468777ac2f..a52f410d5ec 100644 --- a/dlls/kernel32/tests/actctx.c +++ b/dlls/kernel32/tests/actctx.c @@ -511,6 +511,18 @@ 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>" +" <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 +3417,17 @@ static void test_settings(void) ok( !ret, "QueryActCtxSettingsW succeeded\n" ); ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %lu\n", GetLastError() ); ReleaseActCtx(handle); + + 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 succeeded\n" ); + ReleaseActCtx(handle); }
typedef struct diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index 9f2c1d54720..c344a63275b 100644 --- a/dlls/ntdll/actctx.c +++ b/dlls/ntdll/actctx.c @@ -2564,6 +2564,13 @@ 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)) + WARN( "unknown attr %s\n", debugstr_xml_attr(&attr) ); + + if (end) return;
while (next_xml_elem( xmlbuf, &elem, parent )) {
Nikolay Sivov (@nsivov) commented about dlls/kernel32/tests/actctx.c:
" </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>" +" <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings%5C%22%3Etrue</dpiAwareness>" +" </windowsSettings>" +" </application>" +"</assembly>";
Additional test would be to have two or more non-empty <application> elements. I don't think it's blocking for this fix.
Nikolay Sivov (@nsivov) commented about dlls/kernel32/tests/actctx.c:
ok( !ret, "QueryActCtxSettingsW succeeded\n" ); ok( GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "wrong error %lu\n", GetLastError() ); ReleaseActCtx(handle);
- 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 succeeded\n" );
The message should say "failed", or "unexpected", because it's supposed to succeed.
Nikolay Sivov (@nsivov) commented about dlls/ntdll/actctx.c:
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))
WARN( "unknown attr %s\n", debugstr_xml_attr(&attr) );
Maybe we should skip known namespace attributes here, so it does not get unnecessary attention in the logs.