Skip to content

Commit 195511f

Browse files
committed
Add more tests and check if reversed and options are set both
1 parent d069662 commit 195511f

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

Lib/test/test_winreg.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,16 @@ def test_registry_works_with_options(self):
275275
reserved=REG_OPTION_VOLATILE)
276276
self._read_test_data(HKEY_CURRENT_USER, OpenKey=ok)
277277

278+
# TypeError cases
279+
with self.assertRaises(TypeError):
280+
OpenKeyEx(HKEY_CURRENT_USER, test_key_name, 0, KEY_READ, 0)
281+
with self.assertRaises(TypeError):
282+
OpenKeyEx(HKEY_CURRENT_USER, test_key_name, 0, KEY_READ, options=0)
283+
with self.assertRaises(TypeError):
284+
OpenKeyEx(HKEY_CURRENT_USER, test_key_name, 1, KEY_READ, reserved=1)
285+
with self.assertRaises(TypeError):
286+
OpenKeyEx(HKEY_CURRENT_USER, test_key_name, options=1, reserved=1)
287+
278288
self._delete_test_data(HKEY_CURRENT_USER)
279289

280290
def test_create_only(self):

PC/winreg.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,11 @@ winreg_OpenKeyEx_impl(PyObject *module, HKEY key, const wchar_t *sub_key,
14441444
(Py_ssize_t)access) < 0) {
14451445
return NULL;
14461446
}
1447+
if (options != 0 && reserved != 0) {
1448+
PyErr_SetString(PyExc_TypeError,
1449+
"cannot specify both 'options' and 'reserved' parameters");
1450+
return NULL;
1451+
}
14471452
if (reserved != 0) {
14481453
if (PyErr_WarnEx(PyExc_DeprecationWarning,
14491454
"reserved is deprecated, use options instead.", 1))
@@ -1453,7 +1458,7 @@ winreg_OpenKeyEx_impl(PyObject *module, HKEY key, const wchar_t *sub_key,
14531458
options = reserved;
14541459
}
14551460
Py_BEGIN_ALLOW_THREADS
1456-
rc = RegOpenKeyExW(key, sub_key, reserved, access, &retKey);
1461+
rc = RegOpenKeyExW(key, sub_key, options, access, &retKey);
14571462
Py_END_ALLOW_THREADS
14581463
if (rc != ERROR_SUCCESS) {
14591464
PyErr_SetFromWindowsErrWithFunction(rc, "RegOpenKeyEx");

0 commit comments

Comments
 (0)