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