From 30ca00b9f778b41be0efd3eb320f8661325c7b11 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <borisk@apache.org>
Date: Wed, 18 Nov 2009 09:08:16 +0000
Subject: [PATCH] Commit a partial fix for XERCESC-1866 by David Bertoni.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@881702 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/util/regx/RangeToken.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xercesc/util/regx/RangeToken.cpp b/src/xercesc/util/regx/RangeToken.cpp
index f2bc7e00c..6e0880a29 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;
-- 
GitLab