From 44c6affc796a84cb4b4e89eadd4c923958e9cc99 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 11 Nov 2011 02:59:42 +0100 Subject: Avoid crashing because of an unaligned word access --- Objects/unicodeobject.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 772707d..a4d210b 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 ( -- cgit v0.12