On Wed, Mar 28, 2012 at 06:32:57PM +0200, Christophe Fergeau wrote: > libxml2 will properly escape < > and " in XML attribute content. If > we use xmlEncodeEntitiesReentrant for attributes, this causes issues > with UTF8 filenames (gvir_config_domain_disk_set_source for example): > the filename UTF8 characters will be substituted with entities > (é -> é), but when it uses this filename, libvirt will use it as > is and will fail to find the file. > I've tested that with this change gnome-boxes can open ISOs in directories > with 'é' in their names, and in directories with '&foo;xx<' in their names. > --- > libvirt-gconfig/libvirt-gconfig-object.c | 17 ++++------------- > 1 file changed, 4 insertions(+), 13 deletions(-) > > diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c > index 9a142c9..ee3584a 100644 > --- a/libvirt-gconfig/libvirt-gconfig-object.c > +++ b/libvirt-gconfig/libvirt-gconfig-object.c > @@ -711,7 +711,6 @@ gvir_config_object_set_attribute(GVirConfigObject *object, ...) > while (TRUE) { > const char *name; > const char *value; > - xmlChar *encoded_value; > > name = va_arg(args, const char *); > if (name == NULL) { > @@ -723,9 +722,7 @@ gvir_config_object_set_attribute(GVirConfigObject *object, ...) > g_warn_if_reached(); > break; > } > - encoded_value = xmlEncodeEntitiesReentrant(doc, (xmlChar*)value); > - xmlNewProp(object->priv->node, (xmlChar *)name, encoded_value); > - xmlFree(encoded_value); > + xmlNewProp(object->priv->node, (xmlChar *)name, (xmlChar *)value); > } > va_end(args); > } > @@ -780,17 +777,11 @@ gvir_config_object_set_attribute_with_type(GVirConfigObject *object, ...) > str = g_strdup_printf("%d", val); > break; > } > - case G_TYPE_STRING: { > - xmlDocPtr doc; > - xmlChar *enc_str; > - > + case G_TYPE_STRING: > str = va_arg(args, char *); > - g_object_get(G_OBJECT(object->priv->doc), "doc", &doc, NULL); > - enc_str = xmlEncodeEntitiesReentrant(doc, (xmlChar*)str); > - str = g_strdup((char *)enc_str); > - xmlFree(enc_str); > + xmlNewProp(object->priv->node, (xmlChar *)name, (xmlChar *)str); > + str = NULL; > break; > - } > case G_TYPE_BOOLEAN: { > gboolean val; > val = va_arg(args, gboolean); ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list