You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by bl...@apache.org on 2003/02/17 12:23:38 UTC

cvs commit: xml-security/c/src/transformers TXFMC14n.cpp

blautenb    2003/02/17 03:23:38

  Modified:    c/src/dsig DSIGReference.cpp DSIGTransformC14n.cpp
                        DSIGTransformXPath.cpp
               c/src/transformers TXFMC14n.cpp
  Log:
  Bug fixes for memory leaks caused by exceptions
  
  Revision  Changes    Path
  1.5       +9 -3      xml-security/c/src/dsig/DSIGReference.cpp
  
  Index: DSIGReference.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/dsig/DSIGReference.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DSIGReference.cpp	12 Feb 2003 11:21:03 -0000	1.4
  +++ DSIGReference.cpp	17 Feb 2003 11:23:38 -0000	1.5
  @@ -961,9 +961,15 @@
   
   	for (i = 0; i < size; ++i) {
   	
  -		nextTxfm = lst->item(i)->createTransformer(txfm);
  -		// nextTxfm->setInput(txfm);
  -		txfm = nextTxfm;
  +		try {
  +			nextTxfm = lst->item(i)->createTransformer(txfm);
  +			// nextTxfm->setInput(txfm);
  +			txfm = nextTxfm;
  +		}
  +		catch (...) {
  +			deleteTXFMChain(txfm);
  +			throw;
  +		}
   
   	}
   
  
  
  
  1.3       +6 -0      xml-security/c/src/dsig/DSIGTransformC14n.cpp
  
  Index: DSIGTransformC14n.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/dsig/DSIGTransformC14n.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DSIGTransformC14n.cpp	9 Feb 2003 11:13:48 -0000	1.2
  +++ DSIGTransformC14n.cpp	17 Feb 2003 11:23:38 -0000	1.3
  @@ -76,7 +76,10 @@
   #include <xsec/framework/XSECError.hpp>
   #include <xsec/dsig/DSIGSignature.hpp>
   
  +#include <xercesc/util/Janitor.hpp>
  +
   XSEC_USING_XERCES(DOMNamedNodeMap);
  +XSEC_USING_XERCES(Janitor);
   
   // --------------------------------------------------------------------------------
   //           Constructors and Destructors
  @@ -117,6 +120,8 @@
   	TXFMC14n * c;
   	
   	XSECnew(c, TXFMC14n(mp_txfmNode->getOwnerDocument()));
  +	Janitor<TXFMC14n> j_c(c);
  +
   	c->setInput(input);
   
   	switch (m_cMethod) {
  @@ -151,6 +156,7 @@
   
   	}
   
  +	j_c.release();
   	return c;
   
   }
  
  
  
  1.3       +7 -1      xml-security/c/src/dsig/DSIGTransformXPath.cpp
  
  Index: DSIGTransformXPath.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/dsig/DSIGTransformXPath.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DSIGTransformXPath.cpp	9 Feb 2003 11:13:48 -0000	1.2
  +++ DSIGTransformXPath.cpp	17 Feb 2003 11:23:38 -0000	1.3
  @@ -78,6 +78,10 @@
   #include <xsec/framework/XSECError.hpp>
   #include <xsec/dsig/DSIGSignature.hpp>
   
  +#include <xercesc/util/Janitor.hpp>
  +
  +XSEC_USING_XERCES(Janitor);
  +
   // --------------------------------------------------------------------------------
   //           Constructors and Destructors
   // --------------------------------------------------------------------------------
  @@ -126,10 +130,12 @@
   	TXFMXPath *x;
   	// XPath transform
   	XSECnew(x, TXFMXPath(mp_txfmNode->getOwnerDocument()));
  +	Janitor<TXFMXPath> j_x(x);
   	x->setInput(input);
   	x->setNameSpace(mp_NSMap);
   	x->evaluateExpr(mp_txfmNode, m_expr);
  -
  +	
  +	j_x.release();
   	return x;
   	
   #endif /* NO_XPATH */
  
  
  
  1.3       +17 -4     xml-security/c/src/transformers/TXFMC14n.cpp
  
  Index: TXFMC14n.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/transformers/TXFMC14n.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TXFMC14n.cpp	9 Feb 2003 11:13:51 -0000	1.2
  +++ TXFMC14n.cpp	17 Feb 2003 11:23:38 -0000	1.3
  @@ -72,6 +72,8 @@
   
   #include <xsec/transformers/TXFMC14n.hpp>
   #include <xsec/framework/XSECException.hpp>
  +#include <xsec/transformers/TXFMParser.hpp>
  +#include <xsec/framework/XSECError.hpp>
   
   TXFMC14n::TXFMC14n(DOMDocument *doc) : TXFMBase(doc) {
   
  @@ -90,13 +92,24 @@
   
   void TXFMC14n::setInput(TXFMBase *newInput) {
   
  -	if (newInput->getOutputType() != TXFMBase::DOM_NODES) {
  +	if (newInput->getOutputType() == TXFMBase::BYTE_STREAM) {
   
  -		throw XSECException(XSECException::TransformInputOutputFail, "C14n canonicalisation transform requires DOM_NODES input");
  +		//throw XSECException(XSECException::TransformInputOutputFail, "C14n canonicalisation transform requires DOM_NODES input");
  +		// Need to parse into DOM_NODES
  +		TXFMParser * parser;
  +		XSECnew(parser, TXFMParser(mp_expansionDoc));
  +		try{
  +			parser->setInput(newInput);
  +		}
  +		catch (...) {
  +			delete parser;
  +			throw;
  +		}
   
  +		input = parser;
   	}
  -
  -	input = newInput;
  +	else
  +		input = newInput;
   
   	// Set up for comments  - by default we ALWAYS strip comments