From e6996ea29a496eba1e7143eb14aeef4a8f5ab4cb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 5 Mar 2026 12:11:25 +0000 Subject: [PATCH] Add model validation for constructor summary models --- .../code/csharp/dataflow/internal/ExternalFlow.qll | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll index edfaae018e9..2f797ac5da0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -239,12 +239,23 @@ module ModelValidation { ) } + string getIncorrectConstructorSummaryOutput() { + exists(string namespace, string type, string name, string output | + summaryModel(namespace, type, _, name, _, _, _, output, _, _, _) and + type = name and + output.matches("ReturnValue%") and + result = + "Constructor model for " + namespace + "." + type + + " should use `Argument[this]` in the output, not `ReturnValue`." + ) + } + /** Holds if some row in a MaD flow model appears to contain typos. */ query predicate invalidModelRow(string msg) { msg = [ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(), - KindVal::getInvalidModelKind() + getIncorrectConstructorSummaryOutput(), KindVal::getInvalidModelKind() ] } }