Alex Nelson
2011-Sep-02 01:17 UTC
[Libguestfs] [PATCH 6/7] hivexml: Report attributes in values instead of text.
Reporting value data in attributes has two advantages:
* The output of hivexml breaks Python expat processing if binary data
makes it out. This was observed in Software hives.
* Not having child text makes room for child elements.
Signed-off-by: Alex Nelson <ajnelson at cs.ucsc.edu>
---
xml/hivexml.c | 25 ++++++++++++++++++++-----
1 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/xml/hivexml.c b/xml/hivexml.c
index f29c80c..4789dbc 100644
--- a/xml/hivexml.c
+++ b/xml/hivexml.c
@@ -199,6 +199,7 @@ node_start (hive_h *h, void *writer_v, hive_node_h node,
const char *name)
{
int64_t last_modified;
char *timebuf;
+ int ret = 0;
xmlTextWriterPtr writer = (xmlTextWriterPtr) writer_v;
XML_CHECK (xmlTextWriterStartElement, (writer, BAD_CAST "node"));
@@ -278,7 +279,9 @@ value_string (hive_h *h, void *writer_v, hive_node_h node,
hive_value_h value,
}
start_value (writer, key, type, NULL);
- XML_CHECK (xmlTextWriterWriteString, (writer, BAD_CAST str));
+ XML_CHECK (xmlTextWriterStartAttribute, (writer, BAD_CAST
"value"));
+ XML_CHECK (xmlTextWriterWriteString, (writer, str));
+ XML_CHECK (xmlTextWriterEndAttribute, (writer));
end_value (writer);
return 0;
}
@@ -332,7 +335,9 @@ value_string_invalid_utf16 (hive_h *h, void *writer_v,
hive_node_h node,
}
start_value (writer, key, type, "base64");
+ XML_CHECK (xmlTextWriterStartAttribute, (writer, BAD_CAST
"value"));
XML_CHECK (xmlTextWriterWriteBase64, (writer, str, 0, len));
+ XML_CHECK (xmlTextWriterEndAttribute, (writer));
end_value (writer);
return 0;
@@ -344,7 +349,7 @@ value_dword (hive_h *h, void *writer_v, hive_node_h node,
hive_value_h value,
{
xmlTextWriterPtr writer = (xmlTextWriterPtr) writer_v;
start_value (writer, key, "int32", NULL);
- XML_CHECK (xmlTextWriterWriteFormatString, (writer, "%" PRIi32,
v));
+ XML_CHECK (xmlTextWriterWriteFormatAttribute, (writer, BAD_CAST
"value", "%" PRIi32, v));
end_value (writer);
return 0;
}
@@ -355,7 +360,7 @@ value_qword (hive_h *h, void *writer_v, hive_node_h node,
hive_value_h value,
{
xmlTextWriterPtr writer = (xmlTextWriterPtr) writer_v;
start_value (writer, key, "int64", NULL);
- XML_CHECK (xmlTextWriterWriteFormatString, (writer, "%" PRIi64,
v));
+ XML_CHECK (xmlTextWriterWriteFormatAttribute, (writer, "value",
"%" PRIi64, v));
end_value (writer);
return 0;
}
@@ -366,7 +371,9 @@ value_binary (hive_h *h, void *writer_v, hive_node_h node,
hive_value_h value,
{
xmlTextWriterPtr writer = (xmlTextWriterPtr) writer_v;
start_value (writer, key, "binary", "base64");
+ XML_CHECK (xmlTextWriterStartAttribute, (writer, BAD_CAST
"value"));
XML_CHECK (xmlTextWriterWriteBase64, (writer, v, 0, len));
+ XML_CHECK (xmlTextWriterEndAttribute, (writer));
end_value (writer);
return 0;
}
@@ -377,7 +384,11 @@ value_none (hive_h *h, void *writer_v, hive_node_h node,
hive_value_h value,
{
xmlTextWriterPtr writer = (xmlTextWriterPtr) writer_v;
start_value (writer, key, "none", "base64");
- if (len > 0) XML_CHECK (xmlTextWriterWriteBase64, (writer, v, 0, len));
+ if (len > 0) {
+ XML_CHECK (xmlTextWriterStartAttribute, (writer, BAD_CAST
"value"));
+ XML_CHECK (xmlTextWriterWriteBase64, (writer, v, 0, len));
+ XML_CHECK (xmlTextWriterEndAttribute, (writer));
+ }
end_value (writer);
return 0;
}
@@ -410,7 +421,11 @@ value_other (hive_h *h, void *writer_v, hive_node_h node,
hive_value_h value,
}
start_value (writer, key, type, "base64");
- if (len > 0) XML_CHECK (xmlTextWriterWriteBase64, (writer, v, 0, len));
+ if (len > 0) {
+ XML_CHECK (xmlTextWriterStartAttribute, (writer, BAD_CAST
"value"));
+ XML_CHECK (xmlTextWriterWriteBase64, (writer, v, 0, len));
+ XML_CHECK (xmlTextWriterEndAttribute, (writer));
+ }
end_value (writer);
return 0;
--
1.7.6
Richard W.M. Jones
2011-Sep-06 14:01 UTC
[Libguestfs] [PATCH 6/7] hivexml: Report attributes in values instead of text.
On Thu, Sep 01, 2011 at 06:17:43PM -0700, Alex Nelson wrote:> Reporting value data in attributes has two advantages: > * The output of hivexml breaks Python expat processing if binary data > makes it out. This was observed in Software hives. > * Not having child text makes room for child elements.ACK, pushed 4 of the patches now. BTW please run 'make check' and test all the bindings. I had to fix the OCaml bindings, and a mistake in errno handling in hivex_value_key was revealed by 'make check'. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into Xen guests. http://et.redhat.com/~rjones/virt-p2v