diff --git a/src/xercesc/util/regx/RangeToken.cpp b/src/xercesc/util/regx/RangeToken.cpp index f2bc7e00c4f7633ab544eb57c66a50d2221ab32c..6e0880a292d74aa79c0f6c6f05869fc0141e5a4c 100644 --- a/src/xercesc/util/regx/RangeToken.cpp +++ b/src/xercesc/util/regx/RangeToken.cpp @@ -72,6 +72,12 @@ RangeToken::RangeToken(const Token::tokType tkType, RangeToken::~RangeToken() { + // TODO(dbertoni) This is a temporary hack until we can change the ABI. + // See Jira issue XERCESC-1866 for more details. + if (fCaseIToken && fCaseIToken->fCaseIToken == this) + { + fCaseIToken->fCaseIToken = 0; + } fMemoryManager->deallocate(fMap);//delete [] fMap; fMemoryManager->deallocate(fRanges);//delete[] fRanges; } @@ -286,6 +292,12 @@ RangeToken* RangeToken::getCaseInsensitiveToken(TokenFactory* const tokFactory) lwrToken->createMap(); fCaseIToken = lwrToken; + // TODO(dbertoni) This is a temporary hack until we can change the ABI. + // See Jira issue XERCESC-1866 for more details. + // Overload the fCaseIToken data member to be the case-insensitive token + // that's caching the case-insensitive one. We need this because tokens + // have varying lifetimes. + fCaseIToken->setCaseInsensitiveToken(this); } return fCaseIToken;