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; + } } }