You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2005/01/18 10:46:04 UTC

cvs commit: ws-axis/c/src/soap/xsd Base64Binary.cpp Base64Binary.hpp

dicka       2005/01/18 01:46:04

  Modified:    c/src/soap/xsd Base64Binary.cpp Base64Binary.hpp
  Log:
  Fix memory leaks in XSD objects:  Fixing Base64Binary.
  
  PR: AXISCPP-384
  Submitted by: Adrian Dick
  
  Revision  Changes    Path
  1.2       +29 -0     ws-axis/c/src/soap/xsd/Base64Binary.cpp
  
  Index: Base64Binary.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Base64Binary.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Base64Binary.cpp	10 Jan 2005 17:18:33 -0000	1.1
  +++ Base64Binary.cpp	18 Jan 2005 09:46:03 -0000	1.2
  @@ -2,6 +2,24 @@
   
   AXIS_CPP_NAMESPACE_START
   
  +    Base64Binary::Base64Binary():m_Buf(NULL), m_base64Binary(NULL)
  +    {
  +    }
  +    
  +    Base64Binary::~Base64Binary()
  +    {
  +        if (m_Buf)
  +        {
  +            delete [] m_Buf;
  +            m_Buf = NULL;
  +        }
  +        
  +        /**
  +         * Don't release storage for m_base64Binary as this is still needed by
  +         * by customer applications, under current memory model.
  +         */
  +    }
  +
       AxisChar* Base64Binary::serialize(const void* value) throw (AxisSoapException)
       {
       	return serialize((xsd__base64Binary*) value);
  @@ -19,13 +37,24 @@
   	    len = apr_base64_encode_binary (serializedValue, value->__ptr, value->__size);
   	    serializedValue[len] = 0;
   	    	    
  +        if (m_Buf)
  +        {
  +            delete [] m_Buf;
  +            m_Buf = NULL;
  +        }
   	    m_Buf = new char[strlen (serializedValue) + 1];
   		strcpy (m_Buf, serializedValue);
  +        delete serializedValue;        
   		return m_Buf;
       }
   	
       xsd__base64Binary* Base64Binary::deserializeBase64Binary(const AxisChar* valueAsChar) throw (AxisSoapException)
       {
  +        if (m_base64Binary)
  +        {
  +            delete [] m_base64Binary;
  +            m_base64Binary = NULL;
  +        }
       	m_base64Binary = new xsd__base64Binary();
   	    m_base64Binary->__size = apr_base64_decode_len (valueAsChar);
   	    m_base64Binary->__ptr = new unsigned char[m_base64Binary->__size + 1];
  
  
  
  1.2       +4 -0      ws-axis/c/src/soap/xsd/Base64Binary.hpp
  
  Index: Base64Binary.hpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Base64Binary.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Base64Binary.hpp	10 Jan 2005 17:18:33 -0000	1.1
  +++ Base64Binary.hpp	18 Jan 2005 09:46:03 -0000	1.2
  @@ -32,6 +32,10 @@
   
   class Base64Binary : public IAnySimpleType {
   public:
  +    
  +    Base64Binary();
  +    
  +    ~Base64Binary();
   
   	/**
   	 * Serialize value to it's on-the-wire string form.