1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-07-29 11:41:22 +03:00

Christian Glahn found a small bug in the push parser. cleaned up and made

* parser.c: Christian Glahn found a small bug in the push parser.
* xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
  public
Daniel
This commit is contained in:
Daniel Veillard
2002-10-14 11:15:18 +00:00
parent 6045c90aef
commit 819d5cb84d
4 changed files with 30 additions and 9 deletions

View File

@ -1,3 +1,9 @@
Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard <daniel@veillard.com>
* parser.c: Christian Glahn found a small bug in the push parser.
* xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
public
Wed Oct 9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com> Wed Oct 9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
* xmlschemas.c include/libxml/xmlschemas.h: added * xmlschemas.c include/libxml/xmlschemas.h: added

View File

@ -254,6 +254,7 @@ xmlParserInputPtr xmlNoNetExternalEntityLoader(const char *URL,
xmlChar *xmlNormalizeWindowsPath (const xmlChar *path); xmlChar *xmlNormalizeWindowsPath (const xmlChar *path);
int xmlCheckFilename (const char *path);
/** /**
* Default 'file://' protocol callbacks * Default 'file://' protocol callbacks
*/ */

View File

@ -8894,6 +8894,14 @@ xmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size,
/* /*
* Check for termination * Check for termination
*/ */
int avail = 0;
if (ctxt->input->buf == NULL)
avail = ctxt->input->length -
(ctxt->input->cur - ctxt->input->base);
else
avail = ctxt->input->buf->buffer->use -
(ctxt->input->cur - ctxt->input->base);
if ((ctxt->instate != XML_PARSER_EOF) && if ((ctxt->instate != XML_PARSER_EOF) &&
(ctxt->instate != XML_PARSER_EPILOG)) { (ctxt->instate != XML_PARSER_EPILOG)) {
ctxt->errNo = XML_ERR_DOCUMENT_END; ctxt->errNo = XML_ERR_DOCUMENT_END;
@ -8903,6 +8911,15 @@ xmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size,
ctxt->wellFormed = 0; ctxt->wellFormed = 0;
ctxt->disableSAX = 1; ctxt->disableSAX = 1;
} }
if ((ctxt->instate == XML_PARSER_EPILOG) && (avail > 0)) {
ctxt->errNo = XML_ERR_DOCUMENT_END;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Extra content at the end of the document\n");
ctxt->wellFormed = 0;
ctxt->disableSAX = 1;
}
if (ctxt->instate != XML_PARSER_EOF) { if (ctxt->instate != XML_PARSER_EOF) {
if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
ctxt->sax->endDocument(ctxt->userData); ctxt->sax->endDocument(ctxt->userData);

15
xmlIO.c
View File

@ -261,25 +261,22 @@ xmlCleanupOutputCallbacks(void)
* returns 1. if stat fails, returns 0 (if calling * returns 1. if stat fails, returns 0 (if calling
* stat on the filename fails, it can't be right). * stat on the filename fails, it can't be right).
* if stat succeeds and the file is a directory, * if stat succeeds and the file is a directory,
* sets errno to EISDIR and returns 0. otherwise * returns 2. otherwise returns 1.
* returns 1.
*/ */
static int int
xmlCheckFilename (const char *path) xmlCheckFilename (const char *path)
{ {
#ifdef HAVE_STAT #ifdef HAVE_STAT
#ifdef S_ISDIR
struct stat stat_buffer; struct stat stat_buffer;
if (stat(path, &stat_buffer) == -1) if (stat(path, &stat_buffer) == -1)
return 0; return 0;
#ifdef S_ISDIR
if (S_ISDIR(stat_buffer.st_mode)) { if (S_ISDIR(stat_buffer.st_mode)) {
errno = EISDIR; return 2;
return 0;
} }
#endif #endif
#endif #endif
return 1; return 1;
@ -992,7 +989,7 @@ static void
xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt ) xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt )
{ {
if ( ctxt->uri != NULL ) if ( ctxt->uri != NULL )
free( ctxt->uri ); xmlFree( ctxt->uri );
if ( ctxt->doc_buff != NULL ) { if ( ctxt->doc_buff != NULL ) {
@ -1007,7 +1004,7 @@ xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt )
} }
} }
free( ctxt ); xmlFree( ctxt );
return; return;
} }