From 7a2216460f8a67c305364d69d33847a3b845e708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awek=20Kap=C5=82o=C5=84ski?= Date: Wed, 19 Oct 2016 22:57:46 +0200 Subject: [PATCH] virxml: Add function to check if string contains some illegal chars This new function can be used to check if e.g. name of XML node don't contains forbidden chars like "/" or "\n". Signed-off-by: Michal Privoznik --- src/libvirt_private.syms | 1 + src/util/virxml.c | 27 +++++++++++++++++++++++++++ src/util/virxml.h | 4 ++++ 3 files changed, 32 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 55b6a2402b..bf503a58cc 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2676,6 +2676,7 @@ virUUIDParse; # util/virxml.h +virXMLCheckIllegalChars; virXMLChildElementCount; virXMLExtractNamespaceXML; virXMLNodeSanitizeNamespaces; diff --git a/src/util/virxml.c b/src/util/virxml.c index 03bd78437a..1438edc4dd 100644 --- a/src/util/virxml.c +++ b/src/util/virxml.c @@ -462,6 +462,33 @@ virXPathLongLong(const char *xpath, return ret; } + +/** + * virXMLCheckIllegalChars: + * @nodeName: Name of checked node + * @str: string to check + * @illegal: illegal chars to check + * + * If string contains any of illegal chars VIR_ERR_XML_DETAIL error will be + * reported. + * + * Returns: 0 if string don't contains any of given characters, -1 otherwise + */ +int +virXMLCheckIllegalChars(const char *nodeName, + const char *str, + const char *illegal) +{ + char *c; + if ((c = strpbrk(str, illegal))) { + virReportError(VIR_ERR_XML_DETAIL, + _("invalid char in %s: %c"), nodeName, *c); + return -1; + } + return 0; +} + + /** * virXMLPropString: * @node: XML dom node pointer diff --git a/src/util/virxml.h b/src/util/virxml.h index 7a0a1dad77..17fccd81f4 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -181,6 +181,10 @@ int virXMLInjectNamespace(xmlNodePtr node, void virXMLNodeSanitizeNamespaces(xmlNodePtr node); +int virXMLCheckIllegalChars(const char *nodeName, + const char *str, + const char *illegal); + struct _virXMLValidator { xmlRelaxNGParserCtxtPtr rngParser; xmlRelaxNGPtr rng;