summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-05-11 13:58:34 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-05-11 13:58:34 (GMT)
commit8b0e98426dd0e1fde93715256413bc707759db6f (patch)
tree6ac26277c19dfd6823688385462aae63b7862808
parentd8f870d0faad949fa6ad073d35bc45ebf7074452 (diff)
downloadcpython-8b0e98426dd0e1fde93715256413bc707759db6f.zip
cpython-8b0e98426dd0e1fde93715256413bc707759db6f.tar.gz
cpython-8b0e98426dd0e1fde93715256413bc707759db6f.tar.bz2
Issue #17237: Fix crash in the ASCII decoder on m68k.
-rw-r--r--Misc/NEWS2
-rw-r--r--Objects/unicodeobject.c9
2 files changed, 11 insertions, 0 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 4d1ee47..bccd7f66 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 3.3.2?
Core and Builtins
-----------------
+- Issue #17237: Fix crash in the ASCII decoder on m68k.
+
- Issue #17408: Avoid using an obsolete instance of the copyreg module when
the interpreter is shutdown and then started again.
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index c21e80c..8d6cda5 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4661,6 +4661,14 @@ ascii_decode(const char *start, const char *end, Py_UCS1 *dest)
const char *p = start;
const char *aligned_end = (const char *) _Py_ALIGN_DOWN(end, SIZEOF_LONG);
+ /*
+ * Issue #17237: m68k is a bit different from most architectures in
+ * that objects do not use "natural alignment" - for example, int and
+ * long are only aligned at 2-byte boundaries. Therefore the assert()
+ * won't work; also, tests have shown that skipping the "optimised
+ * version" will even speed up m68k.
+ */
+#if !defined(__m68k__)
#if SIZEOF_LONG <= SIZEOF_VOID_P
assert(_Py_IS_ALIGNED(dest, SIZEOF_LONG));
if (_Py_IS_ALIGNED(p, SIZEOF_LONG)) {
@@ -4686,6 +4694,7 @@ ascii_decode(const char *start, const char *end, Py_UCS1 *dest)
return p - start;
}
#endif
+#endif
while (p < end) {
/* Fast path, see in STRINGLIB(utf8_decode) in stringlib/codecs.h
for an explanation. */