From 7afe94e7e236ec465d838e7d60e961975c526ab2 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Wed, 13 May 2009 16:19:59 +0000 Subject: [PATCH] * src/buf.c: avoid an XML attribute escaping bug #499791 daniel --- ChangeLog | 4 ++++ src/buf.c | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 5f17b57131..ba639194af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed May 13 18:06:17 CEST 2009 Daniel Veillard + + * src/buf.c: avoid an XML attribute escaping bug #499791 + Wed May 13 12:34:06 BST 2009 Daniel P. Berrange * src/lxc_container.c: Replace sys/capability.h with diff --git a/src/buf.c b/src/buf.c index cdcdac9651..259175d8d9 100644 --- a/src/buf.c +++ b/src/buf.c @@ -266,7 +266,7 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st return; len = strlen(str); - if (VIR_ALLOC_N(escaped, 5 * len + 1) < 0) { + if (VIR_ALLOC_N(escaped, 6 * len + 1) < 0) { virBufferNoMemory(buf); return; } @@ -290,6 +290,20 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st *out++ = 'm'; *out++ = 'p'; *out++ = ';'; + } else if (*cur == '"') { + *out++ = '&'; + *out++ = 'q'; + *out++ = 'u'; + *out++ = 'o'; + *out++ = 't'; + *out++ = ';'; + } else if (*cur == '\'') { + *out++ = '&'; + *out++ = 'a'; + *out++ = 'p'; + *out++ = 'o'; + *out++ = 's'; + *out++ = ';'; } else if ((*cur >= 0x20) || (*cur == '\n') || (*cur == '\t') || (*cur == '\r')) { /*