mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-07-29 11:41:22 +03:00
Jumbo patch, resync of W3C/Gnome CVS trees:
- uri.c tree.c SAX.c parser.c entities.c debugXML.c: finished the cleanup of the computation of URI references when seeking external entities. The URI reference string and the resulting URI are both stored now. - parser.c HTMLparser.c valid.c nanoftp.c nanohttp.c xpath.c: large s(n)printf checks and cleanup from Denis Barbier <barbier@imacs.polytechnique.fr> - xmlversion.h.in tree.h: couple of SGML declarations for a possible docbook module. - result/VC/ : a couple of test output changed due to the change of the entities URI Daniel
This commit is contained in:
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
Sun Sep 10 17:53:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
|
||||
|
||||
* uri.c tree.c SAX.c parser.c entities.c debugXML.c: finished
|
||||
the cleanup of the computation of URI references when seeking
|
||||
external entities. The URI reference string and the resulting
|
||||
URI are both stored now.
|
||||
* parser.c HTMLparser.c valid.c nanoftp.c nanohttp.c xpath.c:
|
||||
large s(n)printf checks and cleanup from Denis Barbier
|
||||
<barbier@imacs.polytechnique.fr>
|
||||
* xmlversion.h.in tree.h: couple of SGML declarations for a
|
||||
possible docbook module.
|
||||
* result/VC/ : a couple of test output changed due to the change
|
||||
of the entities URI
|
||||
|
||||
Sun Sep 10 15:59:58 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
|
||||
|
||||
* parser.h: added a _private field for linking user's data
|
||||
|
29
HTMLparser.c
29
HTMLparser.c
@ -630,7 +630,7 @@ htmlTagLookup(const xmlChar *tag) {
|
||||
int
|
||||
htmlCheckAutoClose(const xmlChar *newtag, const xmlChar *oldtag) {
|
||||
int i, index;
|
||||
char **close;
|
||||
char **close = NULL;
|
||||
|
||||
if (htmlStartCloseIndexinitialized == 0) htmlInitAutoClose();
|
||||
|
||||
@ -3535,6 +3535,10 @@ htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
|
||||
xmlMalloc(5 * sizeof(htmlParserInputPtr));
|
||||
if (ctxt->inputTab == NULL) {
|
||||
fprintf(stderr, "htmlInitParserCtxt: out of memory\n");
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 5;
|
||||
@ -3546,12 +3550,35 @@ htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
|
||||
|
||||
/* Allocate the Node stack */
|
||||
ctxt->nodeTab = (htmlNodePtr *) xmlMalloc(10 * sizeof(htmlNodePtr));
|
||||
if (ctxt->nodeTab == NULL) {
|
||||
fprintf(stderr, "htmlInitParserCtxt: out of memory\n");
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 0;
|
||||
ctxt->node = NULL;
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 10;
|
||||
ctxt->node = NULL;
|
||||
|
||||
/* Allocate the Name stack */
|
||||
ctxt->nameTab = (xmlChar **) xmlMalloc(10 * sizeof(xmlChar *));
|
||||
if (ctxt->nameTab == NULL) {
|
||||
fprintf(stderr, "htmlInitParserCtxt: out of memory\n");
|
||||
ctxt->nameNr = 0;
|
||||
ctxt->nameMax = 10;
|
||||
ctxt->name = NULL;
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 0;
|
||||
ctxt->node = NULL;
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->nameNr = 0;
|
||||
ctxt->nameMax = 10;
|
||||
ctxt->name = NULL;
|
||||
|
11
HTMLtree.c
11
HTMLtree.c
@ -181,12 +181,13 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) {
|
||||
return(-1);
|
||||
|
||||
if (encoding != NULL) {
|
||||
#ifndef HAVE_SNPRINTF
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(newcontent, sizeof(newcontent), "text/html; charset=%s",
|
||||
encoding);
|
||||
#else
|
||||
sprintf(newcontent, "text/html; charset=%s", encoding);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
snprintf(newcontent, 99, "text/html; charset=%s", encoding);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
newcontent[99] = 0;
|
||||
#endif
|
||||
newcontent[sizeof(newcontent) - 1] = 0;
|
||||
}
|
||||
|
||||
cur = doc->children;
|
||||
|
111
SAX.c
111
SAX.c
@ -311,13 +311,26 @@ xmlParserInputPtr
|
||||
resolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
|
||||
{
|
||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
||||
xmlParserInputPtr ret;
|
||||
char *URI;
|
||||
const char *base = NULL;
|
||||
|
||||
if (ctxt->input != NULL)
|
||||
base = ctxt->input->filename;
|
||||
if (base == NULL)
|
||||
base = ctxt->directory;
|
||||
|
||||
URI = xmlBuildURI(systemId, base);
|
||||
|
||||
#ifdef DEBUG_SAX
|
||||
fprintf(stderr, "SAX.resolveEntity(%s, %s)\n", publicId, systemId);
|
||||
#endif
|
||||
|
||||
return(xmlLoadExternalEntity((const char *) systemId,
|
||||
(const char *) publicId, ctxt));
|
||||
ret = xmlLoadExternalEntity((const char *) URI,
|
||||
(const char *) publicId, ctxt);
|
||||
if (URI != NULL)
|
||||
xmlFree(URI);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -409,6 +422,18 @@ entityDecl(void *ctx, const xmlChar *name, int type,
|
||||
(ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
|
||||
ctxt->sax->warning(ctxt,
|
||||
"Entity(%s) already defined in the internal subset\n", name);
|
||||
if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
|
||||
char *URI;
|
||||
const char *base = NULL;
|
||||
|
||||
if (ctxt->input != NULL)
|
||||
base = ctxt->input->filename;
|
||||
if (base == NULL)
|
||||
base = ctxt->directory;
|
||||
|
||||
URI = xmlBuildURI(systemId, base);
|
||||
ent->URI = URI;
|
||||
}
|
||||
} else if (ctxt->inSubset == 2) {
|
||||
ent = xmlAddDtdEntity(ctxt->myDoc, name, type, publicId,
|
||||
systemId, content);
|
||||
@ -416,6 +441,18 @@ entityDecl(void *ctx, const xmlChar *name, int type,
|
||||
(ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
|
||||
ctxt->sax->warning(ctxt,
|
||||
"Entity(%s) already defined in the external subset\n", name);
|
||||
if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
|
||||
char *URI;
|
||||
const char *base = NULL;
|
||||
|
||||
if (ctxt->input != NULL)
|
||||
base = ctxt->input->filename;
|
||||
if (base == NULL)
|
||||
base = ctxt->directory;
|
||||
|
||||
URI = xmlBuildURI(systemId, base);
|
||||
ent->URI = URI;
|
||||
}
|
||||
} else {
|
||||
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
|
||||
ctxt->sax->error(ctxt,
|
||||
@ -1603,3 +1640,73 @@ htmlDefaultSAXHandlerInit(void)
|
||||
htmlDefaultSAXHandler.error = xmlParserError;
|
||||
htmlDefaultSAXHandler.fatalError = xmlParserError;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default handler for HTML, builds the DOM tree
|
||||
*/
|
||||
xmlSAXHandler sgmlDefaultSAXHandler = {
|
||||
internalSubset,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
getEntity,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
setDocumentLocator,
|
||||
startDocument,
|
||||
endDocument,
|
||||
startElement,
|
||||
endElement,
|
||||
NULL,
|
||||
characters,
|
||||
ignorableWhitespace,
|
||||
NULL,
|
||||
comment,
|
||||
xmlParserWarning,
|
||||
xmlParserError,
|
||||
xmlParserError,
|
||||
getParameterEntity,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
/**
|
||||
* sgmlDefaultSAXHandlerInit:
|
||||
*
|
||||
* Initialize the default SAX handler
|
||||
*/
|
||||
void
|
||||
sgmlDefaultSAXHandlerInit(void)
|
||||
{
|
||||
sgmlDefaultSAXHandler.internalSubset = internalSubset;
|
||||
sgmlDefaultSAXHandler.externalSubset = NULL;
|
||||
sgmlDefaultSAXHandler.isStandalone = NULL;
|
||||
sgmlDefaultSAXHandler.hasInternalSubset = NULL;
|
||||
sgmlDefaultSAXHandler.hasExternalSubset = NULL;
|
||||
sgmlDefaultSAXHandler.resolveEntity = NULL;
|
||||
sgmlDefaultSAXHandler.getEntity = getEntity;
|
||||
sgmlDefaultSAXHandler.getParameterEntity = NULL;
|
||||
sgmlDefaultSAXHandler.entityDecl = NULL;
|
||||
sgmlDefaultSAXHandler.attributeDecl = NULL;
|
||||
sgmlDefaultSAXHandler.elementDecl = NULL;
|
||||
sgmlDefaultSAXHandler.notationDecl = NULL;
|
||||
sgmlDefaultSAXHandler.unparsedEntityDecl = NULL;
|
||||
sgmlDefaultSAXHandler.setDocumentLocator = setDocumentLocator;
|
||||
sgmlDefaultSAXHandler.startDocument = startDocument;
|
||||
sgmlDefaultSAXHandler.endDocument = endDocument;
|
||||
sgmlDefaultSAXHandler.startElement = startElement;
|
||||
sgmlDefaultSAXHandler.endElement = endElement;
|
||||
sgmlDefaultSAXHandler.reference = NULL;
|
||||
sgmlDefaultSAXHandler.characters = characters;
|
||||
sgmlDefaultSAXHandler.cdataBlock = NULL;
|
||||
sgmlDefaultSAXHandler.ignorableWhitespace = ignorableWhitespace;
|
||||
sgmlDefaultSAXHandler.processingInstruction = NULL;
|
||||
sgmlDefaultSAXHandler.comment = comment;
|
||||
sgmlDefaultSAXHandler.warning = xmlParserWarning;
|
||||
sgmlDefaultSAXHandler.error = xmlParserError;
|
||||
sgmlDefaultSAXHandler.fatalError = xmlParserError;
|
||||
}
|
||||
|
1
SAX.h
1
SAX.h
@ -109,6 +109,7 @@ void cdataBlock (void *ctx,
|
||||
|
||||
void xmlDefaultSAXHandlerInit (void);
|
||||
void htmlDefaultSAXHandlerInit (void);
|
||||
void sgmlDefaultSAXHandlerInit (void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
87
debugXML.c
87
debugXML.c
@ -249,11 +249,11 @@ void xmlDebugDumpElemDecl(FILE *output, xmlElementPtr elem, int depth) {
|
||||
break;
|
||||
}
|
||||
if (elem->content != NULL) {
|
||||
char buf[1001];
|
||||
char buf[5001];
|
||||
|
||||
buf[0] = 0;
|
||||
xmlSprintfElementContent(buf, elem->content, 1);
|
||||
buf[1000] = 0;
|
||||
buf[5000] = 0;
|
||||
fprintf(output, "%s", buf);
|
||||
}
|
||||
printf("\n");
|
||||
@ -331,6 +331,10 @@ void xmlDebugDumpEntityDecl(FILE *output, xmlEntityPtr ent, int depth) {
|
||||
fprintf(output, shift);
|
||||
fprintf(output, " SystemID=%s\n", ent->SystemID);
|
||||
}
|
||||
if (ent->URI != NULL) {
|
||||
fprintf(output, shift);
|
||||
fprintf(output, " URI=%s\n", ent->URI);
|
||||
}
|
||||
if (ent->content) {
|
||||
fprintf(output, shift);
|
||||
fprintf(output, " content=");
|
||||
@ -434,6 +438,10 @@ void xmlDebugDumpEntity(FILE *output, xmlEntityPtr ent, int depth) {
|
||||
fprintf(output, shift);
|
||||
fprintf(output, "SystemID=%s\n", ent->SystemID);
|
||||
}
|
||||
if (ent->URI) {
|
||||
fprintf(output, shift);
|
||||
fprintf(output, "URI=%s\n", ent->URI);
|
||||
}
|
||||
if (ent->content) {
|
||||
fprintf(output, shift);
|
||||
fprintf(output, "content=");
|
||||
@ -618,7 +626,7 @@ void xmlDebugDumpOneNode(FILE *output, xmlNodePtr node, int depth) {
|
||||
|
||||
void xmlDebugDumpNode(FILE *output, xmlNodePtr node, int depth) {
|
||||
xmlDebugDumpOneNode(output, node, depth);
|
||||
if (node->children != NULL)
|
||||
if ((node->children != NULL) && (node->type != XML_ENTITY_REF_NODE))
|
||||
xmlDebugDumpNodeList(output, node->children, depth + 1);
|
||||
}
|
||||
|
||||
@ -695,6 +703,11 @@ void xmlDebugDumpDocumentHead(FILE *output, xmlDocPtr doc) {
|
||||
xmlDebugDumpString(output, doc->encoding);
|
||||
fprintf(output, "\n");
|
||||
}
|
||||
if (doc->URL != NULL) {
|
||||
fprintf(output, "URL=");
|
||||
xmlDebugDumpString(output, doc->URL);
|
||||
fprintf(output, "\n");
|
||||
}
|
||||
if (doc->standalone)
|
||||
fprintf(output, "standalone=true\n");
|
||||
if (doc->oldNs != NULL)
|
||||
@ -714,6 +727,47 @@ void xmlDebugDumpDocument(FILE *output, xmlDocPtr doc) {
|
||||
xmlDebugDumpNodeList(output, doc->children, 1);
|
||||
}
|
||||
|
||||
void xmlDebugDumpDTD(FILE *output, xmlDtdPtr dtd) {
|
||||
if (dtd == NULL)
|
||||
return;
|
||||
if (dtd->type != XML_DTD_NODE) {
|
||||
fprintf(output, "PBM: not a DTD\n");
|
||||
return;
|
||||
}
|
||||
if (dtd->name != NULL)
|
||||
fprintf(output, "DTD(%s)", dtd->name);
|
||||
else
|
||||
fprintf(output, "DTD");
|
||||
if (dtd->ExternalID != NULL)
|
||||
fprintf(output, ", PUBLIC %s", dtd->ExternalID);
|
||||
if (dtd->SystemID != NULL)
|
||||
fprintf(output, ", SYSTEM %s", dtd->SystemID);
|
||||
fprintf(output, "\n");
|
||||
/*
|
||||
* Do a bit of checking
|
||||
*/
|
||||
if ((dtd->parent != NULL) && (dtd->doc != dtd->parent->doc))
|
||||
fprintf(output, "PBM: Dtd doc differs from parent's one\n");
|
||||
if (dtd->prev == NULL) {
|
||||
if ((dtd->parent != NULL) && (dtd->parent->children != (xmlNodePtr)dtd))
|
||||
fprintf(output, "PBM: Dtd has no prev and not first of list\n");
|
||||
} else {
|
||||
if (dtd->prev->next != (xmlNodePtr) dtd)
|
||||
fprintf(output, "PBM: Dtd prev->next : back link wrong\n");
|
||||
}
|
||||
if (dtd->next == NULL) {
|
||||
if ((dtd->parent != NULL) && (dtd->parent->last != (xmlNodePtr) dtd))
|
||||
fprintf(output, "PBM: Dtd has no next and not last of list\n");
|
||||
} else {
|
||||
if (dtd->next->prev != (xmlNodePtr) dtd)
|
||||
fprintf(output, "PBM: Dtd next->prev : forward link wrong\n");
|
||||
}
|
||||
if (dtd->children == NULL)
|
||||
fprintf(output, " DTD is empty\n");
|
||||
else
|
||||
xmlDebugDumpNodeList(output, dtd->children, 1);
|
||||
}
|
||||
|
||||
void xmlDebugDumpEntities(FILE *output, xmlDocPtr doc) {
|
||||
int i;
|
||||
xmlEntityPtr cur;
|
||||
@ -1456,9 +1510,29 @@ xmlShellPwd(xmlShellCtxtPtr ctxt, char *buffer, xmlNodePtr node,
|
||||
next = cur->parent;
|
||||
}
|
||||
if (occur == 0)
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "%c%s%s", sep, name, buffer);
|
||||
#else
|
||||
sprintf(buf, "%c%s%s", sep, name, buffer);
|
||||
#endif
|
||||
else
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "%c%s[%d]%s",
|
||||
sep, name, occur, buffer);
|
||||
#else
|
||||
sprintf(buf, "%c%s[%d]%s", sep, name, occur, buffer);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
/*
|
||||
* This test prevents buffer overflow, because this routine
|
||||
* is only called by xmlShell, in which the second argument is
|
||||
* 500 chars long.
|
||||
* It is a dirty hack before a cleaner solution is found.
|
||||
* Documentation should mention that the second argument must
|
||||
* be at least 500 chars long, and could be stripped if too long.
|
||||
*/
|
||||
if (strlen(buffer) + strlen(buf) > 499)
|
||||
break;
|
||||
strcpy(buffer, buf);
|
||||
cur = next;
|
||||
} while (cur != NULL);
|
||||
@ -1516,9 +1590,14 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
|
||||
if (ctxt->node == (xmlNodePtr) ctxt->doc)
|
||||
sprintf(prompt, "%s > ", "/");
|
||||
else if (ctxt->node->name)
|
||||
sprintf(prompt, "%s > ", ctxt->node->name);
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name);
|
||||
#else
|
||||
sprintf(buf, "%s > ", ctxt->node->name);
|
||||
#endif
|
||||
else
|
||||
sprintf(prompt, "? > ");
|
||||
prompt[sizeof(prompt) - 1] = 0;
|
||||
|
||||
cmdline = ctxt->input(prompt);
|
||||
if (cmdline == NULL) break;
|
||||
|
@ -42,6 +42,8 @@ void xmlDebugDumpDocumentHead(FILE *output,
|
||||
xmlDocPtr doc);
|
||||
void xmlDebugDumpDocument (FILE *output,
|
||||
xmlDocPtr doc);
|
||||
void xmlDebugDumpDTD (FILE *output,
|
||||
xmlDtdPtr doc);
|
||||
void xmlDebugDumpEntities (FILE *output,
|
||||
xmlDocPtr doc);
|
||||
void xmlLsOneNode (FILE *output,
|
||||
|
38
entities.c
38
entities.c
@ -76,6 +76,8 @@ void xmlFreeEntity(xmlEntityPtr entity) {
|
||||
xmlFree((char *) entity->ExternalID);
|
||||
if (entity->SystemID != NULL)
|
||||
xmlFree((char *) entity->SystemID);
|
||||
if (entity->URI != NULL)
|
||||
xmlFree((char *) entity->URI);
|
||||
if (entity->content != NULL)
|
||||
xmlFree((char *) entity->content);
|
||||
if (entity->orig != NULL)
|
||||
@ -198,6 +200,8 @@ xmlAddEntity(xmlEntitiesTablePtr table, const xmlChar *name, int type,
|
||||
ret->length = 0;
|
||||
ret->content = NULL;
|
||||
}
|
||||
ret->URI = NULL; /* to be computed by the layer knowing
|
||||
the defining entity */
|
||||
ret->orig = NULL;
|
||||
table->nb_entities++;
|
||||
|
||||
@ -590,8 +594,6 @@ xmlGetParameterEntity(xmlDocPtr doc, const xmlChar *name) {
|
||||
xmlEntitiesTablePtr table;
|
||||
xmlEntityPtr ret;
|
||||
|
||||
if (doc == NULL)
|
||||
return(NULL);
|
||||
if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
|
||||
table = (xmlEntitiesTablePtr) doc->intSubset->entities;
|
||||
ret = xmlGetEntityFromTable(table, name, 1);
|
||||
@ -619,8 +621,6 @@ xmlEntityPtr
|
||||
xmlGetDtdEntity(xmlDocPtr doc, const xmlChar *name) {
|
||||
xmlEntitiesTablePtr table;
|
||||
|
||||
if (doc == NULL)
|
||||
return(NULL);
|
||||
if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
|
||||
table = (xmlEntitiesTablePtr) doc->extSubset->entities;
|
||||
return(xmlGetEntityFromTable(table, name, 0));
|
||||
@ -783,11 +783,13 @@ xmlEncodeEntities(xmlDocPtr doc, const xmlChar *input) {
|
||||
#ifndef USE_UTF_8
|
||||
} else if ((sizeof(xmlChar) == 1) && (*cur >= 0x80)) {
|
||||
char buf[10], *ptr;
|
||||
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, 9, "&#%d;", *cur);
|
||||
snprintf(buf, sizeof(buf), "&#%d;", *cur);
|
||||
#else
|
||||
sprintf(buf, "&#%d;", *cur);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ptr = buf;
|
||||
while (*ptr != 0) *out++ = *ptr++;
|
||||
#endif
|
||||
@ -795,10 +797,11 @@ xmlEncodeEntities(xmlDocPtr doc, const xmlChar *input) {
|
||||
char buf[10], *ptr;
|
||||
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, 9, "&#%d;", *cur);
|
||||
snprintf(buf, sizeof(buf), "&#%d;", *cur);
|
||||
#else
|
||||
sprintf(buf, "&#%d;", *cur);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ptr = buf;
|
||||
while (*ptr != 0) *out++ = *ptr++;
|
||||
}
|
||||
@ -918,7 +921,13 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
|
||||
} else if (*cur >= 0x80) {
|
||||
if ((doc->encoding != NULL) || (html)) {
|
||||
/*
|
||||
* TODO !!!
|
||||
* Bj<EFBFBD>rn Reese <br@sseusa.com> provided the patch
|
||||
xmlChar xc;
|
||||
xc = (*cur & 0x3F) << 6;
|
||||
if (cur[1] != 0) {
|
||||
xc += *(++cur) & 0x3F;
|
||||
*out++ = xc;
|
||||
} else
|
||||
*/
|
||||
*out++ = *cur;
|
||||
} else {
|
||||
@ -933,10 +942,11 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
|
||||
"xmlEncodeEntitiesReentrant : input not UTF-8\n");
|
||||
doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, 9, "&#%d;", *cur);
|
||||
snprintf(buf, sizeof(buf), "&#%d;", *cur);
|
||||
#else
|
||||
sprintf(buf, "&#%d;", *cur);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ptr = buf;
|
||||
while (*ptr != 0) *out++ = *ptr++;
|
||||
continue;
|
||||
@ -967,11 +977,11 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
|
||||
"xmlEncodeEntitiesReentrant : char out of range\n");
|
||||
doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, 9, "&#%d;", *cur);
|
||||
snprintf(buf, sizeof(buf), "&#%d;", *cur);
|
||||
#else
|
||||
sprintf(buf, "&#%d;", *cur);
|
||||
#endif
|
||||
buf[9] = 0;
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ptr = buf;
|
||||
while (*ptr != 0) *out++ = *ptr++;
|
||||
cur++;
|
||||
@ -981,11 +991,11 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
|
||||
* We could do multiple things here. Just save as a char ref
|
||||
*/
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, 9, "&#x%X;", val);
|
||||
snprintf(buf, sizeof(buf), "&#x%X;", val);
|
||||
#else
|
||||
sprintf(buf, "&#x%X;", val);
|
||||
#endif
|
||||
buf[9] = 0;
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ptr = buf;
|
||||
while (*ptr != 0) *out++ = *ptr++;
|
||||
cur += l;
|
||||
@ -995,11 +1005,11 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
|
||||
char buf[10], *ptr;
|
||||
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, 9, "&#%d;", *cur);
|
||||
snprintf(buf, sizeof(buf), "&#%d;", *cur);
|
||||
#else
|
||||
sprintf(buf, "&#%d;", *cur);
|
||||
#endif
|
||||
buf[9] = 0;
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ptr = buf;
|
||||
while (*ptr != 0) *out++ = *ptr++;
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ struct _xmlEntity {
|
||||
const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */
|
||||
|
||||
struct _xmlEntity *nexte; /* next entity in the hash table */
|
||||
const xmlChar *URI; /* the full URI as computed */
|
||||
|
||||
#ifdef WITH_EXTRA_ENT_DETECT
|
||||
/* Referenced entities name stack */
|
||||
|
33
error.c
33
error.c
@ -87,23 +87,26 @@ void
|
||||
xmlParserError(void *ctx, const char *msg, ...)
|
||||
{
|
||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
||||
xmlParserInputPtr input;
|
||||
xmlParserInputPtr input = NULL;
|
||||
xmlParserInputPtr cur = NULL;
|
||||
va_list args;
|
||||
|
||||
if (ctxt != NULL) {
|
||||
input = ctxt->input;
|
||||
if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
|
||||
if ((input != NULL) && (input->filename == NULL) &&
|
||||
(ctxt->inputNr > 1)) {
|
||||
cur = input;
|
||||
input = ctxt->inputTab[ctxt->inputNr - 2];
|
||||
}
|
||||
|
||||
xmlParserPrintFileInfo(input);
|
||||
}
|
||||
|
||||
fprintf(stderr, "error: ");
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
|
||||
if (ctxt != NULL) {
|
||||
xmlParserPrintFileContext(input);
|
||||
if (cur != NULL) {
|
||||
xmlParserPrintFileInfo(cur);
|
||||
@ -111,6 +114,7 @@ xmlParserError(void *ctx, const char *msg, ...)
|
||||
xmlParserPrintFileContext(cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlParserWarning:
|
||||
@ -125,24 +129,26 @@ void
|
||||
xmlParserWarning(void *ctx, const char *msg, ...)
|
||||
{
|
||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
||||
xmlParserInputPtr input;
|
||||
xmlParserInputPtr input = NULL;
|
||||
xmlParserInputPtr cur = NULL;
|
||||
va_list args;
|
||||
|
||||
if (ctxt != NULL) {
|
||||
input = ctxt->input;
|
||||
if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
|
||||
if ((input != NULL) && (input->filename == NULL) &&
|
||||
(ctxt->inputNr > 1)) {
|
||||
cur = input;
|
||||
input = ctxt->inputTab[ctxt->inputNr - 2];
|
||||
}
|
||||
|
||||
|
||||
xmlParserPrintFileInfo(input);
|
||||
}
|
||||
|
||||
fprintf(stderr, "warning: ");
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
|
||||
if (ctxt != NULL) {
|
||||
xmlParserPrintFileContext(input);
|
||||
if (cur != NULL) {
|
||||
xmlParserPrintFileInfo(cur);
|
||||
@ -150,6 +156,7 @@ xmlParserWarning(void *ctx, const char *msg, ...)
|
||||
xmlParserPrintFileContext(cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlParserValidityError:
|
||||
@ -164,22 +171,26 @@ void
|
||||
xmlParserValidityError(void *ctx, const char *msg, ...)
|
||||
{
|
||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
||||
xmlParserInputPtr input;
|
||||
xmlParserInputPtr input = NULL;
|
||||
va_list args;
|
||||
|
||||
if (ctxt != NULL) {
|
||||
input = ctxt->input;
|
||||
if ((input->filename == NULL) && (ctxt->inputNr > 1))
|
||||
input = ctxt->inputTab[ctxt->inputNr - 2];
|
||||
|
||||
xmlParserPrintFileInfo(input);
|
||||
}
|
||||
|
||||
fprintf(stderr, "validity error: ");
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
|
||||
if (ctxt != NULL) {
|
||||
xmlParserPrintFileContext(input);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlParserValidityWarning:
|
||||
@ -194,20 +205,24 @@ void
|
||||
xmlParserValidityWarning(void *ctx, const char *msg, ...)
|
||||
{
|
||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
||||
xmlParserInputPtr input;
|
||||
xmlParserInputPtr input = NULL;
|
||||
va_list args;
|
||||
|
||||
if (ctxt != NULL) {
|
||||
input = ctxt->input;
|
||||
if ((input->filename == NULL) && (ctxt->inputNr > 1))
|
||||
input = ctxt->inputTab[ctxt->inputNr - 2];
|
||||
|
||||
xmlParserPrintFileInfo(input);
|
||||
}
|
||||
|
||||
fprintf(stderr, "validity warning: ");
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
|
||||
if (ctxt != NULL) {
|
||||
xmlParserPrintFileContext(input);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,6 +109,7 @@ void cdataBlock (void *ctx,
|
||||
|
||||
void xmlDefaultSAXHandlerInit (void);
|
||||
void htmlDefaultSAXHandlerInit (void);
|
||||
void sgmlDefaultSAXHandlerInit (void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -42,6 +42,8 @@ void xmlDebugDumpDocumentHead(FILE *output,
|
||||
xmlDocPtr doc);
|
||||
void xmlDebugDumpDocument (FILE *output,
|
||||
xmlDocPtr doc);
|
||||
void xmlDebugDumpDTD (FILE *output,
|
||||
xmlDtdPtr doc);
|
||||
void xmlDebugDumpEntities (FILE *output,
|
||||
xmlDocPtr doc);
|
||||
void xmlLsOneNode (FILE *output,
|
||||
|
@ -55,6 +55,7 @@ struct _xmlEntity {
|
||||
const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */
|
||||
|
||||
struct _xmlEntity *nexte; /* next entity in the hash table */
|
||||
const xmlChar *URI; /* the full URI as computed */
|
||||
|
||||
#ifdef WITH_EXTRA_ENT_DETECT
|
||||
/* Referenced entities name stack */
|
||||
|
@ -41,7 +41,12 @@ typedef enum {
|
||||
XML_DTD_NODE= 14,
|
||||
XML_ELEMENT_DECL= 15,
|
||||
XML_ATTRIBUTE_DECL= 16,
|
||||
#ifdef LIBXML_SGML_ENABLED
|
||||
XML_ENTITY_DECL= 17,
|
||||
XML_SGML_DOCUMENT_NODE= 18
|
||||
#else
|
||||
XML_ENTITY_DECL= 17
|
||||
#endif
|
||||
} xmlElementType;
|
||||
|
||||
/*
|
||||
|
@ -37,7 +37,7 @@ struct _xmlParserInputBuffer {
|
||||
|
||||
xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
|
||||
|
||||
xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */
|
||||
xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 */
|
||||
xmlBufferPtr raw; /* if encoder != NULL buffer for raw input */
|
||||
};
|
||||
|
||||
|
@ -49,6 +49,15 @@ extern void xmlCheckVersion(int version);
|
||||
#define LIBXML_HTML_DISABLED
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Whether the Docbook support is configured in
|
||||
#if @WITH_SGML@
|
||||
#define LIBXML_SGML_ENABLED
|
||||
#else
|
||||
#define LIBXML_SGML_DISABLED
|
||||
#endif
|
||||
*/
|
||||
|
||||
/*
|
||||
* Whether XPath is configured in
|
||||
*/
|
||||
|
216
nanoftp.c
216
nanoftp.c
@ -731,17 +731,15 @@ xmlNanoFTPSendUser(void *ctx) {
|
||||
int res;
|
||||
|
||||
if (ctxt->user == NULL)
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "USER anonymous\r\n");
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "USER anonymous\r\n");
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
sprintf(buf, "USER anonymous\r\n");
|
||||
else
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "USER %s\r\n", ctxt->user);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user);
|
||||
#else
|
||||
sprintf(buf, "USER %s\r\n", ctxt->user);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -762,17 +760,19 @@ xmlNanoFTPSendPasswd(void *ctx) {
|
||||
int res;
|
||||
|
||||
if (ctxt->passwd == NULL)
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASS libxml@%s\r\n", hostname);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASS libxml@%s\r\n", hostname);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PASS libxml@%s\r\n", hostname);
|
||||
#else
|
||||
sprintf(buf, "PASS libxml@%s\r\n", hostname);
|
||||
#endif
|
||||
else
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASS %s\r\n", ctxt->passwd);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
|
||||
#else
|
||||
sprintf(buf, "PASS %s\r\n", ctxt->passwd);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -798,11 +798,8 @@ xmlNanoFTPQuit(void *ctx) {
|
||||
int len;
|
||||
int res;
|
||||
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "QUIT\r\n");
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "QUIT\r\n");
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
sprintf(buf, "QUIT\r\n");
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -922,11 +919,13 @@ xmlNanoFTPConnect(void *ctx) {
|
||||
/*
|
||||
* We need proxy auth
|
||||
*/
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "USER %s\r\n", proxyUser);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "USER %s\r\n", proxyUser);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "USER %s\r\n", proxyUser);
|
||||
#else
|
||||
sprintf(buf, "USER %s\r\n", proxyUser);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -943,19 +942,20 @@ xmlNanoFTPConnect(void *ctx) {
|
||||
break;
|
||||
case 3:
|
||||
if (proxyPasswd != NULL)
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASS %s\r\n", proxyPasswd);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASS %s\r\n", proxyPasswd);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PASS %s\r\n", proxyPasswd);
|
||||
#else
|
||||
sprintf(buf, "PASS %s\r\n", proxyPasswd);
|
||||
#endif
|
||||
else
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASS libxml@%s\r\n",
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PASS libxml@%s\r\n",
|
||||
hostname);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASS libxml@%s\r\n",
|
||||
hostname);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#else
|
||||
sprintf(buf, "PASS libxml@%s\r\n", hostname);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -993,11 +993,13 @@ xmlNanoFTPConnect(void *ctx) {
|
||||
/* we will try in seqence */
|
||||
case 1:
|
||||
/* Using SITE command */
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "SITE %s\r\n", ctxt->hostname);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "SITE %s\r\n", ctxt->hostname);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "SITE %s\r\n", ctxt->hostname);
|
||||
#else
|
||||
sprintf(buf, "SITE %s\r\n", ctxt->hostname);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1021,19 +1023,22 @@ xmlNanoFTPConnect(void *ctx) {
|
||||
case 2:
|
||||
/* USER user@host command */
|
||||
if (ctxt->user == NULL)
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "USER anonymous@%s\r\n",
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "USER anonymous@%s\r\n",
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "USER anonymous@%s\r\n",
|
||||
ctxt->hostname);
|
||||
#else
|
||||
sprintf(buf, "USER anonymous@%s\r\n", ctxt->hostname);
|
||||
#endif
|
||||
else
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "USER %s@%s\r\n",
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "USER %s@%s\r\n",
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "USER %s@%s\r\n",
|
||||
ctxt->user, ctxt->hostname);
|
||||
#else
|
||||
sprintf(buf, "USER %s@%s\r\n",
|
||||
ctxt->user, ctxt->hostname);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1050,17 +1055,19 @@ xmlNanoFTPConnect(void *ctx) {
|
||||
return(0);
|
||||
}
|
||||
if (ctxt->passwd == NULL)
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASS libxml@%s\r\n", hostname);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASS libxml@%s\r\n", hostname);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PASS libxml@%s\r\n", hostname);
|
||||
#else
|
||||
sprintf(buf, "PASS libxml@%s\r\n", hostname);
|
||||
#endif
|
||||
else
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASS %s\r\n", ctxt->passwd);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
|
||||
#else
|
||||
sprintf(buf, "PASS %s\r\n", ctxt->passwd);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1195,11 +1202,13 @@ xmlNanoFTPCwd(void *ctx, char *directory) {
|
||||
* 250
|
||||
* 500, 501, 502, 421, 530, 550
|
||||
*/
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "CWD %s\r\n", directory);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "CWD %s\r\n", directory);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "CWD %s\r\n", directory);
|
||||
#else
|
||||
sprintf(buf, "CWD %s\r\n", directory);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1246,11 +1255,8 @@ xmlNanoFTPGetConnection(void *ctx) {
|
||||
dataAddr.sin_family = AF_INET;
|
||||
|
||||
if (ctxt->passive) {
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PASV\r\n");
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PASV\r\n");
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
sprintf(buf, "PASV\r\n");
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1308,16 +1314,17 @@ xmlNanoFTPGetConnection(void *ctx) {
|
||||
}
|
||||
adp = (unsigned char *) &dataAddr.sin_addr;
|
||||
portp = (unsigned char *) &dataAddr.sin_port;
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "PORT %d,%d,%d,%d,%d,%d\r\n",
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "PORT %d,%d,%d,%d,%d,%d\r\n",
|
||||
adp[0] & 0xff, adp[1] & 0xff, adp[2] & 0xff, adp[3] & 0xff,
|
||||
portp[0] & 0xff, portp[1] & 0xff);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "PORT %d,%d,%d,%d,%d,%d\r\n",
|
||||
#else
|
||||
sprintf(buf, "PORT %d,%d,%d,%d,%d,%d\r\n",
|
||||
adp[0] & 0xff, adp[1] & 0xff, adp[2] & 0xff, adp[3] & 0xff,
|
||||
portp[0] & 0xff, portp[1] & 0xff);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1538,11 +1545,7 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData,
|
||||
ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
|
||||
if (ctxt->dataFd == -1)
|
||||
return(-1);
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "LIST -L\r\n");
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "LIST -L\r\n");
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
sprintf(buf, "LIST -L\r\n");
|
||||
} else {
|
||||
if (filename[0] != '/') {
|
||||
if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1)
|
||||
@ -1551,12 +1554,14 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData,
|
||||
ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
|
||||
if (ctxt->dataFd == -1)
|
||||
return(-1);
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "LIST -L %s\r\n", filename);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "LIST -L %s\r\n", filename);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "LIST -L %s\r\n", filename);
|
||||
#else
|
||||
sprintf(buf, "LIST -L %s\r\n", filename);
|
||||
#endif
|
||||
}
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1649,11 +1654,8 @@ xmlNanoFTPGetSocket(void *ctx, const char *filename) {
|
||||
if (ctxt->dataFd == -1)
|
||||
return(-1);
|
||||
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "TYPE I\r\n");
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "TYPE I\r\n");
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
sprintf(buf, "TYPE I\r\n");
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
@ -1668,17 +1670,19 @@ xmlNanoFTPGetSocket(void *ctx, const char *filename) {
|
||||
return(-res);
|
||||
}
|
||||
if (filename == NULL)
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "RETR %s\r\n", ctxt->path);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "RETR %s\r\n", ctxt->path);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "RETR %s\r\n", ctxt->path);
|
||||
#else
|
||||
sprintf(buf, "RETR %s\r\n", ctxt->path);
|
||||
#endif
|
||||
else
|
||||
#ifndef HAVE_SNPRINTF
|
||||
len = sprintf(buf, "RETR %s\r\n", filename);
|
||||
#else /* HAVE_SNPRINTF */
|
||||
len = snprintf(buf, sizeof(buf), "RETR %s\r\n", filename);
|
||||
#endif /* HAVE_SNPRINTF */
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf), "RETR %s\r\n", filename);
|
||||
#else
|
||||
sprintf(buf, "RETR %s\r\n", filename);
|
||||
#endif
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
len = strlen(buf);
|
||||
#ifdef DEBUG_FTP
|
||||
printf(buf);
|
||||
#endif
|
||||
|
13
nanohttp.c
13
nanohttp.c
@ -772,20 +772,21 @@ retry:
|
||||
}
|
||||
ctxt->fd = ret;
|
||||
if (proxy) {
|
||||
#ifdef HAVE_SNPRINTF
|
||||
if (ctxt->port != 80)
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf),
|
||||
"GET http://%s:%d%s HTTP/1.0\r\nHost: %s\r\n\r\n",
|
||||
ctxt->hostname, ctxt->port, ctxt->path, ctxt->hostname);
|
||||
else
|
||||
snprintf(buf, sizeof(buf),"GET http://%s%s HTTP/1.0\r\nHost: %s\r\n\r\n",
|
||||
ctxt->hostname, ctxt->path, ctxt->hostname);
|
||||
#else
|
||||
if (ctxt->port != 80)
|
||||
sprintf(buf,
|
||||
"GET http://%s:%d%s HTTP/1.0\r\nHost: %s\r\n\r\n",
|
||||
ctxt->hostname, ctxt->port, ctxt->path, ctxt->hostname);
|
||||
#endif
|
||||
else
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(buf, sizeof(buf),"GET http://%s%s HTTP/1.0\r\nHost: %s\r\n\r\n",
|
||||
ctxt->hostname, ctxt->path, ctxt->hostname);
|
||||
#else
|
||||
sprintf(buf, "GET http://%s%s HTTP/1.0\r\nHost: %s\r\n\r\n",
|
||||
ctxt->hostname, ctxt->path, ctxt->hostname);
|
||||
#endif
|
||||
@ -810,6 +811,7 @@ retry:
|
||||
ctxt->path, ctxt->hostname);
|
||||
#endif
|
||||
}
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
ctxt->outptr = ctxt->out = xmlMemStrdup(buf);
|
||||
ctxt->state = XML_NANO_HTTP_WRITE;
|
||||
xmlNanoHTTPSend(ctxt);
|
||||
@ -1073,6 +1075,7 @@ retry:
|
||||
}
|
||||
}
|
||||
}
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
#ifdef DEBUG_HTTP
|
||||
printf("-> %s", buf);
|
||||
#endif
|
||||
|
129
parser.c
129
parser.c
@ -16,8 +16,10 @@
|
||||
|
||||
#ifdef WIN32
|
||||
#include "win32config.h"
|
||||
#define XML_DIR_SEP '\\'
|
||||
#else
|
||||
#include "config.h"
|
||||
#define XML_DIR_SEP '/'
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@ -307,6 +309,11 @@ xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value) {
|
||||
/* Allocate the Node stack */
|
||||
ctxt->vctxt.nodeTab = (xmlNodePtr *)
|
||||
xmlMalloc(4 * sizeof(xmlNodePtr));
|
||||
if (ctxt->vctxt.nodeTab == NULL) {
|
||||
ctxt->vctxt.nodeMax = 0;
|
||||
ctxt->validate = 0;
|
||||
return(-1);
|
||||
}
|
||||
ctxt->vctxt.nodeNr = 0;
|
||||
ctxt->vctxt.nodeMax = 4;
|
||||
ctxt->vctxt.node = NULL;
|
||||
@ -1861,7 +1868,7 @@ xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
|
||||
break;
|
||||
case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
|
||||
case XML_EXTERNAL_PARAMETER_ENTITY:
|
||||
return(xmlLoadExternalEntity((char *) entity->SystemID,
|
||||
return(xmlLoadExternalEntity((char *) entity->URI,
|
||||
(char *) entity->ExternalID, ctxt));
|
||||
case XML_INTERNAL_GENERAL_ENTITY:
|
||||
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
|
||||
@ -1887,7 +1894,7 @@ xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
|
||||
if (input == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
input->filename = (char *) entity->SystemID;
|
||||
input->filename = (char *) entity->URI;
|
||||
input->base = entity->content;
|
||||
input->cur = entity->content;
|
||||
input->length = entity->length;
|
||||
@ -1939,49 +1946,26 @@ xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) {
|
||||
xmlParserInputBufferPtr buf;
|
||||
xmlParserInputPtr inputStream;
|
||||
char *directory = NULL;
|
||||
xmlChar *URI = NULL;
|
||||
|
||||
if (xmlParserDebugEntities)
|
||||
fprintf(stderr, "new input from file: %s\n", filename);
|
||||
if (ctxt == NULL) return(NULL);
|
||||
buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
|
||||
if (buf == NULL) {
|
||||
char name[XML_PARSER_BIG_BUFFER_SIZE];
|
||||
|
||||
if ((ctxt->input != NULL) && (ctxt->input->directory != NULL)) {
|
||||
#ifdef WIN32
|
||||
sprintf(name, "%s\\%s", ctxt->input->directory, filename);
|
||||
#else
|
||||
sprintf(name, "%s/%s", ctxt->input->directory, filename);
|
||||
#endif
|
||||
buf = xmlParserInputBufferCreateFilename(name,
|
||||
XML_CHAR_ENCODING_NONE);
|
||||
if (buf != NULL)
|
||||
directory = xmlParserGetDirectory(name);
|
||||
}
|
||||
if ((buf == NULL) && (ctxt->directory != NULL)) {
|
||||
#ifdef WIN32
|
||||
sprintf(name, "%s\\%s", ctxt->directory, filename);
|
||||
#else
|
||||
sprintf(name, "%s/%s", ctxt->directory, filename);
|
||||
#endif
|
||||
buf = xmlParserInputBufferCreateFilename(name,
|
||||
XML_CHAR_ENCODING_NONE);
|
||||
if (buf != NULL)
|
||||
directory = xmlParserGetDirectory(name);
|
||||
}
|
||||
if (buf == NULL)
|
||||
return(NULL);
|
||||
}
|
||||
if (directory == NULL)
|
||||
directory = xmlParserGetDirectory(filename);
|
||||
|
||||
URI = xmlStrdup((xmlChar *) filename);
|
||||
directory = xmlParserGetDirectory(URI);
|
||||
|
||||
inputStream = xmlNewInputStream(ctxt);
|
||||
if (inputStream == NULL) {
|
||||
if (directory != NULL) xmlFree((char *) directory);
|
||||
if (URI != NULL) xmlFree((char *) URI);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
inputStream->filename = xmlMemStrdup(filename);
|
||||
inputStream->filename = URI;
|
||||
inputStream->directory = directory;
|
||||
inputStream->buf = buf;
|
||||
|
||||
@ -2020,6 +2004,13 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
|
||||
|
||||
/* Allocate the Input stack */
|
||||
ctxt->inputTab = (xmlParserInputPtr *) xmlMalloc(5 * sizeof(xmlParserInputPtr));
|
||||
if (ctxt->inputTab == NULL) {
|
||||
fprintf(stderr, "xmlInitParserCtxt: out of memory\n");
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 5;
|
||||
ctxt->input = NULL;
|
||||
@ -2037,18 +2028,57 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
|
||||
|
||||
/* Allocate the Node stack */
|
||||
ctxt->nodeTab = (xmlNodePtr *) xmlMalloc(10 * sizeof(xmlNodePtr));
|
||||
if (ctxt->nodeTab == NULL) {
|
||||
fprintf(stderr, "xmlInitParserCtxt: out of memory\n");
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 0;
|
||||
ctxt->node = NULL;
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 10;
|
||||
ctxt->node = NULL;
|
||||
|
||||
/* Allocate the Name stack */
|
||||
ctxt->nameTab = (xmlChar **) xmlMalloc(10 * sizeof(xmlChar *));
|
||||
if (ctxt->nameTab == NULL) {
|
||||
fprintf(stderr, "xmlInitParserCtxt: out of memory\n");
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 0;
|
||||
ctxt->node = NULL;
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
ctxt->nameNr = 0;
|
||||
ctxt->nameMax = 0;
|
||||
ctxt->name = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->nameNr = 0;
|
||||
ctxt->nameMax = 10;
|
||||
ctxt->name = NULL;
|
||||
|
||||
/* Allocate the space stack */
|
||||
ctxt->spaceTab = (int *) xmlMalloc(10 * sizeof(int));
|
||||
if (ctxt->spaceTab == NULL) {
|
||||
fprintf(stderr, "xmlInitParserCtxt: out of memory\n");
|
||||
ctxt->nodeNr = 0;
|
||||
ctxt->nodeMax = 0;
|
||||
ctxt->node = NULL;
|
||||
ctxt->inputNr = 0;
|
||||
ctxt->inputMax = 0;
|
||||
ctxt->input = NULL;
|
||||
ctxt->nameNr = 0;
|
||||
ctxt->nameMax = 0;
|
||||
ctxt->name = NULL;
|
||||
ctxt->spaceNr = 0;
|
||||
ctxt->spaceMax = 0;
|
||||
ctxt->space = NULL;
|
||||
return;
|
||||
}
|
||||
ctxt->spaceNr = 1;
|
||||
ctxt->spaceMax = 10;
|
||||
ctxt->spaceTab[0] = -1;
|
||||
@ -2076,9 +2106,17 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
|
||||
ctxt->vctxt.warning = xmlParserValidityWarning;
|
||||
/* Allocate the Node stack */
|
||||
ctxt->vctxt.nodeTab = (xmlNodePtr *) xmlMalloc(4 * sizeof(xmlNodePtr));
|
||||
if (ctxt->vctxt.nodeTab == NULL) {
|
||||
fprintf(stderr, "xmlInitParserCtxt: out of memory\n");
|
||||
ctxt->vctxt.nodeMax = 0;
|
||||
ctxt->validate = 0;
|
||||
ctxt->vctxt.error = NULL;
|
||||
ctxt->vctxt.warning = NULL;
|
||||
} else {
|
||||
ctxt->vctxt.nodeNr = 0;
|
||||
ctxt->vctxt.nodeMax = 4;
|
||||
ctxt->vctxt.node = NULL;
|
||||
}
|
||||
} else {
|
||||
ctxt->vctxt.error = NULL;
|
||||
ctxt->vctxt.warning = NULL;
|
||||
@ -5861,7 +5899,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
|
||||
* handle the various case of definitions...
|
||||
*/
|
||||
if (isParameter) {
|
||||
if ((RAW == '"') || (RAW == '\''))
|
||||
if ((RAW == '"') || (RAW == '\'')) {
|
||||
value = xmlParseEntityValue(ctxt, &orig);
|
||||
if (value) {
|
||||
if ((ctxt->sax != NULL) &&
|
||||
@ -5870,7 +5908,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
|
||||
XML_INTERNAL_PARAMETER_ENTITY,
|
||||
NULL, NULL, value);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
URI = xmlParseExternalID(ctxt, &literal, 1);
|
||||
if ((URI == NULL) && (literal == NULL)) {
|
||||
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
|
||||
@ -7648,7 +7686,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
|
||||
ctxt->depth++;
|
||||
ret = xmlParseExternalEntity(ctxt->myDoc,
|
||||
ctxt->sax, NULL, ctxt->depth,
|
||||
ent->SystemID, ent->ExternalID, &list);
|
||||
ent->URI, ent->ExternalID, &list);
|
||||
ctxt->depth--;
|
||||
} else {
|
||||
ret = -1;
|
||||
@ -11004,6 +11042,7 @@ xmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
|
||||
* @cur: a pointer to an array of xmlChar
|
||||
*
|
||||
* Creates a parser context for an XML in-memory document.
|
||||
* TODO: buggy need to be converted to new I/O functions ....
|
||||
*
|
||||
* Returns the new parser context or NULL
|
||||
*/
|
||||
@ -11298,7 +11337,7 @@ xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL,
|
||||
return(-1);
|
||||
|
||||
|
||||
ctxt = xmlCreateEntityParserCtxt(URL, ID, ctx->myDoc->URL);
|
||||
ctxt = xmlCreateEntityParserCtxt(URL, ID, NULL);
|
||||
if (ctxt == NULL) return(-1);
|
||||
ctxt->userData = ctxt;
|
||||
oldsax = ctxt->sax;
|
||||
@ -11354,9 +11393,16 @@ xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL,
|
||||
ctxt->vctxt.warning = ctx->vctxt.warning;
|
||||
/* Allocate the Node stack */
|
||||
ctxt->vctxt.nodeTab = (xmlNodePtr *) xmlMalloc(4 * sizeof(xmlNodePtr));
|
||||
if (ctxt->vctxt.nodeTab == NULL) {
|
||||
fprintf(stderr, "xmlParseCtxtExternalEntity: out of memory\n");
|
||||
ctxt->validate = 0;
|
||||
ctxt->vctxt.error = NULL;
|
||||
ctxt->vctxt.warning = NULL;
|
||||
} else {
|
||||
ctxt->vctxt.nodeNr = 0;
|
||||
ctxt->vctxt.nodeMax = 4;
|
||||
ctxt->vctxt.node = NULL;
|
||||
}
|
||||
} else {
|
||||
ctxt->vctxt.error = NULL;
|
||||
ctxt->vctxt.warning = NULL;
|
||||
@ -11462,7 +11508,7 @@ xmlParseExternalEntity(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data,
|
||||
return(-1);
|
||||
|
||||
|
||||
ctxt = xmlCreateEntityParserCtxt(URL, ID, doc->URL);
|
||||
ctxt = xmlCreateEntityParserCtxt(URL, ID, NULL);
|
||||
if (ctxt == NULL) return(-1);
|
||||
ctxt->userData = ctxt;
|
||||
if (sax != NULL) {
|
||||
@ -11829,10 +11875,15 @@ xmlCreateFileParserCtxt(const char *filename)
|
||||
char *directory = NULL;
|
||||
|
||||
buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
|
||||
if (buf == NULL) return(NULL);
|
||||
if (buf == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
ctxt = xmlNewParserCtxt();
|
||||
if (ctxt == NULL) {
|
||||
if (xmlDefaultSAXHandler.error != NULL) {
|
||||
xmlDefaultSAXHandler.error(NULL, "out of memory\n");
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
@ -11879,7 +11930,9 @@ xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
|
||||
char *directory = NULL;
|
||||
|
||||
ctxt = xmlCreateFileParserCtxt(filename);
|
||||
if (ctxt == NULL) return(NULL);
|
||||
if (ctxt == NULL) {
|
||||
return(NULL);
|
||||
}
|
||||
if (sax != NULL) {
|
||||
if (ctxt->sax != NULL)
|
||||
xmlFree(ctxt->sax);
|
||||
|
@ -1,3 +1,3 @@
|
||||
dtds/doc.dtd:2: validity error: Element doc has ID attributes defined in the internal and external subset : val
|
||||
./test/VC/dtds/doc.dtd:2: validity error: Element doc has ID attributes defined in the internal and external subset : val
|
||||
<!ATTLIST doc val ID #IMPLIED>
|
||||
^
|
||||
|
@ -1,3 +1,3 @@
|
||||
dtds/a.dtd:1: validity error: Redefinition of element a
|
||||
./test/VC/dtds/a.dtd:1: validity error: Redefinition of element a
|
||||
<!ELEMENT a (#PCDATA | b | c)*>
|
||||
^
|
||||
|
9
tree.c
9
tree.c
@ -2634,12 +2634,12 @@ xmlNodeSetLang(xmlNodePtr cur, const xmlChar *lang) {
|
||||
case XML_ELEMENT_DECL:
|
||||
case XML_ATTRIBUTE_DECL:
|
||||
case XML_ENTITY_DECL:
|
||||
return;
|
||||
case XML_ELEMENT_NODE:
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
case XML_PI_NODE:
|
||||
case XML_ENTITY_REF_NODE:
|
||||
case XML_ENTITY_NODE:
|
||||
return;
|
||||
case XML_ELEMENT_NODE:
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
break;
|
||||
}
|
||||
xmlSetProp(cur, BAD_CAST "xml:lang", lang);
|
||||
@ -2757,6 +2757,9 @@ xmlNodeGetBase(xmlDocPtr doc, xmlNodePtr cur) {
|
||||
if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
|
||||
cur = doc->children;
|
||||
while ((cur != NULL) && (cur->name != NULL)) {
|
||||
if (cur->type == XML_ENTITY_DECL) {
|
||||
/* TODO: we are crossing entity boundaries */
|
||||
}
|
||||
if (cur->type != XML_ELEMENT_NODE) {
|
||||
cur = cur->next;
|
||||
continue;
|
||||
|
5
tree.h
5
tree.h
@ -41,7 +41,12 @@ typedef enum {
|
||||
XML_DTD_NODE= 14,
|
||||
XML_ELEMENT_DECL= 15,
|
||||
XML_ATTRIBUTE_DECL= 16,
|
||||
#ifdef LIBXML_SGML_ENABLED
|
||||
XML_ENTITY_DECL= 17,
|
||||
XML_SGML_DOCUMENT_NODE= 18
|
||||
#else
|
||||
XML_ENTITY_DECL= 17
|
||||
#endif
|
||||
} xmlElementType;
|
||||
|
||||
/*
|
||||
|
6
uri.c
6
uri.c
@ -1637,8 +1637,8 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
|
||||
/*
|
||||
* Ensure the path includes a '/'
|
||||
*/
|
||||
if (res->path[0] != '/' && ref->path[0] != 0 &&
|
||||
ref->path[index] != '/') {
|
||||
if ((out >0) && (res->path[out -1] != '/') &&
|
||||
(ref->path[0] != 0) && (ref->path[index] != '/')) {
|
||||
res->path[out++] = '/';
|
||||
}
|
||||
while (ref->path[index] != 0) {
|
||||
@ -1664,7 +1664,7 @@ step_7:
|
||||
done:
|
||||
if (ref != NULL)
|
||||
xmlFreeURI(ref);
|
||||
if (base != NULL)
|
||||
if (bas != NULL)
|
||||
xmlFreeURI(bas);
|
||||
if (res != NULL)
|
||||
xmlFreeURI(res);
|
||||
|
13
valid.c
13
valid.c
@ -2856,8 +2856,9 @@ xmlValidNormalizeAttributeValue(xmlDocPtr doc, xmlNodePtr elem,
|
||||
snprintf((char *) qname, sizeof(qname), "%s:%s",
|
||||
elem->ns->prefix, elem->name);
|
||||
#else
|
||||
sprintf(qname, "%s:%s", elem->name, elem->ns->prefix);
|
||||
sprintf((char *) qname, "%s:%s", elem->ns->prefix, elem->name);
|
||||
#endif
|
||||
qname[sizeof(qname) - 1] = 0;
|
||||
attrDecl = xmlGetDtdAttrDesc(doc->intSubset, qname, name);
|
||||
if ((attrDecl == NULL) && (doc->extSubset != NULL))
|
||||
attrDecl = xmlGetDtdAttrDesc(doc->extSubset, qname, name);
|
||||
@ -3133,8 +3134,9 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
||||
snprintf((char *) qname, sizeof(qname), "%s:%s",
|
||||
elem->ns->prefix, elem->name);
|
||||
#else
|
||||
sprintf(qname, "%s:%s", elem->name, elem->ns->prefix);
|
||||
sprintf((char *) qname, "%s:%s", elem->ns->prefix, elem->name);
|
||||
#endif
|
||||
qname[sizeof(qname) - 1] = 0;
|
||||
if (attr->ns != NULL) {
|
||||
attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, qname,
|
||||
attr->name, attr->ns->prefix);
|
||||
@ -3699,8 +3701,10 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
||||
snprintf((char *) qname, sizeof(qname), "%s:%s",
|
||||
child->ns->prefix, child->name);
|
||||
#else
|
||||
sprintf(qname, "%s:%s", child->name, child->ns->prefix);
|
||||
sprintf((char *) qname, "%s:%s",
|
||||
child->ns->prefix, child->name);
|
||||
#endif
|
||||
qname[sizeof(qname) - 1] = 0;
|
||||
cont = elemDecl->content;
|
||||
while (cont != NULL) {
|
||||
if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
|
||||
@ -3876,8 +3880,9 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
|
||||
snprintf((char *) qname, sizeof(qname), "%s:%s",
|
||||
root->ns->prefix, root->name);
|
||||
#else
|
||||
sprintf(qname, "%s:%s", root->name, root->ns->prefix);
|
||||
sprintf((char *) qname, "%s:%s", root->ns->prefix, root->name);
|
||||
#endif
|
||||
qname[sizeof(qname) - 1] = 0;
|
||||
if (!xmlStrcmp(doc->intSubset->name, qname))
|
||||
goto name_ok;
|
||||
}
|
||||
|
7
xmlIO.c
7
xmlIO.c
@ -873,9 +873,6 @@ xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) {
|
||||
}
|
||||
}
|
||||
if (context == NULL) {
|
||||
#ifdef DEBUG_INPUT
|
||||
fprintf(stderr, "No input filter matching \"%s\"\n", URI);
|
||||
#endif
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
@ -947,9 +944,6 @@ xmlOutputBufferCreateFilename(const char *URI,
|
||||
}
|
||||
}
|
||||
if (context == NULL) {
|
||||
#ifdef DEBUG_INPUT
|
||||
fprintf(stderr, "No output filter matching \"%s\"\n", URI);
|
||||
#endif
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
@ -1533,6 +1527,7 @@ xmlParserInputPtr
|
||||
xmlDefaultExternalEntityLoader(const char *URL, const char *ID,
|
||||
xmlParserCtxtPtr ctxt) {
|
||||
xmlParserInputPtr ret = NULL;
|
||||
|
||||
#ifdef DEBUG_EXTERNAL_ENTITIES
|
||||
fprintf(stderr, "xmlDefaultExternalEntityLoader(%s, xxx)\n", URL);
|
||||
#endif
|
||||
|
2
xmlIO.h
2
xmlIO.h
@ -37,7 +37,7 @@ struct _xmlParserInputBuffer {
|
||||
|
||||
xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
|
||||
|
||||
xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */
|
||||
xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 */
|
||||
xmlBufferPtr raw; /* if encoder != NULL buffer for raw input */
|
||||
};
|
||||
|
||||
|
@ -49,6 +49,15 @@ extern void xmlCheckVersion(int version);
|
||||
#define LIBXML_HTML_DISABLED
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Whether the Docbook support is configured in
|
||||
#if @WITH_SGML@
|
||||
#define LIBXML_SGML_ENABLED
|
||||
#else
|
||||
#define LIBXML_SGML_DISABLED
|
||||
#endif
|
||||
*/
|
||||
|
||||
/*
|
||||
* Whether XPath is configured in
|
||||
*/
|
||||
|
7
xpath.c
7
xpath.c
@ -2417,9 +2417,16 @@ xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
||||
|
||||
else {
|
||||
char name[2000];
|
||||
#ifdef HAVE_SNPRINTF
|
||||
snprintf(name, sizeof(name), "%s:%s",
|
||||
(char *) cur->nodesetval->nodeTab[i]->ns->prefix,
|
||||
(char *) cur->nodesetval->nodeTab[i]->name);
|
||||
#else
|
||||
sprintf(name, "%s:%s",
|
||||
(char *) cur->nodesetval->nodeTab[i]->ns->prefix,
|
||||
(char *) cur->nodesetval->nodeTab[i]->name);
|
||||
#endif
|
||||
name[sizeof(name) - 1] = 0;
|
||||
valuePush(ctxt, xmlXPathNewCString(name));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user