Avoid crashing because of an unaligned word access

This commit is contained in:
Antoine Pitrou 2011-11-11 02:59:42 +01:00
parent 9768676f6f
commit 44c6affc79
1 changed files with 9 additions and 1 deletions

View File

@ -6252,7 +6252,15 @@ _PyUnicode_DecodeUnicodeInternal(const char *s,
end = s + size; end = s + size;
while (s < end) { 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 /* We have to sanity check the raw data, otherwise doom looms for
some malformed UCS-4 data. */ some malformed UCS-4 data. */
if ( if (