[libxml2] Fix html serialization error and htmlSetMetaEncoding()
- From: Daniel Veillard <veillard src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxml2] Fix html serialization error and htmlSetMetaEncoding()
- Date: Fri, 11 May 2012 04:40:18 +0000 (UTC)
commit 39d027cdb74371d64f68dc488556be41e1d14546
Author: Daniel Veillard <veillard redhat com>
Date: Fri May 11 12:38:23 2012 +0800
Fix html serialization error and htmlSetMetaEncoding()
For https://bugzilla.gnome.org/show_bug.cgi?id=630682
The python tests were reporting errors, some of it was due to
a small change in case encoding, but the main one was about
htmlSetMetaEncoding(doc, NULL) being broken by not removing
the associated meta tag anymore
HTMLtree.c | 12 +++++++++---
python/tests/serialize.py | 4 ++--
tree.c | 4 ++--
3 files changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/HTMLtree.c b/HTMLtree.c
index f23ae02..5d0893b 100644
--- a/HTMLtree.c
+++ b/HTMLtree.c
@@ -151,7 +151,7 @@ found_content:
* htmlSetMetaEncoding:
* @doc: the document
* @encoding: the encoding string
- *
+ *
* Sets the current encoding in the Meta tags
* NOTE: this will not change the document content encoding, just
* the META flag associated.
@@ -164,6 +164,7 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) {
const xmlChar *content = NULL;
char newcontent[100];
+ newcontent[0] = 0;
if (doc == NULL)
return(-1);
@@ -244,7 +245,7 @@ found_meta:
http = 1;
else
{
- if ((value != NULL) &&
+ if ((value != NULL) &&
(!xmlStrcasecmp(attr->name, BAD_CAST"content")))
content = value;
}
@@ -278,8 +279,13 @@ create:
xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent);
}
} else {
+ /* remove the meta tag if NULL is passed */
+ if (encoding == NULL) {
+ xmlUnlinkNode(meta);
+ xmlFreeNode(meta);
+ }
/* change the document only if there is a real encoding change */
- if (xmlStrcasestr(content, encoding) == NULL) {
+ else if (xmlStrcasestr(content, encoding) == NULL) {
xmlSetProp(meta, BAD_CAST"content", BAD_CAST newcontent);
}
}
diff --git a/python/tests/serialize.py b/python/tests/serialize.py
index 5b969a9..91753e7 100755
--- a/python/tests/serialize.py
+++ b/python/tests/serialize.py
@@ -96,7 +96,7 @@ str = doc.serialize("iso-8859-1", 1)
if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello</title>
</head>
<body><p>hello</p></body>
@@ -131,7 +131,7 @@ if str != """<html>
str = root.serialize("iso-8859-1", 1)
if str != """<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello</title>
</head>
<body><p>hello</p></body>
diff --git a/tree.c b/tree.c
index a2fdcbf..71fbd1d 100644
--- a/tree.c
+++ b/tree.c
@@ -3732,8 +3732,8 @@ xmlFreeNode(xmlNodePtr cur) {
* @cur: the node
*
* Unlink a node from it's current context, the node is not freed
- * If one need to free the node, use xmlNodeFree() routine after the
- * unlink.
+ * If one need to free the node, use xmlFreeNode() routine after the
+ * unlink to discard it.
*/
void
xmlUnlinkNode(xmlNodePtr cur) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]