/** * @name Generic catch clause * @description Catching all exceptions with a generic catch clause may be overly * broad, which can make errors harder to diagnose. * @kind problem * @problem.severity recommendation * @precision high * @id cs/catch-of-all-exceptions * @tags reliability * maintainability * external/cwe/cwe-396 */ import csharp import semmle.code.csharp.frameworks.System class GenericCatchClause extends CatchClause { GenericCatchClause() { this instanceof GeneralCatchClause or this = any(SpecificCatchClause scc | scc.getCaughtExceptionType() instanceof SystemExceptionClass and not scc.hasFilterClause() ) } } from GenericCatchClause gcc where forall(ThrowStmt throw | // ok to catch all exceptions if they may be rethrown gcc.getBlock().getAChildStmt+() = throw | exists(throw.getExpr()) ) select gcc, "Generic catch clause."