Detlef Riekenberg : wer: Fix WER_REPORT_TYPE failures on recent win10.
Alexandre Julliard
julliard at winehq.org
Wed Mar 27 17:27:37 CDT 2019
Module: wine
Branch: master
Commit: 6202cf456016a25829a05d1e627175bb739462e4
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6202cf456016a25829a05d1e627175bb739462e4
Author: Detlef Riekenberg <wine.dev at web.de>
Date: Tue Mar 26 19:21:55 2019 +0100
wer: Fix WER_REPORT_TYPE failures on recent win10.
Signed-off-by: Detlef Riekenberg <wine.dev at web.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wer/main.c | 2 +-
dlls/wer/tests/main.c | 26 ++++++++++++++++++++++----
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/dlls/wer/main.c b/dlls/wer/main.c
index 75a22a5..e4bda46 100644
--- a/dlls/wer/main.c
+++ b/dlls/wer/main.c
@@ -278,7 +278,7 @@ HRESULT WINAPI WerReportCreate(PCWSTR eventtype, WER_REPORT_TYPE reporttype, PWE
}
if (phandle) *phandle = NULL;
- if (!eventtype || !eventtype[0] || !phandle) {
+ if (!eventtype || !eventtype[0] || !phandle || (reporttype >= WerReportInvalid)) {
return E_INVALIDARG;
}
diff --git a/dlls/wer/tests/main.c b/dlls/wer/tests/main.c
index 11a02fb..7fa9a8c 100644
--- a/dlls/wer/tests/main.c
+++ b/dlls/wer/tests/main.c
@@ -1,7 +1,7 @@
/*
* Unit test suite for windows error reporting in Vista and above
*
- * Copyright 2010 Detlef Riekenberg
+ * Copyright 2010,2019 Detlef Riekenberg
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -207,8 +207,8 @@ static void test_WerReportCreate(void)
hr = WerReportCreate(empty, WerReportCritical, NULL, &report);
ok(hr == E_INVALIDARG, "got 0x%x and %p(expected E_INVALIDARG)\n", hr, report);
- /* WER_REPORT_TYPE is not checked during WerReportCreate */
- for (i = 0; i <= WerReportInvalid + 1; i++) {
+ /* a valid WER_REPORT_TYPE works */
+ for (i = 0; i < WerReportInvalid; i++) {
report = (void *) 0xdeadbeef;
hr = WerReportCreate(appcrash, i, NULL, &report);
ok(hr == S_OK, "%d: got 0x%x and %p (expected S_OK)\n", i, hr, report);
@@ -217,9 +217,27 @@ static void test_WerReportCreate(void)
ok(hr == S_OK, "%d: got 0x%x for %p (expected S_OK)\n", i, hr, report);
}
+
+ /* values for WER_REPORT_TYPE are checked and invalid values are rejected since recent win10,
+ but older windows versions did not check the report type and WerReportCreate always succeeded */
+
+ report = (void *) 0xdeadbeef;
+ hr = WerReportCreate(appcrash, WerReportInvalid, NULL, &report);
+ ok((hr == E_INVALIDARG) | broken(hr == S_OK),
+ "%d: got 0x%x and %p (expected E_INVALIDARG or a broken S_OK)\n", i, hr, report);
+ if (hr == S_OK) {
+ hr = WerReportCloseHandle(report);
+ ok(hr == S_OK, "%d: got 0x%x for %p (expected S_OK)\n", i, hr, report);
+ }
+
report = (void *) 0xdeadbeef;
hr = WerReportCreate(appcrash, 42, NULL, &report);
- ok(hr == S_OK, "42: got 0x%x and %p (expected S_OK)\n", hr, report);
+ ok((hr == E_INVALIDARG) | broken(hr == S_OK),
+ "%d: got 0x%x and %p (expected E_INVALIDARG or a broken S_OK)\n", i, hr, report);
+ if (hr == S_OK) {
+ hr = WerReportCloseHandle(report);
+ ok(hr == S_OK, "%d: got 0x%x for %p (expected S_OK)\n", i, hr, report);
+ }
/* multiple active reports are possible */
memset(table, 0, sizeof(table));
More information about the wine-cvs
mailing list