@@ -1661,138 +1661,28 @@ private module Stdlib {
1661
1661
// ---------------------------------------------------------------------------
1662
1662
// traceback
1663
1663
// ---------------------------------------------------------------------------
1664
- /** Gets a reference to the `traceback` module. */
1665
- API:: Node traceback ( ) { result = API:: moduleImport ( "traceback" ) }
1666
-
1667
- /**
1668
- * Gets a reference to the attribute `attr_name` of the `traceback` module.
1669
- */
1670
- private API:: Node traceback_attr ( string attr_name ) { result = traceback ( ) .getMember ( attr_name ) }
1671
-
1672
1664
/** Provides models for the `traceback` module. */
1673
1665
module traceback {
1674
- private class TracebackFunctionCall extends ErrorInfoSource:: Range , DataFlow:: CfgNode {
1675
- override CallNode node ;
1676
-
1666
+ private class TracebackFunctionCall extends ErrorInfoSource:: Range , DataFlow:: CallCfgNode {
1677
1667
TracebackFunctionCall ( ) {
1678
- node .getFunction ( ) =
1679
- traceback_attr ( [
1680
- "extract_tb" , "extract_stack" , "format_list" , "format_exception_only" ,
1681
- "format_exception" , "format_exc" , "format_tb" , "format_stack"
1682
- ] ) .getAUse ( ) .asCfgNode ( )
1668
+ this =
1669
+ API:: moduleImport ( "traceback" )
1670
+ .getMember ( [
1671
+ "extract_tb" , "extract_stack" , "format_list" , "format_exception_only" ,
1672
+ "format_exception" , "format_exc" , "format_tb" , "format_stack"
1673
+ ] )
1674
+ .getACall ( )
1683
1675
}
1684
1676
}
1685
1677
}
1686
1678
}
1687
1679
1688
- /**
1689
- * Provides models for the `Stdlib.BaseException` class
1690
- *
1691
- * See https://docs.python.org/3/library/exceptions.html#BaseException.
1692
- */
1693
- module BaseException {
1694
- /** Gets a reference to the `Stdlib.BaseException` class. */
1695
- private DataFlow:: Node classRef ( DataFlow:: TypeTracker t ) {
1696
- t .start ( ) and
1697
- result .asExpr ( ) .( Name ) .getId ( ) = "BaseException"
1698
- or
1699
- exists ( DataFlow:: TypeTracker t2 | result = classRef ( t2 ) .track ( t2 , t ) )
1700
- }
1701
-
1702
- /** Gets a reference to the `Stdlib.BaseException` class. */
1703
- DataFlow:: Node classRef ( ) { result = classRef ( DataFlow:: TypeTracker:: end ( ) ) }
1704
-
1705
- /**
1706
- * A source of an instance of `Stdlib.BaseException`.
1707
- *
1708
- * This can include instantiation of the class, return value from function
1709
- * calls, or a special parameter that will be set when functions are call by external
1710
- * library.
1711
- *
1712
- * Use `BaseException::instance()` predicate to get references to instances of `Stdlib.BaseException`.
1713
- */
1714
- abstract class InstanceSource extends DataFlow:: Node { }
1715
-
1716
- /** A direct instantiation of `Stdlib.BaseException`. */
1717
- private class ClassInstantiation extends InstanceSource , DataFlow:: CfgNode {
1718
- override CallNode node ;
1719
-
1720
- ClassInstantiation ( ) { node .getFunction ( ) = classRef ( ) .asCfgNode ( ) }
1721
- }
1722
-
1723
- /** Gets a reference to an instance of `Stdlib.BaseException`. */
1724
- private DataFlow:: Node instance ( DataFlow:: TypeTracker t ) {
1725
- t .start ( ) and
1726
- result instanceof InstanceSource
1727
- or
1728
- exists ( DataFlow:: TypeTracker t2 | result = instance ( t2 ) .track ( t2 , t ) )
1729
- }
1730
-
1731
- /** Gets a reference to an instance of `Stdlib.BaseException`. */
1732
- DataFlow:: Node instance ( ) { result = instance ( DataFlow:: TypeTracker:: end ( ) ) }
1733
- }
1734
-
1735
- /**
1736
- * Provides models for the `BaseException` class and subclasses.
1737
- */
1738
- private module Exception {
1739
- /** Gets a reference to the `BaseHTTPRequestHandler` class or any subclass. */
1740
- private DataFlow:: Node subclassRef ( DataFlow:: TypeTracker t ) {
1741
- t .start ( ) and
1742
- result = BaseException:: classRef ( )
1743
- or
1744
- // subclasses in project code
1745
- result .asExpr ( ) .( ClassExpr ) .getABase ( ) = subclassRef ( t .continue ( ) ) .asExpr ( )
1746
- or
1747
- exists ( DataFlow:: TypeTracker t2 | result = subclassRef ( t2 ) .track ( t2 , t ) )
1748
- }
1749
-
1750
- /** Gets a reference to the `BaseException` class or any subclass. */
1751
- DataFlow:: Node subclassRef ( ) { result = subclassRef ( DataFlow:: TypeTracker:: end ( ) ) }
1752
-
1753
- /** A HTTPRequestHandler class definition (most likely in project code). */
1754
- class ExceptionClassDef extends Class {
1755
- ExceptionClassDef ( ) { this .getParent ( ) = subclassRef ( ) .asExpr ( ) }
1756
- }
1757
-
1758
- /**
1759
- * A source of instances of the `BaseException` class or any subclass, extend this class to model new instances.
1760
- *
1761
- * This can include instantiations of the class, return values from function
1762
- * calls, or a special parameter that will be set when functions are called by an external
1763
- * library.
1764
- *
1765
- * Use the predicate `classname::instance()` to get references to instances of the `Exception` class or any subclass.
1766
- */
1767
- abstract class InstanceSource extends DataFlow:: Node { }
1768
-
1769
- /** The `self` parameter in a method on the `BaseException` class or any subclass. */
1770
- private class SelfParam extends InstanceSource , DataFlow:: ParameterNode {
1771
- SelfParam ( ) { exists ( ExceptionClassDef cls | cls .getAMethod ( ) .getArg ( 0 ) = this .getParameter ( ) ) }
1772
- }
1773
-
1774
- /** Gets a reference to an instance of the `BaseException` class or any subclass. */
1775
- private DataFlow:: Node instance ( DataFlow:: TypeTracker t ) {
1776
- t .start ( ) and
1777
- result instanceof InstanceSource
1778
- or
1779
- exists ( DataFlow:: TypeTracker t2 | result = instance ( t2 ) .track ( t2 , t ) )
1780
- }
1781
-
1782
- /** Gets a reference to an instance of the `BaseException` class or any subclass. */
1783
- DataFlow:: Node instance ( ) { result = instance ( DataFlow:: TypeTracker:: end ( ) ) }
1784
- }
1785
-
1786
- private class Exception extends ExceptionSource:: Range {
1787
- Exception ( ) {
1788
- this = Exception:: instance ( )
1789
- or
1790
- this .asExpr ( ) = any ( ExceptStmt s ) .getName ( )
1791
- }
1680
+ private class CaughtException extends ExceptionSource:: Range {
1681
+ CaughtException ( ) { this .asExpr ( ) = any ( ExceptStmt s ) .getName ( ) }
1792
1682
}
1793
1683
1794
1684
/** A call to `sys.exc_info` */
1795
- private class SysExcInfoCall extends ErrorInfoSource:: Range , DataFlow:: CfgNode {
1685
+ private class SysExcInfoCall extends ErrorInfoSource:: Range , DataFlow:: CallCfgNode {
1796
1686
SysExcInfoCall ( ) { this = API:: moduleImport ( "sys" ) .getMember ( "exc_info" ) .getACall ( ) }
1797
1687
}
1798
1688
0 commit comments