@@ -2786,6 +2786,7 @@ date_from_pickle(PyTypeObject *type, PyObject *state)
27862786 if (me != NULL ) {
27872787 const char * pdata = PyBytes_AS_STRING (state );
27882788 memcpy (& me -> data , pdata , _PyDateTime_DATE_DATASIZE );
2789+ me -> data .year = be16toh (me -> data .year );
27892790 me -> hashcode = -1 ;
27902791 }
27912792 return (PyObject * )me ;
@@ -3453,7 +3454,9 @@ static PyObject *
34533454date_getstate (PyDateTime_Date * self )
34543455{
34553456 PyObject * field ;
3456- field = PyBytes_FromStringAndSize ((char * )& self -> data ,
3457+ _PyDateTime_DateData tmp = self -> data ;
3458+ tmp .year = htobe16 (tmp .year );
3459+ field = PyBytes_FromStringAndSize ((char * )& tmp ,
34573460 _PyDateTime_DATE_DATASIZE );
34583461 return Py_BuildValue ("(N)" , field );
34593462}
@@ -4151,6 +4154,7 @@ time_from_pickle(PyTypeObject *type, PyObject *state, PyObject *tzinfo)
41514154 const char * pdata = PyBytes_AS_STRING (state );
41524155
41534156 memcpy (& me -> data , pdata , _PyDateTime_TIME_DATASIZE );
4157+ me -> data .microsecond = be32toh (me -> data .microsecond ) >> 8 ;
41544158 me -> hashcode = -1 ;
41554159 me -> hastzinfo = aware ;
41564160 if (aware ) {
@@ -4620,7 +4624,9 @@ time_getstate(PyDateTime_Time *self, int proto)
46204624 PyObject * basestate ;
46214625 PyObject * result = NULL ;
46224626
4623- basestate = PyBytes_FromStringAndSize ((char * )& self -> data ,
4627+ _PyDateTime_TimeData tmp = self -> data ;
4628+ tmp .microsecond = htobe32 (tmp .microsecond << 8 );
4629+ basestate = PyBytes_FromStringAndSize ((char * )& tmp ,
46244630 _PyDateTime_TIME_DATASIZE );
46254631 if (basestate != NULL ) {
46264632 if (proto > 3 && TIME_GET_FOLD (self ))
@@ -4817,6 +4823,8 @@ datetime_from_pickle(PyTypeObject *type, PyObject *state, PyObject *tzinfo)
48174823 const char * pdata = PyBytes_AS_STRING (state );
48184824
48194825 memcpy (& me -> data , pdata , _PyDateTime_DATETIME_DATASIZE );
4826+ me -> data .year = be16toh (me -> data .year );
4827+ me -> data .microsecond = be32toh (me -> data .microsecond ) >> 8 ;
48204828 me -> hashcode = -1 ;
48214829 me -> hastzinfo = aware ;
48224830 if (aware ) {
@@ -6273,7 +6281,10 @@ datetime_getstate(PyDateTime_DateTime *self, int proto)
62736281 PyObject * basestate ;
62746282 PyObject * result = NULL ;
62756283
6276- basestate = PyBytes_FromStringAndSize ((char * )& self -> data ,
6284+ _PyDateTime_DateTimeData tmp = self -> data ;
6285+ tmp .year = htobe16 (tmp .year );
6286+ tmp .microsecond = htobe32 (tmp .microsecond << 8 );
6287+ basestate = PyBytes_FromStringAndSize ((char * )& tmp ,
62776288 _PyDateTime_DATETIME_DATASIZE );
62786289 if (basestate != NULL ) {
62796290 if (proto > 3 && DATE_GET_FOLD (self ))
0 commit comments