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
1c748f38
Commit
1c748f38
authored
Sep 07, 2016
by
Martin Panter
Browse files
Options
Browse Files
Download
Plain Diff
Issue #27570: Merge null pointer fixes from 3.5
parents
f3b5bcaf
be8da9c9
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
40 additions
and
15 deletions
+40
-15
Lib/test/test_array.py
Lib/test/test_array.py
+12
-2
Misc/NEWS
Misc/NEWS
+3
-0
Modules/_ctypes/_ctypes.c
Modules/_ctypes/_ctypes.c
+4
-2
Modules/_ctypes/stgdict.c
Modules/_ctypes/stgdict.c
+5
-3
Modules/arraymodule.c
Modules/arraymodule.c
+16
-8
No files found.
Lib/test/test_array.py
View file @
1c748f38
...
...
@@ -36,14 +36,24 @@ typecodes = "ubBhHiIlLfd"
if
have_long_long
:
typecodes
+=
'qQ'
class
BadConstructor
Test
(
unittest
.
TestCase
):
class
Misc
Test
(
unittest
.
TestCase
):
def
test_constructor
(
self
):
def
test_
bad_
constructor
(
self
):
self
.
assertRaises
(
TypeError
,
array
.
array
)
self
.
assertRaises
(
TypeError
,
array
.
array
,
spam
=
42
)
self
.
assertRaises
(
TypeError
,
array
.
array
,
'xx'
)
self
.
assertRaises
(
ValueError
,
array
.
array
,
'x'
)
def
test_empty
(
self
):
# Exercise code for handling zero-length arrays
a
=
array
.
array
(
'B'
)
a
[:]
=
a
self
.
assertEqual
(
len
(
a
),
0
)
self
.
assertEqual
(
len
(
a
+
a
),
0
)
self
.
assertEqual
(
len
(
a
*
3
),
0
)
a
+=
a
self
.
assertEqual
(
len
(
a
),
0
)
# Machine format codes.
#
...
...
Misc/NEWS
View file @
1c748f38
...
...
@@ -96,6 +96,9 @@ Core and Builtins
Library
-------
-
Issue
#
27570
:
Avoid
zero
-
length
memcpy
()
etc
calls
with
null
source
pointers
in
the
"ctypes"
and
"array"
modules
.
-
Issue
#
22233
:
Break
email
header
lines
*
only
*
on
the
RFC
specified
CR
and
LF
characters
,
not
on
arbitrary
unicode
line
breaks
.
This
also
fixes
a
bug
in
HTTP
header
parsing
.
...
...
Modules/_ctypes/_ctypes.c
View file @
1c748f38
...
...
@@ -1375,8 +1375,10 @@ PyCArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
goto
error
;
}
stgdict
->
shape
[
0
]
=
length
;
memmove
(
&
stgdict
->
shape
[
1
],
itemdict
->
shape
,
sizeof
(
Py_ssize_t
)
*
(
stgdict
->
ndim
-
1
));
if
(
stgdict
->
ndim
>
1
)
{
memmove
(
&
stgdict
->
shape
[
1
],
itemdict
->
shape
,
sizeof
(
Py_ssize_t
)
*
(
stgdict
->
ndim
-
1
));
}
itemsize
=
itemdict
->
size
;
if
(
length
*
itemsize
<
0
)
{
...
...
Modules/_ctypes/stgdict.c
View file @
1c748f38
...
...
@@ -391,9 +391,11 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
}
memset
(
stgdict
->
ffi_type_pointer
.
elements
,
0
,
sizeof
(
ffi_type
*
)
*
(
basedict
->
length
+
len
+
1
));
memcpy
(
stgdict
->
ffi_type_pointer
.
elements
,
basedict
->
ffi_type_pointer
.
elements
,
sizeof
(
ffi_type
*
)
*
(
basedict
->
length
));
if
(
basedict
->
length
>
0
)
{
memcpy
(
stgdict
->
ffi_type_pointer
.
elements
,
basedict
->
ffi_type_pointer
.
elements
,
sizeof
(
ffi_type
*
)
*
(
basedict
->
length
));
}
ffi_ofs
=
basedict
->
length
;
}
else
{
offset
=
0
;
...
...
Modules/arraymodule.c
View file @
1c748f38
...
...
@@ -740,8 +740,10 @@ array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
np
=
(
arrayobject
*
)
newarrayobject
(
&
Arraytype
,
ihigh
-
ilow
,
a
->
ob_descr
);
if
(
np
==
NULL
)
return
NULL
;
memcpy
(
np
->
ob_item
,
a
->
ob_item
+
ilow
*
a
->
ob_descr
->
itemsize
,
(
ihigh
-
ilow
)
*
a
->
ob_descr
->
itemsize
);
if
(
ihigh
>
ilow
)
{
memcpy
(
np
->
ob_item
,
a
->
ob_item
+
ilow
*
a
->
ob_descr
->
itemsize
,
(
ihigh
-
ilow
)
*
a
->
ob_descr
->
itemsize
);
}
return
(
PyObject
*
)
np
;
}
...
...
@@ -799,9 +801,13 @@ array_concat(arrayobject *a, PyObject *bb)
if
(
np
==
NULL
)
{
return
NULL
;
}
memcpy
(
np
->
ob_item
,
a
->
ob_item
,
Py_SIZE
(
a
)
*
a
->
ob_descr
->
itemsize
);
memcpy
(
np
->
ob_item
+
Py_SIZE
(
a
)
*
a
->
ob_descr
->
itemsize
,
b
->
ob_item
,
Py_SIZE
(
b
)
*
b
->
ob_descr
->
itemsize
);
if
(
Py_SIZE
(
a
)
>
0
)
{
memcpy
(
np
->
ob_item
,
a
->
ob_item
,
Py_SIZE
(
a
)
*
a
->
ob_descr
->
itemsize
);
}
if
(
Py_SIZE
(
b
)
>
0
)
{
memcpy
(
np
->
ob_item
+
Py_SIZE
(
a
)
*
a
->
ob_descr
->
itemsize
,
b
->
ob_item
,
Py_SIZE
(
b
)
*
b
->
ob_descr
->
itemsize
);
}
return
(
PyObject
*
)
np
;
#undef b
}
...
...
@@ -821,7 +827,7 @@ array_repeat(arrayobject *a, Py_ssize_t n)
np
=
(
arrayobject
*
)
newarrayobject
(
&
Arraytype
,
size
,
a
->
ob_descr
);
if
(
np
==
NULL
)
return
NULL
;
if
(
n
==
0
)
if
(
size
==
0
)
return
(
PyObject
*
)
np
;
oldbytes
=
Py_SIZE
(
a
)
*
a
->
ob_descr
->
itemsize
;
newbytes
=
oldbytes
*
n
;
...
...
@@ -942,8 +948,10 @@ array_do_extend(arrayobject *self, PyObject *bb)
size
=
oldsize
+
Py_SIZE
(
b
);
if
(
array_resize
(
self
,
size
)
==
-
1
)
return
-
1
;
memcpy
(
self
->
ob_item
+
oldsize
*
self
->
ob_descr
->
itemsize
,
b
->
ob_item
,
bbsize
*
b
->
ob_descr
->
itemsize
);
if
(
bbsize
>
0
)
{
memcpy
(
self
->
ob_item
+
oldsize
*
self
->
ob_descr
->
itemsize
,
b
->
ob_item
,
bbsize
*
b
->
ob_descr
->
itemsize
);
}
return
0
;
#undef b
...
...
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