aboutsummaryrefslogtreecommitdiffstats
path: root/HTMLtree.c
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2002-04-14 22:00:22 +0000
committerDaniel Veillard <veillard@src.gnome.org>2002-04-14 22:00:22 +0000
commiteb475a37df2e37a2a9675eeb84db6de3222649cc (patch)
tree7cd5dcb86bb56689f37c17b65d985a62ffdffdd2 /HTMLtree.c
parent9b731d709ee99b59b815d51ad80ebba409f0f20d (diff)
downloadandroid_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.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/HTMLtree.c b/HTMLtree.c
index e02465dd..67b91cb6 100644
--- a/HTMLtree.c
+++ b/HTMLtree.c
@@ -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, "=\"\"");