diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index db3d72bd27b..f27743fda47 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -260,6 +260,8 @@ module SummaryModelGeneratorInput implements SummaryModelGeneratorInputSig { ) } + int contentAccessPathLimitInternal() { result = 2 } + bindingset[d] private string getFullyQualifiedName(Declaration d) { exists(string qualifier, string name | diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index b86a4c54246..6978ca7e308 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -218,6 +218,8 @@ module SummaryModelGeneratorInput implements SummaryModelGeneratorInputSig { ) } + int contentAccessPathLimitInternal() { result = 2 } + predicate isField(DataFlow::ContentSet c) { c instanceof DataFlowUtil::FieldContent or c instanceof DataFlowUtil::SyntheticFieldContent diff --git a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll index 7f61315c125..8abe4563580 100644 --- a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll +++ b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll @@ -277,6 +277,16 @@ module MakeModelGeneratorFactory< */ predicate isAdditionalContentFlowStep(Lang::Node nodeFrom, Lang::Node nodeTo); + /** + * Gets the access path limit for content flow analysis. + */ + default int contentAccessPathLimit() { result = 2 } + + /** + * Gets the internal access path limit for content flow analysis. + */ + default int contentAccessPathLimitInternal() { result = Lang::accessPathLimit() } + /** * Holds if the content set `c` is field like. */ @@ -650,7 +660,10 @@ module MakeModelGeneratorFactory< exists(Type t | t = n.(NodeExtended).getType() and not isRelevantType(t)) } - int accessPathLimit() { result = 2 } + predicate accessPathLimit = SummaryModelGeneratorInput::contentAccessPathLimit/0; + + predicate accessPathLimitInternal = + SummaryModelGeneratorInput::contentAccessPathLimitInternal/0; predicate isRelevantContent(DataFlow::ContentSet s) { isRelevantContent0(s) }