diff --git a/src/xercesc/util/XMLUri.cpp b/src/xercesc/util/XMLUri.cpp
index 0a4fc81c18afbcb8f10a87bf86c69841d9ce046a..e7500981c4f2b29499c66715b7ef533871878f33 100644
--- a/src/xercesc/util/XMLUri.cpp
+++ b/src/xercesc/util/XMLUri.cpp
@@ -794,13 +794,25 @@ void XMLUri::initializePath(const XMLCh* const uriSpec)
         }
 
         if (getFragment())
-        {
             delete [] fFragment;
-        }
-
-        fFragment = new XMLCh[index - start + 1];
-        XMLString::subString(fFragment, uriSpec, start, index);
 
+        //make sure that there is something following the '#'
+        if (index > start)
+        {
+            fFragment = new XMLCh[index - start + 1];
+            XMLString::subString(fFragment, uriSpec, start, index);
+        }
+        else 
+        {
+            // RFC 2396, 4.0. URI Reference
+            // URI-reference = [absoulteURI | relativeURI] [# fragment]
+            //
+            // RFC 2396, 4.1. Fragment Identifier
+            // fragment = *uric 
+            // 
+            // empty fragment is valid
+            fFragment = 0;
+        }
     }
 
 }