[Mobies-commit] [commit] r3671 - UDM/trunk/src/UdmDom

ksmyth at redhat1.isis.vanderbilt.edu ksmyth at redhat1.isis.vanderbilt.edu
Thu Mar 24 13:20:27 CDT 2011


Author: ksmyth
Date: Thu Mar 24 13:20:26 2011
New Revision: 3671

Log:
Need to parser.setErrorHandler for parser->parse to throw a udm_exception (or any exception). Fixes crash when setting metalocator to a directory

Modified:
   UDM/trunk/src/UdmDom/UdmDom.cpp

Modified: UDM/trunk/src/UdmDom/UdmDom.cpp
==============================================================================
--- UDM/trunk/src/UdmDom/UdmDom.cpp	Wed Mar 23 17:49:45 2011	(r3670)
+++ UDM/trunk/src/UdmDom/UdmDom.cpp	Thu Mar 24 13:20:26 2011	(r3671)
@@ -3181,14 +3181,17 @@
 				<?udm interface="UdmProject" version="1.00"?>
 			*/
 
-			XercesDOMParser *parser = new XercesDOMParser();
+			XercesDOMParser parser;
 
-			parser->setValidationScheme(XercesDOMParser::Val_Never);
-			setDomParserExternalSchemaLocation(*parser);
+			parser.setValidationScheme(XercesDOMParser::Val_Never);
+			setDomParserExternalSchemaLocation(parser);
+
+			MobiesErrorHandler errorHandler;
+			parser.setErrorHandler(&errorHandler);
 
 			try 
 			{
-				parser->parse(*is);
+				parser.parse(*is);
 			}
 
 			catch(const udm_exception& toCatch)
@@ -3198,13 +3201,10 @@
 				description += "'. Exception message is: ";
 				description += toCatch.what();
 
-				delete parser;
-
 				throw udm_exception(description);
-
 			}
 
-			XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *pDoc = parser->getDocument();
+			XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *pDoc = parser.getDocument();
 			DOMNode *pNode = pDoc->getFirstChild();
 			while(pNode != 0)
 			{
@@ -3227,7 +3227,6 @@
 						
 						if (name.size() && version.size()) vinfo = true;
 
-						delete parser;
 						return true;
 
 					}
@@ -3235,7 +3234,6 @@
 				pNode=pNode->getNextSibling();
 			}
 
-			delete parser;
 			return false;
 		};
 	public:


More information about the Mobies-commit mailing list