Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
8d6c62dd
Commit
8d6c62dd
authored
Mar 26, 2011
by
Benjamin Peterson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
check possible recursive _as_parameter_ to prevent segfault (closes #1838)
parent
b8a5769a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
43 additions
and
2 deletions
+43
-2
Lib/ctypes/test/test_as_parameter.py
Lib/ctypes/test/test_as_parameter.py
+12
-0
Lib/lib2to3/refactor.py
Lib/lib2to3/refactor.py
+1
-1
Lib/lib2to3/tests/test_refactor.py
Lib/lib2to3/tests/test_refactor.py
+17
-0
Misc/NEWS
Misc/NEWS
+3
-0
Modules/_ctypes/_ctypes.c
Modules/_ctypes/_ctypes.c
+10
-1
No files found.
Lib/ctypes/test/test_as_parameter.py
View file @
8d6c62dd
...
...
@@ -187,6 +187,18 @@ class BasicWrapTestCase(unittest.TestCase):
self
.
assertEqual
((
s8i
.
a
,
s8i
.
b
,
s8i
.
c
,
s8i
.
d
,
s8i
.
e
,
s8i
.
f
,
s8i
.
g
,
s8i
.
h
),
(
9
*
2
,
8
*
3
,
7
*
4
,
6
*
5
,
5
*
6
,
4
*
7
,
3
*
8
,
2
*
9
))
def
test_recursive_as_param
(
self
):
from
ctypes
import
c_int
class
A
(
object
):
pass
a
=
A
()
a
.
_as_parameter_
=
a
with
self
.
assertRaises
(
RuntimeError
):
c_int
.
from_param
(
a
)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class
AsParamWrapper
(
object
):
...
...
Lib/lib2to3/refactor.py
View file @
8d6c62dd
...
...
@@ -500,7 +500,7 @@ class RefactoringTool(object):
node
=
new
def
processed_file
(
self
,
new_text
,
filename
,
old_text
=
None
,
write
=
False
,
encoding
=
None
):
encoding
=
None
,
newlines
=
None
):
"""
Called when a file has been refactored, and there are changes.
"""
...
...
Lib/lib2to3/tests/test_refactor.py
View file @
8d6c62dd
...
...
@@ -231,6 +231,23 @@ from __future__ import print_function"""
os
.
path
.
join
(
"a_dir"
,
"stuff.py"
)]
check
(
tree
,
tree
)
def
test_preserve_file_newlines
(
self
):
rt
=
self
.
rt
(
fixers
=
_2TO3_FIXERS
)
for
nl
in
(
"
\
r
\
n
"
,
"
\
n
"
):
data
=
"print y%s%syes%sok%s"
%
((
nl
,)
*
4
)
handle
,
tmp
=
tempfile
.
mkstemp
()
os
.
close
(
handle
)
try
:
with
open
(
tmp
,
"w"
)
as
fp
:
fp
.
write
(
data
)
rt
.
refactor_file
(
tmp
)
with
open
(
tmp
,
"r"
)
as
fp
:
contents
=
fp
.
read
()
finally
:
os
.
unlink
(
tmp
)
for
line
in
contents
.
splitlines
(
True
):
self
.
assertTrue
(
line
.
endswith
(
nl
))
def
test_file_encoding
(
self
):
fn
=
os
.
path
.
join
(
TEST_DATA_DIR
,
"different_encoding.py"
)
self
.
check_file_refactoring
(
fn
)
...
...
Misc/NEWS
View file @
8d6c62dd
...
...
@@ -238,6 +238,9 @@ Library
Extensions
----------
- Issue #1838: Prevent segfault in ctypes, when _as_parameter_ on a class is set
to an instance of the class.
- Issue #678250: Make mmap flush a noop on ACCESS_READ and ACCESS_COPY.
Build
...
...
Modules/_ctypes/_ctypes.c
View file @
8d6c62dd
...
...
@@ -2004,10 +2004,14 @@ PyCSimpleType_from_param(PyObject *type, PyObject *value)
PyCArgObject
*
parg
;
struct
fielddesc
*
fd
;
PyObject
*
as_parameter
;
int
res
;
/* If the value is already an instance of the requested type,
we can use it as is */
if
(
1
==
PyObject_IsInstance
(
value
,
type
))
{
res
=
PyObject_IsInstance
(
value
,
type
);
if
(
res
==
-
1
)
return
NULL
;
if
(
res
)
{
Py_INCREF
(
value
);
return
value
;
}
...
...
@@ -2036,7 +2040,12 @@ PyCSimpleType_from_param(PyObject *type, PyObject *value)
as_parameter
=
PyObject_GetAttrString
(
value
,
"_as_parameter_"
);
if
(
as_parameter
)
{
if
(
Py_EnterRecursiveCall
(
"while processing _as_parameter_"
))
{
Py_DECREF
(
as_parameter
);
return
NULL
;
}
value
=
PyCSimpleType_from_param
(
type
,
as_parameter
);
Py_LeaveRecursiveCall
();
Py_DECREF
(
as_parameter
);
return
value
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment