diff --git a/CHANGES b/CHANGES index cfbaa27..6b35c4c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ ---------------------------------------------------------------- Released 2.4.34 2017-04-xx +Modules/ +* use errno in a safer way + ---------------------------------------------------------------- Released 2.4.33 2017-04-25 @@ -1358,4 +1361,4 @@ Released 2.0.0pre02 2002-02-01 ---------------------------------------------------------------- Released 1.10alpha3 2000-09-19 -$Id: CHANGES,v 1.418 2017/04/25 11:20:40 stroeder Exp $ +$Id: CHANGES,v 1.419 2017/04/25 12:45:27 stroeder Exp $ diff --git a/Modules/errors.c b/Modules/errors.c index 4d7e0e1..6a8d14b 100644 --- a/Modules/errors.c +++ b/Modules/errors.c @@ -2,7 +2,7 @@ * errors that arise from ldap use * Most errors become their own exception * See http://www.python-ldap.org/ for details. - * $Id: errors.c,v 1.28 2017/04/24 18:32:51 stroeder Exp $ */ + * $Id: errors.c,v 1.29 2017/04/25 12:45:27 stroeder Exp $ */ #include "common.h" #include "errors.h" @@ -54,11 +54,14 @@ LDAPerror( LDAP *l, char *msg ) return NULL; } else { - int errnum, opt_errnum; + int myerrno, errnum, opt_errnum; PyObject *errobj; PyObject *info; PyObject *str; + /* at first save errno for later use before it gets overwritten by another call */ + myerrno = errno; + char *matched, *error; opt_errnum = ldap_get_option(l, LDAP_OPT_ERROR_NUMBER, &errnum); @@ -104,8 +107,8 @@ LDAPerror( LDAP *l, char *msg ) if (str) PyDict_SetItemString( info, "info", str ); Py_XDECREF(str); - } else if (errno != 0) { - str = PyString_FromString(strerror(errno)); + } else if (myerrno != 0) { + str = PyString_FromString(strerror(myerrno)); if(str) PyDict_SetItemString( info, "info", str); Py_XDECREF(str);