mirror of
https://github.com/github/codeql.git
synced 2026-06-23 21:57:01 +02:00
C#: Extract catch(Ex) type as TypeAccess instead of TypeMention
This commit is contained in:
committed by
Anders Schack-Mulligen
parent
f0576046b1
commit
b254aa7e0b
@@ -25,7 +25,7 @@ namespace Semmle.Extraction.CSharp.Entities.Statements
|
||||
{
|
||||
var type = Type.Create(Context, Context.GetType(Stmt.Declaration!.Type));
|
||||
trapFile.catch_type(this, type.TypeRef, true);
|
||||
TypeMention.Create(Context, Stmt.Declaration!.Type, this, type);
|
||||
Expression.Create(Context, Stmt.Declaration!.Type, this, 0);
|
||||
}
|
||||
else // A catch clause of the form 'catch { ... }'
|
||||
{
|
||||
|
||||
@@ -995,6 +995,23 @@ class SpecificCatchClause extends CatchClause {
|
||||
/** Gets the local variable declaration of this catch clause, if any. */
|
||||
LocalVariableDeclExpr getVariableDeclExpr() { result.getParent() = this }
|
||||
|
||||
/**
|
||||
* Gets the type access of this catch clause, if it has no variable declaration.
|
||||
*
|
||||
* For example, the type access in
|
||||
*
|
||||
* ```csharp
|
||||
* try { ... }
|
||||
* catch (IOException) { ... }
|
||||
* ```
|
||||
*
|
||||
* is `IOException`.
|
||||
*/
|
||||
TypeAccess getTypeAccess() {
|
||||
not exists(this.getVariableDeclExpr()) and
|
||||
result = this.getChild(0)
|
||||
}
|
||||
|
||||
override string toString() { result = "catch (...) {...}" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "SpecificCatchClause" }
|
||||
|
||||
@@ -90,6 +90,7 @@ module Ast implements AstSig<Location> {
|
||||
private AstNode getStmtChild0(Stmt s, int i) {
|
||||
not s instanceof FixedStmt and
|
||||
not s instanceof UsingBlockStmt and
|
||||
not skipControlFlow(result) and
|
||||
result = s.getChild(i)
|
||||
or
|
||||
s =
|
||||
|
||||
@@ -101,7 +101,8 @@ csharp6.cs:
|
||||
# 32| 0: [IntLiteral] 2
|
||||
# 32| 0: [IntLiteral] 1
|
||||
# 34| 1: [SpecificCatchClause] catch (...) {...}
|
||||
# 34| 0: [TypeMention] IndexOutOfRangeException
|
||||
# 34| 0: [TypeAccess] access to type IndexOutOfRangeException
|
||||
# 34| 0: [TypeMention] IndexOutOfRangeException
|
||||
# 35| 1: [BlockStmt] {...}
|
||||
# 34| 2: [EQExpr] ... == ...
|
||||
# 34| 0: [PropertyCall] access to property Value
|
||||
|
||||
Reference in New Issue
Block a user