[ http://nagoya.apache.org/jira/browse/XERCESC-1098?page=history ]
Alberto Massari updated XERCESC-1098:
-------------------------------------
Priority: Major
> Valgrind reports "Source and destination overlap in memcpy"
> -----------------------------------------------------------
>
> Key: XERCESC-1098
> URL: http://nagoya.apache.org/jira/browse/XERCESC-1098
> Project: Xerces-C++
> Type: Bug
> Components: Miscellaneous
> Versions: 2.3.0
> Environment: Operating System: All
> Platform: Other
> Reporter: Dominik Stadler
> Assignee: Xerces-C Developers Mailing List
>
> While looking for a problem in our application, I ran valgrind and saw the
> following report. I know this does normally work fine, but I though I report it,
> maybe there is an easy fix for this.
> Valgrind reports:
> ==17958== Source and destination overlap in memcpy(0x450987CC, 0x450987CC, 40)
> ==17958== at 0x40024665: memcpy (mac_replace_strmem.c:93)
> ==17958== by 0x40E15F55: xercesc_2_3::XMLBuffer::set(unsigned short const *,
> unsigned int) (XMLBuffer.cpp:122)
> ==17958== by 0x40D8380D:
> xercesc_2_3::IGXMLScanner::resolveSchemaGrammar(unsigned short const *, unsigned
> short const *) (IGXMLScanner2.cpp:1325)
> ==17958== by 0x40D832CF:
> xercesc_2_3::IGXMLScanner::scanRawAttrListforNameSpaces(xercesc_2_3::RefVectorOf<xercesc_2_3::KVStringPair>
> const *, int) (IGXMLScanner2.cpp:1249)
> ==17958== by 0x40D8C84D: xercesc_2_3::IGXMLScanner::scanStartTagNS(bool &)
> (IGXMLScanner.cpp:2034)
> ==17958== by 0x40D89717: xercesc_2_3::IGXMLScanner::scanContent(bool)
> (IGXMLScanner.cpp:849)
> ==17958== by 0x40D87D54:
> xercesc_2_3::IGXMLScanner::scanDocument(xercesc_2_3::InputSource const &)
> (IGXMLScanner.cpp:209)
> ==17958== by 0x40E22B87: xercesc_2_3::XMLScanner::scanDocument(unsigned short
> const *) (XMLScanner.cpp:419)
> ==17958== by 0x40E23105: xercesc_2_3::XMLScanner::scanDocument(char const *)
> (XMLScanner.cpp:427)
> ==17958== by 0x40CF22EF: xercesc_2_3::AbstractDOMParser::parse(char const *)
> (AbstractDOMParser.cpp:477)
> The code in XMLBuffer.cpp is:
> void XMLBuffer::set(const XMLCh* const chars, const unsigned int count)
> {
> ...
> memcpy(fBuffer, chars, actualCount * sizeof(XMLCh));
> so the pointer "XMLCh* chars" that is passed in is from the XMLBuffer itself.
> The code in IGXMLScanner2.cpp is:
> // Create a buffer for expanding the system id
> XMLBufBid bbSys(&fBufMgr);
> XMLBuffer& expSysId = bbSys.getBuffer();
> XMLBuffer& normalizedSysId = bbSys.getBuffer();
> ...
> if (fEntityHandler)
> {
> ...
> }
> else
> {
> expSysId.set(normalizedURI);
> }
> Why are there two equal references to an XMLBuffer used? wouldn't it just be
> possible to remove one of them? Then the call to set() is actually an assignment
> to itself and could go away completely.
> I checked the code and it seems this is still the same for 2.4 and CVS-LATEST.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]