File tree Expand file tree Collapse file tree 2 files changed +17
-3
lines changed Expand file tree Collapse file tree 2 files changed +17
-3
lines changed Original file line number Diff line number Diff line change @@ -112,10 +112,16 @@ int CPyDict_Update(PyObject *dict, PyObject *stuff) {
112112}
113113
114114int CPyDict_UpdateFromAny (PyObject * dict , PyObject * stuff ) {
115+ PyObject * tmp ;
116+
115117 if (PyDict_CheckExact (dict )) {
116118 // Argh this sucks
117119 _Py_IDENTIFIER (keys );
118- if (PyDict_Check (stuff ) || _PyObject_HasAttrId (stuff , & PyId_keys )) {
120+ int hasAttr = PyDict_Check (stuff ) || _PyObject_LookupAttrId (stuff , & PyId_keys , & tmp );
121+ if (tmp ) {
122+ Py_DECREF (tmp );
123+ }
124+ if (hasAttr ) {
119125 return PyDict_Update (dict , stuff );
120126 } else {
121127 return PyDict_MergeFromSeq2 (dict , stuff , 1 );
@@ -126,6 +132,8 @@ int CPyDict_UpdateFromAny(PyObject *dict, PyObject *stuff) {
126132}
127133
128134PyObject * CPyDict_FromAny (PyObject * obj ) {
135+ PyObject * tmp ;
136+
129137 if (PyDict_Check (obj )) {
130138 return PyDict_Copy (obj );
131139 } else {
@@ -135,11 +143,14 @@ PyObject *CPyDict_FromAny(PyObject *obj) {
135143 return NULL ;
136144 }
137145 _Py_IDENTIFIER (keys );
138- if (_PyObject_HasAttrId (obj , & PyId_keys )) {
146+ if (_PyObject_LookupAttrId (obj , & PyId_keys , & tmp )) {
139147 res = PyDict_Update (dict , obj );
140148 } else {
141149 res = PyDict_MergeFromSeq2 (dict , obj , 1 );
142150 }
151+ if (tmp ) {
152+ Py_DECREF (tmp );
153+ }
143154 if (res < 0 ) {
144155 Py_DECREF (dict );
145156 return NULL ;
Original file line number Diff line number Diff line change @@ -940,7 +940,10 @@ import sys
940940
941941# We lie about the version we are running in tests if it is 3.5, so
942942# that hits a crash case.
943- if sys.version_info[:2] == (3, 9):
943+ if sys.version_info[:2] == (3, 10):
944+ def version() -> int:
945+ return 10
946+ elif sys.version_info[:2] == (3, 9):
944947 def version() -> int:
945948 return 9
946949elif sys.version_info[:2] == (3, 8):
You can’t perform that action at this time.
0 commit comments