[ http://issues.apache.org/jira/browse/AXISCPP-825?page=all ]
Chinthana Danapala reassigned AXISCPP-825:
------------------------------------------
Assign To: Chinthana Danapala
> delete/delete[] mismatch in XercesHandler.cpp
> ---------------------------------------------
>
> Key: AXISCPP-825
> URL: http://issues.apache.org/jira/browse/AXISCPP-825
> Project: Axis-C++
> Type: Bug
> Components: Parser Library - Xerces
> Versions: current (nightly)
> Reporter: Henrik Nordberg
> Assignee: Chinthana Danapala
>
> The function:
> void XercesHandler::characters(const XMLCh* const chars, const unsigned int
> length)
> has some memory management problems. The most obvious problem is that the
> memory allocated with new[] is deleted with delete (change the two delete
> statements to delete[] statements). But another problem is that the memory
> deleted sometimes was allocated by new[] and sometimes via Xerces'
> XMLString::transcode(). Currently XMLString::transcode() allocates memory
> using new[], but this may not always remain true. Calls to
> XMLString::transcode() should be matched by calls to XMLString::release().
> The quick fix is to change delete to delete[]. But in the long run it is
> better not to use pointers at all and just deal with std::strings (this is
> internal code). I think this will lead to fewer bugs and memory leaks and
> will not noticeably affect performance.
> So the quick fix looks like this:
> char* cp_CurrentNameOrValue = XMLString::transcode(chars);
> char* cp_FullNameOrValue = new char[strlen(cp_PreviousNameOrValue) +
> strlen(cp_CurrentNameOrValue) + 1];
> strcpy(cp_FullNameOrValue, cp_PreviousNameOrValue);
> strcat(cp_FullNameOrValue, cp_CurrentNameOrValue);
> m_pNextElement->m_pchNameOrValue = (const char*)cp_FullNameOrValue;
> delete[] (const_cast <char*> (cp_PreviousNameOrValue));
> delete[] cp_CurrentNameOrValue;
> I also changed one strcat to strcpy to make the code more readable (and one
> line shorter). Another comment is that const casts can be dangerous and lead
> to confusing code.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira