comparison mercurial/parsers.c @ 23943:5fb44983a696 stable

parsers: don't leak references to sys et al in check_python_version Found with cpychecker.
author Augie Fackler <augie@google.com>
date Fri, 23 Jan 2015 15:30:21 -0500
parents fefa5f2a1730
children ec28f8b66e62
comparison
equal deleted inserted replaced
23942:fefa5f2a1730 23943:5fb44983a696
2265 PyObject_GC_UnTrack(nullentry); 2265 PyObject_GC_UnTrack(nullentry);
2266 } 2266 }
2267 2267
2268 static int check_python_version(void) 2268 static int check_python_version(void)
2269 { 2269 {
2270 PyObject *sys = PyImport_ImportModule("sys"); 2270 PyObject *sys = PyImport_ImportModule("sys"), *ver;
2271 long hexversion = PyInt_AsLong(PyObject_GetAttrString(sys, "hexversion")); 2271 long hexversion;
2272 if (!sys)
2273 return -1;
2274 ver = PyObject_GetAttrString(sys, "hexversion");
2275 Py_DECREF(sys);
2276 if (!ver)
2277 return -1;
2278 hexversion = PyInt_AsLong(ver);
2279 Py_DECREF(ver);
2272 /* sys.hexversion is a 32-bit number by default, so the -1 case 2280 /* sys.hexversion is a 32-bit number by default, so the -1 case
2273 * should only occur in unusual circumstances (e.g. if sys.hexversion 2281 * should only occur in unusual circumstances (e.g. if sys.hexversion
2274 * is manually set to an invalid value). */ 2282 * is manually set to an invalid value). */
2275 if ((hexversion == -1) || (hexversion >> 16 != PY_VERSION_HEX >> 16)) { 2283 if ((hexversion == -1) || (hexversion >> 16 != PY_VERSION_HEX >> 16)) {
2276 PyErr_Format(PyExc_ImportError, "%s: The Mercurial extension " 2284 PyErr_Format(PyExc_ImportError, "%s: The Mercurial extension "