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) {
112
112
}
113
113
114
114
int CPyDict_UpdateFromAny (PyObject * dict , PyObject * stuff ) {
115
+ PyObject * tmp ;
116
+
115
117
if (PyDict_CheckExact (dict )) {
116
118
// Argh this sucks
117
119
_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 ) {
119
125
return PyDict_Update (dict , stuff );
120
126
} else {
121
127
return PyDict_MergeFromSeq2 (dict , stuff , 1 );
@@ -126,6 +132,8 @@ int CPyDict_UpdateFromAny(PyObject *dict, PyObject *stuff) {
126
132
}
127
133
128
134
PyObject * CPyDict_FromAny (PyObject * obj ) {
135
+ PyObject * tmp ;
136
+
129
137
if (PyDict_Check (obj )) {
130
138
return PyDict_Copy (obj );
131
139
} else {
@@ -135,11 +143,14 @@ PyObject *CPyDict_FromAny(PyObject *obj) {
135
143
return NULL ;
136
144
}
137
145
_Py_IDENTIFIER (keys );
138
- if (_PyObject_HasAttrId (obj , & PyId_keys )) {
146
+ if (_PyObject_LookupAttrId (obj , & PyId_keys , & tmp )) {
139
147
res = PyDict_Update (dict , obj );
140
148
} else {
141
149
res = PyDict_MergeFromSeq2 (dict , obj , 1 );
142
150
}
151
+ if (tmp ) {
152
+ Py_DECREF (tmp );
153
+ }
143
154
if (res < 0 ) {
144
155
Py_DECREF (dict );
145
156
return NULL ;
Original file line number Diff line number Diff line change @@ -940,7 +940,10 @@ import sys
940
940
941
941
# We lie about the version we are running in tests if it is 3.5, so
942
942
# 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):
944
947
def version() -> int:
945
948
return 9
946
949
elif sys.version_info[:2] == (3, 8):
You can’t perform that action at this time.
0 commit comments