You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Michael Chisholm (JIRA)" <ji...@apache.org> on 2013/04/10 21:15:16 UTC
[jira] [Commented] (XALANC-742) XalanVector assignment operator
crash bug
[ https://issues.apache.org/jira/browse/XALANC-742?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13628136#comment-13628136 ]
Michael Chisholm commented on XALANC-742:
-----------------------------------------
Well I figured out the hard way that Xerces' memory manager still has to be set up when a XalanVector goes out of scope, because XalanVector's dtor needs it to release memory. So here's a more correct version of the demo app:
#include <xercesc/util/PlatformUtils.hpp>
#include <xalanc/Include/XalanVector.hpp>
using namespace xercesc;
using namespace xalanc;
int main(int argc, char* argv[])
{
XMLPlatformUtils::Initialize();
{
XalanVector<int> vec1;
XalanVector<int> vec2(XalanMemMgrs::getDefaultXercesMemMgr(), 5);
vec1 = vec2;
}
XMLPlatformUtils::Terminate();
return 0;
}
I have also fixed it in my own way, basically by making the assignment a no-op if both vectors are empty:
Index: XalanVector.hpp
===================================================================
--- XalanVector.hpp (revision 1466627)
+++ XalanVector.hpp (working copy)
@@ -809,6 +809,9 @@
if (&theRHS != this)
{
+ if (empty() && theRHS.empty())
+ return *this;
+
if (m_allocation < theRHS.m_size)
{
ThisType theTemp(theRHS,*m_memoryManager);
This patch seems to have resolved the problem for me.
> XalanVector assignment operator crash bug
> -----------------------------------------
>
> Key: XALANC-742
> URL: https://issues.apache.org/jira/browse/XALANC-742
> Project: XalanC
> Issue Type: Bug
> Components: XalanC
> Affects Versions: CurrentCVS, 1.11
> Environment: Tested on Windows 7 and RHEL5
> Reporter: Michael Chisholm
> Assignee: Steven J. Hathaway
> Priority: Critical
>
> When assigning an empty XalanVector to another, a NULL dereference and crash results. Specifically, the std::copy() statement copies to this->begin(), which returns NULL when the vector is empty.
> Here is simple demo code:
> #include <xercesc/util/PlatformUtils.hpp>
> #include <xalanc/Include/XalanVector.hpp>
> using namespace xercesc;
> using namespace xalanc;
> int main(int argc, char* argv[])
> {
> XMLPlatformUtils::Initialize();
> XalanVector<int> vec1;
> XalanVector<int> vec2(XalanMemMgrs::getDefaultXercesMemMgr(), 5);
> vec1 = vec2;
> XMLPlatformUtils::Terminate();
>
> return 0;
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xalan.apache.org
For additional commands, e-mail: dev-help@xalan.apache.org