axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adrian Dick <adrian.d...@uk.ibm.com>
Subject RE: Crash in XercesHandler.cpp with & in response
Date Tue, 16 May 2006 14:54:11 GMT
Excellent news!!!


When the final release becomes available in the next few days, you may wish
to consider upgrading to Axis C++ 1.6 , as a number of memory issues (like
this one) and leaks have been resolved since 1.5.

Adrian
_______________________________________
Adrian Dick (adrian.dick@uk.ibm.com)


"Iwan Tomlow" <iwan.tomlow@seagha.com> wrote on 16/05/2006 15:28:12:

> Hi all,
>
> Just letting you know I think the problem is solved!
> I was trying to get the 1.6 nightly build to work, but kept running into
> other problems.
>
> However, I took a glance at the XercesHandler.cpp included in the 1.6,
> and it seems the part that was causing me problems has been changed
> significantly (more then described in AXISCPP-825).
>
> I applied this change to my 1.5 sources, rebuild AxisXmlParser.xml, and
> don't get the crash anymore on any machine!
> Just for reference, the code for the 'PreviousNameOrValue' case in
> XercesHandler::characters was changed to:
>
> // The following code is necessary as it is important to get the correct
> heap
> // (i.e the one that XMLString is using!) when creating a memory object
> to put
> // back into 'm_pNextElement->m_pchNameOrValue'.  By using the XMLString
> // function, we can ensure that only the memory belonging to (and thus
> able to
> // destroy) the same segment as XMLString is used.  If you don't
> understand
> // what is going on, don't change it!
>     if (cp_PreviousNameOrValue)
>     {
>       // Get a pointer to the transcoded character.
>       char *   pTransChar = XMLString::transcode( chars);
>       // Create a dummy string and populate.
>       char *   psDummy = new char[ strlen(
> m_pNextElement->m_pchNameOrValue) +
>
> strlen( pTransChar) + 1];
>       strcpy( psDummy, m_pNextElement->m_pchNameOrValue);
>       strcat( psDummy, pTransChar);
>       // Create pointer to new Name or Value string.
>       char *   pNewNameOrValue = XMLString::replicate(
> psDummy);
>       // Delete the old Name and Value string.
>       XMLString::release( const_cast<char**>
> (&(m_pCurrElement->m_pchNameOrValue)));
>       // Assign the new value of Name or Value string.
>       m_pNextElement->m_pchNameOrValue = pNewNameOrValue;
>       // Clean up.
>       delete [] psDummy;
>       XMLString::release( &pTransChar);
>     }
>
> Regards,
> Iwan
>
> -----Original Message-----
> From: Iwan Tomlow [mailto:iwan.tomlow@seagha.com]
> Sent: dinsdag 16 mei 2006 15:13
> To: Apache AXIS C User List
> Subject: RE: Crash in XercesHandler.cpp with & in response
>
> Ah, that's more difficult, since the webservice is only made available
> over HTTPS, so I can't just drop tcpmon in between.
> The xml-data is actually taken from the log the server has written just
> before posting the reply.
>
> I really think it's more of a memory issue as described in AXISCPP-825,
> but that fix alone doesn't seem enough.
> I've been experimenting some more, and it doesn't always crash: in debug
> mode it works fine most of the time; on Windows XP the release mode
> crashes sometimes; on Windows 2000 however, the release version crashes
> consistently - and the production client-app must run on a Windows 2000
> touchscreen terminal :(
>
> Regards,
> Iwan
>
> -----Original Message-----
> From: Adrian Dick [mailto:adrian.dick@uk.ibm.com]
> Sent: dinsdag 16 mei 2006 14:55
> To: Apache AXIS C User List
> Subject: RE: Crash in XercesHandler.cpp with & in response
>
> Hi,
>
> Ok, I can't see anything obviously wrong with your SOAP message ... I
> wouldn't expect the &amp; to cause problems, as we have a passing
> testcase to check the correct encoding/decoding of this, and looking
> through the SVN history the code which handles encoding/decoding hasn't
> been touched since before the release of 1.5.
>
> I'm wondering if perhaps you're hitting a problem with the
> transport/parser interaction.
> I should have asked before, can you also include the HTTP headers, etc.
> so I can check if there are any content/chunk length issues here.
>
> Regards,
> Adrian
> _______________________________________
> Adrian Dick (adrian.dick@uk.ibm.com)
>
>
> "Iwan Tomlow" <iwan.tomlow@seagha.com> wrote on 16/05/2006 10:01:03:
>
> > Sure, this is the on-the-wire message (in which I had to replace some
> > personal data for confidentiality).
> > The &amp; in <employerName> causes XercesHandler to parse the data in
> > 2 steps, and the 2nd call to XercesHandler::characters is causing
> > problems in the use of 'cp_PreviousNameOrValue'.
> >
> > Thanks for your assistance,
> > Iwan
> >
> > <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope
> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> > <soapenv:Body>
> > <getCardResponse xmlns="http://thenamespace"> <getCardReturn>
> > <cardNumber>12345</cardNumber> <cardState>104</cardState>
> > <cardValidTo>03/11/2008</cardValidTo>
> > <cardVersion>0</cardVersion>
> > <customerCode>0</customerCode>
> > <dateOfBirth>01/01/1975</dateOfBirth>
> > <employerCity>SOMEWHERE</employerCity>
> > <employerCountry>XX</employerCountry><employerName>BOOT &amp;
> > BUTEIJN</employerName>
> > <employerNumber>1234</employerNumber><employerPhone>0000/999.999.999</
> > em
> > ployerPhone>
> > <employerStreet>THERE</employerStreet>
> > <employerZip>9999AA</employerZip>
> > <firstName>FIRST</firstName>
> > <groupNumber>1</groupNumber>
> > <homeAddressCity>CITY</homeAddressCity>
> > <homeAddressCountry>XX</homeAddressCountry>
> > <homeAddressStreet>STREET 11</homeAddressStreet>
> > <homeAddressZip>9999AA</homeAddressZip>
> > <homePhone xsi:nil="true"/>
> > <lastName>LAST</lastName>
> > <nationality>XX</nationality>
> > <personnelNumber>9999</personnelNumber>
> > <qualification1 xsi:nil="true"/><qualification2
> > xsi:nil="true"/><qualification3 xsi:nil="true"/><subgroupNumber
> > xsi:nil="true"/> </getCardReturn> </getCardResponse> </soapenv:Body>
> > </soapenv:Envelope>
> >
> > -----Original Message-----
> > From: Adrian Dick [mailto:adrian.dick@uk.ibm.com]
> > Sent: dinsdag 16 mei 2006 10:21
> > To: Apache AXIS C User List
> > Subject: RE: Crash in XercesHandler.cpp with & in response
> >
> > Hi,
> >
> > As we've now excluded the illegal use of '&', it could be related to
> > how the SOAP message is being received, I know of some bugs fixed in
> > 1.6 which could cause similar problems to those you describe.
> > Is it possible for you to attach the "on-the-wire" SOAP/HTTP message
> > causing this problem?
> >
> > Thanks,
> > Adrian
> > _______________________________________
> > Adrian Dick (adrian.dick@uk.ibm.com)
> >
> >
> > "Iwan Tomlow" <iwan.tomlow@seagha.com> wrote on 15/05/2006 16:41:16:
> >
> > > Hm, sorry I didn't make this clear enough: when looking at the data
> > > over the wire, the ampersand is escaped correctly.
> > > The webservice is deployed with axis-java, so no problems there. My
> > > example should read <name>BOOT &amp; BUTEIJN</name>.
> > > The &amp; was already resolved by xerces when I copy/pasted the
> > > value to this e-mail, sorry for the confusion.
> > >
> > > So Xerces parser has no problems at all, but there seems to be a bug
>
> > > in the XercesHandler implementation in Axis.
> > > Btw, I have the problem with both Xerces 2.2.0 (as included in axis
> > > 1.5 release), and also when I build Axis 1.5 myself linked with
> > > Xerces
> >
> > > 2.7.0.
> > >
> > > I have not been able to use the 1.6 nightly build yet, and I would
> > > rather be able to quickly fix the production problem with a 1.5
> > > patch first.
> > >
> > > Regards,
> > > Iwan
> > >
> > > -----Original Message-----
> > > From: Adrian Dick [mailto:adrian.dick@uk.ibm.com]
> > > Sent: maandag 15 mei 2006 17:20
> > > To: Apache AXIS C User List
> > > Subject: Re: Crash in XercesHandler.cpp with & in response
> > >
> > > Hi,
> > >
> > >
> > > Under the SOAP (and underlying XML) standards the ampersand
> > > character is reserved, so you are not permitted to use it within
> data.
> > > You will need to ensure any occurances are correctly encoded   ---
> ie:
> > > '&'
> > > becomes "&amp;".
> > >
> > > It looks quite likely the Xerces Parser is failing when it hits this
>
> > > invalid use of '&'.
> > >
> > > How is this XML data being produced?   Are you using xsd:any -- in
> > which
> > > case you'll need to ensure this encoding takes place -- or are you
> > > seeing an error in the Axis serialization code, where this should be
>
> > > taking place on your behalf.
> > >
> > > Are you in a position to test if this problem is still present with
> > > the latest Axis 1.6 nightly builds?
> > >
> > > Regards,
> > > Adrian
> > > _______________________________________
> > > Adrian Dick (adrian.dick@uk.ibm.com)
> > >
> > >
> > > "Iwan Tomlow" <iwan.tomlow@seagha.com> wrote on 15/05/2006 13:34:04:
> > >
> > > > Hi all,
> > > >
> > > > I'm using the Axis C++ 1.5 in a production project, and we are
> > > > experiencing problems when the response from the webservice
> > > > contains
> >
> > > > ampersands in the xml-data, like <name>BOOT & BUTEIJN</name>.
> > > >
> > > > The generated Axis-client stub crashes (with 'Invalid Address
> > > > specified to RtlFreeHeap' in MCVC6.0 debugger) on the following
> > > > code
> >
> > > > in XercesHandler::characters
> > > > >>>   free(const_cast <char*> (cp_PreviousNameOrValue));
> > > >    free(cp_CurrentNameOrValue);
> > > >
> > > > I found a jira-issue (AXISCPP-825) that seems to address this
> > > > issue,
> >
> > > > but the reported fix (change free to delete[]) does not work for
> > > > me,
> >
> > > > the result is the same.
> > > >
> > > > Does anyone have this issue, any hints?
> > > > Strange thing: it appears everything works fine if a point my
> > > > XMLParser in axiscpp.conf to the debug-library
> 'AxisXMLParser_D.dll'
> > > > instead of the release-build, but I'm afraid that is just a
> > > coincidence.
> > > >
> > > > Any help appreciated.
> > > >
> > > > Kind regards,
> > > > Iwan Tomlow
> > >
> >
>


Mime
View raw message