@@ -55,9 +55,23 @@ static int convert_pydatetime_to_datetimestruct(PyObject *dtobj,
5555  out -> month  =  1 ;
5656  out -> day  =  1 ;
5757
58-   out -> year  =  PyLong_AsLong (PyObject_GetAttrString (obj , "year" ));
59-   out -> month  =  PyLong_AsLong (PyObject_GetAttrString (obj , "month" ));
60-   out -> day  =  PyLong_AsLong (PyObject_GetAttrString (obj , "day" ));
58+   tmp  =  PyObject_GetAttrString (obj , "year" );
59+   if  (tmp  ==  NULL )
60+     return  -1 ;
61+   out -> year  =  PyLong_AsLong (tmp );
62+   Py_DECREF (tmp );
63+ 
64+   tmp  =  PyObject_GetAttrString (obj , "month" );
65+   if  (tmp  ==  NULL )
66+     return  -1 ;
67+   out -> month  =  PyLong_AsLong (tmp );
68+   Py_DECREF (tmp );
69+ 
70+   tmp  =  PyObject_GetAttrString (obj , "day" );
71+   if  (tmp  ==  NULL )
72+     return  -1 ;
73+   out -> day  =  PyLong_AsLong (tmp );
74+   Py_DECREF (tmp );
6175
6276  // TODO(anyone): If we can get PyDateTime_IMPORT to work, we could use 
6377  // PyDateTime_Check here, and less verbose attribute lookups. 
@@ -70,10 +84,29 @@ static int convert_pydatetime_to_datetimestruct(PyObject *dtobj,
7084    return  0 ;
7185  }
7286
73-   out -> hour  =  PyLong_AsLong (PyObject_GetAttrString (obj , "hour" ));
74-   out -> min  =  PyLong_AsLong (PyObject_GetAttrString (obj , "minute" ));
75-   out -> sec  =  PyLong_AsLong (PyObject_GetAttrString (obj , "second" ));
76-   out -> us  =  PyLong_AsLong (PyObject_GetAttrString (obj , "microsecond" ));
87+   tmp  =  PyObject_GetAttrString (obj , "hour" );
88+   if  (tmp  ==  NULL )
89+     return  -1 ;
90+   out -> hour  =  PyLong_AsLong (tmp );
91+   Py_DECREF (tmp );
92+ 
93+   tmp  =  PyObject_GetAttrString (obj , "minute" );
94+   if  (tmp  ==  NULL )
95+     return  -1 ;
96+   out -> min  =  PyLong_AsLong (tmp );
97+   Py_DECREF (tmp );
98+ 
99+   tmp  =  PyObject_GetAttrString (obj , "second" );
100+   if  (tmp  ==  NULL )
101+     return  -1 ;
102+   out -> sec  =  PyLong_AsLong (tmp );
103+   Py_DECREF (tmp );
104+ 
105+   tmp  =  PyObject_GetAttrString (obj , "microsecond" );
106+   if  (tmp  ==  NULL )
107+     return  -1 ;
108+   out -> us  =  PyLong_AsLong (tmp );
109+   Py_DECREF (tmp );
77110
78111  if  (PyObject_HasAttrString (obj , "tzinfo" )) {
79112    PyObject  * offset  =  extract_utc_offset (obj );
0 commit comments