-
-
Notifications
You must be signed in to change notification settings - Fork 31.4k
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
bpo-1635741: Fix potential refleaks in binascii module #18613
Conversation
Codecov Report
@@ Coverage Diff @@
## master #18613 +/- ##
==========================================
+ Coverage 82.06% 82.13% +0.06%
==========================================
Files 1955 1955
Lines 584080 584621 +541
Branches 44458 44484 +26
==========================================
+ Hits 479327 480176 +849
+ Misses 95124 94794 -330
- Partials 9629 9651 +22
Continue to review full report at Codecov.
|
Modules/binascii.c
Outdated
binascii_clear(PyObject *m) | ||
{ | ||
binascii_state *state = get_binascii_state(m); | ||
if (state == NULL) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think that state can be NULL. If it's NULL, it's a bug in Python. No? Same remark in binascii_traverse().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do some debug in my vm:
Breakpoint 1, binascii_traverse (module=0x7ffff7e803d0, visit=0x4630b6 <bad_traverse_test>, arg=0x0) at /temp/shihai/cpython/Modules/binascii.c:1654
1654 {
(gdb) n
1655 binascii_state *state = get_binascii_state(module);
(gdb) n
1656 if (state == NULL) {
(gdb) n
1657 return -1;
(gdb) p state
$5 = (binascii_state *) 0x0
(gdb) c
Continuing.
Breakpoint 3, binascii_exec (module=0x7ffff7e803d0) at /temp/shihai/cpython/Modules/binascii.c:1615
1615 binascii_exec(PyObject *module) {
What's the reason?
the malloc operation of md_state
will be called after first calling binascii_traverse
.
https://github.com/python/cpython/blob/master/Objects/moduleobject.c#L399.
Modules/binascii.c
Outdated
@@ -1639,16 +1649,46 @@ static PyModuleDef_Slot binascii_slots[] = { | |||
{0, NULL} | |||
}; | |||
|
|||
static int | |||
binascii_traverse(PyObject *m, visitproc visit, void *arg) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nitpick: I would prefer to use longer variable name than just "m". Rename "m" to "mod" or "module". Same remark if following functions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, no probleam, i will update it.
Modules/binascii.c
Outdated
binascii_traverse(PyObject *m, visitproc visit, void *arg) | ||
{ | ||
binascii_state *state = get_binascii_state(m); | ||
if (state == NULL) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will update this behavior soon.
I created https://bugs.python.org/issue39824 to change the md_state==NULL case. |
https://bugs.python.org/issue1635741