From 8b0e98426dd0e1fde93715256413bc707759db6f Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 11 May 2013 15:58:34 +0200 Subject: Issue #17237: Fix crash in the ASCII decoder on m68k. --- Misc/NEWS | 2 ++ Objects/unicodeobject.c | 9 +++++++++ 2 files changed, 11 insertions(+) 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. */ -- cgit v0.12