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
diff --git a/ChangeLog b/ChangeLog
index 5e5883f..11a6162 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* xmlschemas.c include/libxml/xmlschemas.h: added
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
index 7daa717..d0ef8d6 100644
--- a/include/libxml/xmlIO.h
+++ b/include/libxml/xmlIO.h
@@ -254,6 +254,7 @@
xmlChar *xmlNormalizeWindowsPath (const xmlChar *path);
+int xmlCheckFilename (const char *path);
/**
* Default 'file://' protocol callbacks
*/
diff --git a/parser.c b/parser.c
index 7311c9e..2c57954 100644
--- a/parser.c
+++ b/parser.c
@@ -8894,6 +8894,14 @@
/*
* 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) &&
(ctxt->instate != XML_PARSER_EPILOG)) {
ctxt->errNo = XML_ERR_DOCUMENT_END;
@@ -8903,6 +8911,15 @@
ctxt->wellFormed = 0;
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->sax) && (ctxt->sax->endDocument != NULL))
ctxt->sax->endDocument(ctxt->userData);
diff --git a/xmlIO.c b/xmlIO.c
index 796c8ac..0972e3f 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -261,25 +261,22 @@
* returns 1. if stat fails, returns 0 (if calling
* stat on the filename fails, it can't be right).
* if stat succeeds and the file is a directory,
- * sets errno to EISDIR and returns 0. otherwise
- * returns 1.
+ * returns 2. otherwise returns 1.
*/
-static int
+int
xmlCheckFilename (const char *path)
{
#ifdef HAVE_STAT
-#ifdef S_ISDIR
struct stat stat_buffer;
if (stat(path, &stat_buffer) == -1)
return 0;
+#ifdef S_ISDIR
if (S_ISDIR(stat_buffer.st_mode)) {
- errno = EISDIR;
- return 0;
+ return 2;
}
-
#endif
#endif
return 1;
@@ -992,7 +989,7 @@
xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt )
{
if ( ctxt->uri != NULL )
- free( ctxt->uri );
+ xmlFree( ctxt->uri );
if ( ctxt->doc_buff != NULL ) {
@@ -1007,7 +1004,7 @@
}
}
- free( ctxt );
+ xmlFree( ctxt );
return;
}