175 static PyObject *
176 pwqerror(int rc, void *auxerror)
177 {
178 char buf[PWQ_MAX_ERROR_MESSAGE_LEN];
179 PyObject *py_errvalue;
180 const char *msg;
181
182 msg = pwquality_strerror(buf, sizeof(buf), rc, auxerror);
183
184 if (rc == PWQ_ERROR_MEM_ALLOC)
when considering range: -0x80000000 <= value <= -9
taking False path
185 return PyErr_NoMemory();
186
187 py_errvalue = Py_BuildValue("is", rc, msg);
when Py_BuildValue() succeeds
new ref from call to Py_BuildValue allocated at: py_errvalue = Py_BuildValue("is", rc, msg);
ob_refcnt is now refs: 1 + N where N >= 0
188 if (py_errvalue == NULL)
taking False path
189 return NULL;
190
191 if (rc == PWQ_ERROR_UNKNOWN_SETTING || rc == PWQ_ERROR_NON_INT_SETTING
taking True path
192 || rc == PWQ_ERROR_NON_STR_SETTING) {
193 PyErr_SetObject(PyExc_AttributeError, py_errvalue);
calling PyErr_SetObject()
ob_refcnt is now refs: 1 + N where N >= 1
194 } else {
195 PyErr_SetObject(PWQError, py_errvalue);
196 }
197 return NULL;
198 }
ob_refcnt of '*py_errvalue' is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 4 similar trace(s) to this