File: src/session.c
Function: session_userauth_password
Error: ob_refcnt of _Py_NoneStruct is 1 too high
206 static PyObject *
207 session_userauth_password(SSH2_SessionObj *self, PyObject *args)
208 {
209 	char *username;
210 	char *password;
211 	Py_ssize_t username_len;
212 	Py_ssize_t password_len;
213 	PyObject *callback = NULL;
214 	int ret;
215 
216 	if (!PyArg_ParseTuple(args, "s#s#|O:userauth_password", &username, &username_len,
when _PyArg_ParseTuple_SizeT() succeeds
taking False path
217 	                                                        &password, &password_len,
218 	                                                        &callback))
219 		return NULL;
220 
221 	if (callback != NULL) {
taking True path
222 		if (!PyCallable_Check(callback))
when PyCallable_Check() returns 1 (true)
taking False path
223 			return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);
224 
225 		Py_DECREF(self->cb_passwd_changereq);
when treating unknown struct PyObject * from src/session.c:225 as non-NULL
when considering range: -0x8000000000000000 <= value <= -1
taking True path
226 		Py_INCREF(callback);
227 		self->cb_passwd_changereq = callback;
228 
229 		Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
230 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
231 		                                                  password, password_len,
232 		                                                  passwd_changereq_callback);
233 		Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
234 
235 		Py_DECREF(self->cb_passwd_changereq);
when considering range: -0x8000000000000000 <= value <= -1
taking True path
ob_refcnt is now refs: 0 + N where N >= 1
236 		Py_INCREF(Py_None);
ob_refcnt is now refs: 1 + N where N >= 1
237 		self->cb_passwd_changereq = Py_None;
238 	} else {
239 		Py_BEGIN_ALLOW_THREADS
240 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
241 		                                                  password, password_len,
242 		                                                  NULL);
243 		Py_END_ALLOW_THREADS
244 	}
245 
246 	CHECK_RETURN_CODE(ret, self)
when considering range: -0x80000000 <= value <= -1
taking True path
when _PyObject_CallFunction_SizeT() succeeds
when _Py_BuildValue_SizeT() succeeds
when PyObject_SetAttrString() succeeds
calling PyErr_SetObject()
247 
248 	Py_RETURN_NONE;
249 }
ob_refcnt of _Py_NoneStruct 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 11 similar trace(s) to this

File: src/session.c
Function: session_userauth_password
Error: ob_refcnt of '*_exc' is 1 too high
206 static PyObject *
207 session_userauth_password(SSH2_SessionObj *self, PyObject *args)
208 {
209 	char *username;
210 	char *password;
211 	Py_ssize_t username_len;
212 	Py_ssize_t password_len;
213 	PyObject *callback = NULL;
214 	int ret;
215 
216 	if (!PyArg_ParseTuple(args, "s#s#|O:userauth_password", &username, &username_len,
when _PyArg_ParseTuple_SizeT() succeeds
taking False path
217 	                                                        &password, &password_len,
218 	                                                        &callback))
219 		return NULL;
220 
221 	if (callback != NULL) {
taking True path
222 		if (!PyCallable_Check(callback))
when PyCallable_Check() returns 1 (true)
taking False path
223 			return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);
224 
225 		Py_DECREF(self->cb_passwd_changereq);
when treating unknown struct PyObject * from src/session.c:225 as non-NULL
when considering range: -0x8000000000000000 <= value <= -1
taking True path
226 		Py_INCREF(callback);
227 		self->cb_passwd_changereq = callback;
228 
229 		Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
230 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
231 		                                                  password, password_len,
232 		                                                  passwd_changereq_callback);
233 		Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
234 
235 		Py_DECREF(self->cb_passwd_changereq);
when considering range: -0x8000000000000000 <= value <= -1
taking True path
236 		Py_INCREF(Py_None);
237 		self->cb_passwd_changereq = Py_None;
238 	} else {
239 		Py_BEGIN_ALLOW_THREADS
240 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
241 		                                                  password, password_len,
242 		                                                  NULL);
243 		Py_END_ALLOW_THREADS
244 	}
245 
246 	CHECK_RETURN_CODE(ret, self)
when considering range: -0x80000000 <= value <= -1
taking True path
when _PyObject_CallFunction_SizeT() succeeds
when _Py_BuildValue_SizeT() succeeds
when PyObject_SetAttrString() succeeds
calling PyErr_SetObject()
new ref from call to _PyObject_CallFunction_SizeT allocated at: 	CHECK_RETURN_CODE(ret, self)
ob_refcnt is now refs: 1 + N where N >= 0
ob_refcnt is now refs: 1 + N where N >= 1
247 
248 	Py_RETURN_NONE;
249 }
ob_refcnt of '*_exc' 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 11 similar trace(s) to this

File: src/session.c
Function: session_userauth_password
Error: ob_refcnt of new ref from call to _Py_BuildValue_SizeT is 1 too high
206 static PyObject *
207 session_userauth_password(SSH2_SessionObj *self, PyObject *args)
208 {
209 	char *username;
210 	char *password;
211 	Py_ssize_t username_len;
212 	Py_ssize_t password_len;
213 	PyObject *callback = NULL;
214 	int ret;
215 
216 	if (!PyArg_ParseTuple(args, "s#s#|O:userauth_password", &username, &username_len,
when _PyArg_ParseTuple_SizeT() succeeds
taking False path
217 	                                                        &password, &password_len,
218 	                                                        &callback))
219 		return NULL;
220 
221 	if (callback != NULL) {
taking True path
222 		if (!PyCallable_Check(callback))
when PyCallable_Check() returns 1 (true)
taking False path
223 			return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);
224 
225 		Py_DECREF(self->cb_passwd_changereq);
when treating unknown struct PyObject * from src/session.c:225 as non-NULL
when considering range: -0x8000000000000000 <= value <= -1
taking True path
226 		Py_INCREF(callback);
227 		self->cb_passwd_changereq = callback;
228 
229 		Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
230 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
231 		                                                  password, password_len,
232 		                                                  passwd_changereq_callback);
233 		Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
234 
235 		Py_DECREF(self->cb_passwd_changereq);
when considering range: -0x8000000000000000 <= value <= -1
taking True path
236 		Py_INCREF(Py_None);
237 		self->cb_passwd_changereq = Py_None;
238 	} else {
239 		Py_BEGIN_ALLOW_THREADS
240 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
241 		                                                  password, password_len,
242 		                                                  NULL);
243 		Py_END_ALLOW_THREADS
244 	}
245 
246 	CHECK_RETURN_CODE(ret, self)
when considering range: -0x80000000 <= value <= -1
taking True path
when _PyObject_CallFunction_SizeT() succeeds
when _Py_BuildValue_SizeT() succeeds
when PyObject_SetAttrString() succeeds
calling PyErr_SetObject()
new ref from call to _Py_BuildValue_SizeT allocated at: 	CHECK_RETURN_CODE(ret, self)
ob_refcnt is now refs: 1 + N where N >= 0
247 
248 	Py_RETURN_NONE;
249 }
ob_refcnt of new ref from call to _Py_BuildValue_SizeT 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 5 similar trace(s) to this

File: src/session.c
Function: session_userauth_password
Error: calling PyObject_SetAttrString with NULL as argument 1 (_exc) at src/session.c:246
206 static PyObject *
207 session_userauth_password(SSH2_SessionObj *self, PyObject *args)
208 {
209 	char *username;
210 	char *password;
211 	Py_ssize_t username_len;
212 	Py_ssize_t password_len;
213 	PyObject *callback = NULL;
214 	int ret;
215 
216 	if (!PyArg_ParseTuple(args, "s#s#|O:userauth_password", &username, &username_len,
when _PyArg_ParseTuple_SizeT() succeeds
taking False path
217 	                                                        &password, &password_len,
218 	                                                        &callback))
219 		return NULL;
220 
221 	if (callback != NULL) {
taking True path
222 		if (!PyCallable_Check(callback))
when PyCallable_Check() returns 1 (true)
taking False path
223 			return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);
224 
225 		Py_DECREF(self->cb_passwd_changereq);
when treating unknown struct PyObject * from src/session.c:225 as non-NULL
when considering range: -0x8000000000000000 <= value <= -1
taking True path
226 		Py_INCREF(callback);
227 		self->cb_passwd_changereq = callback;
228 
229 		Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
230 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
231 		                                                  password, password_len,
232 		                                                  passwd_changereq_callback);
233 		Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
234 
235 		Py_DECREF(self->cb_passwd_changereq);
when considering range: -0x8000000000000000 <= value <= -1
taking True path
236 		Py_INCREF(Py_None);
237 		self->cb_passwd_changereq = Py_None;
238 	} else {
239 		Py_BEGIN_ALLOW_THREADS
240 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
241 		                                                  password, password_len,
242 		                                                  NULL);
243 		Py_END_ALLOW_THREADS
244 	}
245 
246 	CHECK_RETURN_CODE(ret, self)
when considering range: -0x80000000 <= value <= -1
taking True path
when _PyObject_CallFunction_SizeT() fails
when _Py_BuildValue_SizeT() succeeds
calling PyObject_SetAttrString with NULL as argument 1 (_exc) at src/session.c:246
PyObject_SetAttrString() invokes Py_TYPE() on the pointer, thus accessing (NULL)->ob_type
found 5 similar trace(s) to this
247 
248 	Py_RETURN_NONE;
249 }

File: src/session.c
Function: session_userauth_password
Error: ob_refcnt of return value is 1 too high
206 static PyObject *
207 session_userauth_password(SSH2_SessionObj *self, PyObject *args)
208 {
209 	char *username;
210 	char *password;
211 	Py_ssize_t username_len;
212 	Py_ssize_t password_len;
213 	PyObject *callback = NULL;
214 	int ret;
215 
216 	if (!PyArg_ParseTuple(args, "s#s#|O:userauth_password", &username, &username_len,
when _PyArg_ParseTuple_SizeT() succeeds
taking False path
217 	                                                        &password, &password_len,
218 	                                                        &callback))
219 		return NULL;
220 
221 	if (callback != NULL) {
taking True path
222 		if (!PyCallable_Check(callback))
when PyCallable_Check() returns 1 (true)
taking False path
223 			return PyErr_Format(PyExc_TypeError, "'%s' is not callable", callback->ob_type->tp_name);
224 
225 		Py_DECREF(self->cb_passwd_changereq);
when treating unknown struct PyObject * from src/session.c:225 as non-NULL
when considering range: -0x8000000000000000 <= value <= -1
taking True path
226 		Py_INCREF(callback);
227 		self->cb_passwd_changereq = callback;
228 
229 		Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
230 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
231 		                                                  password, password_len,
232 		                                                  passwd_changereq_callback);
233 		Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
234 
235 		Py_DECREF(self->cb_passwd_changereq);
when considering range: -0x8000000000000000 <= value <= -1
taking True path
ob_refcnt is now refs: 0 + N where N >= 1
236 		Py_INCREF(Py_None);
ob_refcnt is now refs: 1 + N where N >= 1
237 		self->cb_passwd_changereq = Py_None;
238 	} else {
239 		Py_BEGIN_ALLOW_THREADS
240 		ret = libssh2_userauth_password_ex(self->session, username, username_len,
241 		                                                  password, password_len,
242 		                                                  NULL);
243 		Py_END_ALLOW_THREADS
244 	}
245 
246 	CHECK_RETURN_CODE(ret, self)
when considering range: 0 <= value <= 0x7fffffff
taking False path
247 
248 	Py_RETURN_NONE;
ob_refcnt is now refs: 2 + N where N >= 1
249 }
ob_refcnt of return value is 1 too high
was expecting final ob_refcnt to be N + 1 (for some unknown N)
due to object being referenced by: return value
but final ob_refcnt is N + 2
found 2 similar trace(s) to this