summaryrefslogtreecommitdiffstats
path: root/qt/src/qdbusxmlparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/src/qdbusxmlparser.cpp')
-rw-r--r--qt/src/qdbusxmlparser.cpp85
1 files changed, 63 insertions, 22 deletions
diff --git a/qt/src/qdbusxmlparser.cpp b/qt/src/qdbusxmlparser.cpp
index 0370cb23..359967bf 100644
--- a/qt/src/qdbusxmlparser.cpp
+++ b/qt/src/qdbusxmlparser.cpp
@@ -47,8 +47,11 @@ parseAnnotations(const QDomElement& elem)
QString name = ann.attribute(QLatin1String("name")),
value = ann.attribute(QLatin1String("value"));
- if (name.isEmpty())
+ if (!QDBusUtil::isValidInterfaceName(name)) {
+ qWarning("Invalid D-BUS annotation '%s' found while parsing introspection",
+ qPrintable(name));
continue;
+ }
retval.insert(name, value);
}
@@ -74,8 +77,11 @@ parseArgs(const QDomElement& elem, const QLatin1String& direction, bool acceptEm
if (arg.hasAttribute(QLatin1String("name")))
argData.name = arg.attribute(QLatin1String("name")); // can be empty
argData.type = arg.attribute(QLatin1String("type"));
- if (!QDBusUtil::isValidSingleSignature(argData.type))
+ if (!QDBusUtil::isValidSingleSignature(argData.type)) {
+ qWarning("Invalid D-BUS type signature '%s' found while parsing introspection",
+ qPrintable(argData.type));
continue;
+ }
retval << argData;
}
@@ -106,13 +112,18 @@ QDBusXmlParser::interfaces() const
if (m_node.isNull())
return retval;
- QDomNodeList interfaces = m_node.elementsByTagName(QLatin1String("interface"));
- for (int i = 0; i < interfaces.count(); ++i)
+ QDomNodeList interfaceList = m_node.elementsByTagName(QLatin1String("interface"));
+ for (int i = 0; i < interfaceList.count(); ++i)
{
- QDomElement iface = interfaces.item(i).toElement();
+ QDomElement iface = interfaceList.item(i).toElement();
QString ifaceName = iface.attribute(QLatin1String("name"));
- if (iface.isNull() || ifaceName.isEmpty())
+ if (iface.isNull())
continue; // for whatever reason
+ if (!QDBusUtil::isValidInterfaceName(ifaceName)) {
+ qWarning("Invalid D-BUS interface name '%s' found while parsing introspection",
+ qPrintable(ifaceName));
+ continue;
+ }
QDBusIntrospection::Interface *ifaceData = new QDBusIntrospection::Interface;
ifaceData->name = ifaceName;
@@ -131,8 +142,13 @@ QDBusXmlParser::interfaces() const
{
QDomElement method = list.item(j).toElement();
QString methodName = method.attribute(QLatin1String("name"));
- if (method.isNull() || methodName.isEmpty())
+ if (method.isNull())
continue;
+ if (!QDBusUtil::isValidMemberName(methodName)) {
+ qWarning("Invalid D-BUS member name '%s' found in interface '%s' while parsing introspection",
+ qPrintable(methodName), qPrintable(ifaceName));
+ continue;
+ }
QDBusIntrospection::Method methodData;
methodData.name = methodName;
@@ -152,8 +168,13 @@ QDBusXmlParser::interfaces() const
{
QDomElement signal = list.item(j).toElement();
QString signalName = signal.attribute(QLatin1String("name"));
- if (signal.isNull() || signalName.isEmpty())
+ if (signal.isNull())
+ continue;
+ if (!QDBusUtil::isValidMemberName(signalName)) {
+ qWarning("Invalid D-BUS member name '%s' found in interface '%s' while parsing introspection",
+ qPrintable(signalName), qPrintable(ifaceName));
continue;
+ }
QDBusIntrospection::Signal signalData;
signalData.name = signalName;
@@ -172,8 +193,13 @@ QDBusXmlParser::interfaces() const
{
QDomElement property = list.item(j).toElement();
QString propertyName = property.attribute(QLatin1String("name"));
- if (property.isNull() || propertyName.isEmpty())
+ if (property.isNull())
continue;
+ if (!QDBusUtil::isValidMemberName(propertyName)) {
+ qWarning("Invalid D-BUS member name '%s' found in interface '%s' while parsing introspection",
+ qPrintable(propertyName), qPrintable(ifaceName));
+ continue;
+ }
QDBusIntrospection::Property propertyData;
@@ -182,22 +208,27 @@ QDBusXmlParser::interfaces() const
propertyData.type = property.attribute(QLatin1String("type"));
propertyData.annotations = parseAnnotations(property);
- if (!QDBusUtil::isValidSingleSignature(propertyData.type))
+ if (!QDBusUtil::isValidSingleSignature(propertyData.type)) {
// cannot be!
+ qWarning("Invalid D-BUS type signature '%s' found in property '%s.%s' while parsing introspection",
+ qPrintable(propertyData.type), qPrintable(ifaceName),
+ qPrintable(propertyName));
continue;
+ }
QString access = property.attribute(QLatin1String("access"));
- if (access.isEmpty())
- // can't be empty either!
- continue;
- else if (access == QLatin1String("read"))
+ if (access == QLatin1String("read"))
propertyData.access = QDBusIntrospection::Property::Read;
else if (access == QLatin1String("write"))
propertyData.access = QDBusIntrospection::Property::Write;
else if (access == QLatin1String("readwrite"))
propertyData.access = QDBusIntrospection::Property::ReadWrite;
- else
+ else {
+ qWarning("Invalid D-BUS property access '%s' found in property '%s.%s' while parsing introspection",
+ qPrintable(access), qPrintable(ifaceName),
+ qPrintable(propertyName));
continue; // invalid one!
+ }
// add it
ifaceData->properties.insert(propertyName, propertyData);
@@ -231,18 +262,28 @@ QDBusXmlParser::object() const
for (int i = 0; i < objects.count(); ++i) {
QDomElement obj = objects.item(i).toElement();
QString objName = obj.attribute(QLatin1String("name"));
- if (obj.isNull() || objName.isEmpty())
+ if (obj.isNull())
continue; // for whatever reason
+ if (!QDBusUtil::isValidObjectPath(m_path + QLatin1Char('/') + objName)) {
+ qWarning("Invalid D-BUS object path '%s/%s' found while parsing introspection",
+ qPrintable(m_path), qPrintable(objName));
+ continue;
+ }
objData->childObjects.append(objName);
}
- QDomNodeList interfaces = m_node.elementsByTagName(QLatin1String("interface"));
- for (int i = 0; i < interfaces.count(); ++i) {
- QDomElement iface = interfaces.item(i).toElement();
+ QDomNodeList interfaceList = m_node.elementsByTagName(QLatin1String("interface"));
+ for (int i = 0; i < interfaceList.count(); ++i) {
+ QDomElement iface = interfaceList.item(i).toElement();
QString ifaceName = iface.attribute(QLatin1String("name"));
- if (iface.isNull() || ifaceName.isEmpty())
+ if (iface.isNull())
+ continue;
+ if (!QDBusUtil::isValidInterfaceName(ifaceName)) {
+ qWarning("Invalid D-BUS interface name '%s' found while parsing introspection",
+ qPrintable(ifaceName));
continue;
+ }
objData->interfaces.append(ifaceName);
}
@@ -287,8 +328,8 @@ QDBusXmlParser::objectTree() const
if (!obj.firstChild().isNull()) {
// yes, introspect this object
QString xml;
- QTextStream ts(&xml);
- obj.save(ts,0);
+ QTextStream ts2(&xml);
+ obj.save(ts2,0);
// parse it
QString objAbsName = m_path;