Compare commits

...

29 Commits

Author SHA1 Message Date
Sebastian Lackner
12d8b79c63 Release 2.0-rc5. 2017-01-15 23:26:44 +01:00
Sebastian Lackner
986a011548 Added patch to avoid duplicate definition of REFERENCE_TIME. 2017-01-15 22:56:27 +01:00
Sebastian Lackner
2c08a980e8 Added patch to check if any 16 bit thunks have been allocated before accessing pointer. 2017-01-15 19:18:02 +01:00
Sebastian Lackner
9686fe6647 Added patch to remove memory limitation to 32GB on 64-bit by growing heap dynamically. 2017-01-15 18:56:52 +01:00
Sebastian Lackner
b013afa660 Added patch with stub for rstrtmgr.RmShutdown. 2017-01-15 16:30:20 +01:00
Sebastian Lackner
bdb212523c Added patch to implement RunlevelInformationInActivationContext in RtlQueryInformationActivationContext. 2017-01-15 16:24:24 +01:00
Sebastian Lackner
d4f26a2f95 Added patch to ignore AllowXsltScript and AllowDocumentFunction properties in msxml. 2017-01-15 15:24:35 +01:00
Sebastian Lackner
1261a0540c Added patch to avoid setting DDCAPS_ALIGNBOUNDARYSRC as cap for ddraw. 2017-01-15 02:29:50 +01:00
Sebastian Lackner
577b85bdc8 Added patch to respect return value of callback in DirectSoundEnumerateA/W. 2017-01-14 23:20:54 +01:00
Sebastian Lackner
96a6d1cecc Added patch to build independent xinput9_1_0.dll instead of using forwards. 2017-01-14 22:46:53 +01:00
Sebastian Lackner
a90497bdef Added patch to improve stubs for Validate{Vertex,Pixel}Shader. 2017-01-14 08:29:21 +01:00
Sebastian Lackner
b6c5b6240b Added patch to catch page faults in NtQueryPerformanceCounter. 2017-01-14 08:19:10 +01:00
Sebastian Lackner
9c43bb8d2c Added patch to workaround a bug present in the current versions of Flex. 2017-01-14 05:50:14 +01:00
Sebastian Lackner
f06f5c3b0c Added patch to implement support for LABEL_SECURITY_INFORMATION. 2017-01-14 05:38:36 +01:00
Sebastian Lackner
b2098faef8 Added patch to fix cost computation in MSI for large values. 2017-01-14 01:28:20 +01:00
Sebastian Lackner
4b0fe0c820 Added patch to return success for TokenSessionId in NtSetInformationToken. 2017-01-14 01:18:35 +01:00
Sebastian Lackner
604d23df7c Rebase against 3c54d4fb6926195e43a1163b0a243d2614a5951f. 2017-01-14 00:55:36 +01:00
Sebastian Lackner
e65410b901 wined3d-WINED3DFMT_R32G32_UINT: Remove patch for issue fixed in dev branch (thanks Alistair). 2017-01-13 13:14:56 +01:00
Sebastian Lackner
7b4727f89c Added patch to start debugger always on WinSta0. 2017-01-13 02:00:22 +01:00
Sebastian Lackner
5f4b99aa18 Rebase against 083b35e7c77c32f2f011a7e4188edaf605e0848c. 2017-01-13 01:08:54 +01:00
Sebastian Lackner
73c19719e0 Added patch to improve mapping of DACL to file permissions. 2017-01-13 01:03:25 +01:00
Sebastian Lackner
eaff208f0d Added patch to implement support for navigating a group of radio buttons using a keyboard. 2017-01-12 17:08:24 +01:00
Sebastian Lackner
77452f30f8 wbemdisp-Printer: Rename patchset to wbemprox-Printer. 2017-01-12 05:35:37 +01:00
Sebastian Lackner
7ad3349f66 Added patch to fix row count in fill_processor and fill_printer function. 2017-01-12 05:34:14 +01:00
Sebastian Lackner
8c909daf10 server-Stored_ACLs: Update patch and fix handling of MAXIMUM_ALLOWED. 2017-01-12 02:57:24 +01:00
Sebastian Lackner
51fd657cdb Rebase against 8df9a11adebf72f3f1046a2efad6e8c85fc44c40. 2017-01-12 00:12:21 +01:00
Sebastian Lackner
634b0e2877 Added patches with various PE loader fixes for 8k demos. 2017-01-11 23:30:14 +01:00
Sebastian Lackner
2660a14433 Added patch to avoid double captions observed under some WMs. 2017-01-11 00:05:34 +01:00
Sebastian Lackner
ad5fb8a69e Rebase against ac59a68162321610841ed072981adddb8bc78c56. 2017-01-10 06:21:01 +01:00
72 changed files with 4745 additions and 504 deletions

View File

@@ -0,0 +1,156 @@
From 3dc821fe683d1e17976ca9367465c1412e1140b4 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 14 Jan 2017 07:50:36 +0100
Subject: d3d8: Improve ValidateVertexShader stub.
---
dlls/d3d8/d3d8_main.c | 43 ++++++++++++++++++++++---------------------
dlls/d3d8/tests/device.c | 40 +++++++++++++++++++++++++---------------
2 files changed, 47 insertions(+), 36 deletions(-)
diff --git a/dlls/d3d8/d3d8_main.c b/dlls/d3d8/d3d8_main.c
index 8ac704c364c..2ab0414b7f2 100644
--- a/dlls/d3d8/d3d8_main.c
+++ b/dlls/d3d8/d3d8_main.c
@@ -58,38 +58,39 @@ IDirect3D8 * WINAPI DECLSPEC_HOTPATCH Direct3DCreate8(UINT sdk_version)
/***********************************************************************
* ValidateVertexShader (D3D8.@)
- *
- * I've seen reserved1 and reserved2 always passed as 0's
- * bool seems always passed as 0 or 1, but other values work as well...
- * toto result?
*/
-HRESULT WINAPI ValidateVertexShader(DWORD* vertexshader, DWORD* reserved1, DWORD* reserved2, BOOL bool, DWORD* toto)
+HRESULT WINAPI ValidateVertexShader(DWORD *vertexshader, DWORD *reserved1, DWORD *reserved2,
+ BOOL return_error, char **errors)
{
- HRESULT ret;
- static BOOL warned;
-
- if (TRACE_ON(d3d8) || !warned) {
- FIXME("(%p %p %p %d %p): stub\n", vertexshader, reserved1, reserved2, bool, toto);
- warned = TRUE;
- }
+ const char *message = "";
+ HRESULT hr = E_FAIL;
- if (!vertexshader)
- return E_FAIL;
+ TRACE("(%p %p %p %d %p): semi-stub\n", vertexshader, reserved1, reserved2, return_error, errors);
- if (reserved1 || reserved2)
- return E_FAIL;
+ if (!vertexshader)
+ {
+ message = "(Global Validation Error) Version Token: Code pointer cannot be NULL.\n";
+ goto done;
+ }
- switch(*vertexshader) {
+ switch (*vertexshader)
+ {
case 0xFFFE0101:
case 0xFFFE0100:
- ret=S_OK;
+ hr = S_OK;
break;
+
default:
WARN("Invalid shader version token %#x.\n", *vertexshader);
- ret=E_FAIL;
- }
+ message = "(Global Validation Error) Version Token: Unsupported vertex shader version.\n";
+ }
- return ret;
+done:
+ if (!return_error) message = "";
+ if (errors && (*errors = HeapAlloc(GetProcessHeap(), 0, strlen(message) + 1)))
+ strcpy(*errors, message);
+
+ return hr;
}
/***********************************************************************
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c
index 28c6af32e0c..1368ce3a2cf 100644
--- a/dlls/d3d8/tests/device.c
+++ b/dlls/d3d8/tests/device.c
@@ -50,7 +50,7 @@ struct device_desc
static DEVMODEW registry_mode;
-static HRESULT (WINAPI *ValidateVertexShader)(DWORD *, DWORD *, DWORD *, int, DWORD *);
+static HRESULT (WINAPI *ValidateVertexShader)(DWORD *, DWORD *, DWORD *, BOOL, char **);
static HRESULT (WINAPI *ValidatePixelShader)(DWORD *, DWORD *, int, DWORD *);
static BOOL (WINAPI *pGetCursorInfo)(PCURSORINFO);
@@ -4238,18 +4238,31 @@ static void test_validate_vs(void)
0x00000009, 0xc0080000, 0x90e40000, 0xa0e40003, /* dp4 oPos.w, v0, c3 */
0x0000ffff, /* end */
};
+ char *errors;
HRESULT hr;
hr = ValidateVertexShader(0, 0, 0, 0, 0);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
hr = ValidateVertexShader(0, 0, 0, 1, 0);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+
+ errors = (void *)0xdeadbeef;
+ hr = ValidateVertexShader(0, 0, 0, 0, &errors);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ ok(!strcmp(errors, ""), "Got unexpected string '%s'.\n", errors);
+ HeapFree(GetProcessHeap(), 0, errors);
+
+ errors = (void *)0xdeadbeef;
+ hr = ValidateVertexShader(0, 0, 0, 1, &errors);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ ok(strstr(errors, "Validation Error") != NULL, "Got unexpected string '%s'.\n", errors);
+ HeapFree(GetProcessHeap(), 0, errors);
+
hr = ValidateVertexShader(vs, 0, 0, 0, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
-
hr = ValidateVertexShader(vs, 0, 0, 1, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
- /* Seems to do some version checking. */
+
*vs = 0xfffe0100; /* vs_1_0 */
hr = ValidateVertexShader(vs, 0, 0, 0, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
@@ -4257,21 +4270,18 @@ static void test_validate_vs(void)
*vs = 0xfffe0102; /* bogus version */
hr = ValidateVertexShader(vs, 0, 0, 1, 0);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
- /* I've seen that applications always pass the 2nd and 3rd parameter as 0.
- * Simple test with non-zero parameters. */
- *vs = 0xfffe0101; /* vs_1_1 */
- hr = ValidateVertexShader(vs, vs, 0, 1, 0);
+
+ errors = (void *)0xdeadbeef;
+ hr = ValidateVertexShader(vs, 0, 0, 0, &errors);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ ok(!strcmp(errors, ""), "Got unexpected string '%s'.\n", errors);
+ HeapFree(GetProcessHeap(), 0, errors);
- hr = ValidateVertexShader(vs, 0, vs, 1, 0);
+ errors = (void *)0xdeadbeef;
+ hr = ValidateVertexShader(vs, 0, 0, 1, &errors);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
- /* I've seen the 4th parameter always passed as either 0 or 1, but passing
- * other values doesn't seem to hurt. */
- hr = ValidateVertexShader(vs, 0, 0, 12345, 0);
- ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
- /* What is the 5th parameter? The following seems to work ok. */
- hr = ValidateVertexShader(vs, 0, 0, 1, vs);
- ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ ok(strstr(errors, "Validation Error") != NULL, "Got unexpected string '%s'.\n", errors);
+ HeapFree(GetProcessHeap(), 0, errors);
}
static void test_validate_ps(void)
--
2.11.0

View File

@@ -0,0 +1,140 @@
From 29d2dd7606178f391c8802f8d5767a7bd83c4e30 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 14 Jan 2017 07:54:39 +0100
Subject: d3d8: Improve ValidatePixelShader stub.
---
dlls/d3d8/d3d8_main.c | 37 +++++++++++++++++--------------------
dlls/d3d8/tests/device.c | 34 ++++++++++++++++++++--------------
2 files changed, 37 insertions(+), 34 deletions(-)
diff --git a/dlls/d3d8/d3d8_main.c b/dlls/d3d8/d3d8_main.c
index a562c1c7e30..41f411c30a8 100644
--- a/dlls/d3d8/d3d8_main.c
+++ b/dlls/d3d8/d3d8_main.c
@@ -101,39 +101,36 @@ done:
/***********************************************************************
* ValidatePixelShader (D3D8.@)
- *
- * PARAMS
- * toto result?
*/
-HRESULT WINAPI ValidatePixelShader(DWORD* pixelshader, DWORD* reserved1, BOOL bool, DWORD* toto)
+HRESULT WINAPI ValidatePixelShader(DWORD *pixelshader, DWORD *reserved1, BOOL return_error, char **errors)
{
- HRESULT ret;
- static BOOL warned;
-
- if (TRACE_ON(d3d8) || !warned) {
- FIXME("(%p %p %d %p): stub\n", pixelshader, reserved1, bool, toto);
- warned = TRUE;
- }
+ const char *message = "";
+ HRESULT hr = E_FAIL;
- if (!pixelshader)
- return E_FAIL;
+ TRACE("(%p %p %d %p): semi-stub\n", pixelshader, reserved1, return_error, errors);
- if (reserved1)
- return E_FAIL;
+ if (!pixelshader)
+ return E_FAIL;
- switch(*pixelshader) {
+ switch (*pixelshader)
+ {
case 0xFFFF0100:
case 0xFFFF0101:
case 0xFFFF0102:
case 0xFFFF0103:
case 0xFFFF0104:
- ret=S_OK;
+ hr = S_OK;
break;
default:
WARN("Invalid shader version token %#x.\n", *pixelshader);
- ret=E_FAIL;
- }
- return ret;
+ message = "(Global Validation Error) Version Token: Unsupported pixel shader version.\n";
+ }
+
+ if (!return_error) message = "";
+ if (errors && (*errors = HeapAlloc(GetProcessHeap(), 0, strlen(message) + 1)))
+ strcpy(*errors, message);
+
+ return hr;
}
void d3d8_resource_cleanup(struct d3d8_resource *resource)
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c
index 1368ce3a2cf..9ff3be71776 100644
--- a/dlls/d3d8/tests/device.c
+++ b/dlls/d3d8/tests/device.c
@@ -51,7 +51,7 @@ struct device_desc
static DEVMODEW registry_mode;
static HRESULT (WINAPI *ValidateVertexShader)(DWORD *, DWORD *, DWORD *, BOOL, char **);
-static HRESULT (WINAPI *ValidatePixelShader)(DWORD *, DWORD *, int, DWORD *);
+static HRESULT (WINAPI *ValidatePixelShader)(DWORD *, DWORD *, BOOL, char **);
static BOOL (WINAPI *pGetCursorInfo)(PCURSORINFO);
@@ -4296,33 +4296,39 @@ static void test_validate_ps(void)
0x00000005, 0x800f0000, 0xb0e40000, 0x80e40000, /* mul r0, t0, r0 */
0x0000ffff, /* end */
};
+ char *errors;
HRESULT hr;
hr = ValidatePixelShader(0, 0, 0, 0);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
hr = ValidatePixelShader(0, 0, 1, 0);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+
+ errors = (void *)0xdeadbeef;
+ hr = ValidatePixelShader(0, 0, 1, &errors);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ ok(errors == (void *)0xdeadbeef, "Expected 0xdeadbeef, got %p.\n", errors);
+
hr = ValidatePixelShader(ps, 0, 0, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
-
hr = ValidatePixelShader(ps, 0, 1, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
- /* Seems to do some version checking. */
+
*ps = 0xffff0105; /* bogus version */
hr = ValidatePixelShader(ps, 0, 1, 0);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
- /* I've seen that applications always pass the 2nd parameter as 0.
- * Simple test with a non-zero parameter. */
- *ps = 0xffff0101; /* ps_1_1 */
- hr = ValidatePixelShader(ps, ps, 1, 0);
+
+ errors = (void *)0xdeadbeef;
+ hr = ValidatePixelShader(ps, 0, 0, &errors);
+ ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
+ ok(!strcmp(errors, ""), "Got unexpected string '%s'.\n", errors);
+ HeapFree(GetProcessHeap(), 0, errors);
+
+ errors = (void *)0xdeadbeef;
+ hr = ValidatePixelShader(ps, 0, 1, &errors);
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
- /* I've seen the 3rd parameter always passed as either 0 or 1, but passing
- * other values doesn't seem to hurt. */
- hr = ValidatePixelShader(ps, 0, 12345, 0);
- ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
- /* What is the 4th parameter? The following seems to work ok. */
- hr = ValidatePixelShader(ps, 0, 1, ps);
- ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ ok(strstr(errors, "Validation Error") != NULL, "Got unexpected string '%s'.\n", errors);
+ HeapFree(GetProcessHeap(), 0, errors);
}
static void test_volume_get_container(void)
--
2.11.0

View File

@@ -0,0 +1 @@
Fixes: [40036] Improve stubs for Validate{Vertex,Pixel}Shader

View File

@@ -1,4 +1,4 @@
From 445d3b9a3148598de7ff907429076d1551c419ec Mon Sep 17 00:00:00 2001
From 746aa2c81af98e890e4db720783de7fce4bc84d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Mar 2016 22:22:42 +0100
Subject: ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
@@ -12,7 +12,7 @@ Subject: ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
5 files changed, 106 insertions(+)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index e50edb4..bac9b8a 100644
index 1fa88751efe..5c138a5d726 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -1533,6 +1533,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
@@ -25,10 +25,10 @@ index e50edb4..bac9b8a 100644
if(DriverCaps)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 1271022..de6697e 100644
index 5b153a62a21..762c1074e79 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -9612,6 +9612,31 @@ static void test_transform_vertices(void)
@@ -9793,6 +9793,31 @@ static void test_display_mode_surface_pixel_format(void)
DestroyWindow(window);
}
@@ -60,17 +60,17 @@ index 1271022..de6697e 100644
START_TEST(ddraw1)
{
IDirectDraw *ddraw;
@@ -9695,4 +9720,5 @@ START_TEST(ddraw1)
test_blt();
@@ -9877,4 +9902,5 @@ START_TEST(ddraw1)
test_getdc();
test_transform_vertices();
test_display_mode_surface_pixel_format();
+ test_caps();
}
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index bf012e4..b55eed8 100644
index 422960012af..714d3f0e1a8 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -10949,6 +10949,31 @@ static void test_transform_vertices(void)
@@ -11247,6 +11247,31 @@ static void test_display_mode_surface_pixel_format(void)
DestroyWindow(window);
}
@@ -102,17 +102,17 @@ index bf012e4..b55eed8 100644
START_TEST(ddraw2)
{
IDirectDraw2 *ddraw;
@@ -11041,4 +11066,5 @@ START_TEST(ddraw2)
test_draw_primitive();
@@ -11340,4 +11365,5 @@ START_TEST(ddraw2)
test_edge_antialiasing_blending();
test_transform_vertices();
test_display_mode_surface_pixel_format();
+ test_caps();
}
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 9ac7a63..7b4bd3c 100644
index e091a6dac5d..70dd79d7a13 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -12246,6 +12246,31 @@ static void test_transform_vertices(void)
@@ -12532,6 +12532,31 @@ static void test_display_mode_surface_pixel_format(void)
DestroyWindow(window);
}
@@ -144,17 +144,17 @@ index 9ac7a63..7b4bd3c 100644
START_TEST(ddraw4)
{
IDirectDraw4 *ddraw;
@@ -12346,4 +12371,5 @@ START_TEST(ddraw4)
test_draw_primitive();
@@ -12633,4 +12658,5 @@ START_TEST(ddraw4)
test_edge_antialiasing_blending();
test_transform_vertices();
test_display_mode_surface_pixel_format();
+ test_caps();
}
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index d6dffc8..eafa93b 100644
index 0b1bdaef6d2..536163e9a5e 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -12104,6 +12104,31 @@ static void test_edge_antialiasing_blending(void)
@@ -12211,6 +12211,31 @@ static void test_display_mode_surface_pixel_format(void)
DestroyWindow(window);
}
@@ -186,12 +186,12 @@ index d6dffc8..eafa93b 100644
START_TEST(ddraw7)
{
HMODULE module = GetModuleHandleA("ddraw.dll");
@@ -12214,4 +12239,5 @@ START_TEST(ddraw7)
test_getdc();
@@ -12322,4 +12347,5 @@ START_TEST(ddraw7)
test_draw_primitive();
test_edge_antialiasing_blending();
test_display_mode_surface_pixel_format();
+ test_caps();
}
--
2.9.0
2.11.0

View File

@@ -0,0 +1,25 @@
From 2bec406f8c9a80d8bb7beef2a9cb39455be6b125 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 14 Jan 2017 23:06:28 +0100
Subject: dsound: Respect return value of callback in DirectSoundEnumerateA/W.
---
dlls/dsound/dsound_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
index db2ca506bda..2e12fe7a40d 100644
--- a/dlls/dsound/dsound_main.c
+++ b/dlls/dsound/dsound_main.c
@@ -522,7 +522,7 @@ HRESULT enumerate_mmdevices(EDataFlow flow, GUID *guids,
}
if(device != defdev){
- send_device(device, &guids[n], cb, user);
+ keep_going = send_device(device, &guids[n], cb, user);
++n;
}
--
2.11.0

View File

@@ -0,0 +1 @@
Fixes: [42163] Respect return value of callback in DirectSoundEnumerateA/W

View File

@@ -0,0 +1,27 @@
From 607d3969a3b2633ce4dd4f99f96d1666c15cd98d Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 15 Jan 2017 22:52:09 +0100
Subject: include: Avoid duplicate definition of REFERENCE_TIME.
---
include/dmdls.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/include/dmdls.h b/include/dmdls.h
index b40ef88bf8d..ea7dcf00946 100644
--- a/include/dmdls.h
+++ b/include/dmdls.h
@@ -30,7 +30,10 @@ typedef LONG PCENT;
typedef LONG PERCENT;
typedef LONG TCENT;
+#ifndef REFERENCE_TIME_DEFINED
+#define REFERENCE_TIME_DEFINED
typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;
+#endif
/*****************************************************************************
* FOURCC definition
--
2.11.0

View File

@@ -0,0 +1 @@
Fixes: [42211] Avoid duplicate definition of REFERENCE_TIME

View File

@@ -0,0 +1,24 @@
From efdcaba02d66b65177ce73686f4d4b5fb8f6e4f8 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 13 Jan 2017 01:59:13 +0100
Subject: kernel32: Always start debugger on WinSta0.
---
dlls/kernel32/except.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/kernel32/except.c b/dlls/kernel32/except.c
index 1a1521a8038..cbc880f9a44 100644
--- a/dlls/kernel32/except.c
+++ b/dlls/kernel32/except.c
@@ -314,6 +314,7 @@ static BOOL start_debugger(PEXCEPTION_POINTERS epointers, HANDLE hEvent)
TRACE("Starting debugger %s\n", debugstr_a(cmdline));
memset(&startup, 0, sizeof(startup));
startup.cb = sizeof(startup);
+ startup.lpDesktop = (char *)"WinSta0";
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = SW_SHOWNORMAL;
ret = CreateProcessA(NULL, cmdline, NULL, NULL, TRUE, 0, env, NULL, &startup, &info);
--
2.11.0

View File

@@ -0,0 +1,53 @@
From 003af598b273d00e79add3fae33aa6e3d008d93f Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Mon, 2 Jan 2017 15:34:21 +0800
Subject: server: All fields up to CheckSum are mandatory regardless of
SizeOfOptionalHeader value.
---
server/mapping.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/server/mapping.c b/server/mapping.c
index 7fce12f953d..44fbe637933 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -470,11 +470,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
if (dos.e_magic != IMAGE_DOS_SIGNATURE) return STATUS_INVALID_IMAGE_NOT_MZ;
pos = dos.e_lfanew;
+ /* zero out header in the case it's not present or partial */
+ memset( &nt, 0, sizeof(nt) );
size = pread( unix_fd, &nt, sizeof(nt), pos );
if (size < sizeof(nt.Signature) + sizeof(nt.FileHeader)) return STATUS_INVALID_IMAGE_FORMAT;
- /* zero out Optional header in the case it's not present or partial */
- size = min( size, sizeof(nt.Signature) + sizeof(nt.FileHeader) + nt.FileHeader.SizeOfOptionalHeader );
- if (size < sizeof(nt)) memset( (char *)&nt + size, 0, sizeof(nt) - size );
if (nt.Signature != IMAGE_NT_SIGNATURE)
{
if (*(WORD *)&nt.Signature == IMAGE_OS2_SIGNATURE) return STATUS_INVALID_IMAGE_NE_FORMAT;
@@ -513,6 +512,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
switch (nt.opt.hdr32.Magic)
{
case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
+ /* All fields up to CheckSum are mandatory regardless of SizeOfOptionalHeader value */
+ size = max( nt.FileHeader.SizeOfOptionalHeader, offsetof(IMAGE_OPTIONAL_HEADER32, CheckSum) );
+ if (size < sizeof(nt.opt.hdr32)) memset( (char *)&nt.opt.hdr32 + size, 0, sizeof(nt.opt.hdr32) - size );
+
mapping->image.base = nt.opt.hdr32.ImageBase;
mapping->image.entry_point = nt.opt.hdr32.ImageBase + nt.opt.hdr32.AddressOfEntryPoint;
mapping->image.map_size = ROUND_SIZE( nt.opt.hdr32.SizeOfImage );
@@ -527,6 +530,10 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s
mapping->image.checksum = nt.opt.hdr32.CheckSum;
break;
case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
+ /* All fields up to CheckSum are mandatory regardless of SizeOfOptionalHeader value */
+ size = max( nt.FileHeader.SizeOfOptionalHeader, offsetof(IMAGE_OPTIONAL_HEADER64, CheckSum) );
+ if (size < sizeof(nt.opt.hdr64)) memset( (char *)&nt.opt.hdr64 + size, 0, sizeof(nt.opt.hdr64) - size );
+
mapping->image.base = nt.opt.hdr64.ImageBase;
mapping->image.entry_point = nt.opt.hdr64.ImageBase + nt.opt.hdr64.AddressOfEntryPoint;
mapping->image.map_size = ROUND_SIZE( nt.opt.hdr64.SizeOfImage );
--
2.11.0

View File

@@ -0,0 +1,31 @@
From bbc0ffba68c07dbd27ba4c33b8b6f1a66783b8ff Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Mon, 2 Jan 2017 15:35:41 +0800
Subject: ntdll: If PE image size is larger than the backed file size then
treat file as removable.
---
dlls/ntdll/virtual.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index bdf94063871..1a60fec7cfd 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -1163,6 +1163,13 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
/* unaligned sections, this happens for native subsystem binaries */
/* in that case Windows simply maps in the whole file */
+ /* if the image size is larger than the backed file size we can't mmap it */
+ if (total_size > ROUND_SIZE( 0, st.st_size ))
+ {
+ close_handle( dup_mapping );
+ dup_mapping = 0;
+ }
+
if (map_file_into_view( view, fd, 0, total_size, 0, VPROT_COMMITTED | VPROT_READ | VPROT_WRITECOPY,
!dup_mapping ) != STATUS_SUCCESS) goto error;
--
2.11.0

View File

@@ -0,0 +1,38 @@
From 3f4b08acc72791d1c9bb244c39f0721b8da180de Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Mon, 2 Jan 2017 15:38:48 +0800
Subject: kernel32: On process entry store PEB address in %ebx.
8k demo custom PE loader depends on this.
---
dlls/kernel32/process.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index fdf272f61b0..231844b80a7 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -1073,12 +1073,19 @@ __ASM_GLOBAL_FUNC( call_process_entry,
__ASM_CFI(".cfi_rel_offset %ebp,0\n\t")
"movl %esp,%ebp\n\t"
__ASM_CFI(".cfi_def_cfa_register %ebp\n\t")
+ "pushl %ebx\n\t"
+ __ASM_CFI(".cfi_rel_offset %ebx,-4\n\t")
+ "subl $12,%esp\n\t"
"pushl 4(%ebp)\n\t" /* deliberately mis-align the stack by 8, Doom 3 needs this */
"pushl 4(%ebp)\n\t" /* Driller expects readable address at this offset */
"pushl 4(%ebp)\n\t"
"pushl 8(%ebp)\n\t"
+ "movl 8(%ebp),%ebx\n\t"
"call *12(%ebp)\n\t"
- "leave\n\t"
+ "leal -4(%ebp),%esp\n\t"
+ "popl %ebx\n\t"
+ __ASM_CFI(".cfi_same_value %ebx\n\t")
+ "popl %ebp\n\t"
__ASM_CFI(".cfi_def_cfa %esp,4\n\t")
__ASM_CFI(".cfi_same_value %ebp\n\t")
"ret" )
--
2.11.0

View File

@@ -0,0 +1,25 @@
From 0aaa4c217073d55d35e7c85bd8ca44b19bb31ede Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Mon, 2 Jan 2017 15:47:52 +0800
Subject: kernel32/tests: Fix a module reference leak leading to an undeletable
temporary file.
---
dlls/kernel32/tests/loader.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 4f72c3e599b..9ddfd8d7922 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -1457,6 +1457,7 @@ static void test_import_resolution(void)
ok( ptr->thunks[0].u1.Function == 0xdeadbeef, "thunk resolved to %p for %s.%s\n",
(void *)ptr->thunks[0].u1.Function, data.module, data.function.name );
ok( ptr->tls_index == 9999, "wrong tls index %d\n", ptr->tls_index );
+ FreeLibrary( mod2 );
FreeLibrary( mod );
break;
case 2: /* load without IMAGE_FILE_DLL doesn't resolve imports */
--
2.11.0

View File

@@ -0,0 +1,112 @@
From b2443dc0deaec8c5e7d70f1bf2004181d2240177 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Mon, 2 Jan 2017 15:50:01 +0800
Subject: kernel32/tests: Add a PE test image that resembles format of some of
8k demos.
---
dlls/kernel32/tests/loader.c | 39 +++++++++++++++++++++++++++++++++++++--
1 file changed, 37 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 9ddfd8d7922..a74647b3d40 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -184,7 +184,7 @@ static DWORD create_test_dll( const IMAGE_DOS_HEADER *dos_header, UINT dos_size,
{
SetLastError(0xdeadbeef);
ret = WriteFile(hfile, &nt_header->OptionalHeader,
- min(nt_header->FileHeader.SizeOfOptionalHeader, sizeof(IMAGE_OPTIONAL_HEADER)),
+ sizeof(IMAGE_OPTIONAL_HEADER),
&dummy, NULL);
ok(ret, "WriteFile error %d\n", GetLastError());
if (nt_header->FileHeader.SizeOfOptionalHeader > sizeof(IMAGE_OPTIONAL_HEADER))
@@ -200,6 +200,8 @@ static DWORD create_test_dll( const IMAGE_DOS_HEADER *dos_header, UINT dos_size,
assert(nt_header->FileHeader.NumberOfSections <= 1);
if (nt_header->FileHeader.NumberOfSections)
{
+ SetFilePointer(hfile, dos_size + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + nt_header->FileHeader.SizeOfOptionalHeader, NULL, FILE_BEGIN);
+
section.SizeOfRawData = 10;
if (nt_header->OptionalHeader.SectionAlignment >= page_size)
@@ -224,6 +226,17 @@ static DWORD create_test_dll( const IMAGE_DOS_HEADER *dos_header, UINT dos_size,
ret = WriteFile(hfile, section_data, sizeof(section_data), &dummy, NULL);
ok(ret, "WriteFile error %d\n", GetLastError());
}
+
+ /* Minimal PE image that Windows7+ is able to load: 268 bytes */
+ size = GetFileSize(hfile, NULL);
+ if (size < 268)
+ {
+ file_align = 268 - size;
+ SetLastError(0xdeadbeef);
+ ret = WriteFile(hfile, filler, file_align, &dummy, NULL);
+ ok(ret, "WriteFile error %d\n", GetLastError());
+ }
+
size = GetFileSize(hfile, NULL);
CloseHandle(hfile);
return size;
@@ -294,7 +307,8 @@ static void query_image_section( int id, const char *dll_name, const IMAGE_NT_HE
image.LoaderFlags, nt_header->OptionalHeader.LoaderFlags );
ok( image.ImageFileSize == file_size || broken(!image.ImageFileSize), /* winxpsp1 */
"%u: ImageFileSize wrong %08x / %08x\n", id, image.ImageFileSize, file_size );
- ok( image.CheckSum == nt_header->OptionalHeader.CheckSum, "%u: CheckSum wrong %08x / %08x\n", id,
+ ok( image.CheckSum == nt_header->OptionalHeader.CheckSum || broken(truncated),
+ "%u: CheckSum wrong %08x / %08x\n", id,
image.CheckSum, nt_header->OptionalHeader.CheckSum );
/* FIXME: needs more work: */
/* image.GpValue */
@@ -444,6 +458,7 @@ static void test_Loader(void)
/* Mandatory are all fields up to SizeOfHeaders, everything else
* is really optional (at least that's true for XP).
*/
+#if 0 /* 32-bit Windows 8 crashes inside of LoadLibrary */
{ sizeof(dos_header),
1, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200,
sizeof(dos_header) + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum) + sizeof(IMAGE_SECTION_HEADER) + 0x10,
@@ -451,6 +466,7 @@ static void test_Loader(void)
{ ERROR_SUCCESS, ERROR_BAD_EXE_FORMAT, ERROR_INVALID_ADDRESS,
ERROR_NOACCESS }
},
+#endif
{ sizeof(dos_header),
0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200,
0xd0, /* beyond of the end of file */
@@ -519,6 +535,14 @@ static void test_Loader(void)
0x40, /* minimal image size that Windows7 accepts */
0,
{ ERROR_SUCCESS }
+ },
+ /* the following data mimics the PE image which 8k demos have */
+ { 0x04,
+ 0, 0x08,
+ 0x04 /* also serves as e_lfanew in the truncated MZ header */, 0x04,
+ 0x200000,
+ 0x40,
+ { ERROR_SUCCESS }
}
};
int i;
@@ -709,6 +733,17 @@ static void test_Loader(void)
ret = FreeLibrary(hlib_as_data_file);
ok(ret, "FreeLibrary error %d\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ ret = DeleteFileA(dll_name);
+ ok(ret, "DeleteFile error %d\n", GetLastError());
+
+ nt_header.OptionalHeader.AddressOfEntryPoint = 0x12345678;
+ file_size = create_test_dll( &dos_header, td[i].size_of_dos_header, &nt_header, dll_name );
+ if (!file_size)
+ {
+ ok(0, "could not create %s\n", dll_name);
+ break;
+ }
query_image_section( i, dll_name, &nt_header );
}
else
--
2.11.0

View File

@@ -0,0 +1,2 @@
Fixes: [42125] Various PE loader fixes for 8k demos
Depends: kernel32-Misalign_Workaround

View File

@@ -0,0 +1,33 @@
From 8570cb45ae2a6e39df2fe1d9642fb4d987d6b2e0 Mon Sep 17 00:00:00 2001
From: Mark Jansen <learn0more+wine@gmail.com>
Date: Fri, 13 Jan 2017 23:20:52 +0100
Subject: msi: Do not sign extend after multiplying.
Signed-off-by: Mark Jansen <learn0more+wine@gmail.com>
---
dlls/msi/dialog.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c
index fc9c24c90a3..d9a2ab7a614 100644
--- a/dlls/msi/dialog.c
+++ b/dlls/msi/dialog.c
@@ -3184,13 +3184,13 @@ static LONGLONG msi_vcl_get_cost( msi_dialog *dialog )
MSICOSTTREE_SELFONLY, INSTALLSTATE_LOCAL, &each_cost)))
{
/* each_cost is in 512-byte units */
- total_cost += each_cost * 512;
+ total_cost += ((LONGLONG)each_cost) * 512;
}
if (ERROR_SUCCESS == (MSI_GetFeatureCost(dialog->package, feature,
MSICOSTTREE_SELFONLY, INSTALLSTATE_ABSENT, &each_cost)))
{
/* each_cost is in 512-byte units */
- total_cost -= each_cost * 512;
+ total_cost -= ((LONGLONG)each_cost) * 512;
}
}
return total_cost;
--
2.11.0

View File

@@ -0,0 +1,27 @@
From d386a3724eac666427f7f176e7209f74e1b98885 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 15 Jan 2017 18:59:10 +0100
Subject: msvideo16: Check if any 16 bit thunks have been allocated before
accessing pointer.
---
dlls/msvideo.dll16/msvideo16.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/dlls/msvideo.dll16/msvideo16.c b/dlls/msvideo.dll16/msvideo16.c
index 8f02cc1ebc8..5a3b8aa74ee 100644
--- a/dlls/msvideo.dll16/msvideo16.c
+++ b/dlls/msvideo.dll16/msvideo16.c
@@ -762,6 +762,9 @@ static struct msvideo_thunk* MSVIDEO_HasThunk(HIC16 hic)
{
struct msvideo_thunk* thunk;
+ if (!MSVIDEO_Thunks)
+ return NULL;
+
for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++)
{
if (thunk->hIC16 == hic) return thunk;
--
2.11.0

View File

@@ -0,0 +1 @@
Fixes: [41448] Check if any 16 bit thunks have been allocated before accessing pointer

View File

@@ -0,0 +1,37 @@
From 5eac8a570514043d3a534b165aa6e2f846826e0e Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov@codeweavers.com>
Date: Mon, 19 Dec 2016 00:06:04 +0300
Subject: msxml3: Accept AllowXsltScript and AllowDocumentFunction properties
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
---
dlls/msxml3/domdoc.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 36432190bb4..62b48fcb21a 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -71,6 +71,8 @@ static const WCHAR PropertyNewParserW[] = {'N','e','w','P','a','r','s','e','r',0
static const WCHAR PropValueXPathW[] = {'X','P','a','t','h',0};
static const WCHAR PropValueXSLPatternW[] = {'X','S','L','P','a','t','t','e','r','n',0};
static const WCHAR PropertyResolveExternalsW[] = {'R','e','s','o','l','v','e','E','x','t','e','r','n','a','l','s',0};
+static const WCHAR PropertyAllowXsltScriptW[] = {'A','l','l','o','w','X','s','l','t','S','c','r','i','p','t',0};
+static const WCHAR PropertyAllowDocumentFunctionW[] = {'A','l','l','o','w','D','o','c','u','m','e','n','t','F','u','n','c','t','i','o','n',0};
/* Anything that passes the test_get_ownerDocument()
* tests can go here (data shared between all instances).
@@ -3072,7 +3074,9 @@ static HRESULT WINAPI domdoc_setProperty(
}
else if (lstrcmpiW(p, PropertyProhibitDTDW) == 0 ||
lstrcmpiW(p, PropertyNewParserW) == 0 ||
- lstrcmpiW(p, PropertyResolveExternalsW) == 0)
+ lstrcmpiW(p, PropertyResolveExternalsW) == 0 ||
+ lstrcmpiW(p, PropertyAllowXsltScriptW) == 0 ||
+ lstrcmpiW(p, PropertyAllowDocumentFunctionW) == 0)
{
/* Ignore */
FIXME("Ignoring property %s, value %s\n", debugstr_w(p), debugstr_variant(&value));
--
2.11.0

View File

@@ -0,0 +1 @@
Fixes: [41747] Ignore AllowXsltScript and AllowDocumentFunction properties in msxml

Some files were not shown because too many files have changed in this diff Show More