Hi!
There is an example. The buffer is what I want to parse, the NS xsi is defined in
soap.xml.
===========================================================================================
char *buffer = "<xsi:getsumReturn xsi:type=\"xsd:int\">9</xsi:getsumReturn>";
xmlInitParser();
LIBXML_TEST_VERSION
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
xmlSubstituteEntitiesDefault(1);
/* load template */
doc = xmlParseFile("soap.xml");
if ((doc == NULL) || (xmlDocGetRootElement(doc) == NULL)){
fprintf(stderr, "Error: unable to parse file \"%s\"\n", "soap.xml");
goto done;
}
ret = xmlParseInNodeContext(xmlDocGetRootElement(doc), buffer, xmlStrlen(buffer),
XML_PARSE_NOENT, &encNode);
if(ret < 0) {
fprintf(stderr, "Error: xmlParseInNodeContext.\n");
goto done;
}
xmlAddChild(xmlDocGetRootElement(doc), encNode);
xmlDocDump(stdout, doc);
xmlFreeDoc(doc); <----- The error : Segmentation fault occur!
==============================================================================================
soap.xml
===========================================
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></Envelope>
===========================================
BTW, I use function xmlParseInNodeContext() because after encrypt node
<xsi:getsumReturn xsi:type="xsd:int">9</xsi:getsumReturn>, the xsi NS will not found
when decrypt it. If you have another good method I will replace it.
Thx!
>Do you do "unlink" node before freeing it? If you do then
>it sounds like a libxml2 bug but it's hard to say something
>definite without a reproducible test case. Can you provide
>a *small* example that demonstrates the problem?
>
>Aleksey
>
>StackWD(hotmail) wrote:
>> Hi!
>>
>> Let me tell you more details. I parse from a buffer, such as "<xsi:getsumReturn
>> xsi:type="xsd:int">9</xsi:getsumReturn>".
>> If the content of this node is a single character or a single digital or a serials
>> of blank, then use xmlFreeNode() to free the node that via function
>> xmlParseInNodeContext() , the result will be Segmentation fault. I debug into
>> xmlFreeNode() and trace to DICT_FREE(cur->content), the cur->content is 9 and
>> execute xmlFree((char *)(str)) result in the error of Segmentation fault. If the
>> content of this node is NOT a single character or a single digital or a serials of
>> blank, there will be right all.
>> I think whether I omit something or other? I need your help. Thx for lot.
>>
>>
>>
>>>Try to run the program under gdb or valgrind and find out
>>>what causes the crash. BTW, did you call xmlSetTreeDoc?
>>>
>>>Aleksey
>>>
>>>
>>>
>>>StackWD(hotmail) wrote:
>>>
>>>
>>>>Hi!
>>>>
>>>> I have a question about function xmlParseInNodeContext() in libxml2.6.13.
>>>> After I finished call it and get a parsed XML chain and add it to the doc, then
>>>> there is an error Segmentation fault when I use xmlFreeDoc() to free the doc. I
>>>> compiled in Red Hat 9 and need some advice from you. Thx!
>>>>_______________________________________________
>>>>xmlsec mailing list
>>>>[EMAIL PROTECTED]
>>>>http://www.aleksey.com/mailman/listinfo/xmlsec
>>
>>
>>
>> StackWD(hotmail)
>> [EMAIL PROTECTED]
>> 2004-09-15
>>
>> _______________________________________________
>> xmlsec mailing list
>> [EMAIL PROTECTED]
>> http://www.aleksey.com/mailman/listinfo/xmlsec
StackWD(hotmail)
[EMAIL PROTECTED]
2004-09-15
_______________________________________________
xmlsec mailing list
[EMAIL PROTECTED]
http://www.aleksey.com/mailman/listinfo/xmlsec