Extend negative characteristics for exceptions to source models.

This commit is contained in:
Max Schaefer
2024-01-12 12:20:22 +00:00
parent 06ba5ea9f8
commit ea26e21454
2 changed files with 25 additions and 6 deletions

View File

@@ -436,13 +436,22 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Nei
} }
/** /**
* A negative characteristic that indicates that an endpoint is an argument to an exception, which is not a sink. * A negative characteristic that indicates that parameters of an exception method or constructor should not be considered sinks,
* and its return value should not be considered a source.
*/ */
private class ExceptionCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { private class ExceptionCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic {
ExceptionCharacteristic() { this = "exception" } ExceptionCharacteristic() { this = "exception" }
override predicate appliesToEndpoint(Endpoint e) { override predicate appliesToEndpoint(Endpoint e) {
e.(CallArgument).getCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable e.getCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable and
(
e.getExtensibleType() = "sinkModel" and
not ApplicationCandidatesImpl::isSink(e, _, _)
or
e.getExtensibleType() = "sourceModel" and
not ApplicationCandidatesImpl::isSource(e, _, _) and
e.getMaDOutput() = "ReturnValue"
)
} }
} }

View File

@@ -377,16 +377,26 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Nei
} }
/** /**
* A negative characteristic that indicates that an endpoint is an argument to an exception, which is not a sink. * A negative characteristic that indicates that parameters of an exception method or constructor should not be considered sinks,
* and its return value should not be considered a source.
*/ */
private class ExceptionCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { private class ExceptionCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic {
ExceptionCharacteristic() { this = "exception" } ExceptionCharacteristic() { this = "exception" }
override predicate appliesToEndpoint(Endpoint e) { override predicate appliesToEndpoint(Endpoint e) {
e.getEnclosingCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable e.getEnclosingCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable and
(
e.getExtensibleType() = "sinkModel" and
not FrameworkCandidatesImpl::isSink(e, _, _)
or
e.getExtensibleType() = "sourceModel" and
not FrameworkCandidatesImpl::isSource(e, _, _) and
e.getMaDOutput() = "ReturnValue"
)
} }
} }
/** /**
* A characteristic that limits candidates to parameters of methods that are recognized as `ModelApi`, iow., APIs that * A characteristic that limits candidates to parameters of methods that are recognized as `ModelApi`, iow., APIs that
* are considered worth modeling. * are considered worth modeling.