Skip to content

Commit 9f9a962

Browse files
committed
python: wrap autogenerated ExceptGroupStmt_
also widen type of `Try::getHandler` to `Stmt`. `ExceptStmt` is now too narrow, as a handler can also be of type `ExceptGroupStmt`.
1 parent 24d22cc commit 9f9a962

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

python/ql/lib/semmle/python/Stmts.qll

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,29 @@ class Exec extends Exec_ {
143143
override Stmt getASubStatement() { none() }
144144
}
145145

146+
/** An except group statement (part of a `try` statement), such as `except* IOError as err:` */
147+
class ExceptGroupStmt extends ExceptGroupStmt_ {
148+
/* syntax: except Expr [ as Expr ]: */
149+
/** Gets the immediately enclosing try statement */
150+
Try getTry() { result.getAHandler() = this }
151+
152+
override Expr getASubExpression() {
153+
result = this.getName()
154+
or
155+
result = this.getType()
156+
}
157+
158+
override Stmt getASubStatement() { result = this.getAStmt() }
159+
160+
override Stmt getLastStatement() { result = this.getBody().getLastItem().getLastStatement() }
161+
162+
override Expr getType() {
163+
result = super.getType() and not result instanceof Tuple
164+
or
165+
result = super.getType().(Tuple).getAnElt()
166+
}
167+
}
168+
146169
/** An except statement (part of a `try` statement), such as `except IOError as err:` */
147170
class ExceptStmt extends ExceptStmt_ {
148171
/* syntax: except Expr [ as Expr ]: */
@@ -364,10 +387,10 @@ class Try extends Try_ {
364387
result = this.getAnOrelse()
365388
}
366389

367-
override ExceptStmt getHandler(int i) { result = Try_.super.getHandler(i) }
390+
override Stmt getHandler(int i) { result = Try_.super.getHandler(i) }
368391

369392
/** Gets an exception handler of this try statement. */
370-
override ExceptStmt getAHandler() { result = Try_.super.getAHandler() }
393+
override Stmt getAHandler() { result = Try_.super.getAHandler() }
371394

372395
override Stmt getLastStatement() {
373396
result = this.getFinalbody().getLastItem().getLastStatement()

0 commit comments

Comments
 (0)