// TODO it would be better if we were running some kind of nullability analysis here, where we marked // the results of expressions like Reference(..UNO_QUERY) as being nullable, and then looked for // places where we unconditionally dereference the results of that expression.
namespace
{ class UnoQuery : public loplugin::FilteringPlugin<UnoQuery>
{ public: explicit UnoQuery(loplugin::InstantiationData const& data)
: FilteringPlugin(data)
{
}
bool UnoQuery::VisitCXXMemberCallExpr(CXXMemberCallExpr const* memberCallExpr)
{ if (ignoreLocation(memberCallExpr)) returntrue;
auto isXInterface = [](Decl const* decl) -> bool { returnbool(loplugin::DeclCheck(decl)
.Class("XInterface")
.Namespace("uno")
.Namespace("star")
.Namespace("sun")
.Namespace("com")
.GlobalNamespace());
}; if (!loplugin::isDerivedFrom(memberCallExpr->getRecordDecl(), isXInterface)) returntrue; auto operatorCallExpr = dyn_cast<CXXOperatorCallExpr>(
memberCallExpr->getImplicitObjectArgument()->IgnoreImplicit()); if (!operatorCallExpr) returntrue;
Expr const* expr = operatorCallExpr->getArg(0)->IgnoreImplicit(); // depending on the version of clang, the IgnoreImplicit may or may not look through these nodes if (auto matTemp = dyn_cast<MaterializeTemporaryExpr>(expr))
expr = matTemp->getSubExpr(); if (auto bindTemp = dyn_cast<CXXBindTemporaryExpr>(expr))
expr = bindTemp->getSubExpr();
auto temporaryExpr = dyn_cast<CXXTemporaryObjectExpr>(expr); if (!temporaryExpr) returntrue; if (temporaryExpr->getNumArgs() < 2) returntrue; auto declRefExpr = dyn_cast<DeclRefExpr>(temporaryExpr->getArg(1)->IgnoreImplicit()); if (!declRefExpr) returntrue; auto enumConstant = dyn_cast<EnumConstantDecl>(declRefExpr->getDecl()); if (!enumConstant) returntrue; if (enumConstant->getName() != "UNO_QUERY") returntrue;
report(DiagnosticsEngine::Warning, "calling UNO_QUERY followed by unconditional method call might result in SIGSEGV, " "rather use UNO_QUERY_THROW",
memberCallExpr->getExprLoc())
<< memberCallExpr->getSourceRange();
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.10Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.