[libvirt] [PATCH] Strip control codes in virBufferEscapeString

Ján Tomko jtomko at redhat.com
Mon Mar 30 14:19:35 UTC 2015


On Mon, Mar 30, 2015 at 07:06:45AM -0600, Eric Blake wrote:
> On 03/30/2015 05:02 AM, Ján Tomko wrote:
> > These cannot be represented in XML.
> 
> Yes they can, via entities.  DV would know for sure, but I think that
>  is the entity for the C byte '\1'.
> 

Only in XML 1.1.

For XML 1.0: http://www.w3.org/TR/xml/#dt-charref
  Well-formedness constraint: Legal Character

  Characters referred to using character references MUST match the
  production for Char.

Which is: http://www.w3.org/TR/xml/#NT-Char

  [2]     Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] |
  [#xE000-#xFFFD] | [#x10000-#x10FFFF]    /* any Unicode character,
  excluding the surrogate blocks, FFFE, and FFFF. */

Both libvirt and virt-xml-validate choke on those entities
error: (domain_definition):2: xmlParseCharRef: invalid xmlChar value 1
  <name>f21&#x01;</name>

DV was the one who wrote the code to skip over control characters in
commit b36f453a581f27a4a43558978724a52df32045bb (v0.3.0~1)
  new function virBufferEscapeString() to format a string while
  escaping its content for XML, and apply it to a couple of
  obvious places, should fix bug #206653

It was the optimization in
commit 0af02cb2e8d8192958735880e135ab69beb437c5 (v0.8.6~57)
    buf: Simplify virBufferEscapeString
which broke this for strings that do have control codes,
but not escapable characters.

> > 
> > We have been stripping them, but only if the string had
> > characters that needed escaping: <>"'&
> > 
> > Extend the strcspn check to include control codes, and strip
> > them even if we don't do any escaping.
> 
> NACK.  Stripping control codes from a volume name represents the wrong
> name.  We need to escape the problematic bytes, rather than strip them.
> 
> > 
> > https://bugzilla.redhat.com/show_bug.cgi?id=1184131
> > https://bugzilla.redhat.com/show_bug.cgi?id=1066564
> > ---
> >  src/util/virbuffer.c | 14 +++++++++++---
> >  tests/virbuftest.c   | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 60 insertions(+), 3 deletions(-)
> 
> As there are real bugs that will be fixed once we use the correct
> entities, I'm looking forward to v2.

This fixes the real bug of libvirt generating unparsable XML, which breaks
creation of any VMs in virt-manager.

Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150330/ea3b8e0d/attachment-0001.sig>


More information about the libvir-list mailing list