We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent a4a37fe commit d6e8de1Copy full SHA for d6e8de1
1 file changed
Objects/unicodeobject.c
@@ -2791,16 +2791,24 @@ PyUnicode_DecodeUTF16Stateful(const char *s,
2791
_p[3] = 0;
2792
#endif
2793
2794
- ((unsigned char *) _p)[1] = _q[0];
2795
- ((unsigned char *) _p)[0] = _q[1];
2796
- ((unsigned char *) _p)[1 + Py_UNICODE_SIZE] = _q[2];
2797
- ((unsigned char *) _p)[0 + Py_UNICODE_SIZE] = _q[3];
+ /* Issue #4916; UCS-4 builds on big endian machines must
+ fill the two last bytes of each 4-byte unit. */
+#if (!defined(BYTEORDER_IS_LITTLE_ENDIAN) && Py_UNICODE_SIZE > 2)
+# define OFF 2
2798
+#else
2799
+# define OFF 0
2800
+#endif
2801
+ ((unsigned char *) _p)[OFF + 1] = _q[0];
2802
+ ((unsigned char *) _p)[OFF + 0] = _q[1];
2803
+ ((unsigned char *) _p)[OFF + 1 + Py_UNICODE_SIZE] = _q[2];
2804
+ ((unsigned char *) _p)[OFF + 0 + Py_UNICODE_SIZE] = _q[3];
2805
#if (SIZEOF_LONG == 8)
- ((unsigned char *) _p)[1 + 2 * Py_UNICODE_SIZE] = _q[4];
- ((unsigned char *) _p)[0 + 2 * Py_UNICODE_SIZE] = _q[5];
- ((unsigned char *) _p)[1 + 3 * Py_UNICODE_SIZE] = _q[6];
- ((unsigned char *) _p)[0 + 3 * Py_UNICODE_SIZE] = _q[7];
2806
+ ((unsigned char *) _p)[OFF + 1 + 2 * Py_UNICODE_SIZE] = _q[4];
2807
+ ((unsigned char *) _p)[OFF + 0 + 2 * Py_UNICODE_SIZE] = _q[5];
2808
+ ((unsigned char *) _p)[OFF + 1 + 3 * Py_UNICODE_SIZE] = _q[6];
2809
+ ((unsigned char *) _p)[OFF + 0 + 3 * Py_UNICODE_SIZE] = _q[7];
2810
2811
+#undef OFF
2812
_q += SIZEOF_LONG;
2813
_p += SIZEOF_LONG / 2;
2814
}
0 commit comments