diff --git a/src/xercesc/util/XMLAbstractDoubleFloat.cpp b/src/xercesc/util/XMLAbstractDoubleFloat.cpp index 734e06e382e5cdaad2d1e56b47e5239b4b9442a3..8ba09b1565044aeef684cb590bba516d11842c69 100644 --- a/src/xercesc/util/XMLAbstractDoubleFloat.cpp +++ b/src/xercesc/util/XMLAbstractDoubleFloat.cpp @@ -376,10 +376,18 @@ void XMLAbstractDoubleFloat::normalizeZero(XMLCh* const inData) { minusSeen = true; srcStr++; + if (!*srcStr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, getMemoryManager()); + } } else if (*srcStr == chPlus) { srcStr++; + if (!*srcStr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, getMemoryManager()); + } } // scan the string diff --git a/src/xercesc/util/XMLBigDecimal.cpp b/src/xercesc/util/XMLBigDecimal.cpp index b2ebada72adbb603130997052ab65be573855f21..f61852384980446c939aa7358898622cf83b270b 100644 --- a/src/xercesc/util/XMLBigDecimal.cpp +++ b/src/xercesc/util/XMLBigDecimal.cpp @@ -231,10 +231,18 @@ void XMLBigDecimal::parseDecimal(const XMLCh* const toParse { sign = -1; startPtr++; + if (startPtr == endPtr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, manager); + } } else if (*startPtr == chPlus) { - startPtr++; + startPtr++; + if (startPtr == endPtr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, manager); + } } // Strip leading zeros @@ -321,10 +329,18 @@ void XMLBigDecimal::parseDecimal(const XMLCh* const toParse if (*startPtr == chDash) { startPtr++; + if (startPtr == endPtr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, manager); + } } else if (*startPtr == chPlus) { startPtr++; + if (startPtr == endPtr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, manager); + } } // Strip leading zeros diff --git a/src/xercesc/util/XMLBigInteger.cpp b/src/xercesc/util/XMLBigInteger.cpp index cf63836e2501b3d0e04967393743ec24443061df..cb4bbdfff77b0ca0d99fc0c332e7cbb42dc5f8a8 100644 --- a/src/xercesc/util/XMLBigInteger.cpp +++ b/src/xercesc/util/XMLBigInteger.cpp @@ -135,13 +135,22 @@ void XMLBigInteger::parseBigInteger(const XMLCh* const toConvert { signValue = -1; startPtr++; + if (startPtr == endPtr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, manager); + } } else if (*startPtr == chPlus) { // skip the '+' startPtr++; + if (startPtr == endPtr) + { + ThrowXMLwithMemMgr(NumberFormatException, XMLExcepts::XMLNUM_Inv_chars, manager); + } } + // Scan past any leading zero. while (*startPtr == chDigit_0) startPtr++;