Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 35.2k
bpo-43984: Update winreg.SetValueEx to make sure the value set is not -1#25775
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Uh oh!
There was an error while loading. Please reload this page.
Merged
Changes from all commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
1f2d523
Fix for bpo-43984
shreyanavigyan b00fc84
Update - Free retDataBuf before returning FALSE
shreyanavigyan 7841714
Update winreg.c
shreyanavigyan 1123340
Add news entry
shreyanavigyan 7bbb3f2
Move the error check up before allocation
shreyanavigyan c5755dd
Update 2021-05-02-15-29-33.bpo-43984.U92jiv.rst
shreyanavigyan ad67138
Update PC/winreg.c
shreyanavigyan ec0ea5a
Update PC/winreg.c
shreyanavigyan 62541b8
Add test
shreyanavigyan 27b8130
Fix typo
shreyanavigyan 41a70e0
Update 2021-05-02-15-29-33.bpo-43984.U92jiv.rst
shreyanavigyan 26b1af4
Update Lib/test/test_winreg.py
shreyanavigyan 3fe16ef
Update winreg.c
shreyanavigyan dbe8651
Add test case for REG_QWORD
shreyanavigyan 1d5df04
Update 2021-05-02-15-29-33.bpo-43984.U92jiv.rst
shreyanavigyan 666742c
Merge branch 'main' into bpo-43984
iritkatriel afdee9f
Fix whitespace
AlexWaygood 06da229
Never edit on your phone
AlexWaygood File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -113,7 +113,6 @@ def _write_test_data(self, root_key, subkeystr="sub_key", | ||
| "does not close the actual key!") | ||
| except OSError: | ||
| pass | ||
| def _read_test_data(self, root_key, subkeystr="sub_key", OpenKey=OpenKey): | ||
| # Check we can get default value for this key. | ||
| val = QueryValue(root_key, test_key_name) | ||
| @@ -340,6 +339,23 @@ def test_setvalueex_value_range(self): | ||
| finally: | ||
| DeleteKey(HKEY_CURRENT_USER, test_key_name) | ||
| def test_setvalueex_negative_one_check(self): | ||
| # Test for Issue #43984, check -1 was not set by SetValueEx. | ||
| # Py2Reg, which gets called by SetValueEx, wasn't checking return | ||
| # value by PyLong_AsUnsignedLong, thus setting -1 as value in the registry. | ||
| # The implementation now checks PyLong_AsUnsignedLong return value to assure | ||
| # the value set was not -1. | ||
| try: | ||
| with CreateKey(HKEY_CURRENT_USER, test_key_name) as ck: | ||
| with self.assertRaises(OverflowError): | ||
| SetValueEx(ck, "test_name_dword", None, REG_DWORD, -1) | ||
| SetValueEx(ck, "test_name_qword", None, REG_QWORD, -1) | ||
| self.assertRaises(FileNotFoundError, QueryValueEx, ck, "test_name_dword") | ||
| self.assertRaises(FileNotFoundError, QueryValueEx, ck, "test_name_qword") | ||
| finally: | ||
| DeleteKey(HKEY_CURRENT_USER, test_key_name) | ||
AlexWaygood marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| def test_queryvalueex_return_value(self): | ||
| # Test for Issue #16759, return unsigned int from QueryValueEx. | ||
| # Reg2Py, which gets called by QueryValueEx, was returning a value | ||
3 changes: 3 additions & 0 deletions
3 Misc/NEWS.d/next/Windows/2021-05-02-15-29-33.bpo-43984.U92jiv.rst
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| :meth:`winreg.SetValueEx` now leaves the target value untouched in the case of conversion errors. | ||
| Previously, ``-1`` would be written in case of such errors. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -561,42 +561,54 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize) | ||
| { | ||
| Py_ssize_t i,j; | ||
| switch (typ) { | ||
| case REG_DWORD: | ||
| if (value != Py_None && !PyLong_Check(value)) | ||
| return FALSE; | ||
| *retDataBuf = (BYTE *)PyMem_NEW(DWORD, 1); | ||
| if (*retDataBuf == NULL){ | ||
| PyErr_NoMemory(); | ||
| return FALSE; | ||
| } | ||
| *retDataSize = sizeof(DWORD); | ||
| if (value == Py_None) { | ||
| DWORD zero = 0; | ||
| memcpy(*retDataBuf, &zero, sizeof(DWORD)); | ||
| } | ||
| else { | ||
| DWORD d = PyLong_AsUnsignedLong(value); | ||
| case REG_DWORD: | ||
| { | ||
| if (value != Py_None && !PyLong_Check(value)) { | ||
| return FALSE; | ||
| } | ||
| DWORD d; | ||
| if (value == Py_None) { | ||
| d = 0; | ||
| } | ||
| else if (PyLong_Check(value)) { | ||
| d = PyLong_AsUnsignedLong(value); | ||
| if (d == (DWORD)(-1) && PyErr_Occurred()) { | ||
| return FALSE; | ||
| } | ||
| } | ||
| *retDataBuf = (BYTE *)PyMem_NEW(DWORD, 1); | ||
| if (*retDataBuf == NULL) { | ||
| PyErr_NoMemory(); | ||
| return FALSE; | ||
shreyanavigyan marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| } | ||
| memcpy(*retDataBuf, &d, sizeof(DWORD)); | ||
| *retDataSize = sizeof(DWORD); | ||
| break; | ||
| } | ||
| break; | ||
| case REG_QWORD: | ||
| if (value != Py_None && !PyLong_Check(value)) | ||
| return FALSE; | ||
| *retDataBuf = (BYTE *)PyMem_NEW(DWORD64, 1); | ||
| if (*retDataBuf == NULL){ | ||
| PyErr_NoMemory(); | ||
| return FALSE; | ||
| } | ||
| *retDataSize = sizeof(DWORD64); | ||
| if (value == Py_None) { | ||
| DWORD64 zero = 0; | ||
| memcpy(*retDataBuf, &zero, sizeof(DWORD64)); | ||
| } | ||
| else { | ||
| DWORD64 d = PyLong_AsUnsignedLongLong(value); | ||
| case REG_QWORD: | ||
| { | ||
| if (value != Py_None && !PyLong_Check(value)) { | ||
| return FALSE; | ||
| } | ||
| DWORD64 d; | ||
| if (value == Py_None) { | ||
| d = 0; | ||
| } | ||
| else if (PyLong_Check(value)) { | ||
| d = PyLong_AsUnsignedLongLong(value); | ||
| if (d == (DWORD64)(-1) && PyErr_Occurred()) { | ||
| return FALSE; | ||
| } | ||
| } | ||
| *retDataBuf = (BYTE *)PyMem_NEW(DWORD64, 1); | ||
| if (*retDataBuf == NULL) { | ||
| PyErr_NoMemory(); | ||
| return FALSE; | ||
| } | ||
| memcpy(*retDataBuf, &d, sizeof(DWORD64)); | ||
| *retDataSize = sizeof(DWORD64); | ||
| break; | ||
| } | ||
| break; | ||
| case REG_SZ: | ||
| case REG_EXPAND_SZ: | ||
| { | ||
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.