From c5e402d304460f0e84549b33aceed4248390752b Mon Sep 17 00:00:00 2001 From: "yongzhi.pan" Date: Tue, 8 Aug 2023 16:14:42 +0800 Subject: [PATCH 01/14] Add python shell lib. --- python/ql/lib/semmle/python/Frameworks.qll | 1 + .../ql/lib/semmle/python/frameworks/Shell.qll | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 python/ql/lib/semmle/python/frameworks/Shell.qll diff --git a/python/ql/lib/semmle/python/Frameworks.qll b/python/ql/lib/semmle/python/Frameworks.qll index c0d3c5e0b237..0062fe3cb0b8 100644 --- a/python/ql/lib/semmle/python/Frameworks.qll +++ b/python/ql/lib/semmle/python/Frameworks.qll @@ -62,3 +62,4 @@ private import semmle.python.frameworks.Urllib3 private import semmle.python.frameworks.Xmltodict private import semmle.python.frameworks.Yaml private import semmle.python.frameworks.Yarl +private import semmle.python.frameworks.Shell \ No newline at end of file diff --git a/python/ql/lib/semmle/python/frameworks/Shell.qll b/python/ql/lib/semmle/python/frameworks/Shell.qll new file mode 100644 index 000000000000..877ae00b9304 --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/Shell.qll @@ -0,0 +1,20 @@ +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.Concepts +private import semmle.python.ApiGraphs + +private module Shell { + API::Node invoke() { + result = API::moduleImport("shell").getMember("shell") + } + + private class ShellRunCommandCall extends SystemCommandExecution::Range, DataFlow::CallCfgNode { + ShellRunCommandCall() { + this = invoke().getACall() + } + + override DataFlow::Node getCommand() { + result in [this.getArg(0), this.getArgByName("command")] + } + } +} \ No newline at end of file From 32656867ab8d01e43f9a014695a5bee895ddcd26 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:26:16 +0800 Subject: [PATCH 02/14] Fix sphinx.add_lexer. In sphinx version 4.0, support for lexer instances as an argument was removed: https://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.add_lexer --- docs/codeql/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/conf.py b/docs/codeql/conf.py index da8b91140252..f813c502577f 100644 --- a/docs/codeql/conf.py +++ b/docs/codeql/conf.py @@ -52,7 +52,7 @@ def setup(sphinx): sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from qllexer import QLLexer - sphinx.add_lexer("ql", QLLexer()) + sphinx.add_lexer("ql", QLLexer) # The version of CodeQL for the current release you're documenting, acts as replacement for # |version| and |release|. Not currently used. From 94f8bedbba600fb0ad5767ad13cc183f0e87e104 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:29:13 +0800 Subject: [PATCH 03/14] Fix code format. --- .../codeql-language-guides/using-api-graphs-in-python.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst b/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst index 02adfdaf9833..7a20ca1a52cd 100644 --- a/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst +++ b/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst @@ -97,8 +97,8 @@ local flow. To get just the *calls* to ``re.compile``, you can use ``asSource`` ``getReturn`` followed by ``asSource``, simply use ``getACall``. This will result in an ``API::CallNode``, which deserves a small description of its own. -``API::CallNode``s are not ``API::Node``s. Instead they are ``DataFlow::Node``s with some convenience -predicates that allows you to recover ``API::Node``s for the return value as well as for arguments +``API::CallNode``\ s are not ``API::Node``\ s. Instead they are ``DataFlow::Node``\ s with some convenience +predicates that allows you to recover ``API::Node``\ s for the return value as well as for arguments to the call. This enables you to constrain the call in various ways using the API graph. The following snippet finds all calls to ``re.compile`` where the ``pattern`` argument comes from parsing a command line argument using the ``argparse`` library. From de400cfe57572a7440983faa02fa28028b734db6 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:29:13 +0800 Subject: [PATCH 04/14] Fix rst code format. --- .../codeql-language-guides/using-api-graphs-in-python.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst b/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst index 02adfdaf9833..7a20ca1a52cd 100644 --- a/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst +++ b/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst @@ -97,8 +97,8 @@ local flow. To get just the *calls* to ``re.compile``, you can use ``asSource`` ``getReturn`` followed by ``asSource``, simply use ``getACall``. This will result in an ``API::CallNode``, which deserves a small description of its own. -``API::CallNode``s are not ``API::Node``s. Instead they are ``DataFlow::Node``s with some convenience -predicates that allows you to recover ``API::Node``s for the return value as well as for arguments +``API::CallNode``\ s are not ``API::Node``\ s. Instead they are ``DataFlow::Node``\ s with some convenience +predicates that allows you to recover ``API::Node``\ s for the return value as well as for arguments to the call. This enables you to constrain the call in various ways using the API graph. The following snippet finds all calls to ``re.compile`` where the ``pattern`` argument comes from parsing a command line argument using the ``argparse`` library. From f8365e041c10bc35f09fe0ea7b0bf848edacd7a9 Mon Sep 17 00:00:00 2001 From: "yongzhi.pan" Date: Tue, 8 Aug 2023 16:25:42 +0800 Subject: [PATCH 05/14] Add new query suite. --- .../codeql-suites/java-security-oxpecker.qls | 4 +++ misc/suite-helpers/security-oxpecker.yml | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 java/ql/src/codeql-suites/java-security-oxpecker.qls create mode 100644 misc/suite-helpers/security-oxpecker.yml diff --git a/java/ql/src/codeql-suites/java-security-oxpecker.qls b/java/ql/src/codeql-suites/java-security-oxpecker.qls new file mode 100644 index 000000000000..b6c551c90f53 --- /dev/null +++ b/java/ql/src/codeql-suites/java-security-oxpecker.qls @@ -0,0 +1,4 @@ +- description: Extended and experimental security queries for Java and Kotlin +- queries: . +- apply: security-oxpecker.yml + from: ../suite-helpers \ No newline at end of file diff --git a/misc/suite-helpers/security-oxpecker.yml b/misc/suite-helpers/security-oxpecker.yml new file mode 100644 index 000000000000..a8ce54f26072 --- /dev/null +++ b/misc/suite-helpers/security-oxpecker.yml @@ -0,0 +1,31 @@ +- description: Selectors for selecting all security queries for a language +- include: + kind: + - problem + - path-problem + tags contain: + - security +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + query path: + - /^experimental\/.*/ +- include: + tags contain all: + - security + - experimental +- exclude: + deprecated: // +- exclude: + query path: + - Metrics/Summaries/FrameworkCoverage.ql + - /Diagnostics/Internal/.*/ +- exclude: + tags contain: + - model-generator From ce0a30c5b01e9997db91b1ba22b6b5d6d9aa3059 Mon Sep 17 00:00:00 2001 From: "yongzhi.pan" Date: Tue, 8 Aug 2023 16:32:59 +0800 Subject: [PATCH 06/14] Fix query suite. --- java/ql/src/codeql-suites/java-security-oxpecker.qls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/codeql-suites/java-security-oxpecker.qls b/java/ql/src/codeql-suites/java-security-oxpecker.qls index b6c551c90f53..5f94a560c5d1 100644 --- a/java/ql/src/codeql-suites/java-security-oxpecker.qls +++ b/java/ql/src/codeql-suites/java-security-oxpecker.qls @@ -1,4 +1,4 @@ - description: Extended and experimental security queries for Java and Kotlin - queries: . - apply: security-oxpecker.yml - from: ../suite-helpers \ No newline at end of file + from: codeql/suite-helpers \ No newline at end of file From 643c9429b293780d2004c9abcf7333c3d017c5f5 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Wed, 9 Aug 2023 13:39:55 +0800 Subject: [PATCH 07/14] Add query for short-circuit condition bypass. Author: qinpu --- .../src/oxpecker/short-circuit-condition.ql | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 java/ql/src/oxpecker/short-circuit-condition.ql diff --git a/java/ql/src/oxpecker/short-circuit-condition.ql b/java/ql/src/oxpecker/short-circuit-condition.ql new file mode 100644 index 000000000000..aa3168f7f25c --- /dev/null +++ b/java/ql/src/oxpecker/short-circuit-condition.ql @@ -0,0 +1,64 @@ +/** + * @name short-circuit-condition-bypass + * @description short-circuit condition bypass + * @kind problem + * @problem.severity recommendation + * @precision medium + * @id java/short-circuit-bypass + * @tags security + */ +class ValidationFunction extends Method { + ValidationFunction() { + exists(string n | n = this.getName() | n.matches("verify%") or n.matches("check%")) + } + + predicate isSecureByDefault() { this.getBody().getLastStmt() instanceof PosReturn } +} + +string toString(Expr st) { + if exists(st.getAChildExpr()) + then result = st.toString() + "(" + toString(st.getAChildExpr()) + ")" + else result = "(" + st.toString() + ")" +} + +predicate isPosResult(Expr expr) { + exists(string ret | ret = toString(expr) | + ret.matches("%(true)%") or ret.matches("%(ok)%") or ret.matches("%(suc%") + ) +} + +predicate isNegResult(Expr expr) { + exists(string ret | ret = toString(expr) | + ret.matches("%(false)%") or ret.matches("%(err%") or ret.matches("%(fail%") + ) +} + +Stmt nearestNonIfStmt(Stmt stmt) { + if stmt.getParent() instanceof IfStmt + then result = stmt + else result = nearestNonIfStmt(stmt.getParent()) +} + +class PosReturn extends ReturnStmt { + PosReturn() { isPosResult(this.getResult()) } +} + +class NegReturn extends ReturnStmt { + NegReturn() { isNegResult(this.getResult()) } +} + +class IfAnd extends IfStmt { + IfAnd() { this.getCondition() instanceof AndLogicalExpr } +} + +import java + +from IfAnd ifa, NegReturn nr, ValidationFunction vf, Element origin +where + origin = vf and + ifa.getThen() = nearestNonIfStmt(nr) and + ifa.getEnclosingCallable() = vf and + vf.isSecureByDefault() +select vf.getDeclaringType(), "short-circuit condition bypass", vf, vf.getName(), + ifa.getCondition().(AndLogicalExpr).getRightOperand(), "supressed", + ifa.getCondition().(AndLogicalExpr).getLeftOperand(), "by" From 6517c489ba39563a40ae5af1370a57c3bdbe3fa1 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Thu, 23 Nov 2023 19:01:26 +0800 Subject: [PATCH 08/14] Better TOC for ql langauge ref docs. --- docs/codeql/ql-language-reference/Makefile | 20 +++++++++++ .../about-the-ql-language.rst | 2 -- docs/codeql/ql-language-reference/aliases.rst | 2 -- .../ql-language-reference/annotations.rst | 2 -- docs/codeql/ql-language-reference/conf.py | 33 +++++++++++++++++ .../evaluation-of-ql-programs.rst | 2 -- .../ql-language-reference/expressions.rst | 2 -- .../codeql/ql-language-reference/formulas.rst | 2 -- docs/codeql/ql-language-reference/index.rst | 2 +- .../ql-language-reference/lexical-syntax.rst | 2 -- docs/codeql/ql-language-reference/make.bat | 35 +++++++++++++++++++ docs/codeql/ql-language-reference/modules.rst | 2 -- .../ql-language-reference/name-resolution.rst | 2 -- .../ql-language-reference/predicates.rst | 2 -- .../ql-language-specification.rst | 2 -- docs/codeql/ql-language-reference/queries.rst | 2 -- .../ql-language-reference/recursion.rst | 2 -- .../ql-language-reference/signatures.rst | 2 -- docs/codeql/ql-language-reference/types.rst | 2 -- .../ql-language-reference/variables.rst | 2 -- 20 files changed, 89 insertions(+), 33 deletions(-) create mode 100644 docs/codeql/ql-language-reference/Makefile create mode 100644 docs/codeql/ql-language-reference/conf.py create mode 100644 docs/codeql/ql-language-reference/make.bat diff --git a/docs/codeql/ql-language-reference/Makefile b/docs/codeql/ql-language-reference/Makefile new file mode 100644 index 000000000000..d4bb2cbb9edd --- /dev/null +++ b/docs/codeql/ql-language-reference/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/codeql/ql-language-reference/about-the-ql-language.rst b/docs/codeql/ql-language-reference/about-the-ql-language.rst index c24a29aea96c..7d4cd5e71b85 100644 --- a/docs/codeql/ql-language-reference/about-the-ql-language.rst +++ b/docs/codeql/ql-language-reference/about-the-ql-language.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _about-the-ql-language: About the QL language diff --git a/docs/codeql/ql-language-reference/aliases.rst b/docs/codeql/ql-language-reference/aliases.rst index e56f69e0f3ed..cd59c7887039 100644 --- a/docs/codeql/ql-language-reference/aliases.rst +++ b/docs/codeql/ql-language-reference/aliases.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. index:: alias .. _aliases: diff --git a/docs/codeql/ql-language-reference/annotations.rst b/docs/codeql/ql-language-reference/annotations.rst index fa1f9bfc76ed..827f40198bea 100644 --- a/docs/codeql/ql-language-reference/annotations.rst +++ b/docs/codeql/ql-language-reference/annotations.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _annotations: Annotations diff --git a/docs/codeql/ql-language-reference/conf.py b/docs/codeql/ql-language-reference/conf.py new file mode 100644 index 000000000000..d3aad1e5bb95 --- /dev/null +++ b/docs/codeql/ql-language-reference/conf.py @@ -0,0 +1,33 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'codeql' +copyright = '2023, github' +author = 'github' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [] + +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +root_doc = 'index' + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'alabaster' +html_static_path = ['_static'] + +# Customization +html_theme_options = { + "sidebar_width": "250px" +} diff --git a/docs/codeql/ql-language-reference/evaluation-of-ql-programs.rst b/docs/codeql/ql-language-reference/evaluation-of-ql-programs.rst index 4b94a957a047..6c153704a9ef 100644 --- a/docs/codeql/ql-language-reference/evaluation-of-ql-programs.rst +++ b/docs/codeql/ql-language-reference/evaluation-of-ql-programs.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _evaluation-of-ql-programs: Evaluation of QL programs diff --git a/docs/codeql/ql-language-reference/expressions.rst b/docs/codeql/ql-language-reference/expressions.rst index 020c778a3d75..f3dd7592deca 100644 --- a/docs/codeql/ql-language-reference/expressions.rst +++ b/docs/codeql/ql-language-reference/expressions.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _expressions: Expressions diff --git a/docs/codeql/ql-language-reference/formulas.rst b/docs/codeql/ql-language-reference/formulas.rst index 8745217decc9..058239e72108 100644 --- a/docs/codeql/ql-language-reference/formulas.rst +++ b/docs/codeql/ql-language-reference/formulas.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _formulas: Formulas diff --git a/docs/codeql/ql-language-reference/index.rst b/docs/codeql/ql-language-reference/index.rst index cf1926ae3d04..2101cde16f0a 100644 --- a/docs/codeql/ql-language-reference/index.rst +++ b/docs/codeql/ql-language-reference/index.rst @@ -38,7 +38,7 @@ Learn all about QL, the powerful query language that underlies the code scanning - :doc:`QL language specification `: A formal specification for the QL language. It provides a comprehensive reference for terminology, syntax, and other technical details about QL. .. toctree:: - :maxdepth: 1 + :maxdepth: 4 :hidden: about-the-ql-language diff --git a/docs/codeql/ql-language-reference/lexical-syntax.rst b/docs/codeql/ql-language-reference/lexical-syntax.rst index 9051e4cd5fbb..b24d6e9c4ebf 100644 --- a/docs/codeql/ql-language-reference/lexical-syntax.rst +++ b/docs/codeql/ql-language-reference/lexical-syntax.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _lexical-syntax: Lexical syntax diff --git a/docs/codeql/ql-language-reference/make.bat b/docs/codeql/ql-language-reference/make.bat new file mode 100644 index 000000000000..954237b9b9f2 --- /dev/null +++ b/docs/codeql/ql-language-reference/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/codeql/ql-language-reference/modules.rst b/docs/codeql/ql-language-reference/modules.rst index ec4097ae019d..bb65629dbd61 100644 --- a/docs/codeql/ql-language-reference/modules.rst +++ b/docs/codeql/ql-language-reference/modules.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _modules: Modules diff --git a/docs/codeql/ql-language-reference/name-resolution.rst b/docs/codeql/ql-language-reference/name-resolution.rst index 85910f939685..afd3cff2c57b 100644 --- a/docs/codeql/ql-language-reference/name-resolution.rst +++ b/docs/codeql/ql-language-reference/name-resolution.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _name-resolution: Name resolution diff --git a/docs/codeql/ql-language-reference/predicates.rst b/docs/codeql/ql-language-reference/predicates.rst index 1850b0a1ee02..baa28b248ae3 100644 --- a/docs/codeql/ql-language-reference/predicates.rst +++ b/docs/codeql/ql-language-reference/predicates.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _predicates: Predicates diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 2cc2e2b66859..e6d018842a30 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _ql-language-specification: QL language specification diff --git a/docs/codeql/ql-language-reference/queries.rst b/docs/codeql/ql-language-reference/queries.rst index 8cba04942b62..edc5b1451273 100644 --- a/docs/codeql/ql-language-reference/queries.rst +++ b/docs/codeql/ql-language-reference/queries.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. index:: query .. _queries: diff --git a/docs/codeql/ql-language-reference/recursion.rst b/docs/codeql/ql-language-reference/recursion.rst index 9f89955795c6..7ca86483380c 100644 --- a/docs/codeql/ql-language-reference/recursion.rst +++ b/docs/codeql/ql-language-reference/recursion.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. index:: recursion .. _recursion: diff --git a/docs/codeql/ql-language-reference/signatures.rst b/docs/codeql/ql-language-reference/signatures.rst index e80c54c47e41..d1ac5edb6f89 100644 --- a/docs/codeql/ql-language-reference/signatures.rst +++ b/docs/codeql/ql-language-reference/signatures.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. index:: signature .. _signatures: diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 12aadc7213a3..2c38fe991fa5 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. index:: type .. _types: diff --git a/docs/codeql/ql-language-reference/variables.rst b/docs/codeql/ql-language-reference/variables.rst index 5179183ef78b..adbdb9127546 100644 --- a/docs/codeql/ql-language-reference/variables.rst +++ b/docs/codeql/ql-language-reference/variables.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. index:: variable .. _variables: From 81605f52ddf13968488e7e9d9538dfc559b5a4bf Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:26:16 +0800 Subject: [PATCH 09/14] Fix sphinx.add_lexer. In sphinx version 4.0, support for lexer instances as an argument was removed: https://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.add_lexer --- docs/codeql/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/conf.py b/docs/codeql/conf.py index da8b91140252..f813c502577f 100644 --- a/docs/codeql/conf.py +++ b/docs/codeql/conf.py @@ -52,7 +52,7 @@ def setup(sphinx): sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from qllexer import QLLexer - sphinx.add_lexer("ql", QLLexer()) + sphinx.add_lexer("ql", QLLexer) # The version of CodeQL for the current release you're documenting, acts as replacement for # |version| and |release|. Not currently used. From bf780c27407a01a1f404dad675b8f5453e782f67 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:59:08 +0800 Subject: [PATCH 10/14] Better toctree. --- docs/codeql/conf.py | 8 +++++--- docs/codeql/contents.rst | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/codeql/conf.py b/docs/codeql/conf.py index f813c502577f..fed5c415dcf3 100644 --- a/docs/codeql/conf.py +++ b/docs/codeql/conf.py @@ -87,15 +87,17 @@ def setup(sphinx): 'link': '#2F1695', 'link_hover': '#2F1695', 'show_powered_by': False, - 'nosidebar':True, + # 'nosidebar':True, 'head_font_family': '-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"', + "sidebar_width": "300px", + 'page_width': '1500px' } # Path to the folder that contains the project's HTML template -templates_path = ['_templates'] +# templates_path = ['_templates'] # Path to the folder that contains static stylesheets -html_static_path = ['_static'] +# html_static_path = ['_static'] # Copy the static landing page for codeql.github.com/docs when building this sphinx project html_extra_path = ['index.html'] diff --git a/docs/codeql/contents.rst b/docs/codeql/contents.rst index 1a772c7263c4..43f2a584004b 100644 --- a/docs/codeql/contents.rst +++ b/docs/codeql/contents.rst @@ -3,7 +3,7 @@ CodeQL documentation .. toctree:: :includehidden: - :maxdepth: 3 + :maxdepth: 6 codeql-overview/index codeql-for-visual-studio-code/index From cc891bd6d1dc2b63effed85ba5e70b27d5e8ef61 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Tue, 28 Nov 2023 18:59:11 +0800 Subject: [PATCH 11/14] Fix align. page_width should not be 800px more than sidebar_width; 800px is max content width. --- docs/codeql/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/conf.py b/docs/codeql/conf.py index fed5c415dcf3..31164bc41ab1 100644 --- a/docs/codeql/conf.py +++ b/docs/codeql/conf.py @@ -89,8 +89,8 @@ def setup(sphinx): 'show_powered_by': False, # 'nosidebar':True, 'head_font_family': '-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"', - "sidebar_width": "300px", - 'page_width': '1500px' + "sidebar_width": "330px", + 'page_width': '1130px' } # Path to the folder that contains the project's HTML template From 39184fa689e9680e387033dc0ce2c797e29067f0 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:29:13 +0800 Subject: [PATCH 12/14] Fix code format. --- .../codeql-language-guides/using-api-graphs-in-python.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst b/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst index 02adfdaf9833..7a20ca1a52cd 100644 --- a/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst +++ b/docs/codeql/codeql-language-guides/using-api-graphs-in-python.rst @@ -97,8 +97,8 @@ local flow. To get just the *calls* to ``re.compile``, you can use ``asSource`` ``getReturn`` followed by ``asSource``, simply use ``getACall``. This will result in an ``API::CallNode``, which deserves a small description of its own. -``API::CallNode``s are not ``API::Node``s. Instead they are ``DataFlow::Node``s with some convenience -predicates that allows you to recover ``API::Node``s for the return value as well as for arguments +``API::CallNode``\ s are not ``API::Node``\ s. Instead they are ``DataFlow::Node``\ s with some convenience +predicates that allows you to recover ``API::Node``\ s for the return value as well as for arguments to the call. This enables you to constrain the call in various ways using the API graph. The following snippet finds all calls to ``re.compile`` where the ``pattern`` argument comes from parsing a command line argument using the ``argparse`` library. From 3fbfe75ba82a0af8197957dbb8f4bd63cfe0544d Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Tue, 19 Dec 2023 15:14:06 +0800 Subject: [PATCH 13/14] Better TOC for codeql-for-vscode and codeql-overview. --- .../about-codeql-for-visual-studio-code.rst | 2 -- .../about-telemetry-in-codeql-for-visual-studio-code.rst | 2 -- .../codeql-for-visual-studio-code/analyzing-your-projects.rst | 2 -- .../codeql-for-visual-studio-code/customizing-settings.rst | 2 -- .../exploring-data-flow-with-path-queries.rst | 2 -- .../exploring-the-structure-of-your-source-code.rst | 2 -- .../running-codeql-queries-at-scale-with-mrva.rst | 2 -- .../setting-up-codeql-in-visual-studio-code.rst | 2 -- .../testing-codeql-queries-in-visual-studio-code.rst | 2 -- .../troubleshooting-codeql-for-visual-studio-code.rst | 2 -- .../troubleshooting-variant-analysis.rst | 2 -- .../using-the-codeql-model-editor.rst | 2 -- .../working-with-codeql-packs-in-visual-studio-code.rst | 2 -- docs/codeql/codeql-overview/about-codeql.rst | 2 -- docs/codeql/codeql-overview/codeql-glossary.rst | 2 -- docs/codeql/codeql-overview/codeql-tools.rst | 2 -- docs/codeql/codeql-overview/index.rst | 2 +- .../codeql-overview/supported-languages-and-frameworks.rst | 2 -- docs/codeql/codeql-overview/system-requirements.rst | 2 -- 19 files changed, 1 insertion(+), 37 deletions(-) diff --git a/docs/codeql/codeql-for-visual-studio-code/about-codeql-for-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/about-codeql-for-visual-studio-code.rst index 72e2756ea5c2..46f1edde22e3 100644 --- a/docs/codeql/codeql-for-visual-studio-code/about-codeql-for-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/about-codeql-for-visual-studio-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _about-codeql-for-visual-studio-code: About CodeQL for Visual Studio Code diff --git a/docs/codeql/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code.rst index 52bf7c53c1ae..d4c5f0ce32e7 100644 --- a/docs/codeql/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _about-telemetry-in-codeql-for-visual-studio-code: About telemetry in CodeQL for Visual Studio Code diff --git a/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst b/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst index 62d48c6fbd88..e1c9893ea892 100644 --- a/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst +++ b/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _analyzing-your-projects: Analyzing your projects diff --git a/docs/codeql/codeql-for-visual-studio-code/customizing-settings.rst b/docs/codeql/codeql-for-visual-studio-code/customizing-settings.rst index 88ad273a3d62..7ab54c7bb798 100644 --- a/docs/codeql/codeql-for-visual-studio-code/customizing-settings.rst +++ b/docs/codeql/codeql-for-visual-studio-code/customizing-settings.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _customizing-settings: Customizing settings diff --git a/docs/codeql/codeql-for-visual-studio-code/exploring-data-flow-with-path-queries.rst b/docs/codeql/codeql-for-visual-studio-code/exploring-data-flow-with-path-queries.rst index dec599829ed4..c706d579bcc8 100644 --- a/docs/codeql/codeql-for-visual-studio-code/exploring-data-flow-with-path-queries.rst +++ b/docs/codeql/codeql-for-visual-studio-code/exploring-data-flow-with-path-queries.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _exploring-data-flow-with-path-queries: Exploring data flow with path queries diff --git a/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst b/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst index 708b2f0cc0cc..c2d2228b172d 100644 --- a/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _exploring-the-structure-of-your-source-code: Exploring the structure of your source code diff --git a/docs/codeql/codeql-for-visual-studio-code/running-codeql-queries-at-scale-with-mrva.rst b/docs/codeql/codeql-for-visual-studio-code/running-codeql-queries-at-scale-with-mrva.rst index dad191274deb..a663d948ff50 100644 --- a/docs/codeql/codeql-for-visual-studio-code/running-codeql-queries-at-scale-with-mrva.rst +++ b/docs/codeql/codeql-for-visual-studio-code/running-codeql-queries-at-scale-with-mrva.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _running-codeql-queries-at-scale-with-mrva: Running CodeQL queries at scale with multi-repository variant analysis diff --git a/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst index ac67d31afde0..085791ef4245 100644 --- a/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _setting-up-codeql-in-visual-studio-code: Setting up CodeQL in Visual Studio Code diff --git a/docs/codeql/codeql-for-visual-studio-code/testing-codeql-queries-in-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/testing-codeql-queries-in-visual-studio-code.rst index ddc78558496a..8fc1d8f4766d 100644 --- a/docs/codeql/codeql-for-visual-studio-code/testing-codeql-queries-in-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/testing-codeql-queries-in-visual-studio-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _testing-codeql-queries-in-visual-studio-code: Testing CodeQL queries in Visual Studio Code diff --git a/docs/codeql/codeql-for-visual-studio-code/troubleshooting-codeql-for-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/troubleshooting-codeql-for-visual-studio-code.rst index 2eecc28f0fb3..23e11e53b2bb 100644 --- a/docs/codeql/codeql-for-visual-studio-code/troubleshooting-codeql-for-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/troubleshooting-codeql-for-visual-studio-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _troubleshooting-codeql-for-visual-studio-code: Troubleshooting CodeQL for Visual Studio Code diff --git a/docs/codeql/codeql-for-visual-studio-code/troubleshooting-variant-analysis.rst b/docs/codeql/codeql-for-visual-studio-code/troubleshooting-variant-analysis.rst index 5d9137dee5cc..a2af03eb1a64 100644 --- a/docs/codeql/codeql-for-visual-studio-code/troubleshooting-variant-analysis.rst +++ b/docs/codeql/codeql-for-visual-studio-code/troubleshooting-variant-analysis.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _troubleshooting-variant-analysis: Troubleshooting variant analysis diff --git a/docs/codeql/codeql-for-visual-studio-code/using-the-codeql-model-editor.rst b/docs/codeql/codeql-for-visual-studio-code/using-the-codeql-model-editor.rst index 0eaa4518118d..6d3cac9c31a9 100644 --- a/docs/codeql/codeql-for-visual-studio-code/using-the-codeql-model-editor.rst +++ b/docs/codeql/codeql-for-visual-studio-code/using-the-codeql-model-editor.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _using-the-codeql-model-editor: Using the CodeQL model editor diff --git a/docs/codeql/codeql-for-visual-studio-code/working-with-codeql-packs-in-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/working-with-codeql-packs-in-visual-studio-code.rst index fe1e9a0bbdd2..57abcb1f9f07 100644 --- a/docs/codeql/codeql-for-visual-studio-code/working-with-codeql-packs-in-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/working-with-codeql-packs-in-visual-studio-code.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _working-with-codeql-packs-in-visual-studio-code: Working with CodeQL packs in Visual Studio Code diff --git a/docs/codeql/codeql-overview/about-codeql.rst b/docs/codeql/codeql-overview/about-codeql.rst index 1392e1c73308..2580abb4b2d7 100644 --- a/docs/codeql/codeql-overview/about-codeql.rst +++ b/docs/codeql/codeql-overview/about-codeql.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _about-codeql: About CodeQL diff --git a/docs/codeql/codeql-overview/codeql-glossary.rst b/docs/codeql/codeql-overview/codeql-glossary.rst index f86b5346e2c2..9efcba2b9319 100644 --- a/docs/codeql/codeql-overview/codeql-glossary.rst +++ b/docs/codeql/codeql-overview/codeql-glossary.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _codeql-glossary: CodeQL glossary diff --git a/docs/codeql/codeql-overview/codeql-tools.rst b/docs/codeql/codeql-overview/codeql-tools.rst index c6df9d8882dc..ebeedd47d1b4 100644 --- a/docs/codeql/codeql-overview/codeql-tools.rst +++ b/docs/codeql/codeql-overview/codeql-tools.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _codeql-tools: CodeQL tools diff --git a/docs/codeql/codeql-overview/index.rst b/docs/codeql/codeql-overview/index.rst index 84e5cf338414..38e3e7ae6971 100644 --- a/docs/codeql/codeql-overview/index.rst +++ b/docs/codeql/codeql-overview/index.rst @@ -18,7 +18,7 @@ Learn more about how CodeQL works, the languages and libraries supported by Code - :doc:`CodeQL glossary `: An overview of the technical terms and concepts in CodeQL. .. toctree:: - :maxdepth: 1 + :maxdepth: 4 :hidden: about-codeql diff --git a/docs/codeql/codeql-overview/supported-languages-and-frameworks.rst b/docs/codeql/codeql-overview/supported-languages-and-frameworks.rst index 7cb78873cebd..c1113abd72c3 100644 --- a/docs/codeql/codeql-overview/supported-languages-and-frameworks.rst +++ b/docs/codeql/codeql-overview/supported-languages-and-frameworks.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _supported-languages-and-frameworks: Supported languages and frameworks diff --git a/docs/codeql/codeql-overview/system-requirements.rst b/docs/codeql/codeql-overview/system-requirements.rst index 4788e866303f..3e0a4d190a9c 100644 --- a/docs/codeql/codeql-overview/system-requirements.rst +++ b/docs/codeql/codeql-overview/system-requirements.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - .. _system-requirements: System requirements From b6279c43c1d8df78f9d0884d66f5b157fcb5b782 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Fri, 19 Apr 2024 16:04:33 +0800 Subject: [PATCH 14/14] feat: add pipfile and launch.json. --- .vscode/launch.json | 22 +++ docs/Pipfile | 12 ++ docs/Pipfile.lock | 335 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 369 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 docs/Pipfile create mode 100644 docs/Pipfile.lock diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000000..20aa46170153 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: sphinx-build", + "type": "python", + "request": "launch", + "program": "/Users/tux/.local/share/virtualenvs/docs-pGZaMKOf//bin/sphinx-build", + "cwd": "${workspaceFolder}/docs/codeql", + "console": "internalConsole", + "justMyCode": false, + "args":[ + "-aPT", // all files, Pdb, Trace + ".", + "_build" + ] + } + ] +} \ No newline at end of file diff --git a/docs/Pipfile b/docs/Pipfile new file mode 100644 index 000000000000..a051760a1ad9 --- /dev/null +++ b/docs/Pipfile @@ -0,0 +1,12 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +sphinx = "*" + +[dev-packages] + +[requires] +python_version = "3.11" diff --git a/docs/Pipfile.lock b/docs/Pipfile.lock new file mode 100644 index 000000000000..5621b59619a2 --- /dev/null +++ b/docs/Pipfile.lock @@ -0,0 +1,335 @@ +{ + "_meta": { + "hash": { + "sha256": "0684cf78e6c5818ca9d50abcef8ef2207663bf0bf77c968b6d4d6eff69cce7d7" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "alabaster": { + "hashes": [ + "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3", + "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.13" + }, + "babel": { + "hashes": [ + "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900", + "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed" + ], + "markers": "python_version >= '3.7'", + "version": "==2.13.1" + }, + "certifi": { + "hashes": [ + "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", + "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.11.17" + }, + "charset-normalizer": { + "hashes": [ + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" + }, + "docutils": { + "hashes": [ + "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", + "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b" + ], + "markers": "python_version >= '3.7'", + "version": "==0.20.1" + }, + "idna": { + "hashes": [ + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + ], + "markers": "python_version >= '3.5'", + "version": "==3.6" + }, + "imagesize": { + "hashes": [ + "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", + "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.4.1" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, + "markupsafe": { + "hashes": [ + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.3" + }, + "packaging": { + "hashes": [ + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + ], + "markers": "python_version >= '3.7'", + "version": "==23.2" + }, + "pygments": { + "hashes": [ + "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", + "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" + ], + "markers": "python_version >= '3.7'", + "version": "==2.17.2" + }, + "requests": { + "hashes": [ + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + ], + "markers": "python_version >= '3.7'", + "version": "==2.31.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", + "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" + ], + "version": "==2.2.0" + }, + "sphinx": { + "hashes": [ + "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560", + "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==7.2.6" + }, + "sphinxcontrib-applehelp": { + "hashes": [ + "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d", + "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa" + ], + "markers": "python_version >= '3.9'", + "version": "==1.0.7" + }, + "sphinxcontrib-devhelp": { + "hashes": [ + "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212", + "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f" + ], + "markers": "python_version >= '3.9'", + "version": "==1.0.5" + }, + "sphinxcontrib-htmlhelp": { + "hashes": [ + "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a", + "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9" + ], + "markers": "python_version >= '3.9'", + "version": "==2.0.4" + }, + "sphinxcontrib-jsmath": { + "hashes": [ + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.1" + }, + "sphinxcontrib-qthelp": { + "hashes": [ + "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d", + "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4" + ], + "markers": "python_version >= '3.9'", + "version": "==1.0.6" + }, + "sphinxcontrib-serializinghtml": { + "hashes": [ + "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54", + "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1" + ], + "markers": "python_version >= '3.9'", + "version": "==1.1.9" + }, + "urllib3": { + "hashes": [ + "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3", + "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54" + ], + "markers": "python_version >= '3.8'", + "version": "==2.1.0" + } + }, + "develop": {} +}