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
288cb25f
Commit
288cb25f
authored
Dec 30, 2015
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #25961: Disallowed null characters in the type name.
Simplified testing for null characters in __name__ setter.
parents
58f8833e
42bf8fc9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
17 deletions
+17
-17
Misc/NEWS
Misc/NEWS
+2
-0
Objects/typeobject.c
Objects/typeobject.c
+15
-17
No files found.
Misc/NEWS
View file @
288cb25f
...
...
@@ -10,6 +10,8 @@ Release date: tba
Core and Builtins
-----------------
- Issue #25961: Disallowed null characters in the type name.
- Issue #25973: Fix segfault when an invalid nonlocal statement binds a name
starting with two underscores.
...
...
Objects/typeobject.c
View file @
288cb25f
...
...
@@ -401,8 +401,8 @@ type_qualname(PyTypeObject *type, void *context)
static
int
type_set_name
(
PyTypeObject
*
type
,
PyObject
*
value
,
void
*
context
)
{
char
*
tp_name
;
Py
Object
*
tmp
;
c
onst
c
har
*
tp_name
;
Py
_ssize_t
name_size
;
if
(
!
check_set_special_type_attr
(
type
,
value
,
"__name__"
))
return
-
1
;
...
...
@@ -413,21 +413,14 @@ type_set_name(PyTypeObject *type, PyObject *value, void *context)
return
-
1
;
}
/* Check absence of null characters */
tmp
=
PyUnicode_FromStringAndSize
(
"
\0
"
,
1
);
if
(
tmp
==
NULL
)
tp_name
=
PyUnicode_AsUTF8AndSize
(
value
,
&
name_size
);
if
(
tp_name
==
NULL
)
return
-
1
;
if
(
PyUnicode_Contains
(
value
,
tmp
)
!=
0
)
{
Py_DECREF
(
tmp
);
PyErr_Format
(
PyExc_ValueError
,
"__name__ must not contain null bytes"
);
if
(
strlen
(
tp_name
)
!=
(
size_t
)
name_size
)
{
PyErr_SetString
(
PyExc_ValueError
,
"type name must not contain null characters"
);
return
-
1
;
}
Py_DECREF
(
tmp
);
tp_name
=
_PyUnicode_AsString
(
value
);
if
(
tp_name
==
NULL
)
return
-
1
;
type
->
tp_name
=
tp_name
;
Py_INCREF
(
value
);
...
...
@@ -2284,8 +2277,8 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
PyTypeObject
*
type
=
NULL
,
*
base
,
*
tmptype
,
*
winner
;
PyHeapTypeObject
*
et
;
PyMemberDef
*
mp
;
Py_ssize_t
i
,
nbases
,
nslots
,
slotoffset
,
add_dict
,
add_weak
;
int
j
,
may_add_dict
,
may_add_weak
;
Py_ssize_t
i
,
nbases
,
nslots
,
slotoffset
,
name_size
;
int
j
,
may_add_dict
,
may_add_weak
,
add_dict
,
add_weak
;
_Py_IDENTIFIER
(
__qualname__
);
_Py_IDENTIFIER
(
__slots__
);
...
...
@@ -2508,9 +2501,14 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
type
->
tp_as_sequence
=
&
et
->
as_sequence
;
type
->
tp_as_mapping
=
&
et
->
as_mapping
;
type
->
tp_as_buffer
=
&
et
->
as_buffer
;
type
->
tp_name
=
_PyUnicode_AsString
(
nam
e
);
type
->
tp_name
=
PyUnicode_AsUTF8AndSize
(
name
,
&
name_siz
e
);
if
(
!
type
->
tp_name
)
goto
error
;
if
(
strlen
(
type
->
tp_name
)
!=
(
size_t
)
name_size
)
{
PyErr_SetString
(
PyExc_ValueError
,
"type name must not contain null characters"
);
goto
error
;
}
/* Set tp_base and tp_bases */
type
->
tp_bases
=
bases
;
...
...
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