]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #329: avoid app crashes on malformed python feature launching
authorsbh <sergey.belash@opencascade.com>
Wed, 14 Jan 2015 08:20:55 +0000 (11:20 +0300)
committersbh <sergey.belash@opencascade.com>
Wed, 14 Jan 2015 08:20:55 +0000 (11:20 +0300)
src/Config/Config_ModuleReader.cpp

index d0da80ba0a8f0914a27ea7baa8706096f209f066..526b9965f51aebc1b97b482991fa5d2a1fa2da66 100644 (file)
@@ -173,18 +173,21 @@ void Config_ModuleReader::loadScript(const std::string theFileName)
 {
   /* aquire python thread */
   PyGILState_STATE gstate = PyGILState_Ensure();
-  PyObject* module = PyImport_ImportModule(theFileName.c_str());
 
+  PyObject* module = PyImport_ImportModule(theFileName.c_str());
   if (!module) {
     std::string anErrorMsg = "An error occured while importing " + theFileName;
     //Get detailed error message:
     if (PyErr_Occurred()) {
-      PyObject *ptype, *pvalue, *ptraceback;
+      PyObject *pstr, *ptype, *pvalue, *ptraceback;
       PyErr_Fetch(&ptype, &pvalue, &ptraceback);
-      std::string aPyError = std::string(PyString_AsString(pvalue));
+      PyErr_NormalizeException(&ptype, &pvalue, &ptraceback);
+      pstr = PyObject_Str(pvalue);
+      std::string aPyError = std::string(PyString_AsString(pstr));
       if (!aPyError.empty()) {
         anErrorMsg += ":\n" + aPyError;
       }
+      Py_XDECREF(pstr);
       Py_XDECREF(ptype);
       Py_XDECREF(pvalue);
       Py_XDECREF(ptraceback);