From 4eb067b1640b3a51473ff6773c681367bf5013e8 Mon Sep 17 00:00:00 2001
From: Alberto Massari <amassari@apache.org>
Date: Wed, 4 Jan 2012 09:54:56 +0000
Subject: [PATCH] Avoid scanning the string twice (XERCESC-1854)

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@1227093 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/dom/impl/DOMLSSerializerImpl.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp b/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
index 8bd591dfd..6524febb8 100644
--- a/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
+++ b/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
@@ -1742,10 +1742,15 @@ bool DOMLSSerializerImpl::isNamespaceBindingActive(const XMLCh* prefix, const XM
 void DOMLSSerializerImpl::ensureValidString(const DOMNode* nodeToWrite, const XMLCh* string)
 {
     // XERCESC-1854: prevent illegal characters from being written
-    XMLSize_t count=XMLString::stringLen(string);
-    for(XMLSize_t i=0;i<count;i++)
-        if((fIsXml11 && !XMLChar1_1::isXMLChar(string[i])) || (!fIsXml11 && !XMLChar1_0::isXMLChar(string[i])))
+	if(string==0)
+		return;
+	const XMLCh* cursor=string;
+	while(*cursor!=0)
+	{
+        if((fIsXml11 && !XMLChar1_1::isXMLChar(*cursor)) || (!fIsXml11 && !XMLChar1_0::isXMLChar(*cursor)))
             reportError(nodeToWrite, DOMError::DOM_SEVERITY_FATAL_ERROR, XMLDOMMsg::INVALID_CHARACTER_ERR);
+		cursor++;
+	}
 }
 
 XERCES_CPP_NAMESPACE_END
-- 
GitLab