Mark McLoughlin a6e23d
From 7f7a4403860f56d5a1ad65bfd16f5bf97a971d45 Mon Sep 17 00:00:00 2001
Mark McLoughlin a6e23d
From: Daniel Veillard <veillard@redhat.com>
Mark McLoughlin a6e23d
Date: Wed, 13 May 2009 16:19:59 +0000
Mark McLoughlin a6e23d
Subject: [PATCH 1/1] * src/buf.c: avoid an XML attribute escaping bug #499791
Mark McLoughlin a6e23d
 daniel
Mark McLoughlin a6e23d
Mark McLoughlin a6e23d
---
Mark McLoughlin a6e23d
 src/buf.c |   16 +++++++++++++++-
Mark McLoughlin a6e23d
 1 files changed, 15 insertions(+), 1 deletions(-)
Mark McLoughlin a6e23d
Mark McLoughlin a6e23d
diff --git a/src/buf.c b/src/buf.c
Mark McLoughlin a6e23d
index cdcdac9..259175d 100644
Mark McLoughlin a6e23d
--- a/src/buf.c
Mark McLoughlin a6e23d
+++ b/src/buf.c
Mark McLoughlin a6e23d
@@ -266,7 +266,7 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st
Mark McLoughlin a6e23d
         return;
Mark McLoughlin a6e23d
 
Mark McLoughlin a6e23d
     len = strlen(str);
Mark McLoughlin a6e23d
-    if (VIR_ALLOC_N(escaped, 5 * len + 1) < 0) {
Mark McLoughlin a6e23d
+    if (VIR_ALLOC_N(escaped, 6 * len + 1) < 0) {
Mark McLoughlin a6e23d
         virBufferNoMemory(buf);
Mark McLoughlin a6e23d
         return;
Mark McLoughlin a6e23d
     }
Mark McLoughlin a6e23d
@@ -290,6 +290,20 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st
Mark McLoughlin a6e23d
             *out++ = 'm';
Mark McLoughlin a6e23d
             *out++ = 'p';
Mark McLoughlin a6e23d
             *out++ = ';';
Mark McLoughlin a6e23d
+        } else if (*cur == '"') {
Mark McLoughlin a6e23d
+            *out++ = '&';
Mark McLoughlin a6e23d
+            *out++ = 'q';
Mark McLoughlin a6e23d
+            *out++ = 'u';
Mark McLoughlin a6e23d
+            *out++ = 'o';
Mark McLoughlin a6e23d
+            *out++ = 't';
Mark McLoughlin a6e23d
+            *out++ = ';';
Mark McLoughlin a6e23d
+        } else if (*cur == '\'') {
Mark McLoughlin a6e23d
+            *out++ = '&';
Mark McLoughlin a6e23d
+            *out++ = 'a';
Mark McLoughlin a6e23d
+            *out++ = 'p';
Mark McLoughlin a6e23d
+            *out++ = 'o';
Mark McLoughlin a6e23d
+            *out++ = 's';
Mark McLoughlin a6e23d
+            *out++ = ';';
Mark McLoughlin a6e23d
         } else if ((*cur >= 0x20) || (*cur == '\n') || (*cur == '\t') ||
Mark McLoughlin a6e23d
                    (*cur == '\r')) {
Mark McLoughlin a6e23d
             /*
Mark McLoughlin a6e23d
-- 
Mark McLoughlin a6e23d
1.6.0.6
Mark McLoughlin a6e23d