From cf0a60f13f10da4f73a364841e899f4eac8f5fb9 Mon Sep 17 00:00:00 2001
From: Tinny Ng <tng@apache.org>
Date: Fri, 27 Sep 2002 19:18:40 +0000
Subject: [PATCH] DOM L3 fix: check null string first before assigning baseURI

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174255 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/dom/impl/DOMDocumentImpl.cpp | 10 +++++++---
 src/xercesc/dom/impl/DOMEntityImpl.cpp   | 10 +++++++---
 src/xercesc/dom/impl/DOMNotationImpl.cpp | 10 +++++++---
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.cpp b/src/xercesc/dom/impl/DOMDocumentImpl.cpp
index 7bb87e5bd..cd265113b 100644
--- a/src/xercesc/dom/impl/DOMDocumentImpl.cpp
+++ b/src/xercesc/dom/impl/DOMDocumentImpl.cpp
@@ -903,9 +903,13 @@ const XMLCh* DOMDocumentImpl::getDocumentURI() const
 }
 
 void DOMDocumentImpl::setDocumentURI(const XMLCh* documentURI){
-    XMLCh* temp = (XMLCh*) this->allocate((XMLString::stringLen(documentURI) + 9)*sizeof(XMLCh));
-    XMLString::fixURI(documentURI, temp);
-    fDocumentURI = temp;
+    if (documentURI && *documentURI) {
+        XMLCh* temp = (XMLCh*) this->allocate((XMLString::stringLen(documentURI) + 9)*sizeof(XMLCh));
+        XMLString::fixURI(documentURI, temp);
+        fDocumentURI = temp;
+    }
+    else
+        fDocumentURI = 0;
 }
 
 bool DOMDocumentImpl::getStrictErrorChecking() const {
diff --git a/src/xercesc/dom/impl/DOMEntityImpl.cpp b/src/xercesc/dom/impl/DOMEntityImpl.cpp
index 53780306d..9774b30b4 100644
--- a/src/xercesc/dom/impl/DOMEntityImpl.cpp
+++ b/src/xercesc/dom/impl/DOMEntityImpl.cpp
@@ -176,9 +176,13 @@ void DOMEntityImpl::setSystemId(const XMLCh *arg)
 
 
 void DOMEntityImpl::setBaseURI(const XMLCh* baseURI) {
-    XMLCh* temp = (XMLCh*) ((DOMDocumentImpl *)getOwnerDocument())->allocate((XMLString::stringLen(baseURI) + 9)*sizeof(XMLCh));
-    XMLString::fixURI(baseURI, temp);
-    fBaseURI = temp;
+    if (baseURI && *baseURI) {
+        XMLCh* temp = (XMLCh*) ((DOMDocumentImpl *)getOwnerDocument())->allocate((XMLString::stringLen(baseURI) + 9)*sizeof(XMLCh));
+        XMLString::fixURI(baseURI, temp);
+        fBaseURI = temp;
+    }
+    else
+        fBaseURI = 0;
 }
 
 
diff --git a/src/xercesc/dom/impl/DOMNotationImpl.cpp b/src/xercesc/dom/impl/DOMNotationImpl.cpp
index e42943b2d..01504311e 100644
--- a/src/xercesc/dom/impl/DOMNotationImpl.cpp
+++ b/src/xercesc/dom/impl/DOMNotationImpl.cpp
@@ -161,9 +161,13 @@ void DOMNotationImpl::release()
 }
 
 void DOMNotationImpl::setBaseURI(const XMLCh* baseURI) {
-    XMLCh* temp = (XMLCh*) ((DOMDocumentImpl *)getOwnerDocument())->allocate((XMLString::stringLen(baseURI) + 9)*sizeof(XMLCh));
-    XMLString::fixURI(baseURI, temp);
-    fBaseURI = temp;
+    if (baseURI && *baseURI) {
+        XMLCh* temp = (XMLCh*) ((DOMDocumentImpl *)getOwnerDocument())->allocate((XMLString::stringLen(baseURI) + 9)*sizeof(XMLCh));
+        XMLString::fixURI(baseURI, temp);
+        fBaseURI = temp;
+    }
+    else
+        fBaseURI = 0;
 }
 
 const XMLCh* DOMNotationImpl::getBaseURI() const
-- 
GitLab