1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-07-04 08:02:34 +03:00

Fix htmlReadFd, which was using a mix of xml and html context functions

This commit is contained in:
Finn Barber
2021-07-27 13:20:20 +01:00
committed by Nick Wellnhofer
parent 67953a9f11
commit fe6890e292

View File

@ -6992,7 +6992,9 @@ htmlReadMemory(const char *buffer, int size, const char *URL, const char *encodi
* @encoding: the document encoding, or NULL * @encoding: the document encoding, or NULL
* @options: a combination of htmlParserOption(s) * @options: a combination of htmlParserOption(s)
* *
* parse an XML from a file descriptor and build a tree. * parse an HTML from a file descriptor and build a tree.
* NOTE that the file descriptor will not be closed when the
* reader is closed or reset.
* *
* Returns the resulting document tree * Returns the resulting document tree
*/ */
@ -7001,17 +7003,17 @@ htmlReadFd(int fd, const char *URL, const char *encoding, int options)
{ {
htmlParserCtxtPtr ctxt; htmlParserCtxtPtr ctxt;
xmlParserInputBufferPtr input; xmlParserInputBufferPtr input;
xmlParserInputPtr stream; htmlParserInputPtr stream;
if (fd < 0) if (fd < 0)
return (NULL); return (NULL);
xmlInitParser();
xmlInitParser(); xmlInitParser();
input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE); input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
if (input == NULL) if (input == NULL)
return (NULL); return (NULL);
ctxt = xmlNewParserCtxt(); input->closecallback = NULL;
ctxt = htmlNewParserCtxt();
if (ctxt == NULL) { if (ctxt == NULL) {
xmlFreeParserInputBuffer(input); xmlFreeParserInputBuffer(input);
return (NULL); return (NULL);
@ -7019,7 +7021,7 @@ htmlReadFd(int fd, const char *URL, const char *encoding, int options)
stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
if (stream == NULL) { if (stream == NULL) {
xmlFreeParserInputBuffer(input); xmlFreeParserInputBuffer(input);
xmlFreeParserCtxt(ctxt); htmlFreeParserCtxt(ctxt);
return (NULL); return (NULL);
} }
inputPush(ctxt, stream); inputPush(ctxt, stream);