diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2002-04-14 22:00:22 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2002-04-14 22:00:22 +0000 |
commit | eb475a37df2e37a2a9675eeb84db6de3222649cc (patch) | |
tree | 7cd5dcb86bb56689f37c17b65d985a62ffdffdd2 /HTMLtree.c | |
parent | 9b731d709ee99b59b815d51ad80ebba409f0f20d (diff) | |
download | android_external_libxml2-eb475a37df2e37a2a9675eeb84db6de3222649cc.tar.gz android_external_libxml2-eb475a37df2e37a2a9675eeb84db6de3222649cc.tar.bz2 android_external_libxml2-eb475a37df2e37a2a9675eeb84db6de3222649cc.zip |
fixing bug #78662 i.e. add proper escaping of URI when saving HTML files.
* HTMLtree.c uri.c: fixing bug #78662 i.e. add proper
escaping of URI when saving HTML files.
* result/HTML/*: this impacted some tests
Daniel
Diffstat (limited to 'HTMLtree.c')
-rw-r--r-- | HTMLtree.c | 37 |
1 files changed, 35 insertions, 2 deletions
@@ -26,6 +26,7 @@ #include <libxml/xmlerror.h> #include <libxml/parserInternals.h> #include <libxml/globals.h> +#include <libxml/uri.h> /************************************************************************ * * @@ -349,7 +350,23 @@ htmlAttrDump(xmlBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur) { value = xmlNodeListGetString(doc, cur->children, 0); if (value) { xmlBufferWriteChar(buf, "="); - xmlBufferWriteQuotedString(buf, value); + if ((xmlStrEqual(cur->name, BAD_CAST "href")) || + (xmlStrEqual(cur->name, BAD_CAST "src"))) { + xmlChar *escaped; + xmlChar *tmp = value; + + while (IS_BLANK(*tmp)) tmp++; + + escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%"); + if (escaped != NULL) { + xmlBufferWriteQuotedString(buf, escaped); + xmlFree(escaped); + } else { + xmlBufferWriteQuotedString(buf, value); + } + } else { + xmlBufferWriteQuotedString(buf, value); + } xmlFree(value); } else { xmlBufferWriteChar(buf, "=\"\""); @@ -820,7 +837,23 @@ htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur, value = xmlNodeListGetString(doc, cur->children, 0); if (value) { xmlOutputBufferWriteString(buf, "="); - xmlBufferWriteQuotedString(buf->buffer, value); + if ((xmlStrEqual(cur->name, BAD_CAST "href")) || + (xmlStrEqual(cur->name, BAD_CAST "src"))) { + xmlChar *escaped; + xmlChar *tmp = value; + + while (IS_BLANK(*tmp)) tmp++; + + escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%"); + if (escaped != NULL) { + xmlBufferWriteQuotedString(buf->buffer, escaped); + xmlFree(escaped); + } else { + xmlBufferWriteQuotedString(buf->buffer, value); + } + } else { + xmlBufferWriteQuotedString(buf->buffer, value); + } xmlFree(value); } else { xmlOutputBufferWriteString(buf, "=\"\""); |