Staging
v0.8.1
https://github.com/python/cpython
Revision 392520bd78cd18639a27e5d2803c2e1c2bd593a8 authored by Miss Islington (bot) on 20 April 2018, 17:06:21 UTC, committed by Gregory P. Smith on 20 April 2018, 17:06:21 UTC
Fix clang ubsan (undefined behavior sanitizer) warnings in dictobject.c by
adjusting how the internal struct _dictkeysobject shared keys structure is
declared.

This remains ABI compatible.  We get rid of the union at the end of the
struct being used for conveinence to avoid typecasting in favor of char[]
variable length array at the end of a struct. This is known to clang to be
used for variable sized objects and will not cause an undefined behavior
problem.  Similarly, char arrays do not have strict aliasing undefined
behavior when cast.

PEP-007 does not currently list variable length arrays (VLAs) as allowed
in our subset of C99.  If this turns out to be a problem, the fix to this is
to change the char `dk_indices[]` into `dk_indices[1]` and restore the
three size computation subtractions this change removes:
  `- Py_MEMBER_SIZE(PyDictKeysObject, dk_indices)`

If this works as is I'll make a separate PR to update PEP-007.
(cherry picked from commit 397f1b28c4a12e3b3ed59a89599eabc457412649)
1 parent 18cd828
History
Tip revision: 392520bd78cd18639a27e5d2803c2e1c2bd593a8 authored by Miss Islington (bot) on 20 April 2018, 17:06:21 UTC
bpo-33312: Fix clang ubsan out of bounds warnings in dict. (GH-6537) (GH-6543)
Tip revision: 392520b
File Mode Size
asyncio
collections
concurrent
ctypes
curses
dbm
distutils
email
encodings
ensurepip
html
http
idlelib
importlib
json
lib2to3
logging
msilib
multiprocessing
pydoc_data
site-packages
sqlite3
test
tkinter
turtledemo
unittest
urllib
venv
wsgiref
xml
xmlrpc
__future__.py -rw-r--r-- 5.0 KB
__phello__.foo.py -rw-r--r-- 64 bytes
_bootlocale.py -rw-r--r-- 1.8 KB
_collections_abc.py -rw-r--r-- 25.8 KB
_compat_pickle.py -rw-r--r-- 8.5 KB
_compression.py -rw-r--r-- 5.2 KB
_dummy_thread.py -rw-r--r-- 5.0 KB
_markupbase.py -rw-r--r-- 14.3 KB
_osx_support.py -rw-r--r-- 18.7 KB
_py_abc.py -rw-r--r-- 6.0 KB
_pydecimal.py -rw-r--r-- 223.2 KB
_pyio.py -rw-r--r-- 89.0 KB
_sitebuiltins.py -rw-r--r-- 3.0 KB
_strptime.py -rw-r--r-- 24.9 KB
_threading_local.py -rw-r--r-- 7.0 KB
_weakrefset.py -rw-r--r-- 5.5 KB
abc.py -rw-r--r-- 5.4 KB
aifc.py -rw-r--r-- 32.0 KB
antigravity.py -rw-r--r-- 476 bytes
argparse.py -rw-r--r-- 92.8 KB
ast.py -rw-r--r-- 12.0 KB
asynchat.py -rw-r--r-- 11.1 KB
asyncore.py -rw-r--r-- 19.6 KB
base64.py -rwxr-xr-x 20.0 KB
bdb.py -rw-r--r-- 30.8 KB
binhex.py -rw-r--r-- 13.6 KB
bisect.py -rw-r--r-- 2.5 KB
bz2.py -rw-r--r-- 12.1 KB
cProfile.py -rwxr-xr-x 5.6 KB
calendar.py -rw-r--r-- 24.2 KB
cgi.py -rwxr-xr-x 32.8 KB
cgitb.py -rw-r--r-- 11.7 KB
chunk.py -rw-r--r-- 5.3 KB
cmd.py -rw-r--r-- 14.5 KB
code.py -rw-r--r-- 10.4 KB
codecs.py -rw-r--r-- 35.4 KB
codeop.py -rw-r--r-- 5.9 KB
colorsys.py -rw-r--r-- 4.0 KB
compileall.py -rw-r--r-- 13.0 KB
configparser.py -rw-r--r-- 52.7 KB
contextlib.py -rw-r--r-- 23.2 KB
contextvars.py -rw-r--r-- 129 bytes
copy.py -rw-r--r-- 8.6 KB
copyreg.py -rw-r--r-- 6.9 KB
crypt.py -rw-r--r-- 3.3 KB
csv.py -rw-r--r-- 15.8 KB
dataclasses.py -rw-r--r-- 39.6 KB
datetime.py -rw-r--r-- 82.4 KB
decimal.py -rw-r--r-- 320 bytes
difflib.py -rw-r--r-- 82.4 KB
dis.py -rw-r--r-- 19.4 KB
doctest.py -rw-r--r-- 102.0 KB
dummy_threading.py -rw-r--r-- 2.7 KB
enum.py -rw-r--r-- 33.8 KB
filecmp.py -rw-r--r-- 9.6 KB
fileinput.py -rw-r--r-- 14.2 KB
fnmatch.py -rw-r--r-- 4.0 KB
formatter.py -rw-r--r-- 14.8 KB
fractions.py -rw-r--r-- 23.1 KB
ftplib.py -rw-r--r-- 34.4 KB
functools.py -rw-r--r-- 31.4 KB
genericpath.py -rw-r--r-- 4.6 KB
getopt.py -rw-r--r-- 7.3 KB
getpass.py -rw-r--r-- 5.9 KB
gettext.py -rw-r--r-- 21.5 KB
glob.py -rw-r--r-- 5.5 KB
gzip.py -rw-r--r-- 19.9 KB
hashlib.py -rw-r--r-- 9.3 KB
heapq.py -rw-r--r-- 22.5 KB
hmac.py -rw-r--r-- 6.3 KB
imaplib.py -rw-r--r-- 51.8 KB
imghdr.py -rw-r--r-- 3.7 KB
imp.py -rw-r--r-- 10.4 KB
inspect.py -rw-r--r-- 113.5 KB
io.py -rw-r--r-- 3.4 KB
ipaddress.py -rw-r--r-- 73.3 KB
keyword.py -rwxr-xr-x 2.2 KB
linecache.py -rw-r--r-- 5.2 KB
locale.py -rw-r--r-- 73.7 KB
lzma.py -rw-r--r-- 12.7 KB
macpath.py -rw-r--r-- 6.0 KB
mailbox.py -rw-r--r-- 76.8 KB
mailcap.py -rw-r--r-- 7.9 KB
mimetypes.py -rw-r--r-- 20.3 KB
modulefinder.py -rw-r--r-- 22.5 KB
netrc.py -rw-r--r-- 5.4 KB
nntplib.py -rw-r--r-- 42.1 KB
ntpath.py -rw-r--r-- 21.9 KB
nturl2path.py -rw-r--r-- 2.5 KB
numbers.py -rw-r--r-- 10.0 KB
opcode.py -rw-r--r-- 5.7 KB
operator.py -rw-r--r-- 10.6 KB
optparse.py -rw-r--r-- 59.0 KB
os.py -rw-r--r-- 36.9 KB
pathlib.py -rw-r--r-- 47.7 KB
pdb.py -rwxr-xr-x 60.9 KB
pickle.py -rw-r--r-- 56.5 KB
pickletools.py -rw-r--r-- 89.1 KB
pipes.py -rw-r--r-- 8.7 KB
pkgutil.py -rw-r--r-- 21.0 KB
platform.py -rwxr-xr-x 44.9 KB
plistlib.py -rw-r--r-- 29.2 KB
poplib.py -rw-r--r-- 14.6 KB
posixpath.py -rw-r--r-- 15.1 KB
pprint.py -rw-r--r-- 20.4 KB
profile.py -rwxr-xr-x 21.5 KB
pstats.py -rw-r--r-- 26.7 KB
pty.py -rw-r--r-- 4.7 KB
py_compile.py -rw-r--r-- 7.7 KB
pyclbr.py -rw-r--r-- 14.8 KB
pydoc.py -rw-r--r-- 103.9 KB
queue.py -rw-r--r-- 11.1 KB
quopri.py -rwxr-xr-x 7.1 KB
random.py -rw-r--r-- 26.8 KB
re.py -rw-r--r-- 14.8 KB
reprlib.py -rw-r--r-- 5.1 KB
rlcompleter.py -rw-r--r-- 6.9 KB
runpy.py -rw-r--r-- 11.7 KB
sched.py -rw-r--r-- 6.3 KB
secrets.py -rw-r--r-- 2.0 KB
selectors.py -rw-r--r-- 18.1 KB
shelve.py -rw-r--r-- 8.3 KB
shlex.py -rw-r--r-- 12.7 KB
shutil.py -rw-r--r-- 40.1 KB
signal.py -rw-r--r-- 2.1 KB
site.py -rw-r--r-- 20.5 KB
smtpd.py -rwxr-xr-x 33.9 KB
smtplib.py -rwxr-xr-x 43.1 KB
sndhdr.py -rw-r--r-- 6.9 KB
socket.py -rw-r--r-- 26.7 KB
socketserver.py -rw-r--r-- 25.8 KB
sre_compile.py -rw-r--r-- 26.2 KB
sre_constants.py -rw-r--r-- 7.0 KB
sre_parse.py -rw-r--r-- 38.4 KB
ssl.py -rw-r--r-- 44.0 KB
stat.py -rw-r--r-- 4.9 KB
statistics.py -rw-r--r-- 20.2 KB
string.py -rw-r--r-- 11.3 KB
stringprep.py -rw-r--r-- 12.6 KB
struct.py -rw-r--r-- 257 bytes
subprocess.py -rw-r--r-- 67.5 KB
sunau.py -rw-r--r-- 17.9 KB
symbol.py -rwxr-xr-x 2.1 KB
symtable.py -rw-r--r-- 7.1 KB
sysconfig.py -rw-r--r-- 23.6 KB
tabnanny.py -rwxr-xr-x 11.1 KB
tarfile.py -rwxr-xr-x 90.4 KB
telnetlib.py -rw-r--r-- 22.6 KB
tempfile.py -rw-r--r-- 25.9 KB
textwrap.py -rw-r--r-- 19.0 KB
this.py -rw-r--r-- 1003 bytes
threading.py -rw-r--r-- 46.7 KB
timeit.py -rwxr-xr-x 13.1 KB
token.py -rw-r--r-- 3.7 KB
tokenize.py -rw-r--r-- 25.9 KB
trace.py -rwxr-xr-x 28.2 KB
traceback.py -rw-r--r-- 22.6 KB
tracemalloc.py -rw-r--r-- 16.7 KB
tty.py -rw-r--r-- 879 bytes
turtle.py -rw-r--r-- 140.2 KB
types.py -rw-r--r-- 9.7 KB
typing.py -rw-r--r-- 53.9 KB
uu.py -rwxr-xr-x 6.7 KB
uuid.py -rw-r--r-- 28.1 KB
warnings.py -rw-r--r-- 19.3 KB
wave.py -rw-r--r-- 17.8 KB
weakref.py -rw-r--r-- 20.0 KB
webbrowser.py -rwxr-xr-x 22.6 KB
xdrlib.py -rw-r--r-- 5.8 KB
zipapp.py -rw-r--r-- 7.4 KB
zipfile.py -rw-r--r-- 77.9 KB

back to top