You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by wh...@apache.org on 2005/03/01 16:02:04 UTC

cvs commit: ws-axis/c/tests/auto_build/testcases/output IHeaderBlockTest5.expected

whitlock    2005/03/01 07:02:04

  Modified:    c/src/soap ComplexElement.cpp
               c/tests/auto_build/testcases/client/cpp
                        IHeaderBlockTest5Client.cpp
               c/tests/auto_build/testcases/output
                        IHeaderBlockTest5.expected
  Log:
  AXISCPP-495 Fix IHeaderBlockTest5.
  Fix various SIGSEGV's and storage leaks in ComplexElement due to m_pachLocalName, m_pachPrefix and m_pachURI
  Fix the IHeaderBlockTest5 so that a complex element without a local name isn't serialized. It is valid to create one without a local name, but the local name must be set before it is serialized.
  
  Revision  Changes    Path
  1.36      +35 -10    ws-axis/c/src/soap/ComplexElement.cpp
  
  Index: ComplexElement.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/ComplexElement.cpp,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- ComplexElement.cpp	9 Feb 2005 11:30:53 -0000	1.35
  +++ ComplexElement.cpp	1 Mar 2005 15:02:04 -0000	1.36
  @@ -50,9 +50,9 @@
   
   ComplexElement::ComplexElement():m_pParent(NULL)
   {
  -    m_pachPrefix = '\0';
  -    m_pachLocalName = '\0';
  -    m_pachURI = '\0';
  +	m_pachPrefix = NULL;
  +    m_pachLocalName = NULL;
  +    m_pachURI = NULL;
   
       m_iNodeType= ELEMENT_NODE;
       iNoOfChildren = 0;
  @@ -112,9 +112,18 @@
   
   ComplexElement::~ComplexElement()
   {
  -    delete [] m_pachPrefix;
  -    delete [] m_pachLocalName;
  -    delete [] m_pachURI;
  +	if (NULL != m_pachPrefix)
  +	    delete [] m_pachPrefix;
  +	m_pachPrefix = NULL;
  +
  +	if (NULL != m_pachLocalName)
  +	    delete [] m_pachLocalName;
  +	m_pachLocalName = NULL;
  +
  +	if (NULL != m_pachURI)
  +	    delete [] m_pachURI;
  +	m_pachURI = NULL;
  +
       m_pParent = NULL;
   
       /* 
  @@ -171,6 +180,11 @@
   
   int ComplexElement::setPrefix(const AxisChar* pachPrefix)
   {
  +	if (NULL==pachPrefix)
  +		return AXIS_FAIL;
  +
  +	if (NULL != m_pachPrefix) 
  +		delete [] m_pachPrefix;
       m_pachPrefix = new AxisChar[strlen(pachPrefix)+1];
       strcpy(m_pachPrefix, pachPrefix);
       return AXIS_SUCCESS;
  @@ -178,6 +192,11 @@
   
   int ComplexElement::setLocalName(const AxisChar* pachLocalName)
   {
  +	if (NULL==pachLocalName)
  +		return AXIS_FAIL;
  +
  +	if (NULL != m_pachLocalName) 
  +		delete [] m_pachLocalName;
       m_pachLocalName = new AxisChar[strlen(pachLocalName)+1];
       strcpy(m_pachLocalName, pachLocalName);
       return AXIS_SUCCESS;
  @@ -210,12 +229,13 @@
           if(isSerializable()) 
           {    
               pSZ.serialize("<", NULL);    
  -            if(strlen(m_pachPrefix) != 0)
  +            if((NULL!=m_pachPrefix) && (strlen(m_pachPrefix)!=0))
               {                
                   pSZ.serialize(m_pachPrefix, ":", NULL);
               }
               pSZ.serialize(m_pachLocalName, NULL);
  -            if((strlen(m_pachPrefix) != 0) && (strlen(m_pachURI) != 0))
  +            if ((NULL!=m_pachPrefix) && (strlen(m_pachPrefix)!=0) && 
  +				(NULL!=m_pachURI) && (strlen(m_pachURI)!=0))
               {
                   pSZ.serialize(" xmlns:", m_pachPrefix, "=\"", m_pachURI, "\"",
                       NULL);
  @@ -227,7 +247,7 @@
                   break;
               }
               pSZ.serialize("</", NULL);
  -            if(strlen(m_pachPrefix) != 0)
  +            if((NULL!=m_pachPrefix) && (strlen(m_pachPrefix)!=0))
               {
                   pSZ.serialize(m_pachPrefix, ":", NULL);
               }
  @@ -284,6 +304,9 @@
               {
                   const AxisChar* pachTmp = pSZ.getNamespacePrefix(m_pachURI,
                       blnIsNewNamespace);
  +
  +				if (NULL!=m_pachPrefix)
  +					delete [] m_pachPrefix;
                   m_pachPrefix = new AxisChar[strlen(pachTmp)+1];
                   strcpy(m_pachPrefix , pachTmp);
   
  @@ -378,7 +401,7 @@
   
       do
       {
  -        if(strlen(m_pachLocalName) == 0)
  +        if((NULL==m_pachLocalName) || (strlen(m_pachLocalName)==0))
           {
               bStatus= false;
               break;
  @@ -390,6 +413,8 @@
   
   int ComplexElement::setURI(const AxisChar* pachURI)
   {
  +	if (NULL!=m_pachURI)
  +		delete [] m_pachURI;
       m_pachURI = new AxisChar[strlen(pachURI)+1];
       strcpy(m_pachURI, pachURI);
       return AXIS_SUCCESS;
  
  
  
  1.4       +0 -5      ws-axis/c/tests/auto_build/testcases/client/cpp/IHeaderBlockTest5Client.cpp
  
  Index: IHeaderBlockTest5Client.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tests/auto_build/testcases/client/cpp/IHeaderBlockTest5Client.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IHeaderBlockTest5Client.cpp	26 Feb 2005 07:31:03 -0000	1.3
  +++ IHeaderBlockTest5Client.cpp	1 Mar 2005 15:02:04 -0000	1.4
  @@ -39,11 +39,6 @@
   		BasicNode *ch=phb->createChild(CHARACTER_NODE,NULL,NULL,NULL,"AXISCPP");
   		Bnoden->addChild(ch);
   
  -		/*Test for NULL arguments. An element node Bnoden is created without any name */
  -		BasicNode * Bnoden1=phb->createImmediateChild(ELEMENT_NODE,NULL,NULL,NULL,NULL);
  -		if(Bnoden1==NULL)
  -			cout << "Null returned for Element_node" << endl;
  -		
   		BasicNode * Bnoden2=phb->createImmediateChild(CHARACTER_NODE,NULL,NULL,NULL,NULL);
   		if(Bnoden2==NULL)
   			cout << "Null returned for Character_node" << endl;
  
  
  
  1.4       +2 -2      ws-axis/c/tests/auto_build/testcases/output/IHeaderBlockTest5.expected
  
  Index: IHeaderBlockTest5.expected
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tests/auto_build/testcases/output/IHeaderBlockTest5.expected,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IHeaderBlockTest5.expected	26 Feb 2005 07:33:08 -0000	1.3
  +++ IHeaderBlockTest5.expected	1 Mar 2005 15:02:04 -0000	1.4
  @@ -1,8 +1,8 @@
   1
   Project Type=Open Source
  -No Of Children=8
  +No Of Children=7
   First Node Name = Project
  -Parent Node Name = Location Value =Sri Lanka
  +Parent Node Name = Project Value =AXISCPP
   Last Child Value=message
   5
   ---------------------- TEST COMPLETE -----------------------------