Всем доброго времени суток, есть код, на С для теста библиотеки libxml2 под Ubuntu 14.04:
Код:
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <string.h>
static void example4Func(const char *filename) {
xmlParserCtxtPtr ctxt;
char data[10000] = "<!DOCTYPE root [ <!ENTITY ent SYSTEM \"file:///etc/passwd\"> ]><root><e>&ent;</e></root>";
char user_data[10000];
xmlChar *xmlbuff;
xmlDocPtr doc; /* the resulting document tree */
int len;
xmlSAXHandler sax;
xmlSAX2InitDefaultSAXHandler(&sax, 1);
ctxt = xmlCreatePushParserCtxt(&sax, user_data, 0, 0, filename);
if (ctxt == NULL) {
fprintf(stderr, "Failed to create parser context !\n");
return;
}
len = strlen(data);
xmlParseChunk(ctxt, data, len, 1);
doc = ctxt->myDoc;
xmlFreeParserCtxt(ctxt);
len = strlen(data);
xmlDocDumpFormatMemory(doc, &xmlbuff, &len, 1);
printf("%s\n", (char *) xmlbuff);
xmlFree(xmlbuff);
xmlFreeDoc(doc);
}
int main(int argc, char **argv) {
example4Func("filename");
xmlCleanupParser();
return(0);
}
Компилю его следующей командой:
Цитата:
$ sudo gcc -I/usr/include/libxml2 xmltest_entity.c -lxml2
|
Но при исполнении получаю ошибку..
Цитата:
parser error : SAX.xmlSAX2EntityDecl(ent) called while not in subset
parser error : Memory allocation failed
filename:1: parser error : Entity 'ent' not defined
<!DOCTYPE root [ <!ENTITY ent SYSTEM "file:///etc/passwd"> ]><root><e>&ent;</e><
|
Смена версии libxml2 на более старую результата не принесла. Я не силён в Си и в libxml2. Поэтому прошу подсказать что я делаю не так?