You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by bu...@apache.org on 2002/06/05 01:59:14 UTC
DO NOT REPLY [Bug 9611] New: -
IXMLDOMDocument::createElement erroneously succeeds
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9611>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9611
IXMLDOMDocument::createElement erroneously succeeds
Summary: IXMLDOMDocument::createElement erroneously succeeds
Product: Xerces-C++
Version: 1.7.0
Platform: PC
OS/Version: Windows NT/2K
Status: NEW
Severity: Major
Priority: Other
Component: DOM
AssignedTo: xerces-c-dev@xml.apache.org
ReportedBy: erik.soloveiko@conexant.com
Regarding IXMLDOMDocument...
A call to the createElement method succeeds when passing in a tag name that is
not valid XML! For instance, this method will succeed when passing
in "Test~Root" as the tag name. The tilde is invalid XML, for the name of an
element, and should invalidate this call; but it doesn't! It succeeds instead.
sample code...
CXML_Element_Ptr
CXML_Document_Adapter_Xerces_DOM::createRootElement(
const std::string& r_tag,
bool overwrite_existing /* = true */)
{
// IXML_Element is our base class, but really irrelevant for this example
IXML_Element* p_new_xml_element_i_f = 0; // a pessimist
// _p_actual_document is of type ptr to IXMLDOMDocument
// proceed only if we have an actual document
if (_p_actual_document != 0)
{
// proceed only if
// a. the intent is to not overwrite an existing root element and there
exists no
// root element
// ...OR...
// b. the intent is to overwrite an existing root element
if (((overwrite_existing == false) && (rootElementExists() ==
false)) ||
overwrite_existing == true)
{
// derive a temporary tag string, in the form of a wrapped b-
string, from our
// source
_bstr_t tag_wrapped_bstr(r_tag.c_str());
// now, from the temporary tag string in wrapped b-string format,
derive a
// tag string in raw b-string format, to be sent across COM i/f
BSTR tag_raw_bstr = tag_wrapped_bstr.copy();
// attempt to create a new actual element
CXML_Element_Adapter_Xerces_DOM::ACTUAL_ELEM_PTR
p_new_actual_element = 0;
// **** this call succeeds with an invalid XML tag name!!!
HRESULT
result_create_element =
_p_actual_document->createElement(
tag_raw_bstr, &p_new_actual_element);
// de-allocate temporary tag string of raw b-string format
::SysFreeString(tag_raw_bstr);
// proceed only if the new actual element was created successfully
#if 0
if (result_create_element == S_OK)
#else
if (SUCCEEDED(result_create_element))
#endif
{
// ensure that the new actual element exists
assert(p_new_actual_element != 0);
// attempt to designate this new actual element to be our new
root element
HRESULT
result_put_root_element =
_p_actual_document->putref_documentElement
(p_new_actual_element);
// proceed only if the new actual element was designated our
new root
// element successfully
#if 0
if (result_put_root_element == S_OK)
#else
if (SUCCEEDED(result_put_root_element))
#endif
{
// allocate a new instance of our type, to represent our
APPENDED new
// element
CXML_Element_Adapter_Xerces_DOM*
p_new_element_adapter_root =
new CXML_Element_Adapter_Xerces_DOM
(p_new_actual_element);
// indicate success
p_new_xml_element_i_f =
static_cast<IXML_Element*>(p_new_element_adapter_root);
}
// indicate to the new actual element that it has one less
reference
p_new_actual_element->Release();
}
}
}
return CXML_Element_Ptr(p_new_xml_element_i_f);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org