From 06eb03ce1ca26edbd08ad419267bf8edea163592 Mon Sep 17 00:00:00 2001
From: PeiYong Zhang <peiyongz@apache.org>
Date: Mon, 23 Sep 2002 22:14:37 +0000
Subject: [PATCH] Code sharing and Array boundary checking added

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174232 13f79535-47bb-0310-9956-ffa450edef68
---
 .../MsgLoaders/InMemory/InMemMsgLoader.cpp    | 67 ++++++++++---------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp b/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp
index 923f252ac..9b5c4dfa1 100644
--- a/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp
+++ b/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:21  peiyongz
- * Initial revision
+ * Revision 1.2  2002/09/23 22:14:37  peiyongz
+ * Code sharing and Array boundary checking added
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:21  peiyongz
+ * sane_include
  *
  * Revision 1.5  2000/03/28 19:43:21  roddey
  * Fixes for signed/unsigned warnings. New work for two way transcoding
@@ -100,18 +103,17 @@
 // ---------------------------------------------------------------------------
 //  Public Constructors and Destructor
 // ---------------------------------------------------------------------------
-InMemMsgLoader::InMemMsgLoader(const XMLCh* const msgDomain) :
-
-    fMsgDomain(0)
+InMemMsgLoader::InMemMsgLoader(const XMLCh* const msgDomain)
+:fMsgDomain(0)
 {
-    fMsgDomain = XMLString::replicate(msgDomain);
-
-    if (XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain)
-    &&  XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain)
-    &&  XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
+    if (XMLString::compareString(msgDomain, XMLUni::fgXMLErrDomain)
+    &&  XMLString::compareString(msgDomain, XMLUni::fgExceptDomain)
+    &&  XMLString::compareString(msgDomain, XMLUni::fgValidityDomain))
     {
         XMLPlatformUtils::panic(XMLPlatformUtils::Panic_UnknownMsgDomain);
     }
+
+    fMsgDomain = XMLString::replicate(msgDomain);
 }
 
 InMemMsgLoader::~InMemMsgLoader()
@@ -136,38 +138,37 @@ bool InMemMsgLoader::loadMsg(const  XMLMsgLoader::XMLMsgId  msgToLoad
     //
     XMLCh* endPtr = toFill + maxChars;
     XMLCh* outPtr = toFill;
+    const XMLCh* srcPtr = 0;
+
     if (!XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain))
     {
-        const XMLCh* srcPtr = gXMLErrArray[msgToLoad - 1];
-        while (*srcPtr && (outPtr < endPtr))
-        {
-            *outPtr++ = *srcPtr++;
-        }
-        *outPtr = 0;
+        if ( msgToLoad > gXMLErrArraySize)
+            return false;
+        else
+            srcPtr = gXMLErrArray[msgToLoad - 1];
     }
      else if (!XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain))
     {
-        const XMLCh* srcPtr = gXMLExceptArray[msgToLoad - 1];
-        while (*srcPtr && (outPtr < endPtr))
-        {
-            *outPtr++ = *srcPtr++;
-        }
-        *outPtr = 0;
+         if ( msgToLoad > gXMLExceptArraySize)
+            return false;
+         else
+             srcPtr = gXMLExceptArray[msgToLoad - 1];
     }
      else if (!XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
     {
-        const XMLCh* srcPtr = gXMLValidityArray[msgToLoad - 1];
-        while (*srcPtr && (outPtr < endPtr))
-        {
-            *outPtr++ = *srcPtr++;
-        }
-        *outPtr = 0;
+         if ( msgToLoad > gXMLValidityArraySize)
+            return false;
+         else
+             srcPtr = gXMLValidityArray[msgToLoad - 1];
     }
-     else
-    {
-        return false;
-    }
-    return true;
+
+     while (*srcPtr && (outPtr < endPtr))
+     {
+         *outPtr++ = *srcPtr++;
+     }
+     *outPtr = 0;
+
+     return true;
 }
 
 
-- 
GitLab