From: Antoine Pitrou Date: Fri, 11 Nov 2011 01:59:42 +0000 (+0100) Subject: Avoid crashing because of an unaligned word access X-Git-Tag: v3.3.0a1~875 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=44c6affc796a84cb4b4e89eadd4c923958e9cc99;p=thirdparty%2FPython%2Fcpython.git Avoid crashing because of an unaligned word access --- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 772707de8b60..a4d210bf40ce 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6252,7 +6252,15 @@ _PyUnicode_DecodeUnicodeInternal(const char *s, end = s + size; while (s < end) { - Py_UCS4 ch = *(Py_UNICODE*)s; + Py_UCS4 ch; + /* We copy the raw representation one byte at a time because the + pointer may be unaligned (see test_codeccallbacks). */ + ((char *) &ch)[0] = s[0]; + ((char *) &ch)[1] = s[1]; +#ifdef Py_UNICODE_WIDE + ((char *) &ch)[2] = s[2]; + ((char *) &ch)[3] = s[3]; +#endif /* We have to sanity check the raw data, otherwise doom looms for some malformed UCS-4 data. */ if (