[libvirt] [PATCH 1/2] util: Add function to check if string contains some chars

Sławek Kapłoński slawek at kaplonski.pl
Thu Oct 13 20:53:26 UTC 2016


This new function can be used to check if e.g. name of XML node
don't contains forbidden chars like "/" or new-line.
---
 src/conf/network_conf.c  | 2 +-
 src/libvirt_private.syms | 1 +
 src/util/virstring.c     | 9 +++++++++
 src/util/virstring.h     | 1 +
 4 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index aa39776..949d138 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -2117,7 +2117,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
         goto error;
     }
 
-    if (strchr(def->name, '/')) {
+    if (virStringHasChars(def->name, "/")) {
         virReportError(VIR_ERR_XML_ERROR,
                        _("name %s cannot contain '/'"), def->name);
         goto error;
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 55b6a24..6f41234 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2435,6 +2435,7 @@ virStringEncodeBase64;
 virStringFreeList;
 virStringFreeListCount;
 virStringGetFirstWithPrefix;
+virStringHasChars;
 virStringHasControlChars;
 virStringIsEmpty;
 virStringIsPrintable;
diff --git a/src/util/virstring.c b/src/util/virstring.c
index 4a70620..7799d87 100644
--- a/src/util/virstring.c
+++ b/src/util/virstring.c
@@ -975,6 +975,15 @@ virStringStripIPv6Brackets(char *str)
 }
 
 
+bool
+virStringHasChars(const char *str, const char *chars)
+{
+    if (strpbrk(str, chars))
+        return true;
+    return false;
+}
+
+
 static const char control_chars[] =
     "\x01\x02\x03\x04\x05\x06\x07"
     "\x08" /* \t \n */ "\x0B\x0C" /* \r */ "\x0E\x0F"
diff --git a/src/util/virstring.h b/src/util/virstring.h
index 8854d5f..7f2c96d 100644
--- a/src/util/virstring.h
+++ b/src/util/virstring.h
@@ -272,6 +272,7 @@ char *virStringReplace(const char *haystack,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
 void virStringStripIPv6Brackets(char *str);
+bool virStringHasChars(const char *str, const char *chars);
 bool virStringHasControlChars(const char *str);
 void virStringStripControlChars(char *str);
 
-- 
2.10.0




More information about the libvir-list mailing list