On 11.10.2016 04:15, Sławek Kapłoński wrote:
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/util/virxml.c | 18 ++++++++++++++++++
src/util/virxml.h | 4 ++++
2 files changed, 22 insertions(+)
diff --git a/src/util/virxml.c b/src/util/virxml.c
index 03bd784..450487e 100644
--- a/src/util/virxml.c
+++ b/src/util/virxml.c
@@ -890,6 +890,24 @@ virXMLChildElementCount(xmlNodePtr node)
return ret;
}
+/**
+ * virXMLCheckString: checks if string contains at least one of
+ * forbidden characters
+ *
+ * Returns: 0 if string don't contains any of given characters, -1 otherwise
+ */
+int virXMLCheckString(const char *nodeName, char *str,
+ const char *forbiddenChars)
+{
+ char *c;
+ c = strpbrk(str, forbiddenChars);
+ if (c) {
+ virReportError(VIR_ERR_XML_DETAIL,
+ _("invalid char in %s: %c"), nodeName, *c);
+ return -1;
+ }
+ return 0;
+}
/**
* virXMLNodeToString: convert an XML node ptr to an XML string
diff --git a/src/util/virxml.h b/src/util/virxml.h
index 7a0a1da..676bf5e 100644
--- a/src/util/virxml.h
+++ b/src/util/virxml.h
@@ -75,6 +75,10 @@ char * virXMLPropString(xmlNodePtr node,
const char *name);
long virXMLChildElementCount(xmlNodePtr node);
+int virXMLCheckString(const char *nodeName,
+ char *str,
+ const char *forbiddenChars);
+
/* Internal function; prefer the macros below. */
xmlDocPtr virXMLParseHelper(int domcode,
const char *filename,
Looking good, however you forgot to add the symbol to
src/libvirt_private.syms. Without it, other parts of the code might not
be able to use this function if linker decides to optimize the symbol out.
Michal