From e42002e1d74840e82f4ff4456b8eb383ac34e67b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 17 Jul 2025 11:08:56 +0100 Subject: [PATCH 001/219] Promote IncorrectExceptOrder. However, we lose some results due to not considering builtin/stdlib types. --- .../src/Exceptions/IncorrectExceptOrder.qhelp | 8 +++--- .../ql/src/Exceptions/IncorrectExceptOrder.ql | 25 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/python/ql/src/Exceptions/IncorrectExceptOrder.qhelp b/python/ql/src/Exceptions/IncorrectExceptOrder.qhelp index d2854af6ca60..9d78350bcd2c 100644 --- a/python/ql/src/Exceptions/IncorrectExceptOrder.qhelp +++ b/python/ql/src/Exceptions/IncorrectExceptOrder.qhelp @@ -25,11 +25,11 @@ is a super class of Error.

Reorganize the except blocks so that the more specific except is defined first. Alternatively, if the more specific except block is -no longer required then it should be deleted.

+no longer required, then it should be deleted.

-

In this example the except Exception: will handle AttributeError preventing the +

In the following example, the except Exception: will handle AttributeError preventing the subsequent handler from ever executing.

@@ -37,8 +37,8 @@ subsequent handler from ever executing.

-
  • Python Language Reference: The try statement, -Exceptions.
  • +
  • Python Language Reference: The try statement, +Exceptions.
  • diff --git a/python/ql/src/Exceptions/IncorrectExceptOrder.ql b/python/ql/src/Exceptions/IncorrectExceptOrder.ql index 3c0c90b36d35..6838a9bc2aec 100644 --- a/python/ql/src/Exceptions/IncorrectExceptOrder.ql +++ b/python/ql/src/Exceptions/IncorrectExceptOrder.ql @@ -14,22 +14,27 @@ */ import python +import semmle.python.dataflow.new.internal.DataFlowDispatch -predicate incorrect_except_order(ExceptStmt ex1, ClassValue cls1, ExceptStmt ex2, ClassValue cls2) { +predicate incorrectExceptOrder(ExceptStmt ex1, Class cls1, ExceptStmt ex2, Class cls2) { exists(int i, int j, Try t | ex1 = t.getHandler(i) and ex2 = t.getHandler(j) and i < j and - cls1 = except_class(ex1) and - cls2 = except_class(ex2) and - cls1 = cls2.getASuperType() + cls1 = exceptClass(ex1) and + cls2 = exceptClass(ex2) and + cls1 = getADirectSuperclass*(cls2) ) } -ClassValue except_class(ExceptStmt ex) { ex.getType().pointsTo(result) } +Class exceptClass(ExceptStmt ex) { ex.getType() = classTracker(result).asExpr() } -from ExceptStmt ex1, ClassValue cls1, ExceptStmt ex2, ClassValue cls2 -where incorrect_except_order(ex1, cls1, ex2, cls2) -select ex2, - "Except block for $@ is unreachable; the more general $@ for $@ will always be executed in preference.", - cls2, cls2.getName(), ex1, "except block", cls1, cls1.getName() +from ExceptStmt ex1, Class cls1, ExceptStmt ex2, Class cls2, string msg +where + incorrectExceptOrder(ex1, cls1, ex2, cls2) and + if cls1 = cls2 + then msg = "This except block handling $@ is unreachable; as $@ also handles $@." + else + msg = + "This except block handling $@ is unreachable; as $@ for the more general $@ always subsumes it." +select ex2, msg, cls2, cls2.getName(), ex1, "this except block", cls1, cls1.getName() From f24f7d5146032f8d611eed53b23f688c2511dc5d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 21 Aug 2025 13:50:26 +0100 Subject: [PATCH 002/219] Add builtin subclass models, incorporate into query --- .../python/frameworks/builtins.model.yml | 249 ++++++++++++++++++ .../ql/src/Exceptions/IncorrectExceptOrder.ql | 76 +++++- 2 files changed, 321 insertions(+), 4 deletions(-) create mode 100644 python/ql/lib/semmle/python/frameworks/builtins.model.yml diff --git a/python/ql/lib/semmle/python/frameworks/builtins.model.yml b/python/ql/lib/semmle/python/frameworks/builtins.model.yml new file mode 100644 index 000000000000..9789b5479036 --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/builtins.model.yml @@ -0,0 +1,249 @@ +extensions: + - addsTo: + pack: codeql/python-all + extensible: typeModel + data: + - ['builtins.PendingDeprecationWarning~Subclass', 'builtins.PendingDeprecationWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.PendingDeprecationWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.PendingDeprecationWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.PendingDeprecationWarning', ''] + - ['builtins.UnicodeWarning~Subclass', 'builtins.UnicodeWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.UnicodeWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.UnicodeWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.UnicodeWarning', ''] + - ['builtins.StopAsyncIteration~Subclass', 'builtins.StopAsyncIteration', ''] + - ['builtins.Exception~Subclass', 'builtins.StopAsyncIteration', ''] + - ['builtins.BaseException~Subclass', 'builtins.StopAsyncIteration', ''] + - ['builtins.KeyboardInterrupt~Subclass', 'builtins.KeyboardInterrupt', ''] + - ['builtins.BaseException~Subclass', 'builtins.KeyboardInterrupt', ''] + - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionError', ''] + - ['builtins.OSError~Subclass', 'builtins.ConnectionError', ''] + - ['builtins.Exception~Subclass', 'builtins.ConnectionError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ConnectionError', ''] + - ['builtins.ConnectionResetError~Subclass', 'builtins.ConnectionResetError', ''] + - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionResetError', ''] + - ['builtins.OSError~Subclass', 'builtins.ConnectionResetError', ''] + - ['builtins.Exception~Subclass', 'builtins.ConnectionResetError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ConnectionResetError', ''] + - ['builtins.InterruptedError~Subclass', 'builtins.InterruptedError', ''] + - ['builtins.OSError~Subclass', 'builtins.InterruptedError', ''] + - ['builtins.Exception~Subclass', 'builtins.InterruptedError', ''] + - ['builtins.BaseException~Subclass', 'builtins.InterruptedError', ''] + - ['builtins.RuntimeError~Subclass', 'builtins.RuntimeError', ''] + - ['builtins.Exception~Subclass', 'builtins.RuntimeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.RuntimeError', ''] + - ['builtins.AttributeError~Subclass', 'builtins.AttributeError', ''] + - ['builtins.Exception~Subclass', 'builtins.AttributeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.AttributeError', ''] + - ['builtins.IndexError~Subclass', 'builtins.IndexError', ''] + - ['builtins.LookupError~Subclass', 'builtins.IndexError', ''] + - ['builtins.Exception~Subclass', 'builtins.IndexError', ''] + - ['builtins.BaseException~Subclass', 'builtins.IndexError', ''] + - ['builtins.UnicodeDecodeError~Subclass', 'builtins.UnicodeDecodeError', ''] + - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeDecodeError', ''] + - ['builtins.ValueError~Subclass', 'builtins.UnicodeDecodeError', ''] + - ['builtins.Exception~Subclass', 'builtins.UnicodeDecodeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.UnicodeDecodeError', ''] + - ['builtins.OverflowError~Subclass', 'builtins.OverflowError', ''] + - ['builtins.ArithmeticError~Subclass', 'builtins.OverflowError', ''] + - ['builtins.Exception~Subclass', 'builtins.OverflowError', ''] + - ['builtins.BaseException~Subclass', 'builtins.OverflowError', ''] + - ['builtins.BufferError~Subclass', 'builtins.BufferError', ''] + - ['builtins.Exception~Subclass', 'builtins.BufferError', ''] + - ['builtins.BaseException~Subclass', 'builtins.BufferError', ''] + - ['builtins.SyntaxWarning~Subclass', 'builtins.SyntaxWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.SyntaxWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.SyntaxWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.SyntaxWarning', ''] + - ['builtins.BytesWarning~Subclass', 'builtins.BytesWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.BytesWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.BytesWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.BytesWarning', ''] + - ['builtins.StopIteration~Subclass', 'builtins.StopIteration', ''] + - ['builtins.Exception~Subclass', 'builtins.StopIteration', ''] + - ['builtins.BaseException~Subclass', 'builtins.StopIteration', ''] + - ['builtins.ImportError~Subclass', 'builtins.ImportError', ''] + - ['builtins.Exception~Subclass', 'builtins.ImportError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ImportError', ''] + - ['builtins.ChildProcessError~Subclass', 'builtins.ChildProcessError', ''] + - ['builtins.OSError~Subclass', 'builtins.ChildProcessError', ''] + - ['builtins.Exception~Subclass', 'builtins.ChildProcessError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ChildProcessError', ''] + - ['builtins.FileExistsError~Subclass', 'builtins.FileExistsError', ''] + - ['builtins.OSError~Subclass', 'builtins.FileExistsError', ''] + - ['builtins.Exception~Subclass', 'builtins.FileExistsError', ''] + - ['builtins.BaseException~Subclass', 'builtins.FileExistsError', ''] + - ['builtins.PermissionError~Subclass', 'builtins.PermissionError', ''] + - ['builtins.OSError~Subclass', 'builtins.PermissionError', ''] + - ['builtins.Exception~Subclass', 'builtins.PermissionError', ''] + - ['builtins.BaseException~Subclass', 'builtins.PermissionError', ''] + - ['builtins.RecursionError~Subclass', 'builtins.RecursionError', ''] + - ['builtins.RuntimeError~Subclass', 'builtins.RecursionError', ''] + - ['builtins.Exception~Subclass', 'builtins.RecursionError', ''] + - ['builtins.BaseException~Subclass', 'builtins.RecursionError', ''] + - ['builtins.SyntaxError~Subclass', 'builtins.SyntaxError', ''] + - ['builtins.Exception~Subclass', 'builtins.SyntaxError', ''] + - ['builtins.BaseException~Subclass', 'builtins.SyntaxError', ''] + - ['builtins.ExceptionGroup~Subclass', 'builtins.ExceptionGroup', ''] + - ['builtins.BaseExceptionGroup~Subclass', 'builtins.ExceptionGroup', ''] + - ['builtins.Exception~Subclass', 'builtins.ExceptionGroup', ''] + - ['builtins.BaseException~Subclass', 'builtins.ExceptionGroup', ''] + - ['builtins.KeyError~Subclass', 'builtins.KeyError', ''] + - ['builtins.LookupError~Subclass', 'builtins.KeyError', ''] + - ['builtins.Exception~Subclass', 'builtins.KeyError', ''] + - ['builtins.BaseException~Subclass', 'builtins.KeyError', ''] + - ['builtins.UnicodeTranslateError~Subclass', 'builtins.UnicodeTranslateError', ''] + - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeTranslateError', ''] + - ['builtins.ValueError~Subclass', 'builtins.UnicodeTranslateError', ''] + - ['builtins.Exception~Subclass', 'builtins.UnicodeTranslateError', ''] + - ['builtins.BaseException~Subclass', 'builtins.UnicodeTranslateError', ''] + - ['builtins.ZeroDivisionError~Subclass', 'builtins.ZeroDivisionError', ''] + - ['builtins.ArithmeticError~Subclass', 'builtins.ZeroDivisionError', ''] + - ['builtins.Exception~Subclass', 'builtins.ZeroDivisionError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ZeroDivisionError', ''] + - ['builtins.Warning~Subclass', 'builtins.Warning', ''] + - ['builtins.Exception~Subclass', 'builtins.Warning', ''] + - ['builtins.BaseException~Subclass', 'builtins.Warning', ''] + - ['builtins.RuntimeWarning~Subclass', 'builtins.RuntimeWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.RuntimeWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.RuntimeWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.RuntimeWarning', ''] + - ['builtins.EncodingWarning~Subclass', 'builtins.EncodingWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.EncodingWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.EncodingWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.EncodingWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.BaseException', ''] + - ['builtins.GeneratorExit~Subclass', 'builtins.GeneratorExit', ''] + - ['builtins.BaseException~Subclass', 'builtins.GeneratorExit', ''] + - ['builtins.ModuleNotFoundError~Subclass', 'builtins.ModuleNotFoundError', ''] + - ['builtins.ImportError~Subclass', 'builtins.ModuleNotFoundError', ''] + - ['builtins.Exception~Subclass', 'builtins.ModuleNotFoundError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ModuleNotFoundError', ''] + - ['builtins.BrokenPipeError~Subclass', 'builtins.BrokenPipeError', ''] + - ['builtins.ConnectionError~Subclass', 'builtins.BrokenPipeError', ''] + - ['builtins.OSError~Subclass', 'builtins.BrokenPipeError', ''] + - ['builtins.Exception~Subclass', 'builtins.BrokenPipeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.BrokenPipeError', ''] + - ['builtins.FileNotFoundError~Subclass', 'builtins.FileNotFoundError', ''] + - ['builtins.OSError~Subclass', 'builtins.FileNotFoundError', ''] + - ['builtins.Exception~Subclass', 'builtins.FileNotFoundError', ''] + - ['builtins.BaseException~Subclass', 'builtins.FileNotFoundError', ''] + - ['builtins.ProcessLookupError~Subclass', 'builtins.ProcessLookupError', ''] + - ['builtins.OSError~Subclass', 'builtins.ProcessLookupError', ''] + - ['builtins.Exception~Subclass', 'builtins.ProcessLookupError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ProcessLookupError', ''] + - ['builtins.NotImplementedError~Subclass', 'builtins.NotImplementedError', ''] + - ['builtins.RuntimeError~Subclass', 'builtins.NotImplementedError', ''] + - ['builtins.Exception~Subclass', 'builtins.NotImplementedError', ''] + - ['builtins.BaseException~Subclass', 'builtins.NotImplementedError', ''] + - ['builtins.IndentationError~Subclass', 'builtins.IndentationError', ''] + - ['builtins.SyntaxError~Subclass', 'builtins.IndentationError', ''] + - ['builtins.Exception~Subclass', 'builtins.IndentationError', ''] + - ['builtins.BaseException~Subclass', 'builtins.IndentationError', ''] + - ['builtins.ValueError~Subclass', 'builtins.ValueError', ''] + - ['builtins.Exception~Subclass', 'builtins.ValueError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ValueError', ''] + - ['builtins.AssertionError~Subclass', 'builtins.AssertionError', ''] + - ['builtins.Exception~Subclass', 'builtins.AssertionError', ''] + - ['builtins.BaseException~Subclass', 'builtins.AssertionError', ''] + - ['builtins.SystemError~Subclass', 'builtins.SystemError', ''] + - ['builtins.Exception~Subclass', 'builtins.SystemError', ''] + - ['builtins.BaseException~Subclass', 'builtins.SystemError', ''] + - ['builtins.UserWarning~Subclass', 'builtins.UserWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.UserWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.UserWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.UserWarning', ''] + - ['builtins.FutureWarning~Subclass', 'builtins.FutureWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.FutureWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.FutureWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.FutureWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.Exception', ''] + - ['builtins.BaseException~Subclass', 'builtins.Exception', ''] + - ['builtins.ResourceWarning~Subclass', 'builtins.ResourceWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.ResourceWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.ResourceWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.ResourceWarning', ''] + - ['builtins.SystemExit~Subclass', 'builtins.SystemExit', ''] + - ['builtins.BaseException~Subclass', 'builtins.SystemExit', ''] + - ['builtins.OSError~Subclass', 'builtins.OSError', ''] + - ['builtins.Exception~Subclass', 'builtins.OSError', ''] + - ['builtins.BaseException~Subclass', 'builtins.OSError', ''] + - ['builtins.ConnectionAbortedError~Subclass', 'builtins.ConnectionAbortedError', ''] + - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionAbortedError', ''] + - ['builtins.OSError~Subclass', 'builtins.ConnectionAbortedError', ''] + - ['builtins.Exception~Subclass', 'builtins.ConnectionAbortedError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ConnectionAbortedError', ''] + - ['builtins.IsADirectoryError~Subclass', 'builtins.IsADirectoryError', ''] + - ['builtins.OSError~Subclass', 'builtins.IsADirectoryError', ''] + - ['builtins.Exception~Subclass', 'builtins.IsADirectoryError', ''] + - ['builtins.BaseException~Subclass', 'builtins.IsADirectoryError', ''] + - ['builtins.TimeoutError~Subclass', 'builtins.TimeoutError', ''] + - ['builtins.OSError~Subclass', 'builtins.TimeoutError', ''] + - ['builtins.Exception~Subclass', 'builtins.TimeoutError', ''] + - ['builtins.BaseException~Subclass', 'builtins.TimeoutError', ''] + - ['builtins.NameError~Subclass', 'builtins.NameError', ''] + - ['builtins.Exception~Subclass', 'builtins.NameError', ''] + - ['builtins.BaseException~Subclass', 'builtins.NameError', ''] + - ['builtins.TabError~Subclass', 'builtins.TabError', ''] + - ['builtins.IndentationError~Subclass', 'builtins.TabError', ''] + - ['builtins.SyntaxError~Subclass', 'builtins.TabError', ''] + - ['builtins.Exception~Subclass', 'builtins.TabError', ''] + - ['builtins.BaseException~Subclass', 'builtins.TabError', ''] + - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeError', ''] + - ['builtins.ValueError~Subclass', 'builtins.UnicodeError', ''] + - ['builtins.Exception~Subclass', 'builtins.UnicodeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.UnicodeError', ''] + - ['builtins.ArithmeticError~Subclass', 'builtins.ArithmeticError', ''] + - ['builtins.Exception~Subclass', 'builtins.ArithmeticError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ArithmeticError', ''] + - ['builtins.ReferenceError~Subclass', 'builtins.ReferenceError', ''] + - ['builtins.Exception~Subclass', 'builtins.ReferenceError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ReferenceError', ''] + - ['builtins.DeprecationWarning~Subclass', 'builtins.DeprecationWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.DeprecationWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.DeprecationWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.DeprecationWarning', ''] + - ['builtins.ImportWarning~Subclass', 'builtins.ImportWarning', ''] + - ['builtins.Warning~Subclass', 'builtins.ImportWarning', ''] + - ['builtins.Exception~Subclass', 'builtins.ImportWarning', ''] + - ['builtins.BaseException~Subclass', 'builtins.ImportWarning', ''] + - ['builtins.TypeError~Subclass', 'builtins.TypeError', ''] + - ['builtins.Exception~Subclass', 'builtins.TypeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.TypeError', ''] + - ['builtins.BaseExceptionGroup~Subclass', 'builtins.BaseExceptionGroup', ''] + - ['builtins.BaseException~Subclass', 'builtins.BaseExceptionGroup', ''] + - ['builtins.BlockingIOError~Subclass', 'builtins.BlockingIOError', ''] + - ['builtins.OSError~Subclass', 'builtins.BlockingIOError', ''] + - ['builtins.Exception~Subclass', 'builtins.BlockingIOError', ''] + - ['builtins.BaseException~Subclass', 'builtins.BlockingIOError', ''] + - ['builtins.ConnectionRefusedError~Subclass', 'builtins.ConnectionRefusedError', ''] + - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionRefusedError', ''] + - ['builtins.OSError~Subclass', 'builtins.ConnectionRefusedError', ''] + - ['builtins.Exception~Subclass', 'builtins.ConnectionRefusedError', ''] + - ['builtins.BaseException~Subclass', 'builtins.ConnectionRefusedError', ''] + - ['builtins.NotADirectoryError~Subclass', 'builtins.NotADirectoryError', ''] + - ['builtins.OSError~Subclass', 'builtins.NotADirectoryError', ''] + - ['builtins.Exception~Subclass', 'builtins.NotADirectoryError', ''] + - ['builtins.BaseException~Subclass', 'builtins.NotADirectoryError', ''] + - ['builtins.EOFError~Subclass', 'builtins.EOFError', ''] + - ['builtins.Exception~Subclass', 'builtins.EOFError', ''] + - ['builtins.BaseException~Subclass', 'builtins.EOFError', ''] + - ['builtins.UnboundLocalError~Subclass', 'builtins.UnboundLocalError', ''] + - ['builtins.NameError~Subclass', 'builtins.UnboundLocalError', ''] + - ['builtins.Exception~Subclass', 'builtins.UnboundLocalError', ''] + - ['builtins.BaseException~Subclass', 'builtins.UnboundLocalError', ''] + - ['builtins.LookupError~Subclass', 'builtins.LookupError', ''] + - ['builtins.Exception~Subclass', 'builtins.LookupError', ''] + - ['builtins.BaseException~Subclass', 'builtins.LookupError', ''] + - ['builtins.UnicodeEncodeError~Subclass', 'builtins.UnicodeEncodeError', ''] + - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeEncodeError', ''] + - ['builtins.ValueError~Subclass', 'builtins.UnicodeEncodeError', ''] + - ['builtins.Exception~Subclass', 'builtins.UnicodeEncodeError', ''] + - ['builtins.BaseException~Subclass', 'builtins.UnicodeEncodeError', ''] + - ['builtins.FloatingPointError~Subclass', 'builtins.FloatingPointError', ''] + - ['builtins.ArithmeticError~Subclass', 'builtins.FloatingPointError', ''] + - ['builtins.Exception~Subclass', 'builtins.FloatingPointError', ''] + - ['builtins.BaseException~Subclass', 'builtins.FloatingPointError', ''] + - ['builtins.MemoryError~Subclass', 'builtins.MemoryError', ''] + - ['builtins.Exception~Subclass', 'builtins.MemoryError', ''] + - ['builtins.BaseException~Subclass', 'builtins.MemoryError', ''] \ No newline at end of file diff --git a/python/ql/src/Exceptions/IncorrectExceptOrder.ql b/python/ql/src/Exceptions/IncorrectExceptOrder.ql index 6838a9bc2aec..5637c9e3b619 100644 --- a/python/ql/src/Exceptions/IncorrectExceptOrder.ql +++ b/python/ql/src/Exceptions/IncorrectExceptOrder.ql @@ -15,21 +15,89 @@ import python import semmle.python.dataflow.new.internal.DataFlowDispatch +import semmle.python.ApiGraphs +import semmle.python.frameworks.data.internal.ApiGraphModels -predicate incorrectExceptOrder(ExceptStmt ex1, Class cls1, ExceptStmt ex2, Class cls2) { +predicate builtinException(string name) { + typeModel("builtins.BaseException~Subclass", "builtins." + name, "") +} + +predicate builtinExceptionSubclass(string base, string sub) { + typeModel("builtins." + base + "~Subclass", sub, "") +} + +newtype TExceptType = + TClass(Class c) or + TBuiltin(string name) { builtinException(name) } + +class ExceptType extends TExceptType { + Class asClass() { this = TClass(result) } + + string asBuiltinName() { this = TBuiltin(result) } + + predicate isBuiltin() { this = TBuiltin(_) } + + string getName() { + result = this.asClass().getName() + or + result = this.asBuiltinName() + } + + string toString() { result = this.getName() } + + DataFlow::Node getAUse() { + result = classTracker(this.asClass()) + or + result = API::builtin(this.asBuiltinName()).asSource() + } + + ExceptType getADirectSuperclass() { + result.asClass() = getADirectSuperclass(this.asClass()) + or + result.isBuiltin() and + result.getAUse().asExpr() = this.asClass().getABase() + or + builtinExceptionSubclass(result.asBuiltinName(), this.asBuiltinName()) and + this != result + } + + /** + * Holds if this element is at the specified location. + * The location spans column `startColumn` of line `startLine` to + * column `endColumn` of line `endLine` in file `filepath`. + * For more information, see + * [Providing locations in CodeQL queries](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filePath, int startLine, int startColumn, int endLine, int endColumn + ) { + this.asClass() + .getLocation() + .hasLocationInfo(filePath, startLine, startColumn, endLine, endColumn) + or + this.isBuiltin() and + filePath = "" and + startLine = 0 and + startColumn = 0 and + endLine = 0 and + endColumn = 0 + } +} + +predicate incorrectExceptOrder(ExceptStmt ex1, ExceptType cls1, ExceptStmt ex2, ExceptType cls2) { exists(int i, int j, Try t | ex1 = t.getHandler(i) and ex2 = t.getHandler(j) and i < j and cls1 = exceptClass(ex1) and cls2 = exceptClass(ex2) and - cls1 = getADirectSuperclass*(cls2) + cls1 = cls2.getADirectSuperclass*() ) } -Class exceptClass(ExceptStmt ex) { ex.getType() = classTracker(result).asExpr() } +ExceptType exceptClass(ExceptStmt ex) { ex.getType() = result.getAUse().asExpr() } -from ExceptStmt ex1, Class cls1, ExceptStmt ex2, Class cls2, string msg +from ExceptStmt ex1, ExceptType cls1, ExceptStmt ex2, ExceptType cls2, string msg where incorrectExceptOrder(ex1, cls1, ex2, cls2) and if cls1 = cls2 From 9edfd7a6fbbbc66ca609e2de1007306a9034c0b8 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 21 Aug 2025 14:01:24 +0100 Subject: [PATCH 003/219] Use generator script directly --- .../python/frameworks/builtins.model.yml | 985 +++++++++++++----- .../process-builtin-exceptions.py | 31 + 2 files changed, 768 insertions(+), 248 deletions(-) create mode 100644 python/ql/src/meta/ClassHierarchy/process-builtin-exceptions.py diff --git a/python/ql/lib/semmle/python/frameworks/builtins.model.yml b/python/ql/lib/semmle/python/frameworks/builtins.model.yml index 9789b5479036..da976cb40bb6 100644 --- a/python/ql/lib/semmle/python/frameworks/builtins.model.yml +++ b/python/ql/lib/semmle/python/frameworks/builtins.model.yml @@ -1,249 +1,738 @@ +# process-builtin-exceptions 0.0.1; Python 3.11.0rc2 extensions: - - addsTo: - pack: codeql/python-all - extensible: typeModel - data: - - ['builtins.PendingDeprecationWarning~Subclass', 'builtins.PendingDeprecationWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.PendingDeprecationWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.PendingDeprecationWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.PendingDeprecationWarning', ''] - - ['builtins.UnicodeWarning~Subclass', 'builtins.UnicodeWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.UnicodeWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.UnicodeWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.UnicodeWarning', ''] - - ['builtins.StopAsyncIteration~Subclass', 'builtins.StopAsyncIteration', ''] - - ['builtins.Exception~Subclass', 'builtins.StopAsyncIteration', ''] - - ['builtins.BaseException~Subclass', 'builtins.StopAsyncIteration', ''] - - ['builtins.KeyboardInterrupt~Subclass', 'builtins.KeyboardInterrupt', ''] - - ['builtins.BaseException~Subclass', 'builtins.KeyboardInterrupt', ''] - - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionError', ''] - - ['builtins.OSError~Subclass', 'builtins.ConnectionError', ''] - - ['builtins.Exception~Subclass', 'builtins.ConnectionError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ConnectionError', ''] - - ['builtins.ConnectionResetError~Subclass', 'builtins.ConnectionResetError', ''] - - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionResetError', ''] - - ['builtins.OSError~Subclass', 'builtins.ConnectionResetError', ''] - - ['builtins.Exception~Subclass', 'builtins.ConnectionResetError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ConnectionResetError', ''] - - ['builtins.InterruptedError~Subclass', 'builtins.InterruptedError', ''] - - ['builtins.OSError~Subclass', 'builtins.InterruptedError', ''] - - ['builtins.Exception~Subclass', 'builtins.InterruptedError', ''] - - ['builtins.BaseException~Subclass', 'builtins.InterruptedError', ''] - - ['builtins.RuntimeError~Subclass', 'builtins.RuntimeError', ''] - - ['builtins.Exception~Subclass', 'builtins.RuntimeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.RuntimeError', ''] - - ['builtins.AttributeError~Subclass', 'builtins.AttributeError', ''] - - ['builtins.Exception~Subclass', 'builtins.AttributeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.AttributeError', ''] - - ['builtins.IndexError~Subclass', 'builtins.IndexError', ''] - - ['builtins.LookupError~Subclass', 'builtins.IndexError', ''] - - ['builtins.Exception~Subclass', 'builtins.IndexError', ''] - - ['builtins.BaseException~Subclass', 'builtins.IndexError', ''] - - ['builtins.UnicodeDecodeError~Subclass', 'builtins.UnicodeDecodeError', ''] - - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeDecodeError', ''] - - ['builtins.ValueError~Subclass', 'builtins.UnicodeDecodeError', ''] - - ['builtins.Exception~Subclass', 'builtins.UnicodeDecodeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.UnicodeDecodeError', ''] - - ['builtins.OverflowError~Subclass', 'builtins.OverflowError', ''] - - ['builtins.ArithmeticError~Subclass', 'builtins.OverflowError', ''] - - ['builtins.Exception~Subclass', 'builtins.OverflowError', ''] - - ['builtins.BaseException~Subclass', 'builtins.OverflowError', ''] - - ['builtins.BufferError~Subclass', 'builtins.BufferError', ''] - - ['builtins.Exception~Subclass', 'builtins.BufferError', ''] - - ['builtins.BaseException~Subclass', 'builtins.BufferError', ''] - - ['builtins.SyntaxWarning~Subclass', 'builtins.SyntaxWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.SyntaxWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.SyntaxWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.SyntaxWarning', ''] - - ['builtins.BytesWarning~Subclass', 'builtins.BytesWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.BytesWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.BytesWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.BytesWarning', ''] - - ['builtins.StopIteration~Subclass', 'builtins.StopIteration', ''] - - ['builtins.Exception~Subclass', 'builtins.StopIteration', ''] - - ['builtins.BaseException~Subclass', 'builtins.StopIteration', ''] - - ['builtins.ImportError~Subclass', 'builtins.ImportError', ''] - - ['builtins.Exception~Subclass', 'builtins.ImportError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ImportError', ''] - - ['builtins.ChildProcessError~Subclass', 'builtins.ChildProcessError', ''] - - ['builtins.OSError~Subclass', 'builtins.ChildProcessError', ''] - - ['builtins.Exception~Subclass', 'builtins.ChildProcessError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ChildProcessError', ''] - - ['builtins.FileExistsError~Subclass', 'builtins.FileExistsError', ''] - - ['builtins.OSError~Subclass', 'builtins.FileExistsError', ''] - - ['builtins.Exception~Subclass', 'builtins.FileExistsError', ''] - - ['builtins.BaseException~Subclass', 'builtins.FileExistsError', ''] - - ['builtins.PermissionError~Subclass', 'builtins.PermissionError', ''] - - ['builtins.OSError~Subclass', 'builtins.PermissionError', ''] - - ['builtins.Exception~Subclass', 'builtins.PermissionError', ''] - - ['builtins.BaseException~Subclass', 'builtins.PermissionError', ''] - - ['builtins.RecursionError~Subclass', 'builtins.RecursionError', ''] - - ['builtins.RuntimeError~Subclass', 'builtins.RecursionError', ''] - - ['builtins.Exception~Subclass', 'builtins.RecursionError', ''] - - ['builtins.BaseException~Subclass', 'builtins.RecursionError', ''] - - ['builtins.SyntaxError~Subclass', 'builtins.SyntaxError', ''] - - ['builtins.Exception~Subclass', 'builtins.SyntaxError', ''] - - ['builtins.BaseException~Subclass', 'builtins.SyntaxError', ''] - - ['builtins.ExceptionGroup~Subclass', 'builtins.ExceptionGroup', ''] - - ['builtins.BaseExceptionGroup~Subclass', 'builtins.ExceptionGroup', ''] - - ['builtins.Exception~Subclass', 'builtins.ExceptionGroup', ''] - - ['builtins.BaseException~Subclass', 'builtins.ExceptionGroup', ''] - - ['builtins.KeyError~Subclass', 'builtins.KeyError', ''] - - ['builtins.LookupError~Subclass', 'builtins.KeyError', ''] - - ['builtins.Exception~Subclass', 'builtins.KeyError', ''] - - ['builtins.BaseException~Subclass', 'builtins.KeyError', ''] - - ['builtins.UnicodeTranslateError~Subclass', 'builtins.UnicodeTranslateError', ''] - - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeTranslateError', ''] - - ['builtins.ValueError~Subclass', 'builtins.UnicodeTranslateError', ''] - - ['builtins.Exception~Subclass', 'builtins.UnicodeTranslateError', ''] - - ['builtins.BaseException~Subclass', 'builtins.UnicodeTranslateError', ''] - - ['builtins.ZeroDivisionError~Subclass', 'builtins.ZeroDivisionError', ''] - - ['builtins.ArithmeticError~Subclass', 'builtins.ZeroDivisionError', ''] - - ['builtins.Exception~Subclass', 'builtins.ZeroDivisionError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ZeroDivisionError', ''] - - ['builtins.Warning~Subclass', 'builtins.Warning', ''] - - ['builtins.Exception~Subclass', 'builtins.Warning', ''] - - ['builtins.BaseException~Subclass', 'builtins.Warning', ''] - - ['builtins.RuntimeWarning~Subclass', 'builtins.RuntimeWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.RuntimeWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.RuntimeWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.RuntimeWarning', ''] - - ['builtins.EncodingWarning~Subclass', 'builtins.EncodingWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.EncodingWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.EncodingWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.EncodingWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.BaseException', ''] - - ['builtins.GeneratorExit~Subclass', 'builtins.GeneratorExit', ''] - - ['builtins.BaseException~Subclass', 'builtins.GeneratorExit', ''] - - ['builtins.ModuleNotFoundError~Subclass', 'builtins.ModuleNotFoundError', ''] - - ['builtins.ImportError~Subclass', 'builtins.ModuleNotFoundError', ''] - - ['builtins.Exception~Subclass', 'builtins.ModuleNotFoundError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ModuleNotFoundError', ''] - - ['builtins.BrokenPipeError~Subclass', 'builtins.BrokenPipeError', ''] - - ['builtins.ConnectionError~Subclass', 'builtins.BrokenPipeError', ''] - - ['builtins.OSError~Subclass', 'builtins.BrokenPipeError', ''] - - ['builtins.Exception~Subclass', 'builtins.BrokenPipeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.BrokenPipeError', ''] - - ['builtins.FileNotFoundError~Subclass', 'builtins.FileNotFoundError', ''] - - ['builtins.OSError~Subclass', 'builtins.FileNotFoundError', ''] - - ['builtins.Exception~Subclass', 'builtins.FileNotFoundError', ''] - - ['builtins.BaseException~Subclass', 'builtins.FileNotFoundError', ''] - - ['builtins.ProcessLookupError~Subclass', 'builtins.ProcessLookupError', ''] - - ['builtins.OSError~Subclass', 'builtins.ProcessLookupError', ''] - - ['builtins.Exception~Subclass', 'builtins.ProcessLookupError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ProcessLookupError', ''] - - ['builtins.NotImplementedError~Subclass', 'builtins.NotImplementedError', ''] - - ['builtins.RuntimeError~Subclass', 'builtins.NotImplementedError', ''] - - ['builtins.Exception~Subclass', 'builtins.NotImplementedError', ''] - - ['builtins.BaseException~Subclass', 'builtins.NotImplementedError', ''] - - ['builtins.IndentationError~Subclass', 'builtins.IndentationError', ''] - - ['builtins.SyntaxError~Subclass', 'builtins.IndentationError', ''] - - ['builtins.Exception~Subclass', 'builtins.IndentationError', ''] - - ['builtins.BaseException~Subclass', 'builtins.IndentationError', ''] - - ['builtins.ValueError~Subclass', 'builtins.ValueError', ''] - - ['builtins.Exception~Subclass', 'builtins.ValueError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ValueError', ''] - - ['builtins.AssertionError~Subclass', 'builtins.AssertionError', ''] - - ['builtins.Exception~Subclass', 'builtins.AssertionError', ''] - - ['builtins.BaseException~Subclass', 'builtins.AssertionError', ''] - - ['builtins.SystemError~Subclass', 'builtins.SystemError', ''] - - ['builtins.Exception~Subclass', 'builtins.SystemError', ''] - - ['builtins.BaseException~Subclass', 'builtins.SystemError', ''] - - ['builtins.UserWarning~Subclass', 'builtins.UserWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.UserWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.UserWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.UserWarning', ''] - - ['builtins.FutureWarning~Subclass', 'builtins.FutureWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.FutureWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.FutureWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.FutureWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.Exception', ''] - - ['builtins.BaseException~Subclass', 'builtins.Exception', ''] - - ['builtins.ResourceWarning~Subclass', 'builtins.ResourceWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.ResourceWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.ResourceWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.ResourceWarning', ''] - - ['builtins.SystemExit~Subclass', 'builtins.SystemExit', ''] - - ['builtins.BaseException~Subclass', 'builtins.SystemExit', ''] - - ['builtins.OSError~Subclass', 'builtins.OSError', ''] - - ['builtins.Exception~Subclass', 'builtins.OSError', ''] - - ['builtins.BaseException~Subclass', 'builtins.OSError', ''] - - ['builtins.ConnectionAbortedError~Subclass', 'builtins.ConnectionAbortedError', ''] - - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionAbortedError', ''] - - ['builtins.OSError~Subclass', 'builtins.ConnectionAbortedError', ''] - - ['builtins.Exception~Subclass', 'builtins.ConnectionAbortedError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ConnectionAbortedError', ''] - - ['builtins.IsADirectoryError~Subclass', 'builtins.IsADirectoryError', ''] - - ['builtins.OSError~Subclass', 'builtins.IsADirectoryError', ''] - - ['builtins.Exception~Subclass', 'builtins.IsADirectoryError', ''] - - ['builtins.BaseException~Subclass', 'builtins.IsADirectoryError', ''] - - ['builtins.TimeoutError~Subclass', 'builtins.TimeoutError', ''] - - ['builtins.OSError~Subclass', 'builtins.TimeoutError', ''] - - ['builtins.Exception~Subclass', 'builtins.TimeoutError', ''] - - ['builtins.BaseException~Subclass', 'builtins.TimeoutError', ''] - - ['builtins.NameError~Subclass', 'builtins.NameError', ''] - - ['builtins.Exception~Subclass', 'builtins.NameError', ''] - - ['builtins.BaseException~Subclass', 'builtins.NameError', ''] - - ['builtins.TabError~Subclass', 'builtins.TabError', ''] - - ['builtins.IndentationError~Subclass', 'builtins.TabError', ''] - - ['builtins.SyntaxError~Subclass', 'builtins.TabError', ''] - - ['builtins.Exception~Subclass', 'builtins.TabError', ''] - - ['builtins.BaseException~Subclass', 'builtins.TabError', ''] - - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeError', ''] - - ['builtins.ValueError~Subclass', 'builtins.UnicodeError', ''] - - ['builtins.Exception~Subclass', 'builtins.UnicodeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.UnicodeError', ''] - - ['builtins.ArithmeticError~Subclass', 'builtins.ArithmeticError', ''] - - ['builtins.Exception~Subclass', 'builtins.ArithmeticError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ArithmeticError', ''] - - ['builtins.ReferenceError~Subclass', 'builtins.ReferenceError', ''] - - ['builtins.Exception~Subclass', 'builtins.ReferenceError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ReferenceError', ''] - - ['builtins.DeprecationWarning~Subclass', 'builtins.DeprecationWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.DeprecationWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.DeprecationWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.DeprecationWarning', ''] - - ['builtins.ImportWarning~Subclass', 'builtins.ImportWarning', ''] - - ['builtins.Warning~Subclass', 'builtins.ImportWarning', ''] - - ['builtins.Exception~Subclass', 'builtins.ImportWarning', ''] - - ['builtins.BaseException~Subclass', 'builtins.ImportWarning', ''] - - ['builtins.TypeError~Subclass', 'builtins.TypeError', ''] - - ['builtins.Exception~Subclass', 'builtins.TypeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.TypeError', ''] - - ['builtins.BaseExceptionGroup~Subclass', 'builtins.BaseExceptionGroup', ''] - - ['builtins.BaseException~Subclass', 'builtins.BaseExceptionGroup', ''] - - ['builtins.BlockingIOError~Subclass', 'builtins.BlockingIOError', ''] - - ['builtins.OSError~Subclass', 'builtins.BlockingIOError', ''] - - ['builtins.Exception~Subclass', 'builtins.BlockingIOError', ''] - - ['builtins.BaseException~Subclass', 'builtins.BlockingIOError', ''] - - ['builtins.ConnectionRefusedError~Subclass', 'builtins.ConnectionRefusedError', ''] - - ['builtins.ConnectionError~Subclass', 'builtins.ConnectionRefusedError', ''] - - ['builtins.OSError~Subclass', 'builtins.ConnectionRefusedError', ''] - - ['builtins.Exception~Subclass', 'builtins.ConnectionRefusedError', ''] - - ['builtins.BaseException~Subclass', 'builtins.ConnectionRefusedError', ''] - - ['builtins.NotADirectoryError~Subclass', 'builtins.NotADirectoryError', ''] - - ['builtins.OSError~Subclass', 'builtins.NotADirectoryError', ''] - - ['builtins.Exception~Subclass', 'builtins.NotADirectoryError', ''] - - ['builtins.BaseException~Subclass', 'builtins.NotADirectoryError', ''] - - ['builtins.EOFError~Subclass', 'builtins.EOFError', ''] - - ['builtins.Exception~Subclass', 'builtins.EOFError', ''] - - ['builtins.BaseException~Subclass', 'builtins.EOFError', ''] - - ['builtins.UnboundLocalError~Subclass', 'builtins.UnboundLocalError', ''] - - ['builtins.NameError~Subclass', 'builtins.UnboundLocalError', ''] - - ['builtins.Exception~Subclass', 'builtins.UnboundLocalError', ''] - - ['builtins.BaseException~Subclass', 'builtins.UnboundLocalError', ''] - - ['builtins.LookupError~Subclass', 'builtins.LookupError', ''] - - ['builtins.Exception~Subclass', 'builtins.LookupError', ''] - - ['builtins.BaseException~Subclass', 'builtins.LookupError', ''] - - ['builtins.UnicodeEncodeError~Subclass', 'builtins.UnicodeEncodeError', ''] - - ['builtins.UnicodeError~Subclass', 'builtins.UnicodeEncodeError', ''] - - ['builtins.ValueError~Subclass', 'builtins.UnicodeEncodeError', ''] - - ['builtins.Exception~Subclass', 'builtins.UnicodeEncodeError', ''] - - ['builtins.BaseException~Subclass', 'builtins.UnicodeEncodeError', ''] - - ['builtins.FloatingPointError~Subclass', 'builtins.FloatingPointError', ''] - - ['builtins.ArithmeticError~Subclass', 'builtins.FloatingPointError', ''] - - ['builtins.Exception~Subclass', 'builtins.FloatingPointError', ''] - - ['builtins.BaseException~Subclass', 'builtins.FloatingPointError', ''] - - ['builtins.MemoryError~Subclass', 'builtins.MemoryError', ''] - - ['builtins.Exception~Subclass', 'builtins.MemoryError', ''] - - ['builtins.BaseException~Subclass', 'builtins.MemoryError', ''] \ No newline at end of file +- addsTo: + extensible: typeModel + pack: codeql/python-all + data: + - - builtins.PendingDeprecationWarning~Subclass + - builtins.PendingDeprecationWarning + - '' + - - builtins.Warning~Subclass + - builtins.PendingDeprecationWarning + - '' + - - builtins.Exception~Subclass + - builtins.PendingDeprecationWarning + - '' + - - builtins.BaseException~Subclass + - builtins.PendingDeprecationWarning + - '' + - - builtins.UnicodeWarning~Subclass + - builtins.UnicodeWarning + - '' + - - builtins.Warning~Subclass + - builtins.UnicodeWarning + - '' + - - builtins.Exception~Subclass + - builtins.UnicodeWarning + - '' + - - builtins.BaseException~Subclass + - builtins.UnicodeWarning + - '' + - - builtins.StopAsyncIteration~Subclass + - builtins.StopAsyncIteration + - '' + - - builtins.Exception~Subclass + - builtins.StopAsyncIteration + - '' + - - builtins.BaseException~Subclass + - builtins.StopAsyncIteration + - '' + - - builtins.KeyboardInterrupt~Subclass + - builtins.KeyboardInterrupt + - '' + - - builtins.BaseException~Subclass + - builtins.KeyboardInterrupt + - '' + - - builtins.ConnectionError~Subclass + - builtins.ConnectionError + - '' + - - builtins.OSError~Subclass + - builtins.ConnectionError + - '' + - - builtins.Exception~Subclass + - builtins.ConnectionError + - '' + - - builtins.BaseException~Subclass + - builtins.ConnectionError + - '' + - - builtins.ConnectionResetError~Subclass + - builtins.ConnectionResetError + - '' + - - builtins.ConnectionError~Subclass + - builtins.ConnectionResetError + - '' + - - builtins.OSError~Subclass + - builtins.ConnectionResetError + - '' + - - builtins.Exception~Subclass + - builtins.ConnectionResetError + - '' + - - builtins.BaseException~Subclass + - builtins.ConnectionResetError + - '' + - - builtins.InterruptedError~Subclass + - builtins.InterruptedError + - '' + - - builtins.OSError~Subclass + - builtins.InterruptedError + - '' + - - builtins.Exception~Subclass + - builtins.InterruptedError + - '' + - - builtins.BaseException~Subclass + - builtins.InterruptedError + - '' + - - builtins.RuntimeError~Subclass + - builtins.RuntimeError + - '' + - - builtins.Exception~Subclass + - builtins.RuntimeError + - '' + - - builtins.BaseException~Subclass + - builtins.RuntimeError + - '' + - - builtins.AttributeError~Subclass + - builtins.AttributeError + - '' + - - builtins.Exception~Subclass + - builtins.AttributeError + - '' + - - builtins.BaseException~Subclass + - builtins.AttributeError + - '' + - - builtins.IndexError~Subclass + - builtins.IndexError + - '' + - - builtins.LookupError~Subclass + - builtins.IndexError + - '' + - - builtins.Exception~Subclass + - builtins.IndexError + - '' + - - builtins.BaseException~Subclass + - builtins.IndexError + - '' + - - builtins.UnicodeDecodeError~Subclass + - builtins.UnicodeDecodeError + - '' + - - builtins.UnicodeError~Subclass + - builtins.UnicodeDecodeError + - '' + - - builtins.ValueError~Subclass + - builtins.UnicodeDecodeError + - '' + - - builtins.Exception~Subclass + - builtins.UnicodeDecodeError + - '' + - - builtins.BaseException~Subclass + - builtins.UnicodeDecodeError + - '' + - - builtins.ExceptionGroup~Subclass + - builtins.ExceptionGroup + - '' + - - builtins.BaseExceptionGroup~Subclass + - builtins.ExceptionGroup + - '' + - - builtins.Exception~Subclass + - builtins.ExceptionGroup + - '' + - - builtins.BaseException~Subclass + - builtins.ExceptionGroup + - '' + - - builtins.OverflowError~Subclass + - builtins.OverflowError + - '' + - - builtins.ArithmeticError~Subclass + - builtins.OverflowError + - '' + - - builtins.Exception~Subclass + - builtins.OverflowError + - '' + - - builtins.BaseException~Subclass + - builtins.OverflowError + - '' + - - builtins.BufferError~Subclass + - builtins.BufferError + - '' + - - builtins.Exception~Subclass + - builtins.BufferError + - '' + - - builtins.BaseException~Subclass + - builtins.BufferError + - '' + - - builtins.SyntaxWarning~Subclass + - builtins.SyntaxWarning + - '' + - - builtins.Warning~Subclass + - builtins.SyntaxWarning + - '' + - - builtins.Exception~Subclass + - builtins.SyntaxWarning + - '' + - - builtins.BaseException~Subclass + - builtins.SyntaxWarning + - '' + - - builtins.BytesWarning~Subclass + - builtins.BytesWarning + - '' + - - builtins.Warning~Subclass + - builtins.BytesWarning + - '' + - - builtins.Exception~Subclass + - builtins.BytesWarning + - '' + - - builtins.BaseException~Subclass + - builtins.BytesWarning + - '' + - - builtins.StopIteration~Subclass + - builtins.StopIteration + - '' + - - builtins.Exception~Subclass + - builtins.StopIteration + - '' + - - builtins.BaseException~Subclass + - builtins.StopIteration + - '' + - - builtins.ImportError~Subclass + - builtins.ImportError + - '' + - - builtins.Exception~Subclass + - builtins.ImportError + - '' + - - builtins.BaseException~Subclass + - builtins.ImportError + - '' + - - builtins.ChildProcessError~Subclass + - builtins.ChildProcessError + - '' + - - builtins.OSError~Subclass + - builtins.ChildProcessError + - '' + - - builtins.Exception~Subclass + - builtins.ChildProcessError + - '' + - - builtins.BaseException~Subclass + - builtins.ChildProcessError + - '' + - - builtins.FileExistsError~Subclass + - builtins.FileExistsError + - '' + - - builtins.OSError~Subclass + - builtins.FileExistsError + - '' + - - builtins.Exception~Subclass + - builtins.FileExistsError + - '' + - - builtins.BaseException~Subclass + - builtins.FileExistsError + - '' + - - builtins.PermissionError~Subclass + - builtins.PermissionError + - '' + - - builtins.OSError~Subclass + - builtins.PermissionError + - '' + - - builtins.Exception~Subclass + - builtins.PermissionError + - '' + - - builtins.BaseException~Subclass + - builtins.PermissionError + - '' + - - builtins.RecursionError~Subclass + - builtins.RecursionError + - '' + - - builtins.RuntimeError~Subclass + - builtins.RecursionError + - '' + - - builtins.Exception~Subclass + - builtins.RecursionError + - '' + - - builtins.BaseException~Subclass + - builtins.RecursionError + - '' + - - builtins.SyntaxError~Subclass + - builtins.SyntaxError + - '' + - - builtins.Exception~Subclass + - builtins.SyntaxError + - '' + - - builtins.BaseException~Subclass + - builtins.SyntaxError + - '' + - - builtins.KeyError~Subclass + - builtins.KeyError + - '' + - - builtins.LookupError~Subclass + - builtins.KeyError + - '' + - - builtins.Exception~Subclass + - builtins.KeyError + - '' + - - builtins.BaseException~Subclass + - builtins.KeyError + - '' + - - builtins.UnicodeTranslateError~Subclass + - builtins.UnicodeTranslateError + - '' + - - builtins.UnicodeError~Subclass + - builtins.UnicodeTranslateError + - '' + - - builtins.ValueError~Subclass + - builtins.UnicodeTranslateError + - '' + - - builtins.Exception~Subclass + - builtins.UnicodeTranslateError + - '' + - - builtins.BaseException~Subclass + - builtins.UnicodeTranslateError + - '' + - - builtins.ZeroDivisionError~Subclass + - builtins.ZeroDivisionError + - '' + - - builtins.ArithmeticError~Subclass + - builtins.ZeroDivisionError + - '' + - - builtins.Exception~Subclass + - builtins.ZeroDivisionError + - '' + - - builtins.BaseException~Subclass + - builtins.ZeroDivisionError + - '' + - - builtins.Warning~Subclass + - builtins.Warning + - '' + - - builtins.Exception~Subclass + - builtins.Warning + - '' + - - builtins.BaseException~Subclass + - builtins.Warning + - '' + - - builtins.RuntimeWarning~Subclass + - builtins.RuntimeWarning + - '' + - - builtins.Warning~Subclass + - builtins.RuntimeWarning + - '' + - - builtins.Exception~Subclass + - builtins.RuntimeWarning + - '' + - - builtins.BaseException~Subclass + - builtins.RuntimeWarning + - '' + - - builtins.EncodingWarning~Subclass + - builtins.EncodingWarning + - '' + - - builtins.Warning~Subclass + - builtins.EncodingWarning + - '' + - - builtins.Exception~Subclass + - builtins.EncodingWarning + - '' + - - builtins.BaseException~Subclass + - builtins.EncodingWarning + - '' + - - builtins.BaseException~Subclass + - builtins.BaseException + - '' + - - builtins.GeneratorExit~Subclass + - builtins.GeneratorExit + - '' + - - builtins.BaseException~Subclass + - builtins.GeneratorExit + - '' + - - builtins.ModuleNotFoundError~Subclass + - builtins.ModuleNotFoundError + - '' + - - builtins.ImportError~Subclass + - builtins.ModuleNotFoundError + - '' + - - builtins.Exception~Subclass + - builtins.ModuleNotFoundError + - '' + - - builtins.BaseException~Subclass + - builtins.ModuleNotFoundError + - '' + - - builtins.BrokenPipeError~Subclass + - builtins.BrokenPipeError + - '' + - - builtins.ConnectionError~Subclass + - builtins.BrokenPipeError + - '' + - - builtins.OSError~Subclass + - builtins.BrokenPipeError + - '' + - - builtins.Exception~Subclass + - builtins.BrokenPipeError + - '' + - - builtins.BaseException~Subclass + - builtins.BrokenPipeError + - '' + - - builtins.FileNotFoundError~Subclass + - builtins.FileNotFoundError + - '' + - - builtins.OSError~Subclass + - builtins.FileNotFoundError + - '' + - - builtins.Exception~Subclass + - builtins.FileNotFoundError + - '' + - - builtins.BaseException~Subclass + - builtins.FileNotFoundError + - '' + - - builtins.ProcessLookupError~Subclass + - builtins.ProcessLookupError + - '' + - - builtins.OSError~Subclass + - builtins.ProcessLookupError + - '' + - - builtins.Exception~Subclass + - builtins.ProcessLookupError + - '' + - - builtins.BaseException~Subclass + - builtins.ProcessLookupError + - '' + - - builtins.NotImplementedError~Subclass + - builtins.NotImplementedError + - '' + - - builtins.RuntimeError~Subclass + - builtins.NotImplementedError + - '' + - - builtins.Exception~Subclass + - builtins.NotImplementedError + - '' + - - builtins.BaseException~Subclass + - builtins.NotImplementedError + - '' + - - builtins.IndentationError~Subclass + - builtins.IndentationError + - '' + - - builtins.SyntaxError~Subclass + - builtins.IndentationError + - '' + - - builtins.Exception~Subclass + - builtins.IndentationError + - '' + - - builtins.BaseException~Subclass + - builtins.IndentationError + - '' + - - builtins.ValueError~Subclass + - builtins.ValueError + - '' + - - builtins.Exception~Subclass + - builtins.ValueError + - '' + - - builtins.BaseException~Subclass + - builtins.ValueError + - '' + - - builtins.AssertionError~Subclass + - builtins.AssertionError + - '' + - - builtins.Exception~Subclass + - builtins.AssertionError + - '' + - - builtins.BaseException~Subclass + - builtins.AssertionError + - '' + - - builtins.SystemError~Subclass + - builtins.SystemError + - '' + - - builtins.Exception~Subclass + - builtins.SystemError + - '' + - - builtins.BaseException~Subclass + - builtins.SystemError + - '' + - - builtins.UserWarning~Subclass + - builtins.UserWarning + - '' + - - builtins.Warning~Subclass + - builtins.UserWarning + - '' + - - builtins.Exception~Subclass + - builtins.UserWarning + - '' + - - builtins.BaseException~Subclass + - builtins.UserWarning + - '' + - - builtins.FutureWarning~Subclass + - builtins.FutureWarning + - '' + - - builtins.Warning~Subclass + - builtins.FutureWarning + - '' + - - builtins.Exception~Subclass + - builtins.FutureWarning + - '' + - - builtins.BaseException~Subclass + - builtins.FutureWarning + - '' + - - builtins.Exception~Subclass + - builtins.Exception + - '' + - - builtins.BaseException~Subclass + - builtins.Exception + - '' + - - builtins.ResourceWarning~Subclass + - builtins.ResourceWarning + - '' + - - builtins.Warning~Subclass + - builtins.ResourceWarning + - '' + - - builtins.Exception~Subclass + - builtins.ResourceWarning + - '' + - - builtins.BaseException~Subclass + - builtins.ResourceWarning + - '' + - - builtins.SystemExit~Subclass + - builtins.SystemExit + - '' + - - builtins.BaseException~Subclass + - builtins.SystemExit + - '' + - - builtins.OSError~Subclass + - builtins.OSError + - '' + - - builtins.Exception~Subclass + - builtins.OSError + - '' + - - builtins.BaseException~Subclass + - builtins.OSError + - '' + - - builtins.ConnectionAbortedError~Subclass + - builtins.ConnectionAbortedError + - '' + - - builtins.ConnectionError~Subclass + - builtins.ConnectionAbortedError + - '' + - - builtins.OSError~Subclass + - builtins.ConnectionAbortedError + - '' + - - builtins.Exception~Subclass + - builtins.ConnectionAbortedError + - '' + - - builtins.BaseException~Subclass + - builtins.ConnectionAbortedError + - '' + - - builtins.IsADirectoryError~Subclass + - builtins.IsADirectoryError + - '' + - - builtins.OSError~Subclass + - builtins.IsADirectoryError + - '' + - - builtins.Exception~Subclass + - builtins.IsADirectoryError + - '' + - - builtins.BaseException~Subclass + - builtins.IsADirectoryError + - '' + - - builtins.TimeoutError~Subclass + - builtins.TimeoutError + - '' + - - builtins.OSError~Subclass + - builtins.TimeoutError + - '' + - - builtins.Exception~Subclass + - builtins.TimeoutError + - '' + - - builtins.BaseException~Subclass + - builtins.TimeoutError + - '' + - - builtins.NameError~Subclass + - builtins.NameError + - '' + - - builtins.Exception~Subclass + - builtins.NameError + - '' + - - builtins.BaseException~Subclass + - builtins.NameError + - '' + - - builtins.TabError~Subclass + - builtins.TabError + - '' + - - builtins.IndentationError~Subclass + - builtins.TabError + - '' + - - builtins.SyntaxError~Subclass + - builtins.TabError + - '' + - - builtins.Exception~Subclass + - builtins.TabError + - '' + - - builtins.BaseException~Subclass + - builtins.TabError + - '' + - - builtins.UnicodeError~Subclass + - builtins.UnicodeError + - '' + - - builtins.ValueError~Subclass + - builtins.UnicodeError + - '' + - - builtins.Exception~Subclass + - builtins.UnicodeError + - '' + - - builtins.BaseException~Subclass + - builtins.UnicodeError + - '' + - - builtins.ArithmeticError~Subclass + - builtins.ArithmeticError + - '' + - - builtins.Exception~Subclass + - builtins.ArithmeticError + - '' + - - builtins.BaseException~Subclass + - builtins.ArithmeticError + - '' + - - builtins.ReferenceError~Subclass + - builtins.ReferenceError + - '' + - - builtins.Exception~Subclass + - builtins.ReferenceError + - '' + - - builtins.BaseException~Subclass + - builtins.ReferenceError + - '' + - - builtins.DeprecationWarning~Subclass + - builtins.DeprecationWarning + - '' + - - builtins.Warning~Subclass + - builtins.DeprecationWarning + - '' + - - builtins.Exception~Subclass + - builtins.DeprecationWarning + - '' + - - builtins.BaseException~Subclass + - builtins.DeprecationWarning + - '' + - - builtins.ImportWarning~Subclass + - builtins.ImportWarning + - '' + - - builtins.Warning~Subclass + - builtins.ImportWarning + - '' + - - builtins.Exception~Subclass + - builtins.ImportWarning + - '' + - - builtins.BaseException~Subclass + - builtins.ImportWarning + - '' + - - builtins.TypeError~Subclass + - builtins.TypeError + - '' + - - builtins.Exception~Subclass + - builtins.TypeError + - '' + - - builtins.BaseException~Subclass + - builtins.TypeError + - '' + - - builtins.BaseExceptionGroup~Subclass + - builtins.BaseExceptionGroup + - '' + - - builtins.BaseException~Subclass + - builtins.BaseExceptionGroup + - '' + - - builtins.BlockingIOError~Subclass + - builtins.BlockingIOError + - '' + - - builtins.OSError~Subclass + - builtins.BlockingIOError + - '' + - - builtins.Exception~Subclass + - builtins.BlockingIOError + - '' + - - builtins.BaseException~Subclass + - builtins.BlockingIOError + - '' + - - builtins.ConnectionRefusedError~Subclass + - builtins.ConnectionRefusedError + - '' + - - builtins.ConnectionError~Subclass + - builtins.ConnectionRefusedError + - '' + - - builtins.OSError~Subclass + - builtins.ConnectionRefusedError + - '' + - - builtins.Exception~Subclass + - builtins.ConnectionRefusedError + - '' + - - builtins.BaseException~Subclass + - builtins.ConnectionRefusedError + - '' + - - builtins.NotADirectoryError~Subclass + - builtins.NotADirectoryError + - '' + - - builtins.OSError~Subclass + - builtins.NotADirectoryError + - '' + - - builtins.Exception~Subclass + - builtins.NotADirectoryError + - '' + - - builtins.BaseException~Subclass + - builtins.NotADirectoryError + - '' + - - builtins.EOFError~Subclass + - builtins.EOFError + - '' + - - builtins.Exception~Subclass + - builtins.EOFError + - '' + - - builtins.BaseException~Subclass + - builtins.EOFError + - '' + - - builtins.UnboundLocalError~Subclass + - builtins.UnboundLocalError + - '' + - - builtins.NameError~Subclass + - builtins.UnboundLocalError + - '' + - - builtins.Exception~Subclass + - builtins.UnboundLocalError + - '' + - - builtins.BaseException~Subclass + - builtins.UnboundLocalError + - '' + - - builtins.LookupError~Subclass + - builtins.LookupError + - '' + - - builtins.Exception~Subclass + - builtins.LookupError + - '' + - - builtins.BaseException~Subclass + - builtins.LookupError + - '' + - - builtins.UnicodeEncodeError~Subclass + - builtins.UnicodeEncodeError + - '' + - - builtins.UnicodeError~Subclass + - builtins.UnicodeEncodeError + - '' + - - builtins.ValueError~Subclass + - builtins.UnicodeEncodeError + - '' + - - builtins.Exception~Subclass + - builtins.UnicodeEncodeError + - '' + - - builtins.BaseException~Subclass + - builtins.UnicodeEncodeError + - '' + - - builtins.FloatingPointError~Subclass + - builtins.FloatingPointError + - '' + - - builtins.ArithmeticError~Subclass + - builtins.FloatingPointError + - '' + - - builtins.Exception~Subclass + - builtins.FloatingPointError + - '' + - - builtins.BaseException~Subclass + - builtins.FloatingPointError + - '' + - - builtins.MemoryError~Subclass + - builtins.MemoryError + - '' + - - builtins.Exception~Subclass + - builtins.MemoryError + - '' + - - builtins.BaseException~Subclass + - builtins.MemoryError + - '' diff --git a/python/ql/src/meta/ClassHierarchy/process-builtin-exceptions.py b/python/ql/src/meta/ClassHierarchy/process-builtin-exceptions.py new file mode 100644 index 000000000000..fc0266a5b993 --- /dev/null +++ b/python/ql/src/meta/ClassHierarchy/process-builtin-exceptions.py @@ -0,0 +1,31 @@ +from shared_subclass_functions import wrap_in_template +import sys +import yaml +from pathlib import Path + +py_version = sys.version.split()[0] +VERSION = f"process-builtin-exceptions 0.0.1; Python {py_version}" + +builtins_model_path = Path(__file__).parent.parent.parent.parent / "lib/semmle/python/frameworks/builtins.model.yml" + +def write_data(data, path: Path): + f = path.open("w+") + f.write(f"# {VERSION}\n") + yaml.dump(data, indent=2, stream=f, Dumper=yaml.CDumper) + +builtin_names = dir(__builtins__) +builtin_dict = {x: getattr(__builtins__,x) for x in builtin_names} + + +builtin_exceptions = {v for v in builtin_dict.values() if type(v) is type and issubclass(v, BaseException)} + +data = [] +for sub in builtin_exceptions: + for base in sub.__mro__: + if issubclass(base, BaseException): + basename = base.__name__ + subname = sub.__name__ + row = [f"builtins.{basename}~Subclass", f"builtins.{subname}", ""] + data.append(row) + +write_data(wrap_in_template(data), builtins_model_path) From eb4841230ab72ce3dc77d66127d0dada993f248b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 25 Aug 2025 13:30:45 +0100 Subject: [PATCH 004/219] Add tests (WIP) --- .../ql/src/Exceptions/IncorrectExceptOrder.ql | 6 ++-- .../general/IncorrectExceptOrder.qlref | 3 +- .../Exceptions/general/exceptions_test.py | 28 ++++++++++++++++++- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Exceptions/IncorrectExceptOrder.ql b/python/ql/src/Exceptions/IncorrectExceptOrder.ql index 5637c9e3b619..6eb1b39b0e64 100644 --- a/python/ql/src/Exceptions/IncorrectExceptOrder.ql +++ b/python/ql/src/Exceptions/IncorrectExceptOrder.ql @@ -1,5 +1,5 @@ /** - * @name Unreachable 'except' block + * @name Unreachable `except` block * @description Handling general exceptions before specific exceptions means that the specific * handlers are never executed. * @kind problem @@ -23,7 +23,7 @@ predicate builtinException(string name) { } predicate builtinExceptionSubclass(string base, string sub) { - typeModel("builtins." + base + "~Subclass", sub, "") + typeModel("builtins." + base + "~Subclass", "builtins." + sub, "") } newtype TExceptType = @@ -48,7 +48,7 @@ class ExceptType extends TExceptType { DataFlow::Node getAUse() { result = classTracker(this.asClass()) or - result = API::builtin(this.asBuiltinName()).asSource() + API::builtin(this.asBuiltinName()).asSource().flowsTo(result) } ExceptType getADirectSuperclass() { diff --git a/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.qlref b/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.qlref index bc4c3a070813..5844968f9d62 100644 --- a/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.qlref +++ b/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.qlref @@ -1 +1,2 @@ -Exceptions/IncorrectExceptOrder.ql +query: Exceptions/IncorrectExceptOrder.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Exceptions/general/exceptions_test.py b/python/ql/test/query-tests/Exceptions/general/exceptions_test.py index d3f782f874f7..291b3cb30e0c 100644 --- a/python/ql/test/query-tests/Exceptions/general/exceptions_test.py +++ b/python/ql/test/query-tests/Exceptions/general/exceptions_test.py @@ -61,8 +61,34 @@ def illegal_handler(): val.attr except Exception: print (2) -except AttributeError: +except AttributeError: # $Alert[py/unreachable-except] print (3) + +class MyExc(ValueError): + pass + +try: + pass +except ValueError: + pass +except MyExc: # $Alert[py/unreachable-except] + pass + +class MyBaseExc(Exception): + pass + +class MySubExc(MyBaseExc): + pass + +try: + pass +except MyBaseExc: + pass +except MySubExc: # $Alert[py/unreachable-except] + pass +except Exception: + pass + #Catch BaseException def catch_base_exception(): From 5ba5007076f3726bebc8a14603d2ebccac78d025 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 6 Aug 2025 12:56:09 +0100 Subject: [PATCH 005/219] Modernize signature mismatch --- .../Functions/SignatureOverriddenMethod.ql | 79 +++++++++++++++---- 1 file changed, 63 insertions(+), 16 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 3e3877bc1393..74c5aaa477e5 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -13,23 +13,70 @@ */ import python -import Expressions.CallArgs +import semmle.python.dataflow.new.internal.DataFlowDispatch -from FunctionValue base, PythonFunctionValue derived -where - not exists(base.getACall()) and - not exists(FunctionValue a_derived | - a_derived.overrides(base) and - exists(a_derived.getACall()) - ) and - not derived.getScope().isSpecialMethod() and - derived.getName() != "__init__" and - derived.isNormalMethod() and - // call to overrides distributed for efficiency +predicate overrides(Function base, Function sub) { + base.getName() = sub.getName() and + base.getScope() = getADirectSuperclass*(sub.getScope()) +} + +/** Holds if no way to call `base` would be valid for `sub`. The `msg` applies to the `sub method. */ +predicate strongSignatureMismatch(Function base, Function sub, string msg) { + overrides(base, sub) and + ( + sub.getMinPositionalArguments() > base.getMaxPositionalArguments() and + msg = "requires more positional arguments than overridden $@ allows." + or + sub.getMaxPositionalArguments() < base.getMinPositionalArguments() and + msg = "requires fewer positional arguments than overridden $@ allows." + ) +} + +/** Holds if there may be some ways to call `base` that would not be valid for `sub`. The `msg` applies to the `sub` method. */ +predicate weakSignatureMismatch(Function base, Function sub, string msg) { + overrides(base, sub) and ( - derived.overrides(base) and derived.minParameters() > base.maxParameters() + sub.getMinPositionalArguments() > base.getMinPositionalArguments() and + msg = "requires more positional arguments than overridden $@ may accept." or - derived.overrides(base) and derived.maxParameters() < base.minParameters() + sub.getMaxPositionalArguments() < base.getMaxPositionalArguments() and + msg = "requires fewer positional arguments than overridden $@ may accept." + or + exists(string arg | + // TODO: positional-only args not considered + // e.g. `def foo(x, y, /, z):` has x,y as positional only args, should not be considered as possible kw args + arg = base.getAnArg().getName() and + not arg = sub.getAnArg().getName() and + not exists(sub.getKwarg()) and + msg = "does not accept keyword argument " + arg + ", which overridden $@ does." + ) + or + exists(base.getKwarg()) and + not exists(sub.getKwarg()) and + msg = "does not accept arbitrary keyword arguments, which overridden $@ does." + ) +} + +predicate ignore(Function f) { + isClassmethod(f) + or + exists(Function g | + g.getScope() = f.getScope() and + g.getName() = f.getName() and + g != f ) -select derived, "Overriding method '" + derived.getName() + "' has signature mismatch with $@.", - base, "overridden method" +} + +from Function base, Function sub, string msg +where + // not exists(base.getACall()) and + // not exists(FunctionValue a_derived | + // a_derived.overrides(base) and + // exists(a_derived.getACall()) + // ) and + not sub.isSpecialMethod() and + sub.getName() != "__init__" and + not ignore(sub) and + not ignore(base) and + strongSignatureMismatch(base, sub, msg) +select sub, "This method " + msg, base, base.getQualifiedName() From 4212d1b5b65bede97298d5d9e67efe8dd1563971 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 13 Aug 2025 10:18:29 +0100 Subject: [PATCH 006/219] Update alert messages and choose one witness --- .../Functions/SignatureOverriddenMethod.ql | 134 ++++++++++++++++-- 1 file changed, 120 insertions(+), 14 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 74c5aaa477e5..3bd8fb6bf314 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -13,11 +13,19 @@ */ import python +import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.internal.DataFlowDispatch predicate overrides(Function base, Function sub) { base.getName() = sub.getName() and - base.getScope() = getADirectSuperclass*(sub.getScope()) + base.getScope() = getADirectSuperclass+(sub.getScope()) +} + +bindingset[num, str] +string plural(int num, string str) { + num = 1 and result = "1 " + str + or + num != 1 and result = num.toString() + " " + str + "s" } /** Holds if no way to call `base` would be valid for `sub`. The `msg` applies to the `sub method. */ @@ -25,10 +33,16 @@ predicate strongSignatureMismatch(Function base, Function sub, string msg) { overrides(base, sub) and ( sub.getMinPositionalArguments() > base.getMaxPositionalArguments() and - msg = "requires more positional arguments than overridden $@ allows." + msg = + "requires " + + plural(sub.getMinPositionalArguments() - base.getMaxPositionalArguments(), + "more positional argument") + " than overridden $@ allows." or sub.getMaxPositionalArguments() < base.getMinPositionalArguments() and - msg = "requires fewer positional arguments than overridden $@ allows." + msg = + "requires " + + plural(base.getMinPositionalArguments() - sub.getMaxPositionalArguments(), + "fewer positional argument") + " than overridden $@ allows." ) } @@ -37,18 +51,26 @@ predicate weakSignatureMismatch(Function base, Function sub, string msg) { overrides(base, sub) and ( sub.getMinPositionalArguments() > base.getMinPositionalArguments() and - msg = "requires more positional arguments than overridden $@ may accept." + msg = + "requires " + + plural(sub.getMinPositionalArguments() - base.getMinPositionalArguments(), + "more positional argument") + "than some possible calls to overridden $@." or sub.getMaxPositionalArguments() < base.getMaxPositionalArguments() and - msg = "requires fewer positional arguments than overridden $@ may accept." + msg = + "requires " + + plural(base.getMaxPositionalArguments() - sub.getMaxPositionalArguments(), + "fewer positional argument") + " than some possible calls to overridden $@." or + sub.getMinPositionalArguments() <= base.getMinPositionalArguments() and + sub.getMaxPositionalArguments() >= base.getMaxPositionalArguments() and exists(string arg | // TODO: positional-only args not considered // e.g. `def foo(x, y, /, z):` has x,y as positional only args, should not be considered as possible kw args arg = base.getAnArg().getName() and not arg = sub.getAnArg().getName() and not exists(sub.getKwarg()) and - msg = "does not accept keyword argument " + arg + ", which overridden $@ does." + msg = "does not accept keyword argument `" + arg + "`, which overridden $@ does." ) or exists(base.getKwarg()) and @@ -67,16 +89,100 @@ predicate ignore(Function f) { ) } -from Function base, Function sub, string msg +Function resolveCall(Call call) { + exists(DataFlowCall dfc | call = dfc.getNode().(CallNode).getNode() | + result = viableCallable(dfc).(DataFlowFunction).getScope() + ) +} + +predicate callViableForEither(Function base, Function sub, Call call) { + overrides(base, sub) and + base = resolveCall(call) and + sub = resolveCall(call) +} + +predicate matchingStatic(Function base, Function sub) { + overrides(base, sub) and + ( + isStaticmethod(base) and + isStaticmethod(sub) + or + not isStaticmethod(base) and + not isStaticmethod(sub) + ) +} + +int extraSelfArg(Function func) { if isStaticmethod(func) then result = 0 else result = 1 } + +predicate callMatchesSignature(Function func, Call call) { + ( + call.getPositionalArgumentCount() + extraSelfArg(func) >= func.getMinPositionalArguments() + or + exists(call.getStarArg()) + or + exists(call.getKwargs()) + ) and + call.getPositionalArgumentCount() + extraSelfArg(func) <= func.getMaxPositionalArguments() and + ( + exists(func.getKwarg()) + or + forall(string name | name = call.getANamedArgumentName() | exists(func.getArgByName(name))) + ) +} + +Call getASignatureMismatchWitness(Function base, Function sub) { + callViableForEither(base, sub, result) and + callMatchesSignature(base, result) and + not callMatchesSignature(sub, result) +} + +Call chooseASignatureMismatchWitnessInFile(Function base, Function sub, File file) { + result = + min(Call c | + c = getASignatureMismatchWitness(base, sub) and + c.getLocation().getFile() = file + | + c order by c.getLocation().getStartLine(), c.getLocation().getStartColumn() + ) +} + +Call chooseASignatureMismatchWitness(Function base, Function sub) { + exists(getASignatureMismatchWitness(base, sub)) and + ( + result = chooseASignatureMismatchWitnessInFile(base, sub, base.getLocation().getFile()) + or + not exists(Call c | + c = getASignatureMismatchWitness(base, sub) and + c.getLocation().getFile() = base.getLocation().getFile() + ) and + result = chooseASignatureMismatchWitnessInFile(base, sub, base.getLocation().getFile()) + or + not exists(Call c | + c = getASignatureMismatchWitness(base, sub) and + c.getLocation().getFile() = [base, sub].getLocation().getFile() + ) and + result = + min(Call c | + c = getASignatureMismatchWitness(base, sub) + | + c + order by + c.getLocation().getFile().getAbsolutePath(), c.getLocation().getStartLine(), + c.getLocation().getStartColumn() + ) + ) +} + +from Function base, Function sub, string msg, string extraMsg, Call call where - // not exists(base.getACall()) and - // not exists(FunctionValue a_derived | - // a_derived.overrides(base) and - // exists(a_derived.getACall()) - // ) and not sub.isSpecialMethod() and sub.getName() != "__init__" and not ignore(sub) and not ignore(base) and - strongSignatureMismatch(base, sub, msg) -select sub, "This method " + msg, base, base.getQualifiedName() + matchingStatic(base, sub) and + weakSignatureMismatch(base, sub, msg) and + //msg = " has a different signature to $@." and + call = chooseASignatureMismatchWitness(base, sub) and + extraMsg = + " $@ correctly calls the base method, but does not match the signature of the overriding method." +select sub, "This method " + msg + extraMsg, base, base.getQualifiedName(), call, "This call" From 067c98d3ee00af0e8608f2ac89aad54125586bdb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 13 Aug 2025 11:55:39 +0100 Subject: [PATCH 007/219] Include conditional alert messages for various cases --- .../Functions/SignatureOverriddenMethod.ql | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 3bd8fb6bf314..cb97873b32d8 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -15,6 +15,7 @@ import python import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.internal.DataFlowDispatch +import codeql.util.Option predicate overrides(Function base, Function sub) { base.getName() = sub.getName() and @@ -54,7 +55,7 @@ predicate weakSignatureMismatch(Function base, Function sub, string msg) { msg = "requires " + plural(sub.getMinPositionalArguments() - base.getMinPositionalArguments(), - "more positional argument") + "than some possible calls to overridden $@." + "more positional argument") + " than some possible calls to overridden $@." or sub.getMaxPositionalArguments() < base.getMaxPositionalArguments() and msg = @@ -173,16 +174,28 @@ Call chooseASignatureMismatchWitness(Function base, Function sub) { ) } -from Function base, Function sub, string msg, string extraMsg, Call call +module CallOption = LocOption2; + +from Function base, Function sub, string msg, string extraMsg, CallOption::Option call where not sub.isSpecialMethod() and sub.getName() != "__init__" and not ignore(sub) and not ignore(base) and matchingStatic(base, sub) and - weakSignatureMismatch(base, sub, msg) and - //msg = " has a different signature to $@." and - call = chooseASignatureMismatchWitness(base, sub) and - extraMsg = - " $@ correctly calls the base method, but does not match the signature of the overriding method." + ( + call.asSome() = chooseASignatureMismatchWitness(base, sub) and + extraMsg = + " $@ correctly calls the base method, but does not match the signature of the overriding method." and + ( + strongSignatureMismatch(base, sub, msg) + or + not strongSignatureMismatch(base, sub, _) and + weakSignatureMismatch(base, sub, msg) + ) + or + not exists(getASignatureMismatchWitness(base, sub)) and + strongSignatureMismatch(base, sub, msg) and + extraMsg = "" + ) select sub, "This method " + msg + extraMsg, base, base.getQualifiedName(), call, "This call" From f429b9038c238e431cdbded3c9764b3116dccef2 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 15 Aug 2025 14:22:34 +0100 Subject: [PATCH 008/219] Update tests, update alert messages --- .../Functions/IncorrectlyOverriddenMethod.ql | 1 + .../Functions/SignatureOverriddenMethod.ql | 73 +++++++++++++++---- .../SignatureOverriddenMethod.expected | 6 +- .../SignatureOverriddenMethod.qlref | 3 +- .../query-tests/Functions/overriding/test.py | 10 +-- 5 files changed, 71 insertions(+), 22 deletions(-) diff --git a/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql b/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql index a46a2370c0ee..a4e3bd6e0ce4 100644 --- a/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql +++ b/python/ql/src/Functions/IncorrectlyOverriddenMethod.ql @@ -1,4 +1,5 @@ /** + * @deprecated * @name Mismatch between signature and use of an overriding method * @description Method has a different signature from the overridden method and, if it were called, would be likely to cause an error. * @kind problem diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index cb97873b32d8..bf4e16306dd2 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -29,21 +29,63 @@ string plural(int num, string str) { num != 1 and result = num.toString() + " " + str + "s" } +string describeMin(Function func) { + exists(string descr | descr = plural(func.getMinPositionalArguments(), "positional argument") | + if func.getMinPositionalArguments() = func.getMaxPositionalArguments() + then result = descr + else result = "at least " + descr + ) +} + +string describeMax(Function func) { + if func.hasVarArg() + then result = "arbitrarily many positional arguments" + else + exists(string descr | descr = plural(func.getMaxPositionalArguments(), "positional argument") | + if func.getMinPositionalArguments() = func.getMaxPositionalArguments() + then result = descr + else result = "at most " + descr + ) +} + +string describeMinShort(Function func) { + exists(string descr | descr = func.getMinPositionalArguments().toString() | + if func.getMinPositionalArguments() = func.getMaxPositionalArguments() + then result = descr + else result = "at least " + descr + ) +} + +string describeMaxShort(Function func) { + if func.hasVarArg() + then result = "arbitrarily many" + else + exists(string descr | descr = func.getMaxPositionalArguments().toString() | + if func.getMinPositionalArguments() = func.getMaxPositionalArguments() + then result = descr + else result = "at most " + descr + ) +} + +string describeMaxBound(Function func) { + if func.hasVarArg() + then result = "arbitrarily many" + else result = func.getMaxPositionalArguments().toString() +} + /** Holds if no way to call `base` would be valid for `sub`. The `msg` applies to the `sub method. */ predicate strongSignatureMismatch(Function base, Function sub, string msg) { overrides(base, sub) and ( sub.getMinPositionalArguments() > base.getMaxPositionalArguments() and msg = - "requires " + - plural(sub.getMinPositionalArguments() - base.getMaxPositionalArguments(), - "more positional argument") + " than overridden $@ allows." + "requires " + describeMin(sub) + ", whereas overridden $@ requires " + describeMaxShort(base) + + "." or sub.getMaxPositionalArguments() < base.getMinPositionalArguments() and msg = - "requires " + - plural(base.getMinPositionalArguments() - sub.getMaxPositionalArguments(), - "fewer positional argument") + " than overridden $@ allows." + "requires " + describeMax(sub) + ", whereas overridden $@ requires " + describeMinShort(base) + + "." ) } @@ -53,15 +95,13 @@ predicate weakSignatureMismatch(Function base, Function sub, string msg) { ( sub.getMinPositionalArguments() > base.getMinPositionalArguments() and msg = - "requires " + - plural(sub.getMinPositionalArguments() - base.getMinPositionalArguments(), - "more positional argument") + " than some possible calls to overridden $@." + "requires " + describeMin(sub) + ", whereas overridden $@ may be called with " + + base.getMinPositionalArguments().toString() + "." or sub.getMaxPositionalArguments() < base.getMaxPositionalArguments() and msg = - "requires " + - plural(base.getMaxPositionalArguments() - sub.getMaxPositionalArguments(), - "fewer positional argument") + " than some possible calls to overridden $@." + "requires " + describeMax(sub) + ", whereas overridden $@ may be called with " + + describeMaxBound(base) + "." or sub.getMinPositionalArguments() <= base.getMinPositionalArguments() and sub.getMaxPositionalArguments() >= base.getMaxPositionalArguments() and @@ -83,7 +123,9 @@ predicate weakSignatureMismatch(Function base, Function sub, string msg) { predicate ignore(Function f) { isClassmethod(f) or - exists(Function g | + exists( + Function g // other functions with the same name, e.g. @property getters/setters. + | g.getScope() = f.getScope() and g.getName() = f.getName() and g != f @@ -96,7 +138,7 @@ Function resolveCall(Call call) { ) } -predicate callViableForEither(Function base, Function sub, Call call) { +predicate callViableForEitherOverride(Function base, Function sub, Call call) { overrides(base, sub) and base = resolveCall(call) and sub = resolveCall(call) @@ -132,7 +174,7 @@ predicate callMatchesSignature(Function func, Call call) { } Call getASignatureMismatchWitness(Function base, Function sub) { - callViableForEither(base, sub, result) and + callViableForEitherOverride(base, sub, result) and callMatchesSignature(base, result) and not callMatchesSignature(sub, result) } @@ -195,6 +237,7 @@ where ) or not exists(getASignatureMismatchWitness(base, sub)) and + call.isNone() and strongSignatureMismatch(base, sub, msg) and extraMsg = "" ) diff --git a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected index bcb9363a55a3..bc8accf6f307 100644 --- a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected +++ b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected @@ -1 +1,5 @@ -| test.py:30:5:30:26 | Function Derived.meth3 | Overriding method 'meth3' has signature mismatch with $@. | test.py:11:5:11:20 | Function Base.meth3 | overridden method | +| test.py:24:5:24:26 | Function meth1 | This method requires 2 positional arguments, whereas overridden $@ requires 1. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:5:5:5:20 | Function meth1 | Base.meth1 | test.py:15:9:15:20 | Attribute() | This call | +| test.py:27:5:27:20 | Function meth2 | This method requires 1 positional argument, whereas overridden $@ requires 2 positional arguments. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:8:5:8:26 | Function meth2 | Base.meth2 | test.py:18:9:18:21 | Attribute() | This call | +| test.py:30:5:30:26 | Function meth3 | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:11:5:11:20 | Function meth3 | Base.meth3 | file://:0:0:0:0 | (none) | This call | +| test.py:69:5:69:24 | Function meth | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:64:5:64:19 | Function meth | BlameBase.meth | file://:0:0:0:0 | (none) | This call | +| test.py:74:5:74:24 | Function meth | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:64:5:64:19 | Function meth | BlameBase.meth | file://:0:0:0:0 | (none) | This call | diff --git a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref index a306477b3b48..5470a05e0e41 100644 --- a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref +++ b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref @@ -1 +1,2 @@ -Functions/SignatureOverriddenMethod.ql +query: Functions/SignatureOverriddenMethod.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/python/ql/test/query-tests/Functions/overriding/test.py b/python/ql/test/query-tests/Functions/overriding/test.py index c4c7caaa1aad..a289bfc79c47 100644 --- a/python/ql/test/query-tests/Functions/overriding/test.py +++ b/python/ql/test/query-tests/Functions/overriding/test.py @@ -21,13 +21,13 @@ def foo(self): class Derived(Base): - def meth1(self, spam): + def meth1(self, spam): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg, base called in Base.foo pass - def meth2(self): + def meth2(self): # $Alert[py/inheritance/signature-mismatch] # Has 1 fewer arg, base called in Base.foo pass - def meth3(self, eggs): #Incorrectly overridden and not called. + def meth3(self, eggs): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg. Method is not called. pass def bar(self): @@ -66,12 +66,12 @@ def meth(self): class Correct1(BlameBase): - def meth(self, arg): + def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg. The incorrect-overriden-method query would alert for the base method in this case. pass class Correct2(BlameBase): - def meth(self, arg): + def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg pass c = Correct2() From 2bbf24b3ea6279938c7d98225d170618b63a7949 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 18 Aug 2025 16:01:39 +0100 Subject: [PATCH 009/219] Add additional test cases --- .../Functions/SignatureOverriddenMethod.ql | 4 + .../SignatureOverriddenMethod.expected | 8 +- .../query-tests/Functions/overriding/test.py | 73 ++++++++++++++++++- 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index bf4e16306dd2..4ac515f935a4 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -108,6 +108,7 @@ predicate weakSignatureMismatch(Function base, Function sub, string msg) { exists(string arg | // TODO: positional-only args not considered // e.g. `def foo(x, y, /, z):` has x,y as positional only args, should not be considered as possible kw args + // However, this likely does not create FPs, as we require a 'witness' call to generate an alert. arg = base.getAnArg().getName() and not arg = sub.getAnArg().getName() and not exists(sub.getKwarg()) and @@ -159,6 +160,9 @@ int extraSelfArg(Function func) { if isStaticmethod(func) then result = 0 else r predicate callMatchesSignature(Function func, Call call) { ( + // TODO: This is not fully precise. + // For example, it does not detect that a method `def foo(self,x,y)` is matched by a call `obj.foo(1,y=2)` + // since y is passed in the call as a keyword argument, but still counts toward a positional argument of the method. call.getPositionalArgumentCount() + extraSelfArg(func) >= func.getMinPositionalArguments() or exists(call.getStarArg()) diff --git a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected index bc8accf6f307..255894ca6fcc 100644 --- a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected +++ b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected @@ -1,5 +1,11 @@ | test.py:24:5:24:26 | Function meth1 | This method requires 2 positional arguments, whereas overridden $@ requires 1. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:5:5:5:20 | Function meth1 | Base.meth1 | test.py:15:9:15:20 | Attribute() | This call | -| test.py:27:5:27:20 | Function meth2 | This method requires 1 positional argument, whereas overridden $@ requires 2 positional arguments. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:8:5:8:26 | Function meth2 | Base.meth2 | test.py:18:9:18:21 | Attribute() | This call | +| test.py:27:5:27:20 | Function meth2 | This method requires 1 positional argument, whereas overridden $@ requires 2. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:8:5:8:26 | Function meth2 | Base.meth2 | test.py:18:9:18:21 | Attribute() | This call | | test.py:30:5:30:26 | Function meth3 | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:11:5:11:20 | Function meth3 | Base.meth3 | file://:0:0:0:0 | (none) | This call | | test.py:69:5:69:24 | Function meth | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:64:5:64:19 | Function meth | BlameBase.meth | file://:0:0:0:0 | (none) | This call | | test.py:74:5:74:24 | Function meth | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:64:5:64:19 | Function meth | BlameBase.meth | file://:0:0:0:0 | (none) | This call | +| test.py:125:5:125:20 | Function meth1 | This method requires 1 positional argument, whereas overridden $@ may be called with 2. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:82:5:82:25 | Function meth1 | Base2.meth1 | test.py:110:9:110:23 | Attribute() | This call | +| test.py:131:5:131:31 | Function meth4 | This method requires at least 3 positional arguments, whereas overridden $@ requires at most 2. | test.py:88:5:88:25 | Function meth4 | Base2.meth4 | file://:0:0:0:0 | (none) | This call | +| test.py:133:5:133:28 | Function meth5 | This method requires at most 3 positional arguments, whereas overridden $@ requires at least 4. | test.py:90:5:90:34 | Function meth5 | Base2.meth5 | file://:0:0:0:0 | (none) | This call | +| test.py:135:5:135:23 | Function meth6 | This method requires 2 positional arguments, whereas overridden $@ may be called with arbitrarily many. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:92:5:92:28 | Function meth6 | Base2.meth6 | test.py:113:9:113:27 | Attribute() | This call | +| test.py:137:5:137:28 | Function meth7 | This method requires at least 2 positional arguments, whereas overridden $@ may be called with 1. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:94:5:94:25 | Function meth7 | Base2.meth7 | test.py:114:9:114:20 | Attribute() | This call | +| test.py:147:5:147:21 | Function meth12 | This method does not accept arbitrary keyword arguments, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:104:5:104:31 | Function meth12 | Base2.meth12 | test.py:119:9:119:24 | Attribute() | This call | diff --git a/python/ql/test/query-tests/Functions/overriding/test.py b/python/ql/test/query-tests/Functions/overriding/test.py index a289bfc79c47..cc70da66822e 100644 --- a/python/ql/test/query-tests/Functions/overriding/test.py +++ b/python/ql/test/query-tests/Functions/overriding/test.py @@ -66,7 +66,7 @@ def meth(self): class Correct1(BlameBase): - def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg. The incorrect-overriden-method query would alert for the base method in this case. + def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg. The incorrect-overridden-method query would alert for the base method in this case. pass class Correct2(BlameBase): @@ -76,3 +76,74 @@ def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more ar c = Correct2() c.meth("hi") + +class Base2: + + def meth1(self, x=1): pass + + def meth2(self, x=1): pass + + def meth3(self): pass + + def meth4(self, x=1): pass + + def meth5(self, x, y, z, w=1): pass + + def meth6(self, x, *ys): pass + + def meth7(self, *ys): pass + + def meth8(self, x, y): pass + + def meth9(self, x, y): pass + + def meth10(self, x, *, y=3): pass + + def meth11(self, x, y): pass + + def meth12(self, **kwargs): pass + + def meth13(self, /, x): pass + + def call_some(self): + self.meth1() + self.meth1(x=2) + self.meth3() + self.meth3(x=2) + self.meth6(2, 3, 4) + self.meth7() + self.meth8(1,y=3) + self.meth9(1,2) + self.meth10(1,y=3) + self.meth11(1,y=3) + self.meth12(x=2) + self.meth13(x=2) + + +class Derrived2(Base2): + + def meth1(self): pass # $Alert[py/inheritance/signature-mismatch] # Weak mismatch (base may be called with 2 args. only alert if mismatching call exists) + + def meth2(self): pass # No alert (weak mismatch, but not called) + + def meth3(self, x=1): pass # No alert (no mismatch - all base calls are valid for sub) + + def meth4(self, x, y, z=1): pass # $Alert[py/inheritance/signature-mismatch] # sub min > base max (strong mismatch) + + def meth5(self, x, y=1): pass # $Alert[py/inheritance/signature-mismatch] + + def meth6(self, x): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with 3+ args) + + def meth7(self, x, *ys): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with 1 arg only) + + def meth8(self, x, z): pass # $MISSING:Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named y), however the call to meth8 that witnesses this is not detected as a valid call to Base2.meth8. + + def meth9(self, x, z): pass # No alert (never called with wrong keyword arg) + + def meth10(self, x, **kwargs): pass # No alert (y is kw-only arg in base, calls that use it are valid for sub) + + def meth11(self, x, z, **kwargs): pass # $MISSING:Alert[py/inheritance/signature-mismatch] # call using y kw-arg is invalid due to not specifying z, but this is not detected. Likely a fairly niche situation. + + def meth12(self): pass # $Alert[py/inheritance/signature-mismatch] # call including extra kwarg invalid + + def meth13(self, /, y): pass # $MISSING:Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named x), however meth13 is incorrectly detected as having 2 minimum positional arguments, whereas x is kw-only; resulting in the witness call not being detected as a valid call to Base2.meth13. From 502ea82c9157981f675fd8f8c1a611bb53482f34 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 19 Aug 2025 09:39:14 +0100 Subject: [PATCH 010/219] Updae other test output --- .../Functions/general/SignatureOverriddenMethod.expected | 4 ++-- .../Functions/overriding/WrongNameForArgumentInCall.expected | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected b/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected index 81c45ab8abee..21b112120753 100644 --- a/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected +++ b/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected @@ -1,2 +1,2 @@ -| om_test.py:32:5:32:35 | Function Derived.grossly_wrong1 | Overriding method 'grossly_wrong1' has signature mismatch with $@. | om_test.py:12:5:12:41 | Function Base.grossly_wrong1 | overridden method | -| om_test.py:35:5:35:47 | Function Derived.grossly_wrong2 | Overriding method 'grossly_wrong2' has signature mismatch with $@. | om_test.py:15:5:15:41 | Function Base.grossly_wrong2 | overridden method | +| om_test.py:32:5:32:35 | Function grossly_wrong1 | This method requires 2 positional arguments, whereas overridden $@ requires 3. | om_test.py:12:5:12:41 | Function grossly_wrong1 | Base.grossly_wrong1 | file://:0:0:0:0 | (none) | This call | +| om_test.py:35:5:35:47 | Function grossly_wrong2 | This method requires 4 positional arguments, whereas overridden $@ requires 3. | om_test.py:15:5:15:41 | Function grossly_wrong2 | Base.grossly_wrong2 | file://:0:0:0:0 | (none) | This call | diff --git a/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected b/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected index d2fc2ef6784f..0cadf5e5fbf4 100644 --- a/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected +++ b/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected @@ -1 +1,2 @@ | test.py:19:9:19:31 | Attribute() | Keyword argument 'spam' is not a supported parameter name of $@. | test.py:5:5:5:20 | Function meth1 | method Base.meth1 | +| test.py:112:9:112:23 | Attribute() | Keyword argument 'x' is not a supported parameter name of $@. | test.py:86:5:86:20 | Function meth3 | method Base2.meth3 | From 900a5cd9d7e1f4fd0a1cbbd2a8245370876ac5b8 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 19 Aug 2025 12:31:45 +0100 Subject: [PATCH 011/219] Update documentation --- .../Functions/SignatureOverriddenMethod.py | 15 +++++++----- .../Functions/SignatureOverriddenMethod.qhelp | 23 +++++++------------ 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.py b/python/ql/src/Functions/SignatureOverriddenMethod.py index 7beddcb9e958..e3522351fc01 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.py +++ b/python/ql/src/Functions/SignatureOverriddenMethod.py @@ -1,9 +1,12 @@ -# Base class method -def runsource(self, source, filename="", symbol="single"): - ... # Definition +class Base: + def runsource(self, source, filename=""): + ... -# Extend base class method -def runsource(self, source): - ... # Definition \ No newline at end of file +class Sub(Base): + def runsource(self, source): # BAD: Does not match the signature of overridden method. + ... + +def run(obj: Base): + obj.runsource("source", filename="foo.txt") \ No newline at end of file diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.qhelp b/python/ql/src/Functions/SignatureOverriddenMethod.qhelp index b7da2678e3d8..69fd13ed90f8 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.qhelp +++ b/python/ql/src/Functions/SignatureOverriddenMethod.qhelp @@ -5,32 +5,25 @@ -

    There are one (or more) legal parameters for an overridden method that are -not legal for an overriding method. This will cause an error when the overriding -method is called with a number of parameters that is legal for the overridden method. -This violates the Liskov substitution principle. +

    When the signature of a method of a base class and a method of a subclass that overrides it don't match, a call to the base class method +may not be a valid call to the subclass method, and thus raise an exception if an instance of the subclass is passed instead. +If following the Liskov Substitution Principle, in which an instance of a subclass should be usable in every context as though it were a an +instance of the base class, this behavior breaks the principle.

    -

    Ensure that the overriding method accepts all the parameters that are legal for -overridden method.

    +

    Ensure that the overriding method in the subclass accepts the same parameters as the base method.

    -

    In this example there is a mismatch between the legal parameters for the base -class method (self, source, filename, symbol) and the extension method -(self, source). The extension method can be used to override the base -method as long as values are not specified for the filename and -symbol parameters. If the extension method was passed the additional -parameters accepted by the base method then an error would occur.

    +

    In the following example, Base.runsource takes an optional filename argument. However, the overriding method +Sub.runsource does not. This means the run function will fail if passed an instance of Sub. +

    -

    The extension method should be updated to support the filename and -symbol parameters supported by the overridden method.

    -
    From 0a83c11f42dd272878a18b17efc2a2fa6da9ec79 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 19 Aug 2025 13:06:41 +0100 Subject: [PATCH 012/219] Add changenote.+ fix typo --- python/ql/src/Functions/SignatureOverriddenMethod.qhelp | 2 +- python/ql/src/change-notes/2025-08-19-signature-mismatch.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 python/ql/src/change-notes/2025-08-19-signature-mismatch.md diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.qhelp b/python/ql/src/Functions/SignatureOverriddenMethod.qhelp index 69fd13ed90f8..0575d967d3e7 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.qhelp +++ b/python/ql/src/Functions/SignatureOverriddenMethod.qhelp @@ -7,7 +7,7 @@

    When the signature of a method of a base class and a method of a subclass that overrides it don't match, a call to the base class method may not be a valid call to the subclass method, and thus raise an exception if an instance of the subclass is passed instead. -If following the Liskov Substitution Principle, in which an instance of a subclass should be usable in every context as though it were a an +If following the Liskov Substitution Principle, in which an instance of a subclass should be usable in every context as though it were an instance of the base class, this behavior breaks the principle.

    diff --git a/python/ql/src/change-notes/2025-08-19-signature-mismatch.md b/python/ql/src/change-notes/2025-08-19-signature-mismatch.md new file mode 100644 index 000000000000..60c3efa32eb9 --- /dev/null +++ b/python/ql/src/change-notes/2025-08-19-signature-mismatch.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The `py/inheritance/signature-mismatch` query has been modernized. It produces more precise results and more descriptive alert messages. +* The `py/inheritance/incorrect-overriding-signature` query has been deprecated. Its results have been consolidated into the `py/inheritance/signature-mismatch` query. \ No newline at end of file From 6587ad435ec460517c359b016babb62c5f4699fd Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 19 Aug 2025 15:18:30 +0100 Subject: [PATCH 013/219] Update python/ql/src/Functions/SignatureOverriddenMethod.ql Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- python/ql/src/Functions/SignatureOverriddenMethod.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 4ac515f935a4..63da1ec35e46 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -202,7 +202,7 @@ Call chooseASignatureMismatchWitness(Function base, Function sub) { c = getASignatureMismatchWitness(base, sub) and c.getLocation().getFile() = base.getLocation().getFile() ) and - result = chooseASignatureMismatchWitnessInFile(base, sub, base.getLocation().getFile()) + result = chooseASignatureMismatchWitnessInFile(base, sub, sub.getLocation().getFile()) or not exists(Call c | c = getASignatureMismatchWitness(base, sub) and From 125c6534b76a053b26ca2f9e9491d2f47e6c7923 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 1 Sep 2025 23:41:28 +0100 Subject: [PATCH 014/219] Use new option name --- python/ql/src/Functions/SignatureOverriddenMethod.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 63da1ec35e46..b76611596f6d 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -220,7 +220,7 @@ Call chooseASignatureMismatchWitness(Function base, Function sub) { ) } -module CallOption = LocOption2; +module CallOption = LocatableOption; from Function base, Function sub, string msg, string extraMsg, CallOption::Option call where From 318d1cd392efb6ab1e8aa46c6ddfc9e6f633e7a9 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 2 Sep 2025 12:02:08 +0100 Subject: [PATCH 015/219] Increase precision in detecting call matches signature --- .../Functions/SignatureOverriddenMethod.ql | 20 +++++++++++++++---- .../SignatureOverriddenMethod.expected | 2 ++ .../query-tests/Functions/overriding/test.py | 4 ++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index b76611596f6d..623521cc9c58 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -160,15 +160,27 @@ int extraSelfArg(Function func) { if isStaticmethod(func) then result = 0 else r predicate callMatchesSignature(Function func, Call call) { ( - // TODO: This is not fully precise. - // For example, it does not detect that a method `def foo(self,x,y)` is matched by a call `obj.foo(1,y=2)` - // since y is passed in the call as a keyword argument, but still counts toward a positional argument of the method. - call.getPositionalArgumentCount() + extraSelfArg(func) >= func.getMinPositionalArguments() + // Each parameter of the function is accounted for in the call + forall(Parameter param, int i | param = func.getArg(i) | + // self arg + i = 0 and not isStaticmethod(func) + or + // positional arg + i - extraSelfArg(func) < call.getPositionalArgumentCount() + or + // has default + exists(param.getDefault()) + or + // keyword arg + call.getANamedArgumentName() = param.getName() + ) or + // arbitrary varargs or kwargs exists(call.getStarArg()) or exists(call.getKwargs()) ) and + // No excess parameters call.getPositionalArgumentCount() + extraSelfArg(func) <= func.getMaxPositionalArguments() and ( exists(func.getKwarg()) diff --git a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected index 255894ca6fcc..07756ee46007 100644 --- a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected +++ b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected @@ -8,4 +8,6 @@ | test.py:133:5:133:28 | Function meth5 | This method requires at most 3 positional arguments, whereas overridden $@ requires at least 4. | test.py:90:5:90:34 | Function meth5 | Base2.meth5 | file://:0:0:0:0 | (none) | This call | | test.py:135:5:135:23 | Function meth6 | This method requires 2 positional arguments, whereas overridden $@ may be called with arbitrarily many. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:92:5:92:28 | Function meth6 | Base2.meth6 | test.py:113:9:113:27 | Attribute() | This call | | test.py:137:5:137:28 | Function meth7 | This method requires at least 2 positional arguments, whereas overridden $@ may be called with 1. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:94:5:94:25 | Function meth7 | Base2.meth7 | test.py:114:9:114:20 | Attribute() | This call | +| test.py:139:5:139:26 | Function meth8 | This method does not accept keyword argument `y`, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:96:5:96:26 | Function meth8 | Base2.meth8 | test.py:115:9:115:25 | Attribute() | This call | | test.py:147:5:147:21 | Function meth12 | This method does not accept arbitrary keyword arguments, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:104:5:104:31 | Function meth12 | Base2.meth12 | test.py:119:9:119:24 | Attribute() | This call | +| test.py:149:5:149:27 | Function meth13 | This method does not accept keyword argument `x`, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:106:5:106:27 | Function meth13 | Base2.meth13 | test.py:120:9:120:24 | Attribute() | This call | diff --git a/python/ql/test/query-tests/Functions/overriding/test.py b/python/ql/test/query-tests/Functions/overriding/test.py index cc70da66822e..63ee50e820c5 100644 --- a/python/ql/test/query-tests/Functions/overriding/test.py +++ b/python/ql/test/query-tests/Functions/overriding/test.py @@ -136,7 +136,7 @@ def meth6(self, x): pass # $Alert[py/inheritance/signature-mismatch] # weak mism def meth7(self, x, *ys): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with 1 arg only) - def meth8(self, x, z): pass # $MISSING:Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named y), however the call to meth8 that witnesses this is not detected as a valid call to Base2.meth8. + def meth8(self, x, z): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named y) def meth9(self, x, z): pass # No alert (never called with wrong keyword arg) @@ -146,4 +146,4 @@ def meth11(self, x, z, **kwargs): pass # $MISSING:Alert[py/inheritance/signature def meth12(self): pass # $Alert[py/inheritance/signature-mismatch] # call including extra kwarg invalid - def meth13(self, /, y): pass # $MISSING:Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named x), however meth13 is incorrectly detected as having 2 minimum positional arguments, whereas x is kw-only; resulting in the witness call not being detected as a valid call to Base2.meth13. + def meth13(self, /, y): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named x), however meth13 is incorrectly detected as having 2 minimum positional arguments, whereas x is kw-only; resulting in the witness call not being detected as a valid call to Base2.meth13. From 76f15a890c7c5080d8e34e39490f96748ae68789 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 30 Jun 2025 14:23:53 +0000 Subject: [PATCH 016/219] Python: Update `tree-sitter` dependency Updates the Python extractor to depend on version 0.24.7 of tree-sitter (and 0.12.0 of tree-sitter-graph). A few changes were needed in order to make the code build and run after updating the dependencies: - In `main.rs`, the `Language` parameter is now passed as a reference. - In `python.tsg`, many queries had captures that were not actually used in the body of the stanza. This is no longer allowed (unless the captures start with an underscore), as it may indicate an error. To fix this, I added underscores in the appropriate places (and verified that none of these unused captures were in fact bugs). --- python/extractor/tsg-python/Cargo.lock | 52 ++++++++-------------- python/extractor/tsg-python/Cargo.toml | 4 +- python/extractor/tsg-python/python.tsg | 30 ++++++------- python/extractor/tsg-python/src/main.rs | 2 +- python/extractor/tsg-python/tsp/Cargo.toml | 2 +- 5 files changed, 37 insertions(+), 53 deletions(-) diff --git a/python/extractor/tsg-python/Cargo.lock b/python/extractor/tsg-python/Cargo.lock index 16849dc7f4d7..f3604d1a3870 100644 --- a/python/extractor/tsg-python/Cargo.lock +++ b/python/extractor/tsg-python/Cargo.lock @@ -1,12 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289" +version = 4 [[package]] name = "aho-corasick" @@ -82,12 +76,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - [[package]] name = "clap" version = "4.5.30" @@ -121,15 +109,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -dependencies = [ - "ahash", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -258,14 +237,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] -name = "string-interner" -version = "0.12.2" +name = "streaming-iterator" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" -dependencies = [ - "cfg-if", - "hashbrown", -] +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" [[package]] name = "strsim" @@ -306,30 +281,39 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.20.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" +checksum = "a5387dffa7ffc7d2dae12b50c6f7aab8ff79d6210147c6613561fc3d474c6f75" dependencies = [ "cc", "regex", + "regex-syntax", + "streaming-iterator", + "tree-sitter-language", ] [[package]] name = "tree-sitter-graph" -version = "0.7.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" +checksum = "63f86eb73c7d891c4b9b6fe4d4e63dd94c506e4788af7c2296afdcfbeea626cc" dependencies = [ "log", "regex", "serde", "serde_json", "smallvec", - "string-interner", + "streaming-iterator", "thiserror", "tree-sitter", ] +[[package]] +name = "tree-sitter-language" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8" + [[package]] name = "tsg-python" version = "0.1.0" diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml index 7ad2c1c949e6..f02fb06931b2 100644 --- a/python/extractor/tsg-python/Cargo.toml +++ b/python/extractor/tsg-python/Cargo.toml @@ -10,7 +10,7 @@ edition = "2024" [dependencies] anyhow = "1.0" regex = "1" -tree-sitter = "=0.20.4" -tree-sitter-graph = "0.7.0" +tree-sitter = "=0.24.7" +tree-sitter-graph = "0.12.0" tsp = {path = "tsp"} clap = "4.5" diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg index 7ad0f3f14244..8dec9ad5d3ef 100644 --- a/python/extractor/tsg-python/python.tsg +++ b/python/extractor/tsg-python/python.tsg @@ -416,13 +416,13 @@ attr (@if.node) _location_end = (location-end @expr) } -(generator_expression . "(" . (comment)* . (expression) @start (for_in_clause) @child [(for_in_clause) (if_clause)] @end . (comment)* . ")" .) @genexpr +(generator_expression . "(" . (comment)* . (expression) @start (for_in_clause) @child [(for_in_clause) (if_clause)] @end . (comment)* . ")" .) @_genexpr { attr (@child.node) _location_start = (location-start @start) attr (@child.node) _location_end = (location-end @end) } -(generator_expression . "(" . (comment)* . (expression) @start (for_in_clause) @end . (comment)* . ")" .) @genexpr +(generator_expression . "(" . (comment)* . (expression) @start (for_in_clause) @end . (comment)* . ")" .) @_genexpr { attr (@end.node) _location_start = (location-start @start) attr (@end.node) _location_end = (location-end @end) @@ -524,7 +524,7 @@ attr (@del.node -> @target.node) targets = (named-child-index @target) } -(delete_statement target: (_) @target) @del +(delete_statement target: (_) @target) @_del { attr (@target.node) ctx = "del" } @@ -798,8 +798,8 @@ (dictionary_comprehension body: (pair - key: (_) @key - value: (_) @value + key: (_) @_key + value: (_) @_value ) ) @genexpr { @@ -1299,7 +1299,7 @@ ; the index of the left-hand side of the current assignment. ; Base case, for the outermost assignment we set the outermost node to this node, and the index to zero. -(expression_statement (assignment !type) @assign) @expr +(expression_statement (assignment !type) @assign) @_expr { let @assign.outermost_assignment = @assign.node let @assign.target_index = 0 @@ -1358,7 +1358,7 @@ } (assignment - left: (_) @target + left: (_) @_target type: (_) right: (_) @value ) @assign @@ -2330,7 +2330,7 @@ attr (@operand.node) ctx = "load" } -(unary_operator "~" @op) @unaryop +(unary_operator "~" @_op) @unaryop { attr (@unaryop.node) op = "~" } @@ -2614,7 +2614,7 @@ ; Async status ; NOTE: We only set the `is_async` field on the _first_ clause of the `with` statement, ; as this is the behaviour of the old parser. -(with_statement "async" "with" @with_keyword (with_clause . (with_item) @with)) +(with_statement "async" "with" @_with_keyword (with_clause . (with_item) @with)) { attr (@with.node) is_async = #true } @@ -2800,7 +2800,7 @@ (identifier) @obj . (identifier) @attr -) @match_value_pattern +) @_match_value_pattern { let attribute = (ast-node @attr "Attribute") attr (@attr.node) _skip_to = attribute @@ -2814,7 +2814,7 @@ (match_value_pattern . (identifier) @id -) @match_value_pattern +) @_match_value_pattern { attr (@id.node) ctx = "load" } @@ -3267,8 +3267,8 @@ (decorated_definition (decorator (expression) @exp1) @dec1 . (comment)* . - (decorator (expression) @exp2) @dec2 -) @decorator + (decorator (expression) @_exp2) @dec2 +) @_decorator { attr (@dec1.node) func = @exp1.node edge @dec1.node -> @dec2.node @@ -3279,7 +3279,7 @@ (decorator (expression) @exp) @last . (comment)* . definition: (function_definition) @funcdef -) @decorator +) @_decorator { attr (@last.node) func = @exp.node edge @last.node -> @funcdef.funcexpr @@ -3291,7 +3291,7 @@ (decorator (expression) @exp) @last . (comment)* . definition: (class_definition) @class -) @decorator +) @_decorator { attr (@last.node) func = @exp.node edge @last.node -> @class.class_expr diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs index 6b72efdb6ef6..c99145132f76 100644 --- a/python/extractor/tsg-python/src/main.rs +++ b/python/extractor/tsg-python/src/main.rs @@ -502,7 +502,7 @@ fn main() -> Result<()> { let source_path = Path::new(matches.get_one::("source").unwrap()); let language = tsp::language(); let mut parser = Parser::new(); - parser.set_language(language)?; + parser.set_language(&language)?; // Statically include `python.tsg`: let tsg = if matches.contains_id("tsg") { std::fs::read(&tsg_path).with_context(|| format!("Error reading TSG file {}", tsg_path))? diff --git a/python/extractor/tsg-python/tsp/Cargo.toml b/python/extractor/tsg-python/tsp/Cargo.toml index e36144566627..3d8587bbe5ab 100644 --- a/python/extractor/tsg-python/tsp/Cargo.toml +++ b/python/extractor/tsg-python/tsp/Cargo.toml @@ -26,7 +26,7 @@ path = "bindings/rust/lib.rs" ## When updating these dependencies, run `misc/bazel/3rdparty/update_cargo_deps.sh` [dependencies] -tree-sitter = ">= 0.20, < 0.21" +tree-sitter = "=0.24.7" [build-dependencies] cc = "1.2" From 5fb28b9f6d05535b9a87c6b29d398e5ac75235cc Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 30 Jun 2025 14:57:42 +0000 Subject: [PATCH 017/219] Python: Update bazel dependencies --- MODULE.bazel | 4 +- misc/bazel/3rdparty/py_deps/BUILD.bazel | 12 +-- .../py_deps/BUILD.hashbrown-0.9.1.bazel | 99 ----------------- ...l => BUILD.streaming-iterator-0.1.9.bazel} | 6 +- .../BUILD.string-interner-0.12.2.bazel | 101 ------------------ ...4.bazel => BUILD.tree-sitter-0.24.7.bazel} | 20 +++- ...l => BUILD.tree-sitter-graph-0.12.0.bazel} | 6 +- ...=> BUILD.tree-sitter-language-0.1.5.bazel} | 6 +- misc/bazel/3rdparty/py_deps/defs.bzl | 80 ++++++-------- 9 files changed, 63 insertions(+), 271 deletions(-) delete mode 100644 misc/bazel/3rdparty/py_deps/BUILD.hashbrown-0.9.1.bazel rename misc/bazel/3rdparty/py_deps/{BUILD.ahash-0.4.8.bazel => BUILD.streaming-iterator-0.1.9.bazel} (97%) delete mode 100644 misc/bazel/3rdparty/py_deps/BUILD.string-interner-0.12.2.bazel rename misc/bazel/3rdparty/py_deps/{BUILD.tree-sitter-0.20.4.bazel => BUILD.tree-sitter-0.24.7.bazel} (91%) rename misc/bazel/3rdparty/py_deps/{BUILD.tree-sitter-graph-0.7.0.bazel => BUILD.tree-sitter-graph-0.12.0.bazel} (96%) rename misc/bazel/3rdparty/py_deps/{BUILD.cfg-if-1.0.0.bazel => BUILD.tree-sitter-language-0.1.5.bazel} (97%) diff --git a/MODULE.bazel b/MODULE.bazel index 2f7a18b35fa1..4c22307da69e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -89,8 +89,8 @@ use_repo( "vendor_py__cc-1.2.14", "vendor_py__clap-4.5.30", "vendor_py__regex-1.11.1", - "vendor_py__tree-sitter-0.20.4", - "vendor_py__tree-sitter-graph-0.7.0", + "vendor_py__tree-sitter-0.24.7", + "vendor_py__tree-sitter-graph-0.12.0", ) # deps for ruby+rust diff --git a/misc/bazel/3rdparty/py_deps/BUILD.bazel b/misc/bazel/3rdparty/py_deps/BUILD.bazel index f756b4a519f7..86bfde266419 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.bazel @@ -80,26 +80,26 @@ alias( ) alias( - name = "tree-sitter-0.20.4", - actual = "@vendor_py__tree-sitter-0.20.4//:tree_sitter", + name = "tree-sitter-0.24.7", + actual = "@vendor_py__tree-sitter-0.24.7//:tree_sitter", tags = ["manual"], ) alias( name = "tree-sitter", - actual = "@vendor_py__tree-sitter-0.20.4//:tree_sitter", + actual = "@vendor_py__tree-sitter-0.24.7//:tree_sitter", tags = ["manual"], ) alias( - name = "tree-sitter-graph-0.7.0", - actual = "@vendor_py__tree-sitter-graph-0.7.0//:tree_sitter_graph", + name = "tree-sitter-graph-0.12.0", + actual = "@vendor_py__tree-sitter-graph-0.12.0//:tree_sitter_graph", tags = ["manual"], ) alias( name = "tree-sitter-graph", - actual = "@vendor_py__tree-sitter-graph-0.7.0//:tree_sitter_graph", + actual = "@vendor_py__tree-sitter-graph-0.12.0//:tree_sitter_graph", tags = ["manual"], ) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.hashbrown-0.9.1.bazel b/misc/bazel/3rdparty/py_deps/BUILD.hashbrown-0.9.1.bazel deleted file mode 100644 index 15fc24acbf1d..000000000000 --- a/misc/bazel/3rdparty/py_deps/BUILD.hashbrown-0.9.1.bazel +++ /dev/null @@ -1,99 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_py_deps -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "hashbrown", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "ahash", - "inline-more", - ], - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=hashbrown", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.9.1", - deps = [ - "@vendor_py__ahash-0.4.8//:ahash", - ], -) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.ahash-0.4.8.bazel b/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel similarity index 97% rename from misc/bazel/3rdparty/py_deps/BUILD.ahash-0.4.8.bazel rename to misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel index 057a5225197a..94d02b1de3f7 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.ahash-0.4.8.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel @@ -17,7 +17,7 @@ cargo_toml_env_vars( ) rust_library( - name = "ahash", + name = "streaming_iterator", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -44,7 +44,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=ahash", + "crate-name=streaming-iterator", "manual", "noclippy", "norustfmt", @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.8", + version = "0.1.9", ) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.string-interner-0.12.2.bazel b/misc/bazel/3rdparty/py_deps/BUILD.string-interner-0.12.2.bazel deleted file mode 100644 index 5e177a306e97..000000000000 --- a/misc/bazel/3rdparty/py_deps/BUILD.string-interner-0.12.2.bazel +++ /dev/null @@ -1,101 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_py_deps -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "string_interner", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "backends", - "inline-more", - "std", - ], - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=string-interner", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.12.2", - deps = [ - "@vendor_py__cfg-if-1.0.0//:cfg_if", - "@vendor_py__hashbrown-0.9.1//:hashbrown", - ], -) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.20.4.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel similarity index 91% rename from misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.20.4.bazel rename to misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel index fea7b8b185e7..283db7e13449 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.20.4.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel @@ -38,6 +38,10 @@ rust_library( "WORKSPACE.bazel", ], ), + crate_features = [ + "default", + "std", + ], crate_root = "binding_rust/lib.rs", edition = "2018", rustc_env_files = [ @@ -92,10 +96,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.20.4", + version = "0.24.7", deps = [ "@vendor_py__regex-1.11.1//:regex", - "@vendor_py__tree-sitter-0.20.4//:build_script_build", + "@vendor_py__regex-syntax-0.8.5//:regex_syntax", + "@vendor_py__streaming-iterator-0.1.9//:streaming_iterator", + "@vendor_py__tree-sitter-0.24.7//:build_script_build", + "@vendor_py__tree-sitter-language-0.1.5//:tree_sitter_language", ], ) @@ -118,6 +125,10 @@ cargo_build_script( "WORKSPACE.bazel", ], ), + crate_features = [ + "default", + "std", + ], crate_name = "build_script_build", crate_root = "binding_rust/build.rs", data = glob( @@ -132,7 +143,8 @@ cargo_build_script( "WORKSPACE.bazel", ], ), - edition = "2018", + edition = "2021", + links = "tree-sitter", pkg_name = "tree-sitter", rustc_env_files = [ ":cargo_toml_env_vars", @@ -147,7 +159,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.20.4", + version = "0.24.7", visibility = ["//visibility:private"], deps = [ "@vendor_py__cc-1.2.14//:cc", diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.7.0.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel similarity index 96% rename from misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.7.0.bazel rename to misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel index 4db3e576764f..ad8dd864b008 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.7.0.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel @@ -88,15 +88,15 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.7.0", + version = "0.12.0", deps = [ "@vendor_py__log-0.4.25//:log", "@vendor_py__regex-1.11.1//:regex", "@vendor_py__serde-1.0.217//:serde", "@vendor_py__serde_json-1.0.138//:serde_json", "@vendor_py__smallvec-1.14.0//:smallvec", - "@vendor_py__string-interner-0.12.2//:string_interner", + "@vendor_py__streaming-iterator-0.1.9//:streaming_iterator", "@vendor_py__thiserror-1.0.69//:thiserror", - "@vendor_py__tree-sitter-0.20.4//:tree_sitter", + "@vendor_py__tree-sitter-0.24.7//:tree_sitter", ], ) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.cfg-if-1.0.0.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel similarity index 97% rename from misc/bazel/3rdparty/py_deps/BUILD.cfg-if-1.0.0.bazel rename to misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel index da9dbdfb977c..c6155d86164f 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.cfg-if-1.0.0.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel @@ -17,7 +17,7 @@ cargo_toml_env_vars( ) rust_library( - name = "cfg_if", + name = "tree_sitter_language", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -44,7 +44,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=cfg-if", + "crate-name=tree-sitter-language", "manual", "noclippy", "norustfmt", @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.0", + version = "0.1.5", ) diff --git a/misc/bazel/3rdparty/py_deps/defs.bzl b/misc/bazel/3rdparty/py_deps/defs.bzl index 9d78e46b2f88..ea04edbae037 100644 --- a/misc/bazel/3rdparty/py_deps/defs.bzl +++ b/misc/bazel/3rdparty/py_deps/defs.bzl @@ -298,13 +298,13 @@ _NORMAL_DEPENDENCIES = { "anyhow": Label("@vendor_py__anyhow-1.0.95//:anyhow"), "clap": Label("@vendor_py__clap-4.5.30//:clap"), "regex": Label("@vendor_py__regex-1.11.1//:regex"), - "tree-sitter": Label("@vendor_py__tree-sitter-0.20.4//:tree_sitter"), - "tree-sitter-graph": Label("@vendor_py__tree-sitter-graph-0.7.0//:tree_sitter_graph"), + "tree-sitter": Label("@vendor_py__tree-sitter-0.24.7//:tree_sitter"), + "tree-sitter-graph": Label("@vendor_py__tree-sitter-graph-0.12.0//:tree_sitter_graph"), }, }, "python/extractor/tsg-python/tsp": { _COMMON_CONDITION: { - "tree-sitter": Label("@vendor_py__tree-sitter-0.20.4//:tree_sitter"), + "tree-sitter": Label("@vendor_py__tree-sitter-0.24.7//:tree_sitter"), }, }, } @@ -452,16 +452,6 @@ def crate_repositories(): Returns: A list of repos visible to the module through the module extension. """ - maybe( - http_archive, - name = "vendor_py__ahash-0.4.8", - sha256 = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289", - type = "tar.gz", - urls = ["https://static.crates.io/crates/ahash/0.4.8/download"], - strip_prefix = "ahash-0.4.8", - build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.ahash-0.4.8.bazel"), - ) - maybe( http_archive, name = "vendor_py__aho-corasick-1.1.3", @@ -542,16 +532,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.cc-1.2.14.bazel"), ) - maybe( - http_archive, - name = "vendor_py__cfg-if-1.0.0", - sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd", - type = "tar.gz", - urls = ["https://static.crates.io/crates/cfg-if/1.0.0/download"], - strip_prefix = "cfg-if-1.0.0", - build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.cfg-if-1.0.0.bazel"), - ) - maybe( http_archive, name = "vendor_py__clap-4.5.30", @@ -592,16 +572,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.colorchoice-1.0.3.bazel"), ) - maybe( - http_archive, - name = "vendor_py__hashbrown-0.9.1", - sha256 = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04", - type = "tar.gz", - urls = ["https://static.crates.io/crates/hashbrown/0.9.1/download"], - strip_prefix = "hashbrown-0.9.1", - build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.hashbrown-0.9.1.bazel"), - ) - maybe( http_archive, name = "vendor_py__is_terminal_polyfill-1.70.1", @@ -764,12 +734,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_py__string-interner-0.12.2", - sha256 = "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08", + name = "vendor_py__streaming-iterator-0.1.9", + sha256 = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520", type = "tar.gz", - urls = ["https://static.crates.io/crates/string-interner/0.12.2/download"], - strip_prefix = "string-interner-0.12.2", - build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.string-interner-0.12.2.bazel"), + urls = ["https://static.crates.io/crates/streaming-iterator/0.1.9/download"], + strip_prefix = "streaming-iterator-0.1.9", + build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.streaming-iterator-0.1.9.bazel"), ) maybe( @@ -814,22 +784,32 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_py__tree-sitter-0.20.4", - sha256 = "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a", + name = "vendor_py__tree-sitter-0.24.7", + sha256 = "a5387dffa7ffc7d2dae12b50c6f7aab8ff79d6210147c6613561fc3d474c6f75", + type = "tar.gz", + urls = ["https://static.crates.io/crates/tree-sitter/0.24.7/download"], + strip_prefix = "tree-sitter-0.24.7", + build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.tree-sitter-0.24.7.bazel"), + ) + + maybe( + http_archive, + name = "vendor_py__tree-sitter-graph-0.12.0", + sha256 = "63f86eb73c7d891c4b9b6fe4d4e63dd94c506e4788af7c2296afdcfbeea626cc", type = "tar.gz", - urls = ["https://static.crates.io/crates/tree-sitter/0.20.4/download"], - strip_prefix = "tree-sitter-0.20.4", - build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.tree-sitter-0.20.4.bazel"), + urls = ["https://static.crates.io/crates/tree-sitter-graph/0.12.0/download"], + strip_prefix = "tree-sitter-graph-0.12.0", + build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.tree-sitter-graph-0.12.0.bazel"), ) maybe( http_archive, - name = "vendor_py__tree-sitter-graph-0.7.0", - sha256 = "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a", + name = "vendor_py__tree-sitter-language-0.1.5", + sha256 = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8", type = "tar.gz", - urls = ["https://static.crates.io/crates/tree-sitter-graph/0.7.0/download"], - strip_prefix = "tree-sitter-graph-0.7.0", - build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.tree-sitter-graph-0.7.0.bazel"), + urls = ["https://static.crates.io/crates/tree-sitter-language/0.1.5/download"], + strip_prefix = "tree-sitter-language-0.1.5", + build_file = Label("//misc/bazel/3rdparty/py_deps:BUILD.tree-sitter-language-0.1.5.bazel"), ) maybe( @@ -957,6 +937,6 @@ def crate_repositories(): struct(repo = "vendor_py__cc-1.2.14", is_dev_dep = False), struct(repo = "vendor_py__clap-4.5.30", is_dev_dep = False), struct(repo = "vendor_py__regex-1.11.1", is_dev_dep = False), - struct(repo = "vendor_py__tree-sitter-0.20.4", is_dev_dep = False), - struct(repo = "vendor_py__tree-sitter-graph-0.7.0", is_dev_dep = False), + struct(repo = "vendor_py__tree-sitter-0.24.7", is_dev_dep = False), + struct(repo = "vendor_py__tree-sitter-graph-0.12.0", is_dev_dep = False), ] From b108d47b26fe64468e60f6e4a8d485065612ac7e Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 30 Jun 2025 15:10:27 +0000 Subject: [PATCH 018/219] Python: Update parser test output It seems that with a newer version of tree-sitter, we no longer parse the (not actually valid!) syntax `Spam[**P2]` as if the `**` is an exponentiation operation (with a missing left operand). --- python/extractor/tests/parser/types_new.expected | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/python/extractor/tests/parser/types_new.expected b/python/extractor/tests/parser/types_new.expected index a390ed1aae2a..ac470c08cf03 100644 --- a/python/extractor/tests/parser/types_new.expected +++ b/python/extractor/tests/parser/types_new.expected @@ -338,16 +338,9 @@ Module: [1, 0] - [23, 0] variable: Variable('Spam', None) ctx: Load index: - BinOp: [20, 36] - [20, 40] - left: - Name: [20, 36] - [20, 36] - variable: Variable('', None) - ctx: Load - op: Pow - right: - Name: [20, 38] - [20, 40] - variable: Variable('P2', None) - ctx: Load + Name: [20, 38] - [20, 40] + variable: Variable('P2', None) + ctx: Load ctx: Load TypeAlias: [21, 0] - [21, 41] name: From 235822d782ec3fbf70af81b582b598dee4a09a4c Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 2 Jul 2025 12:33:39 +0000 Subject: [PATCH 019/219] Python: Improve handling of syntax errors Rather than relying on matching arbitrary nodes inside tree-sitter-graph and then checking whether they are of type ERROR or MISSING (which seems to have stopped working in later versions of tree-sitter), we now explicitly go through the tree-sitter tree, locating all of the error and missing nodes along the way. We then add these on to the graph output in the same format as was previously produced by tree-sitter-graph. Note that it's very likely that some of the syntax errors will move around a bit as a consequence of this change. In general, we don't expect syntax errors to have stable locations, as small changes in the grammar can cause an error to appear in a different position, even if the underlying (erroneous) code has not changed. --- python/extractor/tsg-python/python.tsg | 10 --- python/extractor/tsg-python/src/main.rs | 107 +++++++++++++++++++++++- 2 files changed, 104 insertions(+), 13 deletions(-) diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg index 8dec9ad5d3ef..963df06fd7c7 100644 --- a/python/extractor/tsg-python/python.tsg +++ b/python/extractor/tsg-python/python.tsg @@ -6,16 +6,6 @@ (module) @mod { let @mod.node = (ast-node @mod "Module") } -(_) @anynode -{ - scan (node-type @anynode) { - "^(ERROR|MISSING)$" { - let @anynode.node = (ast-node @anynode "SyntaxErrorNode") - attr (@anynode.node) source = (source-text @anynode) - } - } -} - (parenthesized_expression) @nd { let @nd.node = (ast-node @nd "Expr") } diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs index c99145132f76..a94d93ba2092 100644 --- a/python/extractor/tsg-python/src/main.rs +++ b/python/extractor/tsg-python/src/main.rs @@ -480,6 +480,99 @@ pub mod extra_functions { } } +struct TreeIterator<'a> { + nodes_to_visit: Vec>, +} + +impl<'a> TreeIterator<'a> { + fn new(root: tree_sitter::Node<'a>) -> Self { + Self { + nodes_to_visit: vec![root], + } + } +} + +impl<'a> Iterator for TreeIterator<'a> { + type Item = tree_sitter::Node<'a>; + + fn next(&mut self) -> Option { + if let Some(node) = self.nodes_to_visit.pop() { + // Add all children to the queue for processing + self.nodes_to_visit + .extend((0..node.child_count()).rev().filter_map(|i| node.child(i))); + Some(node) + } else { + None + } + } +} + +#[derive(Debug, Clone)] +struct SyntaxError { + start_pos: tree_sitter::Point, + end_pos: tree_sitter::Point, + source: String, +} + +fn syntax_errors_from_tree<'a>( + root: tree_sitter::Node<'a>, + source: &'a str, +) -> impl Iterator + 'a { + TreeIterator::new(root) + .filter(|&node| node.is_error() || node.is_missing()) + .map(move |node| { + let start_pos = node.start_position(); + let end_pos = node.end_position(); + let text = &source[node.byte_range()]; + SyntaxError { + start_pos, + end_pos, + source: text.to_string(), + } + }) +} + +fn add_syntax_error_nodes(graph: &mut tree_sitter_graph::graph::Graph, errors: &[SyntaxError]) { + for error in errors { + let error_node = graph.add_graph_node(); + + // Add _kind attribute + graph[error_node] + .attributes + .add( + tree_sitter_graph::Identifier::from("_kind"), + tree_sitter_graph::graph::Value::String("SyntaxErrorNode".to_string()), + ) + .expect("Fresh node should not have duplicate attributes"); + + // Add _location attribute + let location = tree_sitter_graph::graph::Value::List( + vec![ + error.start_pos.row, + error.start_pos.column, + error.end_pos.row, + error.end_pos.column, + ] + .into_iter() + .map(|v| tree_sitter_graph::graph::Value::from(v as u32)) + .collect(), + ); + graph[error_node] + .attributes + .add(tree_sitter_graph::Identifier::from("_location"), location) + .expect("Fresh node should not have duplicate attributes"); + + // Add source attribute + graph[error_node] + .attributes + .add( + tree_sitter_graph::Identifier::from("source"), + tree_sitter_graph::graph::Value::String(error.source.clone()), + ) + .expect("Fresh node should not have duplicate attributes"); + } +} + fn main() -> Result<()> { let matches = Command::new("tsg-python") .version(BUILD_VERSION) @@ -581,10 +674,18 @@ fn main() -> Result<()> { ); let globals = Variables::new(); - let mut config = ExecutionConfig::new(&mut functions, &globals).lazy(false); - let graph = file - .execute(&tree, &source, &mut config, &NoCancellation) + let config = ExecutionConfig::new(&functions, &globals).lazy(false); + let mut graph = file + .execute(&tree, &source, &config, &NoCancellation) .with_context(|| format!("Could not execute TSG file {}", tsg_path))?; + + // Collect and add syntax error nodes to the graph + if tree.root_node().has_error() { + let syntax_errors: Vec = + syntax_errors_from_tree(tree.root_node(), &source).collect(); + add_syntax_error_nodes(&mut graph, &syntax_errors); + } + print!("{}", graph.pretty_print()); Ok(()) } From 9802ad77dc74201eb28d0af062acd1af024ad66c Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 2 Jul 2025 12:53:39 +0000 Subject: [PATCH 020/219] Python: Update `types_new.py` and test output --- .../extractor/tests/parser/types_new.expected | 34 ------------------- python/extractor/tests/parser/types_new.py | 2 +- 2 files changed, 1 insertion(+), 35 deletions(-) diff --git a/python/extractor/tests/parser/types_new.expected b/python/extractor/tests/parser/types_new.expected index ac470c08cf03..de4f44862800 100644 --- a/python/extractor/tests/parser/types_new.expected +++ b/python/extractor/tests/parser/types_new.expected @@ -308,40 +308,6 @@ Module: [1, 0] - [23, 0] ] ctx: Load ctx: Load - TypeAlias: [20, 0] - [20, 41] - name: - Name: [20, 5] - [20, 9] - variable: Variable('Baz2', None) - ctx: Store - type_parameters: [ - ParamSpec: [20, 10] - [20, 27] - name: - Name: [20, 12] - [20, 14] - variable: Variable('P2', None) - ctx: Store - default: - List: [20, 17] - [20, 27] - elts: [ - Name: [20, 18] - [20, 21] - variable: Variable('int', None) - ctx: Load - Name: [20, 23] - [20, 26] - variable: Variable('str', None) - ctx: Load - ] - ctx: Load - ] - value: - Subscript: [20, 31] - [20, 41] - value: - Name: [20, 31] - [20, 35] - variable: Variable('Spam', None) - ctx: Load - index: - Name: [20, 38] - [20, 40] - variable: Variable('P2', None) - ctx: Load - ctx: Load TypeAlias: [21, 0] - [21, 41] name: Name: [21, 5] - [21, 9] diff --git a/python/extractor/tests/parser/types_new.py b/python/extractor/tests/parser/types_new.py index 12e5eac0556c..9709d0f30449 100644 --- a/python/extractor/tests/parser/types_new.py +++ b/python/extractor/tests/parser/types_new.py @@ -17,6 +17,6 @@ class Qux1[*Ts1 = *tuple[int, bool]]: ... # TypeAliases type Foo2[T15, U1 = str] = Bar1[T15, U1] -type Baz2[**P2 = [int, str]] = Spam[**P2] +# type Baz2[**P2 = [int, str]] = Spam[**P2] # From the PEP, but this is not actually valid syntax! type Qux2[*Ts2 = *tuple[str]] = Ham[*Ts2] type Rab[U2, T15 = str] = Bar2[T15, U2] From bda522052b1d1fb3470ec7c01c5d13b2ccd5af71 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 2 Sep 2025 12:51:36 +0000 Subject: [PATCH 021/219] Python: Update bazel dependencies --- .../3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel | 2 +- misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel | 2 +- .../3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel b/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel index 94d02b1de3f7..2e3575479e84 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel @@ -35,7 +35,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel index 283db7e13449..312b70e23379 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel @@ -43,7 +43,7 @@ rust_library( "std", ], crate_root = "binding_rust/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel index c6155d86164f..409bc07da9f9 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel @@ -34,8 +34,8 @@ rust_library( "WORKSPACE.bazel", ], ), - crate_root = "src/lib.rs", - edition = "2018", + crate_root = "language.rs", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], From 9fa630faf597b68d3c27fcfe65c17ebf2a43ac7d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 3 Sep 2025 11:00:59 +0100 Subject: [PATCH 022/219] Add comments documenting helper predicates, and add call resolve condition to callMatchesSignature to avoid cartesian product --- .../src/Functions/SignatureOverriddenMethod.ql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 623521cc9c58..fa1caedb2df6 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -17,11 +17,13 @@ import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.internal.DataFlowDispatch import codeql.util.Option +/** Holds if `base` is overriden by `sub` */ predicate overrides(Function base, Function sub) { base.getName() = sub.getName() and base.getScope() = getADirectSuperclass+(sub.getScope()) } +/** Constructs a string to pluralize `str` depending on `num`. */ bindingset[num, str] string plural(int num, string str) { num = 1 and result = "1 " + str @@ -29,6 +31,7 @@ string plural(int num, string str) { num != 1 and result = num.toString() + " " + str + "s" } +/** Describes the minimum number of arguments `func` can accept, using "at least" if it may accept more. */ string describeMin(Function func) { exists(string descr | descr = plural(func.getMinPositionalArguments(), "positional argument") | if func.getMinPositionalArguments() = func.getMaxPositionalArguments() @@ -37,6 +40,7 @@ string describeMin(Function func) { ) } +/** Described the maximum number of arguments `func` can accept, using "at most" if it may accept fewer, and "arbitrarily many" if it has a vararg. */ string describeMax(Function func) { if func.hasVarArg() then result = "arbitrarily many positional arguments" @@ -48,6 +52,7 @@ string describeMax(Function func) { ) } +/** Describes the minumum number of arguments `func` can accept, without repeating "positional arguments". */ string describeMinShort(Function func) { exists(string descr | descr = func.getMinPositionalArguments().toString() | if func.getMinPositionalArguments() = func.getMaxPositionalArguments() @@ -56,6 +61,7 @@ string describeMinShort(Function func) { ) } +/** Describes the maximum number of arguments `func` can accept, without repeating "positional arguments". */ string describeMaxShort(Function func) { if func.hasVarArg() then result = "arbitrarily many" @@ -67,6 +73,7 @@ string describeMaxShort(Function func) { ) } +/** Describe an upper bound on the number of arguments `func` may accept, without specifying "at most". */ string describeMaxBound(Function func) { if func.hasVarArg() then result = "arbitrarily many" @@ -121,6 +128,7 @@ predicate weakSignatureMismatch(Function base, Function sub, string msg) { ) } +/** Holds if `f` should be ignored for considering signature mismatches. */ predicate ignore(Function f) { isClassmethod(f) or @@ -133,18 +141,21 @@ predicate ignore(Function f) { ) } +/** Gets a function that `call` may resolve to. */ Function resolveCall(Call call) { exists(DataFlowCall dfc | call = dfc.getNode().(CallNode).getNode() | result = viableCallable(dfc).(DataFlowFunction).getScope() ) } +/** Holds if `call` may resolve to either `base` or `sub`, and `base` is overiden by `sub`. */ predicate callViableForEitherOverride(Function base, Function sub, Call call) { overrides(base, sub) and base = resolveCall(call) and sub = resolveCall(call) } +/** Holds if either both `base` and `sub` are static methods, or both are not static methods, and `base` is overriden by `sub`. */ predicate matchingStatic(Function base, Function sub) { overrides(base, sub) and ( @@ -158,7 +169,9 @@ predicate matchingStatic(Function base, Function sub) { int extraSelfArg(Function func) { if isStaticmethod(func) then result = 0 else result = 1 } +/** Holds if the call `call` matches the signature for `func`. */ predicate callMatchesSignature(Function func, Call call) { + func = resolveCall(call) and ( // Each parameter of the function is accounted for in the call forall(Parameter param, int i | param = func.getArg(i) | @@ -189,12 +202,14 @@ predicate callMatchesSignature(Function func, Call call) { ) } +/** Gets a call which matches the signature of `base`, but not of overriden `sub`. */ Call getASignatureMismatchWitness(Function base, Function sub) { callViableForEitherOverride(base, sub, result) and callMatchesSignature(base, result) and not callMatchesSignature(sub, result) } +/** Choose a 'witnessing' call that matches the signature of `base` but not of overridden `sub`, and is in the file `file`. */ Call chooseASignatureMismatchWitnessInFile(Function base, Function sub, File file) { result = min(Call c | @@ -205,6 +220,7 @@ Call chooseASignatureMismatchWitnessInFile(Function base, Function sub, File fil ) } +/** Choose a 'witnessing' call that matches the signature of `base` but not of overridden `sub`. */ Call chooseASignatureMismatchWitness(Function base, Function sub) { exists(getASignatureMismatchWitness(base, sub)) and ( @@ -242,6 +258,7 @@ where not ignore(base) and matchingStatic(base, sub) and ( + // If we have a witness, alert for a 'weak' mismatch, but prefer the message for a 'strong' mismatch if that holds. call.asSome() = chooseASignatureMismatchWitness(base, sub) and extraMsg = " $@ correctly calls the base method, but does not match the signature of the overriding method." and @@ -252,6 +269,7 @@ where weakSignatureMismatch(base, sub, msg) ) or + // With no witness, only alert for 'strong' mismatches. not exists(getASignatureMismatchWitness(base, sub)) and call.isNone() and strongSignatureMismatch(base, sub, msg) and From 71dec0b23e01bc24c3238aaa3a28f77c1b0f6057 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 3 Sep 2025 11:06:21 +0100 Subject: [PATCH 023/219] Fix typos --- python/ql/src/Functions/SignatureOverriddenMethod.ql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index fa1caedb2df6..54c5e3243b03 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -17,7 +17,7 @@ import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.internal.DataFlowDispatch import codeql.util.Option -/** Holds if `base` is overriden by `sub` */ +/** Holds if `base` is overridden by `sub` */ predicate overrides(Function base, Function sub) { base.getName() = sub.getName() and base.getScope() = getADirectSuperclass+(sub.getScope()) @@ -52,7 +52,7 @@ string describeMax(Function func) { ) } -/** Describes the minumum number of arguments `func` can accept, without repeating "positional arguments". */ +/** Describes the minimum number of arguments `func` can accept, without repeating "positional arguments". */ string describeMinShort(Function func) { exists(string descr | descr = func.getMinPositionalArguments().toString() | if func.getMinPositionalArguments() = func.getMaxPositionalArguments() @@ -148,14 +148,14 @@ Function resolveCall(Call call) { ) } -/** Holds if `call` may resolve to either `base` or `sub`, and `base` is overiden by `sub`. */ +/** Holds if `call` may resolve to either `base` or `sub`, and `base` is overridden by `sub`. */ predicate callViableForEitherOverride(Function base, Function sub, Call call) { overrides(base, sub) and base = resolveCall(call) and sub = resolveCall(call) } -/** Holds if either both `base` and `sub` are static methods, or both are not static methods, and `base` is overriden by `sub`. */ +/** Holds if either both `base` and `sub` are static methods, or both are not static methods, and `base` is overridden by `sub`. */ predicate matchingStatic(Function base, Function sub) { overrides(base, sub) and ( @@ -202,7 +202,7 @@ predicate callMatchesSignature(Function func, Call call) { ) } -/** Gets a call which matches the signature of `base`, but not of overriden `sub`. */ +/** Gets a call which matches the signature of `base`, but not of overridden `sub`. */ Call getASignatureMismatchWitness(Function base, Function sub) { callViableForEitherOverride(base, sub, result) and callMatchesSignature(base, result) and From 13a93c7e3236440bb0ef750a5673bb6fd6dd07b9 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 3 Sep 2025 11:55:49 +0000 Subject: [PATCH 024/219] Python: Add suggestions from Copilot --- python/extractor/tsg-python/src/main.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs index a94d93ba2092..d71c93d7f2c5 100644 --- a/python/extractor/tsg-python/src/main.rs +++ b/python/extractor/tsg-python/src/main.rs @@ -498,8 +498,11 @@ impl<'a> Iterator for TreeIterator<'a> { fn next(&mut self) -> Option { if let Some(node) = self.nodes_to_visit.pop() { // Add all children to the queue for processing - self.nodes_to_visit - .extend((0..node.child_count()).rev().filter_map(|i| node.child(i))); + let children: Vec<_> = (0..node.child_count()) + .rev() + .filter_map(|i| node.child(i)) + .collect(); + self.nodes_to_visit.extend(children); Some(node) } else { None @@ -523,7 +526,7 @@ fn syntax_errors_from_tree<'a>( .map(move |node| { let start_pos = node.start_position(); let end_pos = node.end_position(); - let text = &source[node.byte_range()]; + let text = &source.get(node.byte_range()).unwrap_or(""); SyntaxError { start_pos, end_pos, From f6732a927b22b499826319fe349e0a7846fba33f Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 3 Sep 2025 11:56:54 +0000 Subject: [PATCH 025/219] Python: Bump extractor version --- python/extractor/semmle/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/extractor/semmle/util.py b/python/extractor/semmle/util.py index 56f7889ae231..8196f76e4375 100644 --- a/python/extractor/semmle/util.py +++ b/python/extractor/semmle/util.py @@ -10,7 +10,7 @@ #Semantic version of extractor. #Update this if any changes are made -VERSION = "7.1.3" +VERSION = "7.1.4" PY_EXTENSIONS = ".py", ".pyw" From bd3fa7fb21d5f2a4c61e7f75b09a3e7f9a4aeb48 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 5 Sep 2025 16:03:55 +0100 Subject: [PATCH 026/219] Switch to dataflow check for guards exceptions This reduces some confusing FPs, though appears to introduce another --- .../ql/src/Resources/FileNotAlwaysClosed.ql | 12 ++-- .../Resources/FileNotAlwaysClosedQuery.qll | 28 +++------ .../FileNotAlwaysClosed.expected | 10 +++ .../FileNotAlwaysClosed.qlref | 2 + .../FileNotAlwaysClosed/resources_test.py | 62 +++++++++++++++---- .../FileNotAlwaysClosed/test.expected | 0 .../Resources/FileNotAlwaysClosed/test.ql | 25 -------- 7 files changed, 76 insertions(+), 63 deletions(-) create mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected create mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.qlref delete mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected delete mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.ql b/python/ql/src/Resources/FileNotAlwaysClosed.ql index f639bc4aa912..4e0b897c9bb3 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.ql +++ b/python/ql/src/Resources/FileNotAlwaysClosed.ql @@ -15,12 +15,14 @@ import python import FileNotAlwaysClosedQuery +import codeql.util.Option -from FileOpen fo, string msg +from FileOpen fo, string msg, LocatableOption::Option exec where fileNotClosed(fo) and - msg = "File is opened but is not closed." + msg = "File is opened but is not closed." and + exec.isNone() or - fileMayNotBeClosedOnException(fo, _) and - msg = "File may not be closed if an exception is raised." -select fo, msg + fileMayNotBeClosedOnException(fo, exec.asSome()) and + msg = "File may not be closed if $@ raises an exception." +select fo, msg, exec, "this operation" diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 0122344d370e..94d34d9abc5e 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -34,6 +34,8 @@ class FileWrapperCall extends DataFlow::CallCfgNode { DataFlow::Node wrapped; FileWrapperCall() { + // Approximation: Treat any passing of a file object to a class constructor as potentially a wrapper + // This could be made more precise by checking that the constructor writes the file to a field. wrapped = this.getArg(_).getALocalSource() and this.getFunction() = classTracker(_) or @@ -51,21 +53,14 @@ class FileWrapperCall extends DataFlow::CallCfgNode { /** A node where a file is closed. */ abstract class FileClose extends DataFlow::CfgNode { /** Holds if this file close will occur if an exception is raised at `raises`. */ - predicate guardsExceptions(DataFlow::CfgNode raises) { + predicate guardsExceptions(DataFlow::CfgNode fileRaises) { // The close call occurs after an exception edge in the cfg (a catch or finally) - bbReachableRefl(raises.asCfgNode().getBasicBlock().getAnExceptionalSuccessor(), + bbReachableRefl(fileRaises.asCfgNode().getBasicBlock().getAnExceptionalSuccessor(), this.asCfgNode().getBasicBlock()) or // The exception is after the close call. - // A full cfg reachability check is not in general feasible for performance, so we approximate it with: - // - A basic block reachability check (here) that works if the expression and close call are in different basic blocks - // - A check (in the `WithStatement` override of `guardsExceptions`) for the case where the exception call - // is lexically contained in the body of a `with` statement that closes the file. - // This may cause FPs in a case such as: - // f.close() - // f.write("...") - // We presume this to not be very common. - bbReachableStrict(this.asCfgNode().getBasicBlock(), raises.asCfgNode().getBasicBlock()) + // A full cfg reachability check is not feasible for performance, instead we use local dataflow + fileLocalFlow(this, fileRaises) } } @@ -93,13 +88,6 @@ class WithStatement extends FileClose { With w; WithStatement() { this.asExpr() = w.getContextExpr() } - - override predicate guardsExceptions(DataFlow::CfgNode raises) { - super.guardsExceptions(raises) - or - // Check whether the exception is raised in the body of the with statement. - raises.asExpr().getParent*() = w.getBody().getAnItem() - } } /** Holds if an exception may be raised at `raises` if `file` is a file object. */ @@ -131,7 +119,7 @@ private predicate fileLocalFlowHelper1( /** Holds if data flows from `source` to `sink`, including file wrapper classes. */ pragma[inline] -private predicate fileLocalFlow(FileOpen source, DataFlow::Node sink) { +private predicate fileLocalFlow(DataFlow::Node source, DataFlow::Node sink) { exists(DataFlow::LocalSourceNode mid | fileLocalFlowHelper1(source, mid) and mid.flowsTo(sink)) } @@ -171,7 +159,7 @@ predicate fileMayNotBeClosedOnException(FileOpen fo, DataFlow::Node raises) { fileLocalFlow(fo, fileRaised) and not exists(FileClose fc | fileLocalFlow(fo, fc) and - fc.guardsExceptions(raises) + fc.guardsExceptions(fileRaised) ) ) } diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected new file mode 100644 index 000000000000..f5527589f807 --- /dev/null +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected @@ -0,0 +1,10 @@ +| resources_test.py:4:10:4:25 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:5:5:5:33 | ControlFlowNode for Attribute() | this operation | +| resources_test.py:9:10:9:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | +| resources_test.py:108:11:108:20 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | +| resources_test.py:112:11:112:28 | ControlFlowNode for opener_func2() | File may not be closed if $@ raises an exception. | resources_test.py:113:5:113:22 | ControlFlowNode for Attribute() | this operation | +| resources_test.py:123:11:123:24 | ControlFlowNode for opener_func2() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | +| resources_test.py:129:15:129:24 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:130:9:130:26 | ControlFlowNode for Attribute() | this operation | +| resources_test.py:248:11:248:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | +| resources_test.py:269:10:269:27 | ControlFlowNode for Attribute() | File may not be closed if $@ raises an exception. | resources_test.py:271:5:271:19 | ControlFlowNode for Attribute() | this operation | +| resources_test.py:285:11:285:20 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:287:5:287:31 | ControlFlowNode for Attribute() | this operation | +| resources_test.py:305:10:305:19 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:308:5:308:24 | ControlFlowNode for Attribute() | this operation | diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.qlref b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.qlref new file mode 100644 index 000000000000..57ffce32b8bc --- /dev/null +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.qlref @@ -0,0 +1,2 @@ +query: Resources/FileNotAlwaysClosed.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 244c6f73c133..1eb380013c3f 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -1,12 +1,12 @@ #File not always closed def not_close1(): - f1 = open("filename") # $ notClosedOnException + f1 = open("filename") # $ Alert # not closed on exception f1.write("Error could occur") f1.close() def not_close2(): - f2 = open("filename") # $ notClosed + f2 = open("filename") # $ Alert def closed3(): f3 = open("filename") @@ -46,7 +46,7 @@ def closed7(): def not_closed8(): f8 = None try: - f8 = open("filename") # $ MISSING:notClosedOnException + f8 = open("filename") # $ MISSING:Alert # not closed on exception f8.write("Error could occur") finally: if f8 is None: # We don't precisely consider this condition, so this result is MISSING. However, this seems uncommon. @@ -105,11 +105,11 @@ def opener_func2(name): return t1 def not_closed13(name): - f13 = open(name) # $ notClosed + f13 = open(name) # $ Alert f13.write("Hello") def may_not_be_closed14(name): - f14 = opener_func2(name) # $ notClosedOnException + f14 = opener_func2(name) # $ Alert # not closed on exception f14.write("Hello") f14.close() @@ -120,13 +120,13 @@ def closer2(t3): closer1(t3) def closed15(): - f15 = opener_func2() # $ SPURIOUS:notClosed + f15 = opener_func2() # $ SPURIOUS:Alert closer2(f15) # We don't detect that this call closes the file, so this result is SPURIOUS. def may_not_be_closed16(name): try: - f16 = open(name) # $ notClosedOnException + f16 = open(name) # $ Alert # not closed on exception f16.write("Hello") f16.close() except IOError: @@ -138,7 +138,7 @@ def may_raise(): #Not handling all exceptions, but we'll tolerate the false negative def not_closed17(): - f17 = open("filename") # $ MISSING:notClosedOnException + f17 = open("filename") # $ MISSING:Alert # not closed on exception try: f17.write("IOError could occur") f17.write("IOError could occur") @@ -234,7 +234,7 @@ def closed21(path): def not_closed22(path): - f22 = open(path, "wb") # $ MISSING:notClosedOnException + f22 = open(path, "wb") # $ MISSING:Alert # not closed on exception try: f22.write(b"foo") may_raise() @@ -245,7 +245,7 @@ def not_closed22(path): f22.close() def not_closed23(path): - f23 = open(path, "w") # $ notClosed + f23 = open(path, "w") # $ Alert wr = FileWrapper(f23) def closed24(path): @@ -266,7 +266,7 @@ def closed26(path): os.close(fd) def not_closed27(path): - fd = os.open(path, "w") # $notClosedOnException + fd = os.open(path, "w") # $Alert # not closed on exception f27 = os.fdopen(fd, "w") f27.write("hi") f27.close() @@ -282,6 +282,42 @@ def closed28(path): def closed29(path): # Due to an approximation in CFG reachability for performance, it is not detected that the `write` call that may raise occurs after the file has already been closed. # We presume this case to be uncommon. - f28 = open(path) # $SPURIOUS:notClosedOnException + f28 = open(path) # $SPURIOUS:Alert # not closed on exception f28.close() - f28.write("already closed") \ No newline at end of file + f28.write("already closed") + +# False positive: + +class NotWrapper: + def __init__(self, fp): + self.data = fp.read() + fp.close() + + def do_something(): + pass + +def closed30(path): + # Combination of approximations resulting in this FP: + # - NotWrapper is treated as a wrapper class as a file handle is passed to it + # - thing.do_something() is treated as a call that can raise an exception while a file is open + # - this call is treated as occurring after the open but not as being guarded by the with statement, as it is in the same basic block + + with open(path) as fp: # $SPURIOUS:Alert # not closed on exception + thing = NotWrapper(fp) + + thing.do_something() + + +def closed31(path): + with open(path) as fp: + data = fp.readline() + data2 = fp.readline() + + +class FlowReader(): + def __init__(self, f): + pass +def test_cannot_convert(tdata): + with open(tdata, "rb") as f: + flow_reader = FlowReader(f) + list(flow_reader.stream()) \ No newline at end of file diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql deleted file mode 100644 index f176172d0782..000000000000 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql +++ /dev/null @@ -1,25 +0,0 @@ -import python -import Resources.FileNotAlwaysClosedQuery -import utils.test.InlineExpectationsTest - -module MethodArgTest implements TestSig { - string getARelevantTag() { result = ["notClosed", "notClosedOnException"] } - - predicate hasActualResult(Location location, string element, string tag, string value) { - exists(DataFlow::CfgNode el, FileOpen fo | - el = fo and - element = el.toString() and - location = el.getLocation() and - value = "" and - ( - fileNotClosed(fo) and - tag = "notClosed" - or - fileMayNotBeClosedOnException(fo, _) and - tag = "notClosedOnException" - ) - ) - } -} - -import MakeTest From 0b293eaba515ef2da98aa1d976a6ed7166f8412a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 5 Sep 2025 22:43:21 +0100 Subject: [PATCH 027/219] Update test output --- .../FileNotAlwaysClosed.expected | 2 +- .../FileNotAlwaysClosed/resources_test.py | 31 +++++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected index f5527589f807..ffa392b03f10 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected @@ -4,7 +4,7 @@ | resources_test.py:112:11:112:28 | ControlFlowNode for opener_func2() | File may not be closed if $@ raises an exception. | resources_test.py:113:5:113:22 | ControlFlowNode for Attribute() | this operation | | resources_test.py:123:11:123:24 | ControlFlowNode for opener_func2() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:129:15:129:24 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:130:9:130:26 | ControlFlowNode for Attribute() | this operation | +| resources_test.py:154:15:154:24 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:159:9:159:18 | ControlFlowNode for Attribute() | this operation | | resources_test.py:248:11:248:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:269:10:269:27 | ControlFlowNode for Attribute() | File may not be closed if $@ raises an exception. | resources_test.py:271:5:271:19 | ControlFlowNode for Attribute() | this operation | | resources_test.py:285:11:285:20 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:287:5:287:31 | ControlFlowNode for Attribute() | this operation | -| resources_test.py:305:10:305:19 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:308:5:308:24 | ControlFlowNode for Attribute() | this operation | diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 1eb380013c3f..d0aba731182a 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -151,11 +151,11 @@ def not_closed17(): #With statement will close the fp def closed18(path): try: - f18 = open(path) + f18 = open(path) # $SPURIOUS: Alert # Dataflow appears to not detect this with statement as guarding the exceptions produced by the `read()` call. except IOError as ex: print(ex) raise ex - with f18: + with f18: f18.read() class Closed19(object): @@ -286,7 +286,7 @@ def closed29(path): f28.close() f28.write("already closed") -# False positive: +# False positive in a previous implementation: class NotWrapper: def __init__(self, fp): @@ -297,12 +297,13 @@ def do_something(): pass def closed30(path): - # Combination of approximations resulting in this FP: + # Combination of approximations resulted in this FP: # - NotWrapper is treated as a wrapper class as a file handle is passed to it # - thing.do_something() is treated as a call that can raise an exception while a file is open # - this call is treated as occurring after the open but not as being guarded by the with statement, as it is in the same basic block + # - - this behaviour has been changed fixing the FP - with open(path) as fp: # $SPURIOUS:Alert # not closed on exception + with open(path) as fp: # No longer spurious alert here. thing = NotWrapper(fp) thing.do_something() @@ -314,10 +315,20 @@ def closed31(path): data2 = fp.readline() -class FlowReader(): +class Wrapper(): def __init__(self, f): + self.f = f + def read(self): + return self.f.read() + def __enter__(self): pass -def test_cannot_convert(tdata): - with open(tdata, "rb") as f: - flow_reader = FlowReader(f) - list(flow_reader.stream()) \ No newline at end of file + def __exit__(self): + self.f.close() + +def closed32(path): + with open(path, "rb") as f: # No longer spurious alert here. + wrap = Wrapper(f) + # This resulted in an FP in a previous implementation, + # due to a check that an operation is lexically contained within a `with` block (with `expr.getParent*()`) + # not detecting this case. + return list(wrap.read()) \ No newline at end of file From ff4c11f503755f0cbaddedd13df875eb5596ee7a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Sat, 6 Sep 2025 00:45:15 +0100 Subject: [PATCH 028/219] Update test output. Accepting some FNs due to dataflow issue. --- .../Exceptions/general/CatchingBaseException.expected | 2 +- .../test/query-tests/Exceptions/general/EmptyExcept.expected | 3 +++ .../Exceptions/general/IllegalExceptionHandlerType.expected | 2 +- .../Exceptions/general/IncorrectExceptOrder.expected | 2 +- .../general/NotImplementedIsNotAnException.expected | 4 ++-- .../ql/test/query-tests/Exceptions/general/exceptions_test.py | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/python/ql/test/query-tests/Exceptions/general/CatchingBaseException.expected b/python/ql/test/query-tests/Exceptions/general/CatchingBaseException.expected index 8cbb6d9c961c..dbc838a90be0 100644 --- a/python/ql/test/query-tests/Exceptions/general/CatchingBaseException.expected +++ b/python/ql/test/query-tests/Exceptions/general/CatchingBaseException.expected @@ -1,2 +1,2 @@ | exceptions_test.py:7:5:7:11 | ExceptStmt | Except block directly handles BaseException. | -| exceptions_test.py:71:5:71:25 | ExceptStmt | Except block directly handles BaseException. | +| exceptions_test.py:97:5:97:25 | ExceptStmt | Except block directly handles BaseException. | diff --git a/python/ql/test/query-tests/Exceptions/general/EmptyExcept.expected b/python/ql/test/query-tests/Exceptions/general/EmptyExcept.expected index 57c50449af8e..f9d9c69dd877 100644 --- a/python/ql/test/query-tests/Exceptions/general/EmptyExcept.expected +++ b/python/ql/test/query-tests/Exceptions/general/EmptyExcept.expected @@ -1,2 +1,5 @@ | exceptions_test.py:7:5:7:11 | ExceptStmt | 'except' clause does nothing but pass and there is no explanatory comment. | | exceptions_test.py:13:5:13:21 | ExceptStmt | 'except' clause does nothing but pass and there is no explanatory comment. | +| exceptions_test.py:72:1:72:18 | ExceptStmt | 'except' clause does nothing but pass and there is no explanatory comment. | +| exceptions_test.py:85:1:85:17 | ExceptStmt | 'except' clause does nothing but pass and there is no explanatory comment. | +| exceptions_test.py:89:1:89:17 | ExceptStmt | 'except' clause does nothing but pass and there is no explanatory comment. | diff --git a/python/ql/test/query-tests/Exceptions/general/IllegalExceptionHandlerType.expected b/python/ql/test/query-tests/Exceptions/general/IllegalExceptionHandlerType.expected index 0864dd0fe308..5ba0c7163713 100644 --- a/python/ql/test/query-tests/Exceptions/general/IllegalExceptionHandlerType.expected +++ b/python/ql/test/query-tests/Exceptions/general/IllegalExceptionHandlerType.expected @@ -1,4 +1,4 @@ | exceptions_test.py:51:5:51:25 | ExceptStmt | Non-exception $@ in exception handler which will never match raised exception. | exceptions_test.py:33:1:33:28 | ControlFlowNode for ClassExpr | class 'NotException1' | | exceptions_test.py:54:5:54:25 | ExceptStmt | Non-exception $@ in exception handler which will never match raised exception. | exceptions_test.py:36:1:36:28 | ControlFlowNode for ClassExpr | class 'NotException2' | -| exceptions_test.py:112:5:112:22 | ExceptStmt | Non-exception $@ in exception handler which will never match raised exception. | exceptions_test.py:107:12:107:14 | ControlFlowNode for FloatLiteral | instance of 'float' | +| exceptions_test.py:138:5:138:22 | ExceptStmt | Non-exception $@ in exception handler which will never match raised exception. | exceptions_test.py:133:12:133:14 | ControlFlowNode for FloatLiteral | instance of 'float' | | pypy_test.py:14:5:14:14 | ExceptStmt | Non-exception $@ in exception handler which will never match raised exception. | pypy_test.py:14:12:14:13 | ControlFlowNode for IntegerLiteral | instance of 'int' | diff --git a/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.expected b/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.expected index 160d5176724f..3fab57be376b 100644 --- a/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.expected +++ b/python/ql/test/query-tests/Exceptions/general/IncorrectExceptOrder.expected @@ -1 +1 @@ -| exceptions_test.py:64:1:64:22 | ExceptStmt | Except block for $@ is unreachable; the more general $@ for $@ will always be executed in preference. | file://:0:0:0:0 | builtin-class AttributeError | AttributeError | exceptions_test.py:62:1:62:17 | ExceptStmt | except block | file://:0:0:0:0 | builtin-class Exception | Exception | +| exceptions_test.py:64:1:64:22 | ExceptStmt | This except block handling $@ is unreachable; as $@ for the more general $@ always subsumes it. | file://:0:0:0:0 | AttributeError | AttributeError | exceptions_test.py:62:1:62:17 | ExceptStmt | this except block | file://:0:0:0:0 | Exception | Exception | diff --git a/python/ql/test/query-tests/Exceptions/general/NotImplementedIsNotAnException.expected b/python/ql/test/query-tests/Exceptions/general/NotImplementedIsNotAnException.expected index 7c5ee490b4e6..0bb863ccfedc 100644 --- a/python/ql/test/query-tests/Exceptions/general/NotImplementedIsNotAnException.expected +++ b/python/ql/test/query-tests/Exceptions/general/NotImplementedIsNotAnException.expected @@ -1,2 +1,2 @@ -| exceptions_test.py:170:11:170:24 | NotImplemented | NotImplemented is not an Exception. Did you mean NotImplementedError? | -| exceptions_test.py:173:11:173:26 | NotImplemented() | NotImplemented is not an Exception. Did you mean NotImplementedError? | +| exceptions_test.py:196:11:196:24 | NotImplemented | NotImplemented is not an Exception. Did you mean NotImplementedError? | +| exceptions_test.py:199:11:199:26 | NotImplemented() | NotImplemented is not an Exception. Did you mean NotImplementedError? | diff --git a/python/ql/test/query-tests/Exceptions/general/exceptions_test.py b/python/ql/test/query-tests/Exceptions/general/exceptions_test.py index 291b3cb30e0c..cf197683f151 100644 --- a/python/ql/test/query-tests/Exceptions/general/exceptions_test.py +++ b/python/ql/test/query-tests/Exceptions/general/exceptions_test.py @@ -71,7 +71,7 @@ class MyExc(ValueError): pass except ValueError: pass -except MyExc: # $Alert[py/unreachable-except] +except MyExc: # $MISSING:Alert[py/unreachable-except] # Missing due to dataflow limitiation preventing MyExc from being tracked here. pass class MyBaseExc(Exception): @@ -84,7 +84,7 @@ class MySubExc(MyBaseExc): pass except MyBaseExc: pass -except MySubExc: # $Alert[py/unreachable-except] +except MySubExc: # $MISSING:Alert[py/unreachable-except] # Missing due to dataflow limitation preventing MyExc from being tracked here. pass except Exception: pass From eb246f6f71118d0aa7f4a19d315c76e46ea4676d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 8 Sep 2025 09:43:22 +0100 Subject: [PATCH 029/219] Performance experiment - add getFunctionFIle for better join order --- python/ql/src/Functions/SignatureOverriddenMethod.ql | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index 54c5e3243b03..feb69f5b13ce 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -202,6 +202,9 @@ predicate callMatchesSignature(Function func, Call call) { ) } +pragma[nomagic] +private File getFunctionFile(Function f) { result = f.getLocation().getFile() } + /** Gets a call which matches the signature of `base`, but not of overridden `sub`. */ Call getASignatureMismatchWitness(Function base, Function sub) { callViableForEitherOverride(base, sub, result) and @@ -224,17 +227,17 @@ Call chooseASignatureMismatchWitnessInFile(Function base, Function sub, File fil Call chooseASignatureMismatchWitness(Function base, Function sub) { exists(getASignatureMismatchWitness(base, sub)) and ( - result = chooseASignatureMismatchWitnessInFile(base, sub, base.getLocation().getFile()) + result = chooseASignatureMismatchWitnessInFile(base, sub, getFunctionFile(base)) or not exists(Call c | c = getASignatureMismatchWitness(base, sub) and c.getLocation().getFile() = base.getLocation().getFile() ) and - result = chooseASignatureMismatchWitnessInFile(base, sub, sub.getLocation().getFile()) + result = chooseASignatureMismatchWitnessInFile(base, sub, getFunctionFile(sub)) or not exists(Call c | c = getASignatureMismatchWitness(base, sub) and - c.getLocation().getFile() = [base, sub].getLocation().getFile() + c.getLocation().getFile() = getFunctionFile([base, sub]) ) and result = min(Call c | From e382f7cd43fc5417e59cdda5ff9032f65109febb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 9 Sep 2025 11:26:17 +0100 Subject: [PATCH 030/219] Improve check for containment in with statement --- python/ql/src/Resources/FileNotAlwaysClosedQuery.qll | 6 ++++++ .../Resources/FileNotAlwaysClosed/resources_test.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 94d34d9abc5e..36807ca39f1a 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -88,6 +88,12 @@ class WithStatement extends FileClose { With w; WithStatement() { this.asExpr() = w.getContextExpr() } + + override predicate guardsExceptions(DataFlow::CfgNode fileRaises) { + super.guardsExceptions(fileRaises) + or + w.getBody().contains(fileRaises.asExpr()) + } } /** Holds if an exception may be raised at `raises` if `file` is a file object. */ diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index d0aba731182a..0f9edc02803b 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -151,7 +151,7 @@ def not_closed17(): #With statement will close the fp def closed18(path): try: - f18 = open(path) # $SPURIOUS: Alert # Dataflow appears to not detect this with statement as guarding the exceptions produced by the `read()` call. + f18 = open(path) # $Alert except IOError as ex: print(ex) raise ex @@ -301,7 +301,7 @@ def closed30(path): # - NotWrapper is treated as a wrapper class as a file handle is passed to it # - thing.do_something() is treated as a call that can raise an exception while a file is open # - this call is treated as occurring after the open but not as being guarded by the with statement, as it is in the same basic block - # - - this behaviour has been changed fixing the FP + # - - this behavior has been changed fixing the FP with open(path) as fp: # No longer spurious alert here. thing = NotWrapper(fp) From b01b40b51b8b55a72c50a477d187fdd3e557550b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 9 Sep 2025 13:44:03 +0100 Subject: [PATCH 031/219] Update test output --- .../FileNotAlwaysClosed/FileNotAlwaysClosed.expected | 4 +++- .../Resources/FileNotAlwaysClosed/resources_test.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected index ffa392b03f10..579424e9318f 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected @@ -1,10 +1,12 @@ +#select | resources_test.py:4:10:4:25 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:5:5:5:33 | ControlFlowNode for Attribute() | this operation | | resources_test.py:9:10:9:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:108:11:108:20 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:112:11:112:28 | ControlFlowNode for opener_func2() | File may not be closed if $@ raises an exception. | resources_test.py:113:5:113:22 | ControlFlowNode for Attribute() | this operation | | resources_test.py:123:11:123:24 | ControlFlowNode for opener_func2() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:129:15:129:24 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:130:9:130:26 | ControlFlowNode for Attribute() | this operation | -| resources_test.py:154:15:154:24 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:159:9:159:18 | ControlFlowNode for Attribute() | this operation | | resources_test.py:248:11:248:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:269:10:269:27 | ControlFlowNode for Attribute() | File may not be closed if $@ raises an exception. | resources_test.py:271:5:271:19 | ControlFlowNode for Attribute() | this operation | | resources_test.py:285:11:285:20 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:287:5:287:31 | ControlFlowNode for Attribute() | this operation | +testFailures +| resources_test.py:154:26:154:154 | Comment # $SPURIOUS: Alert # Dataflow appears to not detect this with statement as guarding the exceptions produced by the `read()` call. | Fixed spurious result: Alert | diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 0f9edc02803b..972cc3a7be29 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -293,7 +293,7 @@ def __init__(self, fp): self.data = fp.read() fp.close() - def do_something(): + def do_something(self): pass def closed30(path): @@ -322,7 +322,7 @@ def read(self): return self.f.read() def __enter__(self): pass - def __exit__(self): + def __exit__(self,exc_type, exc_value,traceback): self.f.close() def closed32(path): From ec40ea800d37886764f27b2af3f633f9675e3471 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 9 Sep 2025 13:46:52 +0100 Subject: [PATCH 032/219] Update qldoc --- python/ql/src/Resources/FileNotAlwaysClosedQuery.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 36807ca39f1a..9d91e4f523c2 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -52,7 +52,7 @@ class FileWrapperCall extends DataFlow::CallCfgNode { /** A node where a file is closed. */ abstract class FileClose extends DataFlow::CfgNode { - /** Holds if this file close will occur if an exception is raised at `raises`. */ + /** Holds if this file close will occur if an exception is raised at `fileRaises`. */ predicate guardsExceptions(DataFlow::CfgNode fileRaises) { // The close call occurs after an exception edge in the cfg (a catch or finally) bbReachableRefl(fileRaises.asCfgNode().getBasicBlock().getAnExceptionalSuccessor(), From 58862f4ace3b35d19c9cf61dc63fbe7efcee6401 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 9 Sep 2025 15:35:43 +0200 Subject: [PATCH 033/219] JavaScript: Add some medium precision queries to the code-quality-extended suite. --- javascript/ql/src/Comments/CommentedOutCode.ql | 6 +++--- javascript/ql/src/Comments/TodoComments.ql | 4 +++- javascript/ql/src/DOM/Alert.ql | 4 +++- javascript/ql/src/Declarations/RedeclaredVariable.ql | 4 +++- javascript/ql/src/Declarations/UnusedParameter.ql | 5 ++++- .../ql/src/LanguageFeatures/ArgumentsCallerCallee.ql | 5 +++-- javascript/ql/src/LanguageFeatures/DebuggerStatement.ql | 7 ++++--- javascript/ql/src/LanguageFeatures/Eval.ql | 5 +++-- .../ql/src/Performance/ReassignParameterAndUseArguments.ql | 5 +++-- javascript/ql/src/RegExp/BackspaceEscape.ql | 5 +++-- javascript/ql/src/Statements/ImplicitReturn.ql | 5 ++++- javascript/ql/src/Statements/InconsistentReturn.ql | 6 ++++-- 12 files changed, 40 insertions(+), 21 deletions(-) diff --git a/javascript/ql/src/Comments/CommentedOutCode.ql b/javascript/ql/src/Comments/CommentedOutCode.ql index 2528172522d5..460a3bc21331 100644 --- a/javascript/ql/src/Comments/CommentedOutCode.ql +++ b/javascript/ql/src/Comments/CommentedOutCode.ql @@ -4,9 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/commented-out-code - * @tags maintainability - * statistical - * non-attributable + * @tags quality + * maintainability + * readability * @precision medium */ diff --git a/javascript/ql/src/Comments/TodoComments.ql b/javascript/ql/src/Comments/TodoComments.ql index 3d7f92cfbfc3..487dde1f737f 100644 --- a/javascript/ql/src/Comments/TodoComments.ql +++ b/javascript/ql/src/Comments/TodoComments.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/todo-comment - * @tags maintainability + * @tags quality + * maintainability + * readability * external/cwe/cwe-546 * @precision medium */ diff --git a/javascript/ql/src/DOM/Alert.ql b/javascript/ql/src/DOM/Alert.ql index 97fd505d2f96..43218c439c18 100644 --- a/javascript/ql/src/DOM/Alert.ql +++ b/javascript/ql/src/DOM/Alert.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/alert-call - * @tags maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-489 * @precision medium */ diff --git a/javascript/ql/src/Declarations/RedeclaredVariable.ql b/javascript/ql/src/Declarations/RedeclaredVariable.ql index a48e4e5f65e7..098cfdaffc47 100644 --- a/javascript/ql/src/Declarations/RedeclaredVariable.ql +++ b/javascript/ql/src/Declarations/RedeclaredVariable.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/variable-redeclaration - * @tags reliability + * @tags quality + * reliability + * correctness * readability * @precision medium */ diff --git a/javascript/ql/src/Declarations/UnusedParameter.ql b/javascript/ql/src/Declarations/UnusedParameter.ql index d48dc11ed2ab..6cb84d2f7c1f 100644 --- a/javascript/ql/src/Declarations/UnusedParameter.ql +++ b/javascript/ql/src/Declarations/UnusedParameter.ql @@ -4,7 +4,10 @@ * @kind problem * @problem.severity recommendation * @id js/unused-parameter - * @tags maintainability + * @tags quality + * reliability + * correctness + * readability * @precision medium */ diff --git a/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql b/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql index 6354383f6c78..9bbf22eebaaa 100644 --- a/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql +++ b/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/call-stack-introspection - * @tags maintainability - * language-features + * @tags quality + * reliability + * correctness * @precision medium */ diff --git a/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql b/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql index 6ffca36df7cd..a81f8e93051f 100644 --- a/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql +++ b/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql @@ -4,9 +4,10 @@ * @kind problem * @problem.severity recommendation * @id js/debugger-statement - * @tags efficiency - * maintainability - * language-features + * @tags quality + * reliability + * correctness + * performance * external/cwe/cwe-489 * @precision medium */ diff --git a/javascript/ql/src/LanguageFeatures/Eval.ql b/javascript/ql/src/LanguageFeatures/Eval.ql index f1f753774c04..940ec716da7f 100644 --- a/javascript/ql/src/LanguageFeatures/Eval.ql +++ b/javascript/ql/src/LanguageFeatures/Eval.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/eval-call - * @tags maintainability - * language-features + * @tags quality + * reliability + * correctness * external/cwe/cwe-676 * @precision medium */ diff --git a/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql b/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql index 0e54de5d7d89..7fddaa745926 100644 --- a/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql +++ b/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/parameter-reassignment-with-arguments - * @tags efficiency - * maintainability + * @tags quality + * reliability + * performance * @precision medium */ diff --git a/javascript/ql/src/RegExp/BackspaceEscape.ql b/javascript/ql/src/RegExp/BackspaceEscape.ql index 054f46f06b68..cee6c7672cee 100644 --- a/javascript/ql/src/RegExp/BackspaceEscape.ql +++ b/javascript/ql/src/RegExp/BackspaceEscape.ql @@ -5,9 +5,10 @@ * @kind problem * @problem.severity recommendation * @id js/regex/backspace-escape - * @tags maintainability + * @tags quality + * maintainability * readability - * regular-expressions + * correctness * @precision medium */ diff --git a/javascript/ql/src/Statements/ImplicitReturn.ql b/javascript/ql/src/Statements/ImplicitReturn.ql index 9bc50f0798a6..cf76ec616062 100644 --- a/javascript/ql/src/Statements/ImplicitReturn.ql +++ b/javascript/ql/src/Statements/ImplicitReturn.ql @@ -5,7 +5,10 @@ * @kind problem * @problem.severity recommendation * @id js/implicit-return - * @tags maintainability + * @tags quality + * reliability + * correctness + * readability * @precision medium */ diff --git a/javascript/ql/src/Statements/InconsistentReturn.ql b/javascript/ql/src/Statements/InconsistentReturn.ql index b6978301e023..a6e810d52bf2 100644 --- a/javascript/ql/src/Statements/InconsistentReturn.ql +++ b/javascript/ql/src/Statements/InconsistentReturn.ql @@ -4,8 +4,10 @@ * @kind problem * @problem.severity recommendation * @id js/mixed-returns - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness + * readability * @precision medium */ From 1c801bd856a3f399512958f8cfbe9e792ffc6f62 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 9 Sep 2025 15:48:31 +0200 Subject: [PATCH 034/219] JavaScript: Update integration test expected output. --- .../javascript-code-quality-extended.qls.expected | 12 ++++++++++++ .../query-suite/not_included_in_qls.expected | 12 ------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected index 6894a776b379..1d2d3c1ff8ce 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected @@ -4,6 +4,9 @@ ql/javascript/ql/src/AngularJS/IncompatibleService.ql ql/javascript/ql/src/AngularJS/MissingExplicitInjection.ql ql/javascript/ql/src/AngularJS/RepeatedInjection.ql ql/javascript/ql/src/AngularJS/UseNgSrc.ql +ql/javascript/ql/src/Comments/CommentedOutCode.ql +ql/javascript/ql/src/Comments/TodoComments.ql +ql/javascript/ql/src/DOM/Alert.ql ql/javascript/ql/src/DOM/DuplicateAttributes.ql ql/javascript/ql/src/DOM/MalformedIdAttribute.ql ql/javascript/ql/src/DOM/PseudoEval.ql @@ -20,11 +23,13 @@ ql/javascript/ql/src/Declarations/IneffectiveParameterType.ql ql/javascript/ql/src/Declarations/MissingThisQualifier.ql ql/javascript/ql/src/Declarations/MissingVarDecl.ql ql/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql +ql/javascript/ql/src/Declarations/RedeclaredVariable.ql ql/javascript/ql/src/Declarations/SuspiciousMethodNameDeclaration.ql ql/javascript/ql/src/Declarations/TemporalDeadZone.ql ql/javascript/ql/src/Declarations/UniqueParameterNames.ql ql/javascript/ql/src/Declarations/UniquePropertyNames.ql ql/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +ql/javascript/ql/src/Declarations/UnusedParameter.ql ql/javascript/ql/src/Declarations/UnusedVariable.ql ql/javascript/ql/src/Expressions/ComparisonWithNaN.ql ql/javascript/ql/src/Expressions/DuplicateCondition.ql @@ -48,9 +53,12 @@ ql/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql ql/javascript/ql/src/Expressions/UnknownDirective.ql ql/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql ql/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql +ql/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql ql/javascript/ql/src/LanguageFeatures/BadTypeof.ql ql/javascript/ql/src/LanguageFeatures/ConditionalComments.ql +ql/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql ql/javascript/ql/src/LanguageFeatures/DeleteVar.ql +ql/javascript/ql/src/LanguageFeatures/Eval.ql ql/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql ql/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql ql/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql @@ -71,6 +79,7 @@ ql/javascript/ql/src/LanguageFeatures/WithStatement.ql ql/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql ql/javascript/ql/src/NodeJS/InvalidExport.ql ql/javascript/ql/src/NodeJS/MissingExports.ql +ql/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql ql/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql ql/javascript/ql/src/React/DirectStateMutation.ql ql/javascript/ql/src/React/InconsistentStateUpdate.ql @@ -78,6 +87,7 @@ ql/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql ql/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql ql/javascript/ql/src/RegExp/BackrefBeforeGroup.ql ql/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql +ql/javascript/ql/src/RegExp/BackspaceEscape.ql ql/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql ql/javascript/ql/src/RegExp/EmptyCharacterClass.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql @@ -86,7 +96,9 @@ ql/javascript/ql/src/RegExp/UnmatchableCaret.ql ql/javascript/ql/src/RegExp/UnmatchableDollar.ql ql/javascript/ql/src/Statements/DanglingElse.ql ql/javascript/ql/src/Statements/IgnoreArrayResult.ql +ql/javascript/ql/src/Statements/ImplicitReturn.ql ql/javascript/ql/src/Statements/InconsistentLoopOrientation.ql +ql/javascript/ql/src/Statements/InconsistentReturn.ql ql/javascript/ql/src/Statements/LabelInCase.ql ql/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql ql/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql diff --git a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected index fa52a97a4e4a..46317e8800f2 100644 --- a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -1,18 +1,13 @@ ql/javascript/ql/src/AlertSuppression.ql ql/javascript/ql/src/AngularJS/DeadAngularJSEventListener.ql ql/javascript/ql/src/AngularJS/UnusedAngularDependency.ql -ql/javascript/ql/src/Comments/CommentedOutCode.ql ql/javascript/ql/src/Comments/FCommentedOutCode.ql -ql/javascript/ql/src/Comments/TodoComments.ql -ql/javascript/ql/src/DOM/Alert.ql ql/javascript/ql/src/DOM/AmbiguousIdAttribute.ql ql/javascript/ql/src/DOM/ConflictingAttributes.ql ql/javascript/ql/src/DOM/TargetBlank.ql ql/javascript/ql/src/Declarations/DeadStoreOfGlobal.ql -ql/javascript/ql/src/Declarations/RedeclaredVariable.ql ql/javascript/ql/src/Declarations/TooManyParameters.ql ql/javascript/ql/src/Declarations/UnstableCyclicImport.ql -ql/javascript/ql/src/Declarations/UnusedParameter.ql ql/javascript/ql/src/Declarations/UnusedProperty.ql ql/javascript/ql/src/Electron/EnablingNodeIntegration.ql ql/javascript/ql/src/Expressions/BitwiseSignCheck.ql @@ -21,10 +16,7 @@ ql/javascript/ql/src/Expressions/MisspelledIdentifier.ql ql/javascript/ql/src/JSDoc/BadParamTag.ql ql/javascript/ql/src/JSDoc/JSDocForNonExistentParameter.ql ql/javascript/ql/src/JSDoc/UndocumentedParameter.ql -ql/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql -ql/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql ql/javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql -ql/javascript/ql/src/LanguageFeatures/Eval.ql ql/javascript/ql/src/LanguageFeatures/JumpFromFinally.ql ql/javascript/ql/src/LanguageFeatures/SetterIgnoresParameter.ql ql/javascript/ql/src/LanguageFeatures/WrongExtensionJSON.ql @@ -48,8 +40,6 @@ ql/javascript/ql/src/NodeJS/DubiousImport.ql ql/javascript/ql/src/NodeJS/UnresolvableImport.ql ql/javascript/ql/src/NodeJS/UnusedDependency.ql ql/javascript/ql/src/Performance/NonLocalForIn.ql -ql/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql -ql/javascript/ql/src/RegExp/BackspaceEscape.ql ql/javascript/ql/src/RegExp/MalformedRegExp.ql ql/javascript/ql/src/Security/CWE-020/ExternalAPIsUsedWithUntrustedData.ql ql/javascript/ql/src/Security/CWE-020/UntrustedDataToExternalAPI.ql @@ -59,8 +49,6 @@ ql/javascript/ql/src/Security/CWE-798/HardcodedCredentials.ql ql/javascript/ql/src/Security/CWE-807/DifferentKindsComparisonBypass.ql ql/javascript/ql/src/Security/trest/test.ql ql/javascript/ql/src/Statements/EphemeralLoop.ql -ql/javascript/ql/src/Statements/ImplicitReturn.ql -ql/javascript/ql/src/Statements/InconsistentReturn.ql ql/javascript/ql/src/Statements/NestedLoopsSameVariable.ql ql/javascript/ql/src/Statements/ReturnOutsideFunction.ql ql/javascript/ql/src/Summary/TaintSinks.ql From ea562de3e6fa57ea279729b8cfc9f7d68e9530fe Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 9 Sep 2025 15:17:16 +0100 Subject: [PATCH 035/219] Fix tests --- .../Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected | 3 --- .../Resources/FileNotAlwaysClosed/resources_test.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected index 579424e9318f..7f48feb72eb9 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/FileNotAlwaysClosed.expected @@ -1,4 +1,3 @@ -#select | resources_test.py:4:10:4:25 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:5:5:5:33 | ControlFlowNode for Attribute() | this operation | | resources_test.py:9:10:9:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:108:11:108:20 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | @@ -8,5 +7,3 @@ | resources_test.py:248:11:248:25 | ControlFlowNode for open() | File is opened but is not closed. | file://:0:0:0:0 | (none) | this operation | | resources_test.py:269:10:269:27 | ControlFlowNode for Attribute() | File may not be closed if $@ raises an exception. | resources_test.py:271:5:271:19 | ControlFlowNode for Attribute() | this operation | | resources_test.py:285:11:285:20 | ControlFlowNode for open() | File may not be closed if $@ raises an exception. | resources_test.py:287:5:287:31 | ControlFlowNode for Attribute() | this operation | -testFailures -| resources_test.py:154:26:154:154 | Comment # $SPURIOUS: Alert # Dataflow appears to not detect this with statement as guarding the exceptions produced by the `read()` call. | Fixed spurious result: Alert | diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 972cc3a7be29..15ba9393715a 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -151,7 +151,7 @@ def not_closed17(): #With statement will close the fp def closed18(path): try: - f18 = open(path) # $Alert + f18 = open(path) except IOError as ex: print(ex) raise ex From f9e094de619b2d37342d717d266cb101ac8afd7b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 9 Sep 2025 17:25:48 +0100 Subject: [PATCH 036/219] Simplify choosaASignatureMismatchWitness for improved performance --- .../Functions/SignatureOverriddenMethod.ql | 49 +++++++------------ 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql index feb69f5b13ce..15b3fa706401 100644 --- a/python/ql/src/Functions/SignatureOverriddenMethod.ql +++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql @@ -212,43 +212,28 @@ Call getASignatureMismatchWitness(Function base, Function sub) { not callMatchesSignature(sub, result) } -/** Choose a 'witnessing' call that matches the signature of `base` but not of overridden `sub`, and is in the file `file`. */ -Call chooseASignatureMismatchWitnessInFile(Function base, Function sub, File file) { - result = - min(Call c | - c = getASignatureMismatchWitness(base, sub) and - c.getLocation().getFile() = file - | - c order by c.getLocation().getStartLine(), c.getLocation().getStartColumn() - ) +pragma[inline] +string preferredFile(File callFile, Function base, Function sub) { + if callFile = getFunctionFile(base) + then result = " A" + else + if callFile = getFunctionFile(sub) + then result = " B" + else result = callFile.getAbsolutePath() } /** Choose a 'witnessing' call that matches the signature of `base` but not of overridden `sub`. */ Call chooseASignatureMismatchWitness(Function base, Function sub) { exists(getASignatureMismatchWitness(base, sub)) and - ( - result = chooseASignatureMismatchWitnessInFile(base, sub, getFunctionFile(base)) - or - not exists(Call c | - c = getASignatureMismatchWitness(base, sub) and - c.getLocation().getFile() = base.getLocation().getFile() - ) and - result = chooseASignatureMismatchWitnessInFile(base, sub, getFunctionFile(sub)) - or - not exists(Call c | - c = getASignatureMismatchWitness(base, sub) and - c.getLocation().getFile() = getFunctionFile([base, sub]) - ) and - result = - min(Call c | - c = getASignatureMismatchWitness(base, sub) - | - c - order by - c.getLocation().getFile().getAbsolutePath(), c.getLocation().getStartLine(), - c.getLocation().getStartColumn() - ) - ) + result = + min(Call c | + c = getASignatureMismatchWitness(base, sub) + | + c + order by + preferredFile(c.getLocation().getFile(), base, sub), c.getLocation().getStartLine(), + c.getLocation().getStartColumn() + ) } module CallOption = LocatableOption; From 7c0aa78e391acaedbeaa312284262d60f0510ec8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 10 Sep 2025 16:03:11 +0200 Subject: [PATCH 037/219] Python: Add many medium precision queries to the code-quality-extended suite. --- python/ql/src/Classes/OverwritingAttributeInSuperClass.ql | 6 +++--- python/ql/src/Classes/ShouldBeContextManager.ql | 5 +++-- python/ql/src/Classes/UselessClass.ql | 4 +++- python/ql/src/Expressions/NonPortableComparisonUsingIs.ql | 5 +++-- python/ql/src/Functions/ReturnValueIgnored.ql | 7 +++---- python/ql/src/Imports/FromImportOfMutableAttribute.ql | 6 +++--- python/ql/src/Statements/AssertLiteralConstant.ql | 3 ++- python/ql/src/Statements/BreakOrReturnInFinally.ql | 6 ++++-- python/ql/src/Statements/DocStrings.ql | 4 +++- python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql | 3 ++- python/ql/src/Variables/ShadowBuiltin.ql | 4 +++- python/ql/src/Variables/ShadowGlobal.ql | 4 +++- python/ql/src/Variables/UndefinedPlaceHolder.ql | 3 ++- python/ql/src/Variables/UninitializedLocal.ql | 3 ++- python/ql/src/Variables/UnusedParameter.ql | 5 ++++- 15 files changed, 43 insertions(+), 25 deletions(-) diff --git a/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql b/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql index 248872211410..699e4387a144 100644 --- a/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql +++ b/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql @@ -2,9 +2,9 @@ * @name Overwriting attribute in super-class or sub-class * @description Assignment to self attribute overwrites attribute previously defined in subclass or superclass `__init__` method. * @kind problem - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness * @problem.severity warning * @sub-severity low * @precision medium diff --git a/python/ql/src/Classes/ShouldBeContextManager.ql b/python/ql/src/Classes/ShouldBeContextManager.ql index bdcc6dc28634..2423206e3cfc 100644 --- a/python/ql/src/Classes/ShouldBeContextManager.ql +++ b/python/ql/src/Classes/ShouldBeContextManager.ql @@ -3,9 +3,10 @@ * @description Making a class a context manager allows instances to be used in a 'with' statement. * This improves resource handling and code readability. * @kind problem - * @tags maintainability + * @tags quality + * maintainability * readability - * convention + * performance * @problem.severity recommendation * @sub-severity high * @precision medium diff --git a/python/ql/src/Classes/UselessClass.ql b/python/ql/src/Classes/UselessClass.ql index 19d21c7e7caa..7e33660dafc4 100644 --- a/python/ql/src/Classes/UselessClass.ql +++ b/python/ql/src/Classes/UselessClass.ql @@ -2,8 +2,10 @@ * @name Useless class * @description Class only defines one public method (apart from `__init__` or `__new__`) and should be replaced by a function * @kind problem - * @tags maintainability + * @tags quality + * maintainability * useless-code + * complexity * @problem.severity recommendation * @sub-severity low * @precision medium diff --git a/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql b/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql index d9a0f7016351..894cc78c8f44 100644 --- a/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql +++ b/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql @@ -2,8 +2,9 @@ * @name Non-portable comparison using is when operands support `__eq__` * @description Comparison using 'is' when equivalence is not the same as identity and may not be portable. * @kind problem - * @tags portability - * maintainability + * @tags quality + * reliability + * correctness * @problem.severity recommendation * @sub-severity low * @precision medium diff --git a/python/ql/src/Functions/ReturnValueIgnored.ql b/python/ql/src/Functions/ReturnValueIgnored.ql index b7f272dcc2df..d8f81534b8ad 100644 --- a/python/ql/src/Functions/ReturnValueIgnored.ql +++ b/python/ql/src/Functions/ReturnValueIgnored.ql @@ -2,11 +2,10 @@ * @name Ignored return value * @description Ignoring return values may result in discarding errors or loss of information. * @kind problem - * @tags reliability + * @tags quality + * reliability + * correctness * readability - * convention - * statistical - * non-attributable * external/cwe/cwe-252 * @problem.severity recommendation * @sub-severity high diff --git a/python/ql/src/Imports/FromImportOfMutableAttribute.ql b/python/ql/src/Imports/FromImportOfMutableAttribute.ql index cbb74977a032..c66a7578de61 100644 --- a/python/ql/src/Imports/FromImportOfMutableAttribute.ql +++ b/python/ql/src/Imports/FromImportOfMutableAttribute.ql @@ -2,9 +2,9 @@ * @name Importing value of mutable attribute * @description Importing the value of a mutable attribute directly means that changes in global state will not be observed locally. * @kind problem - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness * @problem.severity warning * @sub-severity high * @precision medium diff --git a/python/ql/src/Statements/AssertLiteralConstant.ql b/python/ql/src/Statements/AssertLiteralConstant.ql index 73bd16458589..60c09951c069 100644 --- a/python/ql/src/Statements/AssertLiteralConstant.ql +++ b/python/ql/src/Statements/AssertLiteralConstant.ql @@ -3,7 +3,8 @@ * @description An assert statement testing a literal constant value may exhibit * different behavior when optimizations are enabled. * @kind problem - * @tags reliability + * @tags quality + * reliability * correctness * @problem.severity recommendation * @sub-severity low diff --git a/python/ql/src/Statements/BreakOrReturnInFinally.ql b/python/ql/src/Statements/BreakOrReturnInFinally.ql index 02f501e0bfd5..dc9800eba8a6 100644 --- a/python/ql/src/Statements/BreakOrReturnInFinally.ql +++ b/python/ql/src/Statements/BreakOrReturnInFinally.ql @@ -3,8 +3,10 @@ * @description Using a Break or Return statement in a finally block causes the * Try-finally block to exit, discarding the exception. * @kind problem - * @tags reliability - * maintainability + * @tags quality + * reliability + * error-handling + * correctness * external/cwe/cwe-584 * @problem.severity warning * @sub-severity low diff --git a/python/ql/src/Statements/DocStrings.ql b/python/ql/src/Statements/DocStrings.ql index 355aff93f17f..e5c14e9fd034 100644 --- a/python/ql/src/Statements/DocStrings.ql +++ b/python/ql/src/Statements/DocStrings.ql @@ -3,7 +3,9 @@ * @description Omitting documentation strings from public classes, functions or methods * makes it more difficult for other developers to maintain the code. * @kind problem - * @tags maintainability + * @tags quality + * maintainability + * readability * @problem.severity recommendation * @sub-severity low * @precision medium diff --git a/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql b/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql index a940dc601232..7bb0161f1309 100644 --- a/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql +++ b/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql @@ -2,7 +2,8 @@ * @name Use of 'return' or 'yield' outside a function * @description Using 'return' or 'yield' outside a function causes a 'SyntaxError' at runtime. * @kind problem - * @tags reliability + * @tags quality + * reliability * correctness * @problem.severity error * @sub-severity low diff --git a/python/ql/src/Variables/ShadowBuiltin.ql b/python/ql/src/Variables/ShadowBuiltin.ql index 7e4a8580a93f..51b74b7109cf 100644 --- a/python/ql/src/Variables/ShadowBuiltin.ql +++ b/python/ql/src/Variables/ShadowBuiltin.ql @@ -4,8 +4,10 @@ * makes the built-in object unusable within the current scope and makes the code * more difficult to read. * @kind problem - * @tags maintainability + * @tags quality + * maintainability * readability + * correctness * @problem.severity recommendation * @sub-severity low * @precision medium diff --git a/python/ql/src/Variables/ShadowGlobal.ql b/python/ql/src/Variables/ShadowGlobal.ql index 79d74d272aeb..2f06e4fe57d7 100644 --- a/python/ql/src/Variables/ShadowGlobal.ql +++ b/python/ql/src/Variables/ShadowGlobal.ql @@ -4,8 +4,10 @@ * makes the global variable unusable within the current scope and makes the code * more difficult to read. * @kind problem - * @tags maintainability + * @tags quality + * maintainability * readability + * correctness * @problem.severity recommendation * @sub-severity low * @precision medium diff --git a/python/ql/src/Variables/UndefinedPlaceHolder.ql b/python/ql/src/Variables/UndefinedPlaceHolder.ql index 7f7794e60a12..b0eeeda871ac 100644 --- a/python/ql/src/Variables/UndefinedPlaceHolder.ql +++ b/python/ql/src/Variables/UndefinedPlaceHolder.ql @@ -2,7 +2,8 @@ * @name Use of an undefined placeholder variable * @description Using a variable before it is initialized causes an exception. * @kind problem - * @tags reliability + * @tags quality + * reliability * correctness * @problem.severity error * @sub-severity low diff --git a/python/ql/src/Variables/UninitializedLocal.ql b/python/ql/src/Variables/UninitializedLocal.ql index 3a2461ee3e72..a6ac7d490ce6 100644 --- a/python/ql/src/Variables/UninitializedLocal.ql +++ b/python/ql/src/Variables/UninitializedLocal.ql @@ -2,7 +2,8 @@ * @name Potentially uninitialized local variable * @description Using a local variable before it is initialized causes an UnboundLocalError. * @kind problem - * @tags reliability + * @tags quality + * reliability * correctness * @problem.severity error * @sub-severity low diff --git a/python/ql/src/Variables/UnusedParameter.ql b/python/ql/src/Variables/UnusedParameter.ql index 74e1c2ac5368..7228974b7c73 100644 --- a/python/ql/src/Variables/UnusedParameter.ql +++ b/python/ql/src/Variables/UnusedParameter.ql @@ -2,7 +2,10 @@ * @name Unused parameter * @description Parameter is defined but not used * @kind problem - * @tags maintainability + * @tags quality + * reliability + * correctness + * readability * @problem.severity recommendation * @sub-severity high * @precision medium From 7c58098f12b09c7e82edce989205210e6194818c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 10 Sep 2025 16:08:14 +0200 Subject: [PATCH 038/219] Python: Update integration tests expected output. --- .../query-suite/not_included_in_qls.expected | 9 --------- .../python-code-quality-extended.qls.expected | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/python/ql/integration-tests/query-suite/not_included_in_qls.expected b/python/ql/integration-tests/query-suite/not_included_in_qls.expected index 05108abc2060..55cba5e97d97 100644 --- a/python/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/python/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -1,11 +1,7 @@ ql/python/ql/src/AlertSuppression.ql ql/python/ql/src/Classes/MaybeUndefinedClassAttribute.ql -ql/python/ql/src/Classes/ShouldBeContextManager.ql ql/python/ql/src/Classes/UndefinedClassAttribute.ql -ql/python/ql/src/Classes/UselessClass.ql -ql/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql ql/python/ql/src/Filters/ClassifyFiles.ql -ql/python/ql/src/Functions/ReturnValueIgnored.ql ql/python/ql/src/Imports/ImportShadowedByLoopVar.ql ql/python/ql/src/Imports/ImportStarUsed.ql ql/python/ql/src/Imports/Imports.ql @@ -59,16 +55,11 @@ ql/python/ql/src/Metrics/TransitiveImports.ql ql/python/ql/src/Security/CWE-020-ExternalAPIs/ExternalAPIsUsedWithUntrustedData.ql ql/python/ql/src/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.ql ql/python/ql/src/Security/CWE-798/HardcodedCredentials.ql -ql/python/ql/src/Statements/AssertLiteralConstant.ql ql/python/ql/src/Statements/C_StyleParentheses.ql -ql/python/ql/src/Statements/DocStrings.ql ql/python/ql/src/Statements/ExecUsed.ql ql/python/ql/src/Statements/StringConcatenationInLoop.ql ql/python/ql/src/Variables/Global.ql -ql/python/ql/src/Variables/ShadowBuiltin.ql -ql/python/ql/src/Variables/ShadowGlobal.ql ql/python/ql/src/Variables/UndefinedGlobal.ql -ql/python/ql/src/Variables/UnusedParameter.ql ql/python/ql/src/analysis/CallGraphEfficiency.ql ql/python/ql/src/analysis/CallGraphMarginalEfficiency.ql ql/python/ql/src/analysis/Consistency.ql diff --git a/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected b/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected index b0cb45325412..e00fa4ad1acf 100644 --- a/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected +++ b/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected @@ -10,7 +10,10 @@ ql/python/ql/src/Classes/DefineEqualsWhenAddingAttributes.ql ql/python/ql/src/Classes/InconsistentMRO.ql ql/python/ql/src/Classes/InitCallsSubclass/InitCallsSubclassMethod.ql ql/python/ql/src/Classes/MutatingDescriptor.ql +ql/python/ql/src/Classes/OverwritingAttributeInSuperClass.ql +ql/python/ql/src/Classes/ShouldBeContextManager.ql ql/python/ql/src/Classes/SubclassShadowing/SubclassShadowing.ql +ql/python/ql/src/Classes/UselessClass.ql ql/python/ql/src/Classes/WrongNameForArgumentInClassInstantiation.ql ql/python/ql/src/Classes/WrongNumberArgumentsInClassInstantiation.ql ql/python/ql/src/Exceptions/CatchingBaseException.ql @@ -37,6 +40,7 @@ ql/python/ql/src/Expressions/Formatting/WrongNumberArgumentsFor3101Format.ql ql/python/ql/src/Expressions/HashedButNoHash.ql ql/python/ql/src/Expressions/IncorrectComparisonUsingIs.ql ql/python/ql/src/Expressions/NonCallableCalled.ql +ql/python/ql/src/Expressions/NonPortableComparisonUsingIs.ql ql/python/ql/src/Expressions/Regex/BackspaceEscape.ql ql/python/ql/src/Expressions/Regex/DuplicateCharacterInSet.ql ql/python/ql/src/Expressions/Regex/MissingPartSpecialGroup.ql @@ -61,10 +65,12 @@ ql/python/ql/src/Functions/NonCls.ql ql/python/ql/src/Functions/NonSelf.ql ql/python/ql/src/Functions/OverlyComplexDelMethod.ql ql/python/ql/src/Functions/ReturnConsistentTupleSizes.ql +ql/python/ql/src/Functions/ReturnValueIgnored.ql ql/python/ql/src/Functions/SignatureOverriddenMethod.ql ql/python/ql/src/Functions/SignatureSpecialMethods.ql ql/python/ql/src/Functions/UseImplicitNoneReturnValue.ql ql/python/ql/src/Imports/EncodingError.ql +ql/python/ql/src/Imports/FromImportOfMutableAttribute.ql ql/python/ql/src/Imports/ImportandImportFrom.ql ql/python/ql/src/Imports/ModuleImportsItself.ql ql/python/ql/src/Imports/MultipleImports.ql @@ -73,8 +79,11 @@ ql/python/ql/src/Imports/UnintentionalImport.ql ql/python/ql/src/Imports/UnusedImport.ql ql/python/ql/src/Lexical/CommentedOutCode.ql ql/python/ql/src/Resources/FileNotAlwaysClosed.ql +ql/python/ql/src/Statements/AssertLiteralConstant.ql ql/python/ql/src/Statements/AssertOnTuple.ql +ql/python/ql/src/Statements/BreakOrReturnInFinally.ql ql/python/ql/src/Statements/ConstantInConditional.ql +ql/python/ql/src/Statements/DocStrings.ql ql/python/ql/src/Statements/IterableStringOrSequence.ql ql/python/ql/src/Statements/MismatchInMultipleAssignment.ql ql/python/ql/src/Statements/ModificationOfLocals.ql @@ -82,6 +91,7 @@ ql/python/ql/src/Statements/NestedLoopsSameVariable.ql ql/python/ql/src/Statements/NestedLoopsSameVariableWithReuse.ql ql/python/ql/src/Statements/NonIteratorInForLoop.ql ql/python/ql/src/Statements/RedundantAssignment.ql +ql/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql ql/python/ql/src/Statements/ShouldUseWithStatement.ql ql/python/ql/src/Statements/SideEffectInAssert.ql ql/python/ql/src/Statements/StatementNoEffect.ql @@ -95,7 +105,12 @@ ql/python/ql/src/Testing/ImpreciseAssert.ql ql/python/ql/src/Variables/GlobalAtModuleLevel.ql ql/python/ql/src/Variables/LoopVariableCapture/LoopVariableCapture.ql ql/python/ql/src/Variables/MultiplyDefined.ql +ql/python/ql/src/Variables/ShadowBuiltin.ql +ql/python/ql/src/Variables/ShadowGlobal.ql ql/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql ql/python/ql/src/Variables/UndefinedExport.ql +ql/python/ql/src/Variables/UndefinedPlaceHolder.ql +ql/python/ql/src/Variables/UninitializedLocal.ql ql/python/ql/src/Variables/UnusedLocalVariable.ql ql/python/ql/src/Variables/UnusedModuleVariable.ql +ql/python/ql/src/Variables/UnusedParameter.ql From 56802035df83d5c777c306404dd22ac77e991987 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 9 Sep 2025 13:10:37 +0200 Subject: [PATCH 039/219] Java: Add some medium precision queries to the code-quality-extended suite. --- java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql | 5 ++++- java/ql/src/Advisory/Declarations/NonPrivateField.ql | 5 ++++- java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql | 4 +++- .../src/Advisory/Documentation/MissingJavadocParameters.ql | 4 +++- .../Advisory/Documentation/MissingJavadocReturnValues.ql | 4 +++- java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql | 5 ++++- java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql | 4 +++- java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql | 4 +++- java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql | 4 +++- .../ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql | 4 +++- java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql | 4 +++- java/ql/src/Advisory/Naming/NamingConventionsConstants.ql | 4 +++- java/ql/src/Advisory/Naming/NamingConventionsMethods.ql | 4 +++- java/ql/src/Advisory/Naming/NamingConventionsPackages.ql | 4 +++- java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql | 4 +++- java/ql/src/Advisory/Naming/NamingConventionsVariables.ql | 4 +++- java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql | 4 +++- java/ql/src/Advisory/Statements/OneStatementPerLine.ql | 4 +++- .../ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql | 4 +++- java/ql/src/Advisory/Types/GenericsConstructor.ql | 5 ++++- java/ql/src/Advisory/Types/GenericsReturnType.ql | 5 ++++- java/ql/src/Advisory/Types/GenericsVariable.ql | 5 ++++- java/ql/src/DeadCode/DeadClass.ql | 3 ++- java/ql/src/DeadCode/DeadEnumConstant.ql | 3 ++- java/ql/src/DeadCode/DeadField.ql | 3 ++- java/ql/src/DeadCode/DeadMethod.ql | 3 ++- java/ql/src/Language Abuse/OverridePackagePrivate.ql | 4 +++- java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql | 4 ++-- java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql | 5 +++-- java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql | 4 +++- java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql | 5 +++-- java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql | 5 +++-- java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql | 5 +++-- .../ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql | 4 ++-- java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql | 3 ++- java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql | 3 ++- java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql | 3 ++- java/ql/src/Likely Bugs/Comparison/StringComparison.ql | 4 +++- java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql | 3 ++- .../src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql | 3 ++- java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql | 3 ++- java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql | 3 ++- java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql | 4 +++- java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql | 3 ++- java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql | 4 ++-- .../src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql | 5 +++-- java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql | 6 +++--- .../Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql | 6 +++--- .../Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql | 4 +++- java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql | 5 +++-- java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql | 5 +++-- java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql | 5 +++-- .../ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql | 5 +++-- .../Likely Bugs/Serialization/IncorrectSerialVersionUID.ql | 6 +++--- .../Serialization/IncorrectSerializableMethods.ql | 6 +++--- .../Serialization/MissingVoidConstructorOnExternalizable.ql | 6 +++--- .../Serialization/MissingVoidConstructorsOnSerializable.ql | 6 +++--- .../Likely Bugs/Serialization/NonSerializableInnerClass.ql | 6 +++--- java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql | 6 +++--- java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql | 5 +++-- java/ql/src/Likely Bugs/Termination/SpinOnField.ql | 4 +++- .../Dead Code/CreatesEmptyZip.ql | 5 +++-- .../Implementation Hiding/GetClassGetResource.ql | 5 +++-- .../Naming Conventions/FieldMasksSuperField.ql | 4 +++- .../Undesirable Calls/NextFromIterator.ql | 3 ++- 65 files changed, 185 insertions(+), 96 deletions(-) diff --git a/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql b/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql index 493168d80a7e..1ca836ab2317 100644 --- a/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql +++ b/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql @@ -7,7 +7,10 @@ * @problem.severity recommendation * @precision medium * @id java/non-final-immutable-field - * @tags reliability + * @tags quality + * reliability + * correctness + * readability */ import java diff --git a/java/ql/src/Advisory/Declarations/NonPrivateField.ql b/java/ql/src/Advisory/Declarations/NonPrivateField.ql index 30b18ec53fda..ca081f41ed67 100644 --- a/java/ql/src/Advisory/Declarations/NonPrivateField.ql +++ b/java/ql/src/Advisory/Declarations/NonPrivateField.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/non-private-field - * @tags maintainability + * @tags quality + * maintainability + * readability + * complexity */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql b/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql index 49d90a595d37..5f63754d9e46 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-function - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql b/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql index ec4735e5e211..d029df513b70 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-parameter - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql b/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql index 6668fa6da33e..1c5275f991a5 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-return-value - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql b/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql index 2b6b346062c9..c1025df1f989 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-exception - * @tags maintainability + * @tags quality + * maintainability + * readability + * error-handling */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql b/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql index b9c5958623da..2ca4f44567fc 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-type - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql b/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql index e2e9b32feeef..eb3b80f47205 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/use-of-clone-method - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql b/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql index 45460ad15ed8..482aecd8e03c 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/override-of-clone-method - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql b/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql index 02abef171308..a3ab822872d6 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/use-of-cloneable-interface - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql b/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql index 3b5ddefbb34f..0d74c4281a2c 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/override-of-finalize-method - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql b/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql index 4ee4bfd27cf1..bd079b6fc203 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-constant - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql b/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql index a4347b783a07..90b3edd4bbcc 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-function - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql b/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql index 7d135b21fac2..efd6207d66f0 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-package - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql b/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql index 6942eaab69a4..5106b6e80b7c 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-type - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql b/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql index bafa2ec5b14f..0d225aa1749b 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-variable - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql b/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql index eab8a596f0e7..28387ab766b9 100644 --- a/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql +++ b/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/missing-default-in-switch - * @tags reliability + * @tags quality + * reliability + * correctness * external/cwe/cwe-478 */ diff --git a/java/ql/src/Advisory/Statements/OneStatementPerLine.ql b/java/ql/src/Advisory/Statements/OneStatementPerLine.ql index b4133761e27e..2663cab57a9c 100644 --- a/java/ql/src/Advisory/Statements/OneStatementPerLine.ql +++ b/java/ql/src/Advisory/Statements/OneStatementPerLine.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/multiple-statements-on-same-line - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql b/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql index 0172719094cb..b15dd1c17464 100644 --- a/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql +++ b/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/non-terminated-if-else-if-chain - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Types/GenericsConstructor.ql b/java/ql/src/Advisory/Types/GenericsConstructor.ql index 411c24662901..4af9f93c86f2 100644 --- a/java/ql/src/Advisory/Types/GenericsConstructor.ql +++ b/java/ql/src/Advisory/Types/GenericsConstructor.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/raw-constructor-invocation - * @tags maintainability + * @tags quality + * maintainability + * readability + * correctness */ import java diff --git a/java/ql/src/Advisory/Types/GenericsReturnType.ql b/java/ql/src/Advisory/Types/GenericsReturnType.ql index 0107f7953a2d..4f17664902b8 100644 --- a/java/ql/src/Advisory/Types/GenericsReturnType.ql +++ b/java/ql/src/Advisory/Types/GenericsReturnType.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/raw-return-type - * @tags maintainability + * @tags quality + * maintainability + * readability + * correctness */ import java diff --git a/java/ql/src/Advisory/Types/GenericsVariable.ql b/java/ql/src/Advisory/Types/GenericsVariable.ql index 8f5fb3c05c91..d686feae5121 100644 --- a/java/ql/src/Advisory/Types/GenericsVariable.ql +++ b/java/ql/src/Advisory/Types/GenericsVariable.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/raw-variable - * @tags maintainability + * @tags quality + * maintainability + * readability + * correctness */ import java diff --git a/java/ql/src/DeadCode/DeadClass.ql b/java/ql/src/DeadCode/DeadClass.ql index 23f08fec3b87..22ffad4f835e 100644 --- a/java/ql/src/DeadCode/DeadClass.ql +++ b/java/ql/src/DeadCode/DeadClass.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-class - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/DeadCode/DeadEnumConstant.ql b/java/ql/src/DeadCode/DeadEnumConstant.ql index 190449943483..791c2b2a751f 100644 --- a/java/ql/src/DeadCode/DeadEnumConstant.ql +++ b/java/ql/src/DeadCode/DeadEnumConstant.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-enum-constant - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/DeadCode/DeadField.ql b/java/ql/src/DeadCode/DeadField.ql index 7a8bca7ac7bf..4dd0864bd159 100644 --- a/java/ql/src/DeadCode/DeadField.ql +++ b/java/ql/src/DeadCode/DeadField.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-field - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/DeadCode/DeadMethod.ql b/java/ql/src/DeadCode/DeadMethod.ql index 77401341b6c8..ea01cbf4db91 100644 --- a/java/ql/src/DeadCode/DeadMethod.ql +++ b/java/ql/src/DeadCode/DeadMethod.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-function - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/Language Abuse/OverridePackagePrivate.ql b/java/ql/src/Language Abuse/OverridePackagePrivate.ql index d2866c76abc1..66663e18c4b2 100644 --- a/java/ql/src/Language Abuse/OverridePackagePrivate.ql +++ b/java/ql/src/Language Abuse/OverridePackagePrivate.ql @@ -6,8 +6,10 @@ * @problem.severity warning * @precision medium * @id java/non-overriding-package-private - * @tags maintainability + * @tags quality + * maintainability * readability + * correctness */ import java diff --git a/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql b/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql index 77c318bcb9ea..13b77d10d066 100644 --- a/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql +++ b/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/type-bound-extends-final - * @tags maintainability + * @tags quality + * maintainability * readability - * types */ import java diff --git a/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql b/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql index 26353891f418..2af66f5cfba8 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/abs-of-random - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql b/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql index 8992d1753d9b..ee1e1ca3fed9 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql @@ -6,7 +6,9 @@ * @problem.severity warning * @precision medium * @id java/multiplication-of-remainder - * @tags maintainability + * @tags quality + * maintainability + * readability * correctness */ diff --git a/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql b/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql index a18df3568993..7a81d366a6e0 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/random-used-once - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-335 */ diff --git a/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql b/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql index 8c2f7b1d6f8a..afc7c54bbade 100644 --- a/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql +++ b/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql @@ -7,8 +7,9 @@ * @problem.severity error * @precision medium * @id java/missing-call-to-super-clone - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-580 */ diff --git a/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql b/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql index 6d48a118e290..2542637b7459 100644 --- a/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql +++ b/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id java/missing-clone-method - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql b/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql index 0308f68f231c..09d686947e00 100644 --- a/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql +++ b/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/iterator-remove-failure - * @tags reliability + * @tags quality + * reliability * correctness - * logic */ import java diff --git a/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql b/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql index de1e27073f66..6d55bfc64882 100644 --- a/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql +++ b/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/wrong-compareto-signature - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql b/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql index 13f63f15a726..84018a513a5b 100644 --- a/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql +++ b/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/wrong-equals-signature - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql b/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql index 8c5a7133e141..7592fe382666 100644 --- a/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql +++ b/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/inconsistent-compareto-and-equals - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/Likely Bugs/Comparison/StringComparison.ql b/java/ql/src/Likely Bugs/Comparison/StringComparison.ql index 63d09e0f7915..cfca2c8d7ddb 100644 --- a/java/ql/src/Likely Bugs/Comparison/StringComparison.ql +++ b/java/ql/src/Likely Bugs/Comparison/StringComparison.ql @@ -6,7 +6,9 @@ * @problem.severity warning * @precision medium * @id java/reference-equality-on-strings - * @tags reliability + * @tags quality + * reliability + * correctness * external/cwe/cwe-597 */ diff --git a/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql b/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql index bf1639361154..b89d619fada0 100644 --- a/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql +++ b/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/wait-on-condition-interface - * @tags reliability + * @tags quality + * reliability * correctness * concurrency * external/cwe/cwe-662 diff --git a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql index 18683ac690ff..0d87ca49bb27 100644 --- a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql +++ b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/thread-unsafe-dateformat - * @tags reliability + * @tags quality + * reliability * correctness * concurrency */ diff --git a/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql b/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql index 7c1875dfe3ec..5d816ad8cf94 100644 --- a/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql +++ b/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/unsafe-sync-on-field - * @tags reliability + * @tags quality + * reliability * correctness * concurrency * language-features diff --git a/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql b/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql index 047e6853011e..e21b816f1684 100644 --- a/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql +++ b/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/notify-instead-of-notify-all - * @tags reliability + * @tags quality + * reliability * correctness * concurrency * external/cwe/cwe-662 diff --git a/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql b/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql index 417e426b7868..70a3a901ade5 100644 --- a/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql +++ b/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql @@ -6,9 +6,11 @@ * @problem.severity error * @precision medium * @id java/sleep-with-lock-held - * @tags reliability + * @tags quality + * reliability * correctness * concurrency + * performance * external/cwe/cwe-833 */ diff --git a/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql b/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql index cb971a5f109f..3c80e4519518 100644 --- a/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql +++ b/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql @@ -7,7 +7,8 @@ * @problem.severity warning * @precision medium * @id java/thread-start-in-constructor - * @tags reliability + * @tags quality + * reliability * correctness * concurrency */ diff --git a/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql b/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql index 3eaa67436992..1842076a71b2 100644 --- a/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql +++ b/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql @@ -6,10 +6,10 @@ * @problem.severity warning * @precision medium * @id java/inconsistent-sync-writeobject - * @tags reliability + * @tags quality + * reliability * correctness * concurrency - * language-features * external/cwe/cwe-662 */ diff --git a/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql b/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql index 19bac66e0281..07fb27d5a536 100644 --- a/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql +++ b/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id java/missing-super-finalize - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-568 */ diff --git a/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql b/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql index 2b6ae1125ddd..fb82f330c22a 100644 --- a/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql +++ b/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-junit-suite-signature - * @tags testability - * maintainability - * frameworks/junit + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql index ed3ab29c3659..6a2db4b695f3 100644 --- a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql +++ b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-swing-event-adapter-signature - * @tags reliability - * maintainability - * frameworks/swing + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql b/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql index 8d9409059f8e..c93e5fe91a11 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql @@ -7,7 +7,9 @@ * @problem.severity warning * @precision medium * @id java/non-short-circuit-evaluation - * @tags reliability + * @tags quality + * reliability + * correctness * readability * external/cwe/cwe-691 */ diff --git a/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql b/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql index 585306be9583..d5a117fc2dac 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @precision medium * @id java/equals-typo - * @tags maintainability + * @tags quality + * reliability + * correctness * readability - * naming */ import java diff --git a/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql b/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql index 7a69f9f7953f..e75f9f337fde 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @precision medium * @id java/hashcode-typo - * @tags maintainability + * @tags quality + * reliability + * correctness * readability - * naming */ import java diff --git a/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql b/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql index 928d9f5a7cc4..a4d46ec69e0c 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @precision medium * @id java/tostring-typo - * @tags maintainability + * @tags quality + * reliability + * correctness * readability - * naming */ import java diff --git a/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql b/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql index 0bfb4b45a5a5..8b75b8c97867 100644 --- a/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql +++ b/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id java/ineffective-annotation-present-check - * @tags correctness - * logic + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql b/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql index af86d90d690d..813db75526e1 100644 --- a/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql +++ b/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/incorrect-serial-version-uid - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql b/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql index 815245d1a7d3..0fbf52d207e8 100644 --- a/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql +++ b/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-object-serialization-signature - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql index 44c92634fe07..47bb0640b5ef 100644 --- a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql +++ b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/missing-no-arg-constructor-on-externalizable - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql index 651908b0b865..c38a074529d3 100644 --- a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql +++ b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/missing-no-arg-constructor-on-serializable - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql b/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql index 8081c551eed3..520dba86c418 100644 --- a/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql +++ b/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/non-serializable-inner-class - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql b/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql index 64e5a4833628..629e601f4694 100644 --- a/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql +++ b/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-readresolve-signature - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql index d1cdb8bdfbbb..0e6584bb4e5c 100644 --- a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql +++ b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/missing-case-in-switch - * @tags reliability - * readability + * @tags quality + * reliability + * correctness * external/cwe/cwe-478 */ diff --git a/java/ql/src/Likely Bugs/Termination/SpinOnField.ql b/java/ql/src/Likely Bugs/Termination/SpinOnField.ql index d1a7d49db55c..7cfb2308c966 100644 --- a/java/ql/src/Likely Bugs/Termination/SpinOnField.ql +++ b/java/ql/src/Likely Bugs/Termination/SpinOnField.ql @@ -6,9 +6,11 @@ * @problem.severity warning * @precision medium * @id java/spin-on-field - * @tags efficiency + * @tags quality + * reliability * correctness * concurrency + * performance */ import java diff --git a/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql b/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql index a2b6afbbeee0..beea4bba5d5a 100644 --- a/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql +++ b/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/empty-zip-file-entry - * @tags reliability - * readability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql b/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql index 7f52c495835e..61e928b8c700 100644 --- a/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql +++ b/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/unsafe-get-resource - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql b/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql index faf64b0ae5ed..e45ba34b5e55 100644 --- a/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql +++ b/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql @@ -7,8 +7,10 @@ * @problem.severity warning * @precision medium * @id java/field-masks-super-field - * @tags maintainability + * @tags quality + * maintainability * readability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql b/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql index ebdf55761989..31c0d0821e2c 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/iterator-hasnext-calls-next - * @tags reliability + * @tags quality + * reliability * correctness */ From 6ff6d0f6bd369e4fafcbbd022a6b8195fbdcbfc7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 9 Sep 2025 14:43:15 +0200 Subject: [PATCH 040/219] Java: Update integration test expected output. --- .../java-code-quality-extended.qls.expected | 65 +++++++++++++++++++ .../query-suite/not_included_in_qls.expected | 26 -------- 2 files changed, 65 insertions(+), 26 deletions(-) diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected index 852389b950b5..ea091b79c8b4 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected @@ -1,61 +1,122 @@ ql/java/ql/src/Advisory/Declarations/MissingOverrideAnnotation.ql +ql/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql +ql/java/ql/src/Advisory/Declarations/NonPrivateField.ql ql/java/ql/src/Advisory/Documentation/ImpossibleJavadocThrows.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql ql/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.ql +ql/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql +ql/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql +ql/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql +ql/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql +ql/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql +ql/java/ql/src/Advisory/Statements/OneStatementPerLine.ql +ql/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql +ql/java/ql/src/Advisory/Types/GenericsConstructor.ql +ql/java/ql/src/Advisory/Types/GenericsReturnType.ql +ql/java/ql/src/Advisory/Types/GenericsVariable.ql ql/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql ql/java/ql/src/Compatibility/JDK9/UnderscoreIdentifier.ql +ql/java/ql/src/DeadCode/DeadClass.ql +ql/java/ql/src/DeadCode/DeadEnumConstant.ql +ql/java/ql/src/DeadCode/DeadField.ql +ql/java/ql/src/DeadCode/DeadMethod.ql ql/java/ql/src/DeadCode/UselessParameter.ql ql/java/ql/src/Language Abuse/EmptyMethod.ql ql/java/ql/src/Language Abuse/IterableIterator.ql ql/java/ql/src/Language Abuse/LabelInSwitch.ql +ql/java/ql/src/Language Abuse/OverridePackagePrivate.ql +ql/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql ql/java/ql/src/Language Abuse/TypeVariableHidesType.ql ql/java/ql/src/Language Abuse/UselessNullCheck.ql ql/java/ql/src/Language Abuse/UselessTypeTest.ql ql/java/ql/src/Language Abuse/WrappedIterator.ql +ql/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql ql/java/ql/src/Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql ql/java/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql ql/java/ql/src/Likely Bugs/Arithmetic/LShiftLargerThanTypeWidth.ql +ql/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql +ql/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql ql/java/ql/src/Likely Bugs/Arithmetic/WhitespaceContradictsPrecedence.ql +ql/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql +ql/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql ql/java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql ql/java/ql/src/Likely Bugs/Collections/ContainsTypeMismatch.ql +ql/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql ql/java/ql/src/Likely Bugs/Collections/ReadOnlyContainer.ql ql/java/ql/src/Likely Bugs/Collections/RemoveTypeMismatch.ql ql/java/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql ql/java/ql/src/Likely Bugs/Comparison/CompareIdenticalValues.ql +ql/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql +ql/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql ql/java/ql/src/Likely Bugs/Comparison/EqualsArray.ql ql/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql ql/java/ql/src/Likely Bugs/Comparison/IncomparableEquals.ql +ql/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql ql/java/ql/src/Likely Bugs/Comparison/InconsistentEqualsHashCode.ql ql/java/ql/src/Likely Bugs/Comparison/MissingInstanceofInEquals.ql ql/java/ql/src/Likely Bugs/Comparison/RefEqBoxed.ql +ql/java/ql/src/Likely Bugs/Comparison/StringComparison.ql ql/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql ql/java/ql/src/Likely Bugs/Comparison/WrongNanComparison.ql +ql/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql ql/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql +ql/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLockingWithInitRace.ql +ql/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql ql/java/ql/src/Likely Bugs/Concurrency/NonSynchronizedOverride.ql +ql/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql ql/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql +ql/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql +ql/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchOnBoxedType.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchSetUnsynchGet.ql +ql/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql +ql/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql +ql/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql ql/java/ql/src/Likely Bugs/Frameworks/JUnit/JUnit5MissingNestedAnnotation.ql +ql/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql ql/java/ql/src/Likely Bugs/Inheritance/NoNonFinalInConstructor.ql ql/java/ql/src/Likely Bugs/Likely Typos/ContainerSizeCmpZero.ql ql/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql +ql/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql +ql/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql +ql/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql ql/java/ql/src/Likely Bugs/Likely Typos/MissingFormatArg.ql ql/java/ql/src/Likely Bugs/Likely Typos/MissingSpaceTypo.ql ql/java/ql/src/Likely Bugs/Likely Typos/SelfAssignment.ql ql/java/ql/src/Likely Bugs/Likely Typos/StringBufferCharInit.ql ql/java/ql/src/Likely Bugs/Likely Typos/SuspiciousDateFormat.ql +ql/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql ql/java/ql/src/Likely Bugs/Likely Typos/UnusedFormatArg.ql ql/java/ql/src/Likely Bugs/Nullness/NullAlways.ql ql/java/ql/src/Likely Bugs/Nullness/NullExprDeref.ql ql/java/ql/src/Likely Bugs/Nullness/NullMaybe.ql +ql/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql ql/java/ql/src/Likely Bugs/Resource Leaks/CloseReader.ql ql/java/ql/src/Likely Bugs/Resource Leaks/CloseSql.ql ql/java/ql/src/Likely Bugs/Resource Leaks/CloseWriter.ql +ql/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql +ql/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql +ql/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql +ql/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql +ql/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql +ql/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql ql/java/ql/src/Likely Bugs/Statements/ContinueInFalseLoop.ql +ql/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql ql/java/ql/src/Likely Bugs/Statements/PartiallyMaskedCatch.ql ql/java/ql/src/Likely Bugs/Statements/UseBraces.ql ql/java/ql/src/Likely Bugs/Termination/ConstantLoopCondition.ql +ql/java/ql/src/Likely Bugs/Termination/SpinOnField.ql ql/java/ql/src/Performance/InefficientEmptyStringTest.ql ql/java/ql/src/Performance/InefficientKeySetIterator.ql ql/java/ql/src/Performance/InefficientOutputStream.ql @@ -64,6 +125,7 @@ ql/java/ql/src/Performance/InnerClassCouldBeStatic.ql ql/java/ql/src/Performance/NewStringString.ql ql/java/ql/src/Performance/StringReplaceAllWithNonRegex.ql ql/java/ql/src/Violations of Best Practice/Boxed Types/BoxedVariable.ql +ql/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql ql/java/ql/src/Violations of Best Practice/Dead Code/DeadRefTypes.ql ql/java/ql/src/Violations of Best Practice/Dead Code/InterfaceCannotBeImplemented.ql ql/java/ql/src/Violations of Best Practice/Dead Code/UnreadLocal.ql @@ -73,10 +135,12 @@ ql/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalR ql/java/ql/src/Violations of Best Practice/Exception Handling/NumberFormatException.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/AbstractToConcreteCollection.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/ExposeRepresentation.ql +ql/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/AmbiguousOuterSuper.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingMethodNames.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql +ql/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/LocalShadowsFieldConfusing.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/SameNameAsSuper.ql ql/java/ql/src/Violations of Best Practice/Records/IgnoredSerializationMembersOfRecordClass.ql @@ -87,4 +151,5 @@ ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToStringToStri ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DefaultToString.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.ql +ql/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/PrintLnArray.ql diff --git a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected index 3a1cd4e1adbc..be7e3a53e4f1 100644 --- a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected +++ b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected @@ -1,25 +1,3 @@ -ql/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql -ql/java/ql/src/Advisory/Declarations/NonPrivateField.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql -ql/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql -ql/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql -ql/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql -ql/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql -ql/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql -ql/java/ql/src/Advisory/Statements/OneStatementPerLine.ql -ql/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql -ql/java/ql/src/Advisory/Types/GenericsConstructor.ql -ql/java/ql/src/Advisory/Types/GenericsReturnType.ql -ql/java/ql/src/Advisory/Types/GenericsVariable.ql ql/java/ql/src/AlertSuppression.ql ql/java/ql/src/AlertSuppressionAnnotations.ql ql/java/ql/src/Architecture/Dependencies/MutualDependency.ql @@ -31,10 +9,6 @@ ql/java/ql/src/Architecture/Refactoring Opportunities/HubClasses.ql ql/java/ql/src/Architecture/Refactoring Opportunities/InappropriateIntimacy.ql ql/java/ql/src/Complexity/BlockWithTooManyStatements.ql ql/java/ql/src/Complexity/ComplexCondition.ql -ql/java/ql/src/DeadCode/DeadClass.ql -ql/java/ql/src/DeadCode/DeadEnumConstant.ql -ql/java/ql/src/DeadCode/DeadField.ql -ql/java/ql/src/DeadCode/DeadMethod.ql ql/java/ql/src/DeadCode/FLinesOfDeadCode.ql ql/java/ql/src/Frameworks/JavaEE/EJB/EjbContainerInterference.ql ql/java/ql/src/Frameworks/JavaEE/EJB/EjbFileIO.ql From 8e392cf8de277b8af93ae055b7bed0cebccda4e9 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 10 Sep 2025 16:13:24 +0200 Subject: [PATCH 041/219] Java: Remove java/undocumented-* queries from the code-quality-extended suite. --- java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql | 3 +-- java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql | 3 +-- .../src/Advisory/Documentation/MissingJavadocReturnValues.ql | 3 +-- java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql | 3 +-- java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql | 3 +-- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql b/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql index 5f63754d9e46..3d4eacf7ee61 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-function - * @tags quality - * maintainability + * @tags maintainability * readability */ diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql b/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql index d029df513b70..b81500ff303a 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-parameter - * @tags quality - * maintainability + * @tags maintainability * readability */ diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql b/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql index 1c5275f991a5..87f5bf2a7ff8 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-return-value - * @tags quality - * maintainability + * @tags maintainability * readability */ diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql b/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql index c1025df1f989..ea12c8312391 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-exception - * @tags quality - * maintainability + * @tags maintainability * readability * error-handling */ diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql b/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql index 2ca4f44567fc..21ea91703f96 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id java/undocumented-type - * @tags quality - * maintainability + * @tags maintainability * readability */ From 07932590b568b59a583992ed1e59d9f1377256e6 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 10 Sep 2025 16:15:48 +0200 Subject: [PATCH 042/219] Java: Update integration test expected output. --- .../java/query-suite/java-code-quality-extended.qls.expected | 5 ----- .../java/query-suite/not_included_in_qls.expected | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected index ea091b79c8b4..cdd6769ab46f 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected @@ -2,11 +2,6 @@ ql/java/ql/src/Advisory/Declarations/MissingOverrideAnnotation.ql ql/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql ql/java/ql/src/Advisory/Declarations/NonPrivateField.ql ql/java/ql/src/Advisory/Documentation/ImpossibleJavadocThrows.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql -ql/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql ql/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.ql ql/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql ql/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql diff --git a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected index be7e3a53e4f1..d1b6428ae227 100644 --- a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected +++ b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected @@ -1,3 +1,8 @@ +ql/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql +ql/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql ql/java/ql/src/AlertSuppression.ql ql/java/ql/src/AlertSuppressionAnnotations.ql ql/java/ql/src/Architecture/Dependencies/MutualDependency.ql From a774c651627f05d42fa3b2aadb4303077d34e802 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 11 Sep 2025 08:41:33 +0200 Subject: [PATCH 043/219] Python: Remove py/missing-docstring from code-quality-extended. --- python/ql/src/Statements/DocStrings.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/ql/src/Statements/DocStrings.ql b/python/ql/src/Statements/DocStrings.ql index e5c14e9fd034..903207f7ccb7 100644 --- a/python/ql/src/Statements/DocStrings.ql +++ b/python/ql/src/Statements/DocStrings.ql @@ -3,8 +3,7 @@ * @description Omitting documentation strings from public classes, functions or methods * makes it more difficult for other developers to maintain the code. * @kind problem - * @tags quality - * maintainability + * @tags maintainability * readability * @problem.severity recommendation * @sub-severity low From c2628fe1df2a6512d2fa253232b3865a836d27b3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 11 Sep 2025 08:44:18 +0200 Subject: [PATCH 044/219] Python: Update integration tests expected output. --- .../integration-tests/query-suite/not_included_in_qls.expected | 1 + .../query-suite/python-code-quality-extended.qls.expected | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/integration-tests/query-suite/not_included_in_qls.expected b/python/ql/integration-tests/query-suite/not_included_in_qls.expected index 55cba5e97d97..8d0e0814d538 100644 --- a/python/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/python/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -56,6 +56,7 @@ ql/python/ql/src/Security/CWE-020-ExternalAPIs/ExternalAPIsUsedWithUntrustedData ql/python/ql/src/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.ql ql/python/ql/src/Security/CWE-798/HardcodedCredentials.ql ql/python/ql/src/Statements/C_StyleParentheses.ql +ql/python/ql/src/Statements/DocStrings.ql ql/python/ql/src/Statements/ExecUsed.ql ql/python/ql/src/Statements/StringConcatenationInLoop.ql ql/python/ql/src/Variables/Global.ql diff --git a/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected b/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected index e00fa4ad1acf..cc8d0fd7f5e8 100644 --- a/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected +++ b/python/ql/integration-tests/query-suite/python-code-quality-extended.qls.expected @@ -83,7 +83,6 @@ ql/python/ql/src/Statements/AssertLiteralConstant.ql ql/python/ql/src/Statements/AssertOnTuple.ql ql/python/ql/src/Statements/BreakOrReturnInFinally.ql ql/python/ql/src/Statements/ConstantInConditional.ql -ql/python/ql/src/Statements/DocStrings.ql ql/python/ql/src/Statements/IterableStringOrSequence.ql ql/python/ql/src/Statements/MismatchInMultipleAssignment.ql ql/python/ql/src/Statements/ModificationOfLocals.ql From 55d022f6eb11d8a53246defcb43ef7e9d137ad07 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 11 Sep 2025 10:47:26 +0200 Subject: [PATCH 045/219] Cargo: upgrade dependencies --- Cargo.lock | 455 ++++++++++-------------- ruby/extractor/Cargo.toml | 10 +- rust/ast-generator/Cargo.toml | 4 +- rust/extractor/Cargo.toml | 38 +- rust/extractor/macros/Cargo.toml | 2 +- shared/tree-sitter-extractor/Cargo.toml | 8 +- 6 files changed, 228 insertions(+), 289 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b712c4f8d24b..6dfeee4ac81a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,12 +23,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -40,9 +34,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -70,11 +64,11 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -154,9 +148,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "borsh" @@ -169,9 +163,9 @@ dependencies = [ [[package]] name = "boxcar" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c4925bc979b677330a8c7fe7a8c94af2dbb4a2d37b4a20a80d884400f46baa" +checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" [[package]] name = "bstr" @@ -197,9 +191,9 @@ checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "camino" -version = "1.1.10" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ "serde", ] @@ -246,10 +240,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.29" +version = "1.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -257,9 +252,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -297,7 +292,7 @@ version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90a37d2ab99352b4caca135061e7b4ac67024b648c28ed0b787feec4bea4caed" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "chalk-derive 0.103.0", ] @@ -307,7 +302,7 @@ version = "0.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7047a516de16226cd17344d41a319d0ea1064bf9e60bd612ab341ab4a34bbfa8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "chalk-derive 0.104.0", ] @@ -333,7 +328,7 @@ dependencies = [ "chalk-derive 0.103.0", "chalk-ir 0.103.0", "ena", - "indexmap 2.10.0", + "indexmap 2.11.1", "itertools 0.12.1", "petgraph", "rustc-hash 1.1.0", @@ -342,24 +337,23 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.0", ] [[package]] name = "clap" -version = "4.5.44" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1f056bae57e3e54c3375c41ff79619ddd13460a17d7438712bd0d83fda4ff8" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -367,9 +361,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -379,9 +373,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", @@ -661,7 +655,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ - "log 0.4.27", + "log 0.4.28", ] [[package]] @@ -759,16 +753,10 @@ dependencies = [ ] [[package]] -name = "filetime" -version = "0.2.25" +name = "find-msvc-tools" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" [[package]] name = "fixedbitset" @@ -800,9 +788,9 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -857,9 +845,9 @@ checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", - "log 0.4.27", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "log 0.4.28", + "regex-automata", + "regex-syntax", ] [[package]] @@ -876,9 +864,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -891,7 +879,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -931,7 +919,7 @@ dependencies = [ "core-foundation-sys", "iana-time-zone-haiku", "js-sys", - "log 0.4.27", + "log 0.4.28", "wasm-bindgen", "windows-core", ] @@ -1039,9 +1027,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1071,12 +1059,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -1092,7 +1080,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "inotify-sys", "libc", ] @@ -1147,10 +1135,11 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom", "libc", ] @@ -1204,20 +1193,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "libredox" -version = "0.1.4" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" -dependencies = [ - "bitflags 2.9.1", - "libc", - "redox_syscall", -] +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "line-index" @@ -1251,22 +1229,22 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" dependencies = [ - "log 0.4.27", + "log 0.4.28", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -1300,7 +1278,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "log 0.4.27", + "log 0.4.28", "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] @@ -1332,21 +1310,20 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "notify" -version = "8.0.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" +checksum = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97" dependencies = [ - "bitflags 2.9.1", - "filetime", + "bitflags 2.9.4", "fsevent-sys", "inotify", "kqueue", "libc", - "log 0.4.27", + "log 0.4.28", "mio", "notify-types", "walkdir", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1357,12 +1334,11 @@ checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1426,12 +1402,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "papaya" version = "0.2.3" @@ -1490,9 +1460,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf-event" @@ -1520,7 +1490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.10.0", + "indexmap 2.11.1", ] [[package]] @@ -1543,9 +1513,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -1567,9 +1537,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.97" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -1608,7 +1578,7 @@ version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f18c877575c259d127072e9bfc41d985202262fb4d6bfdae3d1252147c2562c2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "ra-ap-rustc_hashes", "ra-ap-rustc_index", "tracing", @@ -1691,12 +1661,12 @@ dependencies = [ [[package]] name = "ra_ap_base_db" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47cac371778785196064f1a347fbbac0aafb1053786f17378bb138be59e57fc2" +checksum = "e876bb2c3e52a8d4e6684526a2d4e81f9d028b939ee4dc5dc775fe10deb44d59" dependencies = [ "dashmap", - "indexmap 2.10.0", + "indexmap 2.11.1", "la-arena", "ra_ap_cfg", "ra_ap_intern", @@ -1714,9 +1684,9 @@ dependencies = [ [[package]] name = "ra_ap_cfg" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6789ed14467e6625bef45b29555844d0168d8af1bea9edb0f1d44f0a9b69f398" +checksum = "3a0b56eb4536ce6d2431932c4d337aeeaf7bb22c9249b38cbe80677b5881228f" dependencies = [ "ra_ap_intern", "ra_ap_tt", @@ -1726,19 +1696,19 @@ dependencies = [ [[package]] name = "ra_ap_edition" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637b74c692dc9d9b44394f8c0f91c063e1b6223c6e54f4ee89c943db2f2ee26e" +checksum = "1bdc6cbe42c63ca78611bae82bfc8db24864f33dccc813697c5fde43a0907285" [[package]] name = "ra_ap_hir" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a94c69a3830f0b6fbc36c1d098fcc9430f63c8d47ee6f93e3d6810c3bf440296" +checksum = "ebffdc134eccabc17209d7760cfff7fd12ed18ab6e21188c5e084b97aa38504c" dependencies = [ "arrayvec", "either", - "indexmap 2.10.0", + "indexmap 2.11.1", "itertools 0.14.0", "ra_ap_base_db", "ra_ap_cfg", @@ -1758,17 +1728,17 @@ dependencies = [ [[package]] name = "ra_ap_hir_def" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94fcf7743db2f4f7e2c2911563847eb8efe2b7fb9fa430c107f0ac05962254" +checksum = "81d2337ef59550392d42aa997aa1105a3d6d1c2b3a583c777786bc4a0a074fd5" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "cov-mark", "drop_bomb", "either", "fst", - "indexmap 2.10.0", + "indexmap 2.11.1", "itertools 0.14.0", "la-arena", "ra-ap-rustc_abi", @@ -1796,9 +1766,9 @@ dependencies = [ [[package]] name = "ra_ap_hir_expand" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ea3f6a0ba0c1e8b63f4a41bc596c07aeb2db2f99b67fa077820cfb5fce58bd" +checksum = "97cf8ececb2743a819d8299a408e17f164dd1a1004d65936b3d5493b55330326" dependencies = [ "cov-mark", "either", @@ -1824,12 +1794,12 @@ dependencies = [ [[package]] name = "ra_ap_hir_ty" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eccf6c291a88892e59e7591e081da8b9158f8c0b1ed9cb9b73d02d29a0d3d6d9" +checksum = "bc004e1099ba766a61500c27d34eb5cd336430d0a89a9620315a90d7a202a73a" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "chalk-derive 0.103.0", "chalk-ir 0.103.0", "chalk-recursive", @@ -1837,7 +1807,7 @@ dependencies = [ "cov-mark", "either", "ena", - "indexmap 2.10.0", + "indexmap 2.11.1", "itertools 0.14.0", "la-arena", "oorandom", @@ -1865,17 +1835,17 @@ dependencies = [ [[package]] name = "ra_ap_ide_db" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bbbc97cc9837f91100711b65fb0d8ce9d7ed8da0dc418e08678d973d53da6a3" +checksum = "d2acb572d6dbeb1c96d0339890ba91298b8f5f0ab22648da4ee2b4ab77dbc3fe" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "cov-mark", "crossbeam-channel", "either", "fst", - "indexmap 2.10.0", + "indexmap 2.11.1", "itertools 0.14.0", "line-index", "memchr", @@ -1899,9 +1869,9 @@ dependencies = [ [[package]] name = "ra_ap_intern" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4785a674a41f9f52414fb7f19ab9a1d6886cad572e68721a883b0b85c256b" +checksum = "14586c2c4781b69fdd0c505972d9bff8c162a8740537a3ee506faff686d9a20d" dependencies = [ "dashmap", "hashbrown 0.14.5", @@ -1911,9 +1881,9 @@ dependencies = [ [[package]] name = "ra_ap_load-cargo" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3be9990782fd2c2d90b67e2e0b4a86e7412ec8a0719950d9a68292924e85691" +checksum = "50ce5546b3e3414507ab4d12348d0a28748062e33a1448895c68466d0b015503" dependencies = [ "anyhow", "crossbeam-channel", @@ -1932,9 +1902,9 @@ dependencies = [ [[package]] name = "ra_ap_mbe" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b713f4d927f9d86391f66237019b8e5dbcad4ddbbe37c91c2e21adca258b9aa" +checksum = "67333c6405797cb64aafb994b9a179157b30beeda2352e203e800be2b184a22d" dependencies = [ "arrayvec", "cov-mark", @@ -1951,9 +1921,9 @@ dependencies = [ [[package]] name = "ra_ap_parser" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3fb8a5891c1c1d6fba5e58caa86b88f831990c878e361c54c1c1ff44ca8401" +checksum = "3a3b92b8b147c0826b83e70ad44e3c98e94201fc93e1f09396c43b4d7958c22a" dependencies = [ "drop_bomb", "ra-ap-rustc_lexer 0.123.0", @@ -1964,20 +1934,20 @@ dependencies = [ [[package]] name = "ra_ap_paths" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccd5cfd0dae89ab2c70c4e5aa646f64bb8b5591622477342863c23a5f32dabc" +checksum = "d4991f3d57fac0def7822bebfeb159c8d7b58c824bf82044b765c54f2c0971e2" dependencies = [ "camino", ] [[package]] name = "ra_ap_proc_macro_api" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae43c707bfb78f1b841ffb3731cc7876550463306c3b3986c20abd31033e7a2" +checksum = "45db9e2df587d56f0738afa89fb2c100ff7c1e9cbe49e07f6a8b62342832211b" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.1", "ra_ap_intern", "ra_ap_paths", "ra_ap_span", @@ -1992,9 +1962,9 @@ dependencies = [ [[package]] name = "ra_ap_profile" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a7b93ca94cf0821e8bcac6bf8464cc94d7b3cbe63ffb74946a58ad03991fae" +checksum = "19981637b8ee4160e228c815a7fef3944b5c0555d6af41a931be92d68978bc6c" dependencies = [ "cfg-if", "libc", @@ -2004,9 +1974,9 @@ dependencies = [ [[package]] name = "ra_ap_project_model" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0751b9433a0dd49c6ae58c9572faf9557d2b53818370d72112b3adeaae5eabc4" +checksum = "5bda0769fd6ca949fdd5917acb68ddc2c143745614ddd94ef38b376838611cf8" dependencies = [ "anyhow", "cargo_metadata", @@ -2031,9 +2001,9 @@ dependencies = [ [[package]] name = "ra_ap_query-group-macro" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a82732eb8f5dc592d1d8d9bee23c1d66532e39293f02e23c7a546b60b35072b" +checksum = "5f182a4b05f004eabaa83250a5de7ea3a13a92c88f3cbe98bfa1880cd9fbce0a" dependencies = [ "proc-macro2", "quote", @@ -2042,9 +2012,9 @@ dependencies = [ [[package]] name = "ra_ap_span" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c498ddf2d71705dcef9fb142269c0027c959a5eb17c435eea5466af7c3b9c47c" +checksum = "ca6f9fa2de07f5cccf431674b90e82c1fe1ea2339db3b3869eec44d135de09a4" dependencies = [ "hashbrown 0.14.5", "la-arena", @@ -2058,9 +2028,9 @@ dependencies = [ [[package]] name = "ra_ap_stdx" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ade567b0d692c7efd4ceb921cdbe182beca0b5af9a5cf05c07cf0e14db512a" +checksum = "aa770adb32896fcba934b464ac3bd179163ba2b0766e275eed5b4e262e08492b" dependencies = [ "crossbeam-channel", "crossbeam-utils", @@ -2074,9 +2044,9 @@ dependencies = [ [[package]] name = "ra_ap_syntax" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba62d25b0296eb095d9db77e56d096417a89db4f4de1956add0d472ebcaf922" +checksum = "6e9e1393281ad5c635239d353ed3cfbf28c8d0af03d0c61a3b24b31d1143b17f" dependencies = [ "either", "itertools 0.14.0", @@ -2092,9 +2062,9 @@ dependencies = [ [[package]] name = "ra_ap_syntax-bridge" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664466f2e824e285b671366f81128aa4a91b501fedbf7956a6bfb1f13d8b0b39" +checksum = "684e6ff1008ee5340335888f0453d94bb38950f110059a51f1818c7f6a56a807" dependencies = [ "ra_ap_intern", "ra_ap_parser", @@ -2107,9 +2077,9 @@ dependencies = [ [[package]] name = "ra_ap_toolchain" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef82cfc5eb8f9d4a3be9876ce019b78fbfdb8ff4f7e4dee9e384d65122096ab" +checksum = "61969c5f72af03a9837e077c2d939d87a5c863623725c461777c352664a3bb03" dependencies = [ "camino", "home", @@ -2117,9 +2087,9 @@ dependencies = [ [[package]] name = "ra_ap_tt" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc858f5208f0d00f8638d14ab5ffab5d1bc79ad7fe1db5c5e0d478b9a02155c" +checksum = "fb87c7b35572c18a580ea811e970b94875fad5ac7cfa8644266a59081044f959" dependencies = [ "arrayvec", "ra-ap-rustc_lexer 0.123.0", @@ -2130,13 +2100,13 @@ dependencies = [ [[package]] name = "ra_ap_vfs" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e065b27829f5281d2ffc41de72551a0e4c4f49a9989ba7721676f414100c8af2" +checksum = "6c174d6b9b7a7f54687df7e00c3e75ed6f082a7943a9afb1d54f33c0c12773de" dependencies = [ "crossbeam-channel", "fst", - "indexmap 2.10.0", + "indexmap 2.11.1", "nohash-hasher", "ra_ap_paths", "ra_ap_stdx", @@ -2146,9 +2116,9 @@ dependencies = [ [[package]] name = "ra_ap_vfs-notify" -version = "0.0.300" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3c795e86c9b5fcdbb99145e401a0d6348ed471ac96f1b7de151c0abe07a5af" +checksum = "04f6fce8d47c7ce9b8f2cd0e5a55f8fc4878d6043e61f46cde4391d3a5c6086f" dependencies = [ "crossbeam-channel", "notify", @@ -2192,9 +2162,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -2202,9 +2172,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2216,7 +2186,7 @@ version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -2241,47 +2211,32 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "rowan" @@ -2334,7 +2289,7 @@ version = "0.2.3+llvm-462a31f5a5ab" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "486c2179b4796f65bfe2ee33679acf0927ac83ecf583ad6c91c3b4570911b9ad" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "smallvec", ] @@ -2359,9 +2314,9 @@ dependencies = [ "boxcar", "crossbeam-queue", "crossbeam-utils", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "hashlink", - "indexmap 2.10.0", + "indexmap 2.11.1", "intrusive-collections", "papaya", "parking_lot", @@ -2468,9 +2423,9 @@ dependencies = [ [[package]] name = "serde-untagged" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" +checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" dependencies = [ "erased-serde", "serde", @@ -2500,9 +2455,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "itoa", "memchr", @@ -2538,7 +2493,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.1", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -2566,7 +2521,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.1", "itoa", "ryu", "serde", @@ -2624,9 +2579,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -2664,18 +2619,18 @@ checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -2684,12 +2639,11 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -2751,7 +2705,7 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.1", "serde", "serde_spanned 1.0.0", "toml_datetime 0.7.0", @@ -2784,7 +2738,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.1", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -2862,21 +2816,21 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "log 0.4.27", + "log 0.4.28", "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -2893,16 +2847,16 @@ checksum = "5f2434c86ba59ed15af56039cc5bf1acf8ba76ce301e32ef08827388ef285ec5" dependencies = [ "cc", "regex", - "regex-syntax 0.8.5", + "regex-syntax", "streaming-iterator", "tree-sitter-language", ] [[package]] name = "tree-sitter-embedded-template" -version = "0.23.2" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af" +checksum = "833d528e8fcb4e49ddb04d4d6450ddb8ac08f282a58fec94ce981c9c5dbf7e3a" dependencies = [ "cc", "tree-sitter-language", @@ -2920,9 +2874,9 @@ dependencies = [ [[package]] name = "tree-sitter-language" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c199356c799a8945965bb5f2c55b2ad9d9aa7c4b4f6e587fe9dea0bc715e5f9c" +checksum = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8" [[package]] name = "tree-sitter-ql" @@ -2983,9 +2937,9 @@ checksum = "a3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68f" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-properties" @@ -3007,13 +2961,14 @@ checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -3084,7 +3039,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", - "log 0.4.27", + "log 0.4.28", "proc-macro2", "quote", "syn", @@ -3123,22 +3078,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.9" @@ -3148,12 +3087,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.61.2" @@ -3162,7 +3095,7 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", - "windows-link", + "windows-link 0.1.3", "windows-result", "windows-strings", ] @@ -3195,13 +3128,19 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + [[package]] name = "windows-result" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -3210,7 +3149,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -3436,9 +3375,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -3449,7 +3388,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -3542,9 +3481,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 63c6d16d53ca..41541714485d 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -8,15 +8,15 @@ edition = "2024" # When updating these dependencies, run `misc/bazel/3rdparty/update_cargo_deps.sh` [dependencies] tree-sitter = ">= 0.23.0" -tree-sitter-embedded-template = "0.23.2" +tree-sitter-embedded-template = "0.25.0" tree-sitter-ruby = "0.23.1" clap = { version = "4.5", features = ["derive"] } tracing = "0.1" -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } -rayon = "1.10.0" -regex = "1.11.1" +tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } +rayon = "1.11.0" +regex = "1.11.2" encoding = "0.2" lazy_static = "1.5.0" -serde_json = "1.0.142" +serde_json = "1.0.143" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } diff --git a/rust/ast-generator/Cargo.toml b/rust/ast-generator/Cargo.toml index 1c079952f71f..a5270923722c 100644 --- a/rust/ast-generator/Cargo.toml +++ b/rust/ast-generator/Cargo.toml @@ -7,10 +7,10 @@ license = "MIT" # When updating these dependencies, run `rust/update_cargo_deps.sh` [dependencies] ungrammar = "1.16.1" -proc-macro2 = "1.0.97" +proc-macro2 = "1.0.101" quote = "1.0.40" either = "1.15.0" -stdx = {package = "ra_ap_stdx", version = "0.0.300"} +stdx = {package = "ra_ap_stdx", version = "0.0.301"} itertools = "0.14.0" mustache = "0.9.0" serde = { version = "1.0.219", features = ["derive"] } diff --git a/rust/extractor/Cargo.toml b/rust/extractor/Cargo.toml index ed9915b2877d..0f87bc22f9e1 100644 --- a/rust/extractor/Cargo.toml +++ b/rust/extractor/Cargo.toml @@ -7,24 +7,24 @@ license = "MIT" # When updating these dependencies, run `rust/update_cargo_deps.sh` [dependencies] anyhow = "1.0.99" -clap = { version = "4.5.44", features = ["derive"] } +clap = { version = "4.5.47", features = ["derive"] } figment = { version = "0.10.19", features = ["env", "yaml"] } num-traits = "0.2.19" -ra_ap_base_db = "0.0.300" -ra_ap_hir = "0.0.300" -ra_ap_hir_def = "0.0.300" -ra_ap_ide_db = "0.0.300" -ra_ap_hir_ty = "0.0.300" -ra_ap_hir_expand = "0.0.300" -ra_ap_load-cargo = "0.0.300" -ra_ap_paths = "0.0.300" -ra_ap_project_model = "0.0.300" -ra_ap_syntax = "0.0.300" -ra_ap_vfs = "0.0.300" -ra_ap_parser = "0.0.300" -ra_ap_span = "0.0.300" -ra_ap_cfg = "0.0.300" -ra_ap_intern = "0.0.300" +ra_ap_base_db = "0.0.301" +ra_ap_hir = "0.0.301" +ra_ap_hir_def = "0.0.301" +ra_ap_ide_db = "0.0.301" +ra_ap_hir_ty = "0.0.301" +ra_ap_hir_expand = "0.0.301" +ra_ap_load-cargo = "0.0.301" +ra_ap_paths = "0.0.301" +ra_ap_project_model = "0.0.301" +ra_ap_syntax = "0.0.301" +ra_ap_vfs = "0.0.301" +ra_ap_parser = "0.0.301" +ra_ap_span = "0.0.301" +ra_ap_cfg = "0.0.301" +ra_ap_intern = "0.0.301" serde = "1.0.219" serde_with = "3.14.0" triomphe = "0.1.14" @@ -33,12 +33,12 @@ codeql-extractor = { path = "../../shared/tree-sitter-extractor" } rust-extractor-macros = { path = "macros" } itertools = "0.14.0" glob = "0.3.3" -chrono = { version = "0.4.41", features = ["serde"] } -serde_json = "1.0.142" +chrono = { version = "0.4.42", features = ["serde"] } +serde_json = "1.0.143" dunce = "1.0.5" toml = "0.9.5" tracing = "0.1.41" tracing-flame = "0.2.0" -tracing-subscriber = "0.3.19" +tracing-subscriber = "0.3.20" chalk-ir = "0.104.0" mustache = "0.9.0" diff --git a/rust/extractor/macros/Cargo.toml b/rust/extractor/macros/Cargo.toml index e666bf755105..013ebd986b41 100644 --- a/rust/extractor/macros/Cargo.toml +++ b/rust/extractor/macros/Cargo.toml @@ -10,4 +10,4 @@ proc-macro = true # When updating these dependencies, run `rust/update_cargo_deps.sh` [dependencies] quote = "1.0.40" -syn = { version = "2.0.104", features = ["full"] } +syn = { version = "2.0.106", features = ["full"] } diff --git a/shared/tree-sitter-extractor/Cargo.toml b/shared/tree-sitter-extractor/Cargo.toml index e47ef3577e24..8e60be7274f9 100644 --- a/shared/tree-sitter-extractor/Cargo.toml +++ b/shared/tree-sitter-extractor/Cargo.toml @@ -10,14 +10,14 @@ flate2 = "1.1" globset = "0.4" tree-sitter = ">= 0.23.0" tracing = "0.1" -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } -rayon = "1.10.0" -regex = "1.11.1" +tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } +rayon = "1.11.0" +regex = "1.11.2" encoding = "0.2" lazy_static = "1.5.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -chrono = { version = "0.4.41", features = ["serde"] } +chrono = { version = "0.4.42", features = ["serde"] } num_cpus = "1.17.0" zstd = "0.13.3" From 61eea66c51970dfbf7f2b20874eeac054fe200a6 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 11 Sep 2025 10:57:50 +0200 Subject: [PATCH 046/219] Bazel: regenerate vendored cargo dependencies --- MODULE.bazel | 50 +- ...UILD.android_system_properties-0.1.5.bazel | 2 +- ...6.19.bazel => BUILD.anstream-0.6.20.bazel} | 4 +- ....bazel => BUILD.anstyle-query-1.1.4.bazel} | 8 +- .../tree_sitter_extractors_deps/BUILD.bazel | 154 +-- ...2.9.1.bazel => BUILD.bitflags-2.9.4.bazel} | 2 +- ...0.2.13.bazel => BUILD.boxcar-0.2.14.bazel} | 2 +- ...1.1.10.bazel => BUILD.camino-1.1.12.bazel} | 6 +- .../BUILD.cargo-util-schemas-0.8.2.bazel | 6 +- .../BUILD.cargo_metadata-0.21.0.bazel | 6 +- ....cc-1.2.29.bazel => BUILD.cc-1.2.36.bazel} | 27 +- ...f-1.0.1.bazel => BUILD.cfg-if-1.0.3.bazel} | 2 +- .../BUILD.chalk-derive-0.103.0.bazel | 4 +- .../BUILD.chalk-derive-0.104.0.bazel | 4 +- .../BUILD.chalk-ir-0.103.0.bazel | 2 +- .../BUILD.chalk-ir-0.104.0.bazel | 2 +- .../BUILD.chalk-solve-0.103.0.bazel | 2 +- ...0.4.41.bazel => BUILD.chrono-0.4.42.bazel} | 13 +- ...p-4.5.44.bazel => BUILD.clap-4.5.47.bazel} | 6 +- ....bazel => BUILD.clap_builder-4.5.47.bazel} | 4 +- ...1.bazel => BUILD.clap_derive-4.5.47.bazel} | 6 +- .../BUILD.crc32fast-1.4.2.bazel | 2 +- .../BUILD.darling_core-0.20.11.bazel | 4 +- .../BUILD.darling_macro-0.20.11.bazel | 2 +- .../BUILD.dashmap-6.1.0.bazel | 2 +- .../BUILD.displaydoc-0.2.5.bazel | 4 +- .../BUILD.ena-0.14.3.bazel | 2 +- ...azel => BUILD.find-msvc-tools-0.1.1.bazel} | 4 +- ...azel => BUILD.form_urlencoded-1.2.2.bazel} | 4 +- .../BUILD.fsevent-sys-4.1.0.bazel | 2 +- .../BUILD.getrandom-0.3.3.bazel | 46 +- .../BUILD.globset-0.4.15.bazel | 6 +- ...5.4.bazel => BUILD.hashbrown-0.15.5.bazel} | 2 +- .../BUILD.hashlink-0.10.0.bazel | 2 +- .../BUILD.iana-time-zone-0.1.63.bazel | 2 +- .../BUILD.iana-time-zone-haiku-0.1.2.bazel | 2 +- .../BUILD.icu_collections-2.0.0.bazel | 4 +- .../BUILD.icu_locale_core-2.0.0.bazel | 2 +- .../BUILD.icu_normalizer-2.0.0.bazel | 2 +- .../BUILD.icu_properties-2.0.1.bazel | 4 +- .../BUILD.icu_provider-2.0.0.bazel | 2 +- ...dna-1.0.3.bazel => BUILD.idna-1.1.0.bazel} | 2 +- ...10.0.bazel => BUILD.indexmap-2.11.1.bazel} | 4 +- .../BUILD.inotify-0.11.0.bazel | 4 +- .../BUILD.inotify-sys-0.1.5.bazel | 2 +- .../BUILD.jobserver-0.1.32.bazel | 167 ---- ....25.bazel => BUILD.jobserver-0.1.34.bazel} | 66 +- .../BUILD.kqueue-1.1.1.bazel | 2 +- .../BUILD.kqueue-sys-1.0.4.bazel | 2 +- ...0.2.174.bazel => BUILD.libc-0.2.175.bazel} | 6 +- .../BUILD.libredox-0.1.4.bazel | 97 -- .../BUILD.log-0.3.9.bazel | 2 +- ...og-0.4.27.bazel => BUILD.log-0.4.28.bazel} | 2 +- ...0.1.0.bazel => BUILD.matchers-0.2.0.bazel} | 4 +- .../BUILD.mio-1.0.4.bazel | 52 +- ...y-8.0.0.bazel => BUILD.notify-8.1.0.bazel} | 19 +- ....bazel => BUILD.nu-ansi-term-0.50.1.bazel} | 26 +- .../BUILD.num_cpus-1.17.0.bazel | 66 +- .../BUILD.parking_lot_core-0.9.11.bazel | 50 +- .../BUILD.pear_codegen-0.2.9.bazel | 4 +- ...zel => BUILD.percent-encoding-2.3.2.bazel} | 2 +- .../BUILD.perf-event-0.4.7.bazel | 2 +- .../BUILD.perf-event-open-sys-1.0.1.bazel | 2 +- .../BUILD.petgraph-0.6.5.bazel | 2 +- ....bazel => BUILD.potential_utf-0.1.3.bazel} | 4 +- ....bazel => BUILD.proc-macro2-1.0.101.bazel} | 8 +- ...BUILD.proc-macro2-diagnostics-0.10.1.bazel | 4 +- .../BUILD.quote-1.0.40.bazel | 2 +- .../BUILD.ra-ap-rustc_abi-0.123.0.bazel | 2 +- ...ILD.ra-ap-rustc_index_macros-0.123.0.bazel | 4 +- ...azel => BUILD.ra_ap_base_db-0.0.301.bazel} | 28 +- ...00.bazel => BUILD.ra_ap_cfg-0.0.301.bazel} | 10 +- ...azel => BUILD.ra_ap_edition-0.0.301.bazel} | 2 +- ...00.bazel => BUILD.ra_ap_hir-0.0.301.bazel} | 44 +- ...azel => BUILD.ra_ap_hir_def-0.0.301.bazel} | 46 +- ...l => BUILD.ra_ap_hir_expand-0.0.301.bazel} | 46 +- ...bazel => BUILD.ra_ap_hir_ty-0.0.301.bazel} | 38 +- ...bazel => BUILD.ra_ap_ide_db-0.0.301.bazel} | 44 +- ...bazel => BUILD.ra_ap_intern-0.0.301.bazel} | 2 +- ...l => BUILD.ra_ap_load-cargo-0.0.301.bazel} | 38 +- ...00.bazel => BUILD.ra_ap_mbe-0.0.301.bazel} | 26 +- ...bazel => BUILD.ra_ap_parser-0.0.301.bazel} | 6 +- ....bazel => BUILD.ra_ap_paths-0.0.301.bazel} | 4 +- ... BUILD.ra_ap_proc_macro_api-0.0.301.bazel} | 26 +- ...azel => BUILD.ra_ap_profile-0.0.301.bazel} | 22 +- ...> BUILD.ra_ap_project_model-0.0.301.bazel} | 32 +- ...ILD.ra_ap_query-group-macro-0.0.301.bazel} | 6 +- ...0.bazel => BUILD.ra_ap_span-0.0.301.bazel} | 14 +- ...0.bazel => BUILD.ra_ap_stdx-0.0.301.bazel} | 50 +- ...bazel => BUILD.ra_ap_syntax-0.0.301.bazel} | 10 +- ...> BUILD.ra_ap_syntax-bridge-0.0.301.bazel} | 26 +- ...el => BUILD.ra_ap_toolchain-0.0.301.bazel} | 4 +- ...300.bazel => BUILD.ra_ap_tt-0.0.301.bazel} | 10 +- ...00.bazel => BUILD.ra_ap_vfs-0.0.301.bazel} | 12 +- ...l => BUILD.ra_ap_vfs-notify-0.0.301.bazel} | 18 +- ...-1.10.0.bazel => BUILD.rayon-1.11.0.bazel} | 4 +- ....1.bazel => BUILD.rayon-core-1.13.0.bazel} | 6 +- .../BUILD.redox_syscall-0.5.13.bazel | 2 +- .../BUILD.ref-cast-impl-1.0.24.bazel | 4 +- ...-1.11.1.bazel => BUILD.regex-1.11.2.bazel} | 6 +- .../BUILD.regex-automata-0.1.10.bazel | 100 -- ...azel => BUILD.regex-automata-0.4.10.bazel} | 6 +- .../BUILD.regex-syntax-0.6.29.bazel | 103 -- ...5.bazel => BUILD.regex-syntax-0.8.6.bazel} | 2 +- ...ustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel | 2 +- .../BUILD.salsa-0.23.0.bazel | 8 +- .../BUILD.salsa-macros-0.23.0.bazel | 4 +- .../BUILD.schemars-0.9.0.bazel | 2 +- .../BUILD.schemars-1.0.4.bazel | 2 +- .../BUILD.seize-0.5.0.bazel | 2 +- ...bazel => BUILD.serde-untagged-0.1.8.bazel} | 2 +- .../BUILD.serde_derive-1.0.219.bazel | 4 +- ...2.bazel => BUILD.serde_json-1.0.143.bazel} | 6 +- .../BUILD.serde_with_macros-3.14.0.bazel | 4 +- .../BUILD.serde_yaml-0.9.34+deprecated.bazel | 2 +- ...-2.0.104.bazel => BUILD.syn-2.0.106.bazel} | 6 +- .../BUILD.synstructure-0.13.2.bazel | 4 +- ....12.bazel => BUILD.thiserror-2.0.16.bazel} | 8 +- ...azel => BUILD.thiserror-impl-2.0.16.bazel} | 6 +- ...8.bazel => BUILD.thread_local-1.1.9.bazel} | 5 +- .../BUILD.tinystr-0.8.1.bazel | 2 +- .../BUILD.toml-0.9.5.bazel | 2 +- .../BUILD.toml_edit-0.22.27.bazel | 4 +- .../BUILD.toml_parser-1.0.2.bazel | 2 +- .../BUILD.tracing-attributes-0.1.30.bazel | 4 +- .../BUILD.tracing-flame-0.2.0.bazel | 2 +- .../BUILD.tracing-log-0.2.0.bazel | 2 +- ... => BUILD.tracing-subscriber-0.3.20.bazel} | 11 +- .../BUILD.tree-sitter-0.24.6.bazel | 8 +- ...ree-sitter-embedded-template-0.25.0.bazel} | 10 +- .../BUILD.tree-sitter-json-0.24.8.bazel | 4 +- ...=> BUILD.tree-sitter-language-0.1.5.bazel} | 2 +- .../BUILD.tree-sitter-ql-0.23.1.bazel | 4 +- .../BUILD.tree-sitter-ruby-0.23.1.bazel | 4 +- ...bazel => BUILD.unicode-ident-1.0.19.bazel} | 2 +- ....url-2.5.4.bazel => BUILD.url-2.5.7.bazel} | 10 +- .../BUILD.wasm-bindgen-0.2.100.bazel | 2 +- .../BUILD.wasm-bindgen-backend-0.2.100.bazel | 6 +- ...D.wasm-bindgen-macro-support-0.2.100.bazel | 4 +- .../BUILD.wasm-bindgen-shared-0.2.100.bazel | 2 +- .../BUILD.winapi-0.3.9.bazel | 171 ---- ...ILD.winapi-i686-pc-windows-gnu-0.4.0.bazel | 157 --- ...D.winapi-x86_64-pc-windows-gnu-0.4.0.bazel | 157 --- .../BUILD.windows-implement-0.60.0.bazel | 4 +- .../BUILD.windows-interface-0.59.1.bazel | 4 +- ...1.bazel => BUILD.windows-link-0.2.0.bazel} | 8 +- .../BUILD.windows-sys-0.52.0.bazel | 5 + .../BUILD.windows-sys-0.59.0.bazel | 4 - .../BUILD.windows-sys-0.60.2.bazel | 6 + ...0.7.11.bazel => BUILD.winnow-0.7.13.bazel} | 2 +- .../BUILD.yoke-derive-0.8.0.bazel | 4 +- .../BUILD.zerocopy-derive-0.8.26.bazel | 4 +- .../BUILD.zerofrom-derive-0.1.6.bazel | 4 +- ....11.2.bazel => BUILD.zerovec-0.11.4.bazel} | 2 +- .../BUILD.zerovec-derive-0.11.1.bazel | 4 +- .../BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel | 2 +- .../tree_sitter_extractors_deps/defs.bzl | 890 ++++++++---------- 157 files changed, 1194 insertions(+), 2206 deletions(-) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.anstream-0.6.19.bazel => BUILD.anstream-0.6.20.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.anstyle-query-1.1.3.bazel => BUILD.anstyle-query-1.1.4.bazel} (94%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.bitflags-2.9.1.bazel => BUILD.bitflags-2.9.4.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.boxcar-0.2.13.bazel => BUILD.boxcar-0.2.14.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.camino-1.1.10.bazel => BUILD.camino-1.1.12.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.cc-1.2.29.bazel => BUILD.cc-1.2.36.bazel} (85%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.cfg-if-1.0.1.bazel => BUILD.cfg-if-1.0.3.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.chrono-0.4.41.bazel => BUILD.chrono-0.4.42.bazel} (93%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.clap-4.5.44.bazel => BUILD.clap-4.5.47.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.clap_builder-4.5.44.bazel => BUILD.clap_builder-4.5.47.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.clap_derive-4.5.41.bazel => BUILD.clap_derive-4.5.47.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.android-tzdata-0.1.1.bazel => BUILD.find-msvc-tools-0.1.1.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.form_urlencoded-1.2.1.bazel => BUILD.form_urlencoded-1.2.2.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.hashbrown-0.15.4.bazel => BUILD.hashbrown-0.15.5.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.idna-1.0.3.bazel => BUILD.idna-1.1.0.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.indexmap-2.10.0.bazel => BUILD.indexmap-2.11.1.bazel} (98%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.32.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.filetime-0.2.25.bazel => BUILD.jobserver-0.1.34.bazel} (75%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.libc-0.2.174.bazel => BUILD.libc-0.2.175.bazel} (97%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libredox-0.1.4.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.log-0.4.27.bazel => BUILD.log-0.4.28.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.matchers-0.1.0.bazel => BUILD.matchers-0.2.0.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.notify-8.0.0.bazel => BUILD.notify-8.1.0.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.nu-ansi-term-0.46.0.bazel => BUILD.nu-ansi-term-0.50.1.bazel} (82%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.percent-encoding-2.3.1.bazel => BUILD.percent-encoding-2.3.2.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.potential_utf-0.1.2.bazel => BUILD.potential_utf-0.1.3.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.proc-macro2-1.0.97.bazel => BUILD.proc-macro2-1.0.101.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_base_db-0.0.300.bazel => BUILD.ra_ap_base_db-0.0.301.bazel} (84%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_cfg-0.0.300.bazel => BUILD.ra_ap_cfg-0.0.301.bazel} (93%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_edition-0.0.300.bazel => BUILD.ra_ap_edition-0.0.301.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir-0.0.300.bazel => BUILD.ra_ap_hir-0.0.301.bazel} (76%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir_def-0.0.300.bazel => BUILD.ra_ap_hir_def-0.0.301.bazel} (78%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir_expand-0.0.300.bazel => BUILD.ra_ap_hir_expand-0.0.301.bazel} (76%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir_ty-0.0.300.bazel => BUILD.ra_ap_hir_ty-0.0.301.bazel} (82%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_ide_db-0.0.300.bazel => BUILD.ra_ap_ide_db-0.0.301.bazel} (78%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_intern-0.0.300.bazel => BUILD.ra_ap_intern-0.0.301.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_load-cargo-0.0.300.bazel => BUILD.ra_ap_load-cargo-0.0.301.bazel} (78%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_mbe-0.0.300.bazel => BUILD.ra_ap_mbe-0.0.301.bazel} (84%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_parser-0.0.300.bazel => BUILD.ra_ap_parser-0.0.301.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_paths-0.0.300.bazel => BUILD.ra_ap_paths-0.0.301.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_proc_macro_api-0.0.300.bazel => BUILD.ra_ap_proc_macro_api-0.0.301.bazel} (84%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_profile-0.0.300.bazel => BUILD.ra_ap_profile-0.0.301.bazel} (90%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_project_model-0.0.300.bazel => BUILD.ra_ap_project_model-0.0.301.bazel} (82%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_query-group-macro-0.0.300.bazel => BUILD.ra_ap_query-group-macro-0.0.301.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_span-0.0.300.bazel => BUILD.ra_ap_span-0.0.301.bazel} (91%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_stdx-0.0.300.bazel => BUILD.ra_ap_stdx-0.0.301.bazel} (81%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_syntax-0.0.300.bazel => BUILD.ra_ap_syntax-0.0.301.bazel} (94%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_syntax-bridge-0.0.300.bazel => BUILD.ra_ap_syntax-bridge-0.0.301.bazel} (84%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_toolchain-0.0.300.bazel => BUILD.ra_ap_toolchain-0.0.301.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_tt-0.0.300.bazel => BUILD.ra_ap_tt-0.0.301.bazel} (93%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_vfs-0.0.300.bazel => BUILD.ra_ap_vfs-0.0.301.bazel} (92%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_vfs-notify-0.0.300.bazel => BUILD.ra_ap_vfs-notify-0.0.301.bazel} (89%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.rayon-1.10.0.bazel => BUILD.rayon-1.11.0.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.rayon-core-1.12.1.bazel => BUILD.rayon-core-1.13.0.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.regex-1.11.1.bazel => BUILD.regex-1.11.2.bazel} (96%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.1.10.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.regex-automata-0.4.9.bazel => BUILD.regex-automata-0.4.10.bazel} (97%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.6.29.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.regex-syntax-0.8.5.bazel => BUILD.regex-syntax-0.8.6.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.serde-untagged-0.1.7.bazel => BUILD.serde-untagged-0.1.8.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.serde_json-1.0.142.bazel => BUILD.serde_json-1.0.143.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.syn-2.0.104.bazel => BUILD.syn-2.0.106.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.thiserror-2.0.12.bazel => BUILD.thiserror-2.0.16.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.thiserror-impl-2.0.12.bazel => BUILD.thiserror-impl-2.0.16.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.thread_local-1.1.8.bazel => BUILD.thread_local-1.1.9.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.tracing-subscriber-0.3.19.bazel => BUILD.tracing-subscriber-0.3.20.bazel} (94%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.tree-sitter-embedded-template-0.23.2.bazel => BUILD.tree-sitter-embedded-template-0.25.0.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.tree-sitter-language-0.1.3.bazel => BUILD.tree-sitter-language-0.1.5.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.unicode-ident-1.0.18.bazel => BUILD.unicode-ident-1.0.19.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.url-2.5.4.bazel => BUILD.url-2.5.7.bazel} (93%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-0.3.9.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.overload-0.1.1.bazel => BUILD.windows-link-0.2.0.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.winnow-0.7.11.bazel => BUILD.winnow-0.7.13.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.zerovec-0.11.2.bazel => BUILD.zerovec-0.11.4.bazel} (99%) diff --git a/MODULE.bazel b/MODULE.bazel index c2dc258aaac1..eb96427d65a9 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -101,8 +101,8 @@ use_repo( "vendor_ts__anyhow-1.0.99", "vendor_ts__argfile-0.2.1", "vendor_ts__chalk-ir-0.104.0", - "vendor_ts__chrono-0.4.41", - "vendor_ts__clap-4.5.44", + "vendor_ts__chrono-0.4.42", + "vendor_ts__clap-4.5.47", "vendor_ts__dunce-1.0.5", "vendor_ts__either-1.15.0", "vendor_ts__encoding-0.2.33", @@ -115,37 +115,37 @@ use_repo( "vendor_ts__mustache-0.9.0", "vendor_ts__num-traits-0.2.19", "vendor_ts__num_cpus-1.17.0", - "vendor_ts__proc-macro2-1.0.97", + "vendor_ts__proc-macro2-1.0.101", "vendor_ts__quote-1.0.40", - "vendor_ts__ra_ap_base_db-0.0.300", - "vendor_ts__ra_ap_cfg-0.0.300", - "vendor_ts__ra_ap_hir-0.0.300", - "vendor_ts__ra_ap_hir_def-0.0.300", - "vendor_ts__ra_ap_hir_expand-0.0.300", - "vendor_ts__ra_ap_hir_ty-0.0.300", - "vendor_ts__ra_ap_ide_db-0.0.300", - "vendor_ts__ra_ap_intern-0.0.300", - "vendor_ts__ra_ap_load-cargo-0.0.300", - "vendor_ts__ra_ap_parser-0.0.300", - "vendor_ts__ra_ap_paths-0.0.300", - "vendor_ts__ra_ap_project_model-0.0.300", - "vendor_ts__ra_ap_span-0.0.300", - "vendor_ts__ra_ap_stdx-0.0.300", - "vendor_ts__ra_ap_syntax-0.0.300", - "vendor_ts__ra_ap_vfs-0.0.300", + "vendor_ts__ra_ap_base_db-0.0.301", + "vendor_ts__ra_ap_cfg-0.0.301", + "vendor_ts__ra_ap_hir-0.0.301", + "vendor_ts__ra_ap_hir_def-0.0.301", + "vendor_ts__ra_ap_hir_expand-0.0.301", + "vendor_ts__ra_ap_hir_ty-0.0.301", + "vendor_ts__ra_ap_ide_db-0.0.301", + "vendor_ts__ra_ap_intern-0.0.301", + "vendor_ts__ra_ap_load-cargo-0.0.301", + "vendor_ts__ra_ap_parser-0.0.301", + "vendor_ts__ra_ap_paths-0.0.301", + "vendor_ts__ra_ap_project_model-0.0.301", + "vendor_ts__ra_ap_span-0.0.301", + "vendor_ts__ra_ap_stdx-0.0.301", + "vendor_ts__ra_ap_syntax-0.0.301", + "vendor_ts__ra_ap_vfs-0.0.301", "vendor_ts__rand-0.9.2", - "vendor_ts__rayon-1.10.0", - "vendor_ts__regex-1.11.1", + "vendor_ts__rayon-1.11.0", + "vendor_ts__regex-1.11.2", "vendor_ts__serde-1.0.219", - "vendor_ts__serde_json-1.0.142", + "vendor_ts__serde_json-1.0.143", "vendor_ts__serde_with-3.14.0", - "vendor_ts__syn-2.0.104", + "vendor_ts__syn-2.0.106", "vendor_ts__toml-0.9.5", "vendor_ts__tracing-0.1.41", "vendor_ts__tracing-flame-0.2.0", - "vendor_ts__tracing-subscriber-0.3.19", + "vendor_ts__tracing-subscriber-0.3.20", "vendor_ts__tree-sitter-0.24.6", - "vendor_ts__tree-sitter-embedded-template-0.23.2", + "vendor_ts__tree-sitter-embedded-template-0.25.0", "vendor_ts__tree-sitter-json-0.24.8", "vendor_ts__tree-sitter-ql-0.23.1", "vendor_ts__tree-sitter-ruby-0.23.1", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel index 0d633d276d5d..d53f2d8803f3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "0.1.5", deps = [ - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.19.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel index efabc537139c..7d071b59f563 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel @@ -93,11 +93,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.6.19", + version = "0.6.20", deps = [ "@vendor_ts__anstyle-1.0.11//:anstyle", "@vendor_ts__anstyle-parse-0.2.7//:anstyle_parse", - "@vendor_ts__anstyle-query-1.1.3//:anstyle_query", + "@vendor_ts__anstyle-query-1.1.4//:anstyle_query", "@vendor_ts__colorchoice-1.0.4//:colorchoice", "@vendor_ts__is_terminal_polyfill-1.70.1//:is_terminal_polyfill", "@vendor_ts__utf8parse-0.2.2//:utf8parse", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel similarity index 94% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.3.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel index 04bdb7d55361..56c6b1fe9214 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel @@ -88,16 +88,16 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.1.3", + version = "1.1.4", deps = select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel index df61c70b2497..93f3c532ffdd 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel @@ -68,26 +68,26 @@ alias( ) alias( - name = "chrono-0.4.41", - actual = "@vendor_ts__chrono-0.4.41//:chrono", + name = "chrono-0.4.42", + actual = "@vendor_ts__chrono-0.4.42//:chrono", tags = ["manual"], ) alias( name = "chrono", - actual = "@vendor_ts__chrono-0.4.41//:chrono", + actual = "@vendor_ts__chrono-0.4.42//:chrono", tags = ["manual"], ) alias( - name = "clap-4.5.44", - actual = "@vendor_ts__clap-4.5.44//:clap", + name = "clap-4.5.47", + actual = "@vendor_ts__clap-4.5.47//:clap", tags = ["manual"], ) alias( name = "clap", - actual = "@vendor_ts__clap-4.5.44//:clap", + actual = "@vendor_ts__clap-4.5.47//:clap", tags = ["manual"], ) @@ -236,14 +236,14 @@ alias( ) alias( - name = "proc-macro2-1.0.97", - actual = "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + name = "proc-macro2-1.0.101", + actual = "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", tags = ["manual"], ) alias( name = "proc-macro2", - actual = "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + actual = "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", tags = ["manual"], ) @@ -260,200 +260,200 @@ alias( ) alias( - name = "ra_ap_base_db-0.0.300", - actual = "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", + name = "ra_ap_base_db-0.0.301", + actual = "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", tags = ["manual"], ) alias( name = "ra_ap_base_db", - actual = "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", + actual = "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", tags = ["manual"], ) alias( - name = "ra_ap_cfg-0.0.300", - actual = "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", + name = "ra_ap_cfg-0.0.301", + actual = "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", tags = ["manual"], ) alias( name = "ra_ap_cfg", - actual = "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", + actual = "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", tags = ["manual"], ) alias( - name = "ra_ap_hir-0.0.300", - actual = "@vendor_ts__ra_ap_hir-0.0.300//:ra_ap_hir", + name = "ra_ap_hir-0.0.301", + actual = "@vendor_ts__ra_ap_hir-0.0.301//:ra_ap_hir", tags = ["manual"], ) alias( name = "ra_ap_hir", - actual = "@vendor_ts__ra_ap_hir-0.0.300//:ra_ap_hir", + actual = "@vendor_ts__ra_ap_hir-0.0.301//:ra_ap_hir", tags = ["manual"], ) alias( - name = "ra_ap_hir_def-0.0.300", - actual = "@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def", + name = "ra_ap_hir_def-0.0.301", + actual = "@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def", tags = ["manual"], ) alias( name = "ra_ap_hir_def", - actual = "@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def", + actual = "@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def", tags = ["manual"], ) alias( - name = "ra_ap_hir_expand-0.0.300", - actual = "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand", + name = "ra_ap_hir_expand-0.0.301", + actual = "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand", tags = ["manual"], ) alias( name = "ra_ap_hir_expand", - actual = "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand", + actual = "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand", tags = ["manual"], ) alias( - name = "ra_ap_hir_ty-0.0.300", - actual = "@vendor_ts__ra_ap_hir_ty-0.0.300//:ra_ap_hir_ty", + name = "ra_ap_hir_ty-0.0.301", + actual = "@vendor_ts__ra_ap_hir_ty-0.0.301//:ra_ap_hir_ty", tags = ["manual"], ) alias( name = "ra_ap_hir_ty", - actual = "@vendor_ts__ra_ap_hir_ty-0.0.300//:ra_ap_hir_ty", + actual = "@vendor_ts__ra_ap_hir_ty-0.0.301//:ra_ap_hir_ty", tags = ["manual"], ) alias( - name = "ra_ap_ide_db-0.0.300", - actual = "@vendor_ts__ra_ap_ide_db-0.0.300//:ra_ap_ide_db", + name = "ra_ap_ide_db-0.0.301", + actual = "@vendor_ts__ra_ap_ide_db-0.0.301//:ra_ap_ide_db", tags = ["manual"], ) alias( name = "ra_ap_ide_db", - actual = "@vendor_ts__ra_ap_ide_db-0.0.300//:ra_ap_ide_db", + actual = "@vendor_ts__ra_ap_ide_db-0.0.301//:ra_ap_ide_db", tags = ["manual"], ) alias( - name = "ra_ap_intern-0.0.300", - actual = "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", + name = "ra_ap_intern-0.0.301", + actual = "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", tags = ["manual"], ) alias( name = "ra_ap_intern", - actual = "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", + actual = "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", tags = ["manual"], ) alias( - name = "ra_ap_load-cargo-0.0.300", - actual = "@vendor_ts__ra_ap_load-cargo-0.0.300//:ra_ap_load_cargo", + name = "ra_ap_load-cargo-0.0.301", + actual = "@vendor_ts__ra_ap_load-cargo-0.0.301//:ra_ap_load_cargo", tags = ["manual"], ) alias( name = "ra_ap_load-cargo", - actual = "@vendor_ts__ra_ap_load-cargo-0.0.300//:ra_ap_load_cargo", + actual = "@vendor_ts__ra_ap_load-cargo-0.0.301//:ra_ap_load_cargo", tags = ["manual"], ) alias( - name = "ra_ap_parser-0.0.300", - actual = "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", + name = "ra_ap_parser-0.0.301", + actual = "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", tags = ["manual"], ) alias( name = "ra_ap_parser", - actual = "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", + actual = "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", tags = ["manual"], ) alias( - name = "ra_ap_paths-0.0.300", - actual = "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths", + name = "ra_ap_paths-0.0.301", + actual = "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", tags = ["manual"], ) alias( name = "ra_ap_paths", - actual = "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths", + actual = "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", tags = ["manual"], ) alias( - name = "ra_ap_project_model-0.0.300", - actual = "@vendor_ts__ra_ap_project_model-0.0.300//:ra_ap_project_model", + name = "ra_ap_project_model-0.0.301", + actual = "@vendor_ts__ra_ap_project_model-0.0.301//:ra_ap_project_model", tags = ["manual"], ) alias( name = "ra_ap_project_model", - actual = "@vendor_ts__ra_ap_project_model-0.0.300//:ra_ap_project_model", + actual = "@vendor_ts__ra_ap_project_model-0.0.301//:ra_ap_project_model", tags = ["manual"], ) alias( - name = "ra_ap_span-0.0.300", - actual = "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", + name = "ra_ap_span-0.0.301", + actual = "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", tags = ["manual"], ) alias( name = "ra_ap_span", - actual = "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", + actual = "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", tags = ["manual"], ) alias( - name = "ra_ap_stdx-0.0.300", - actual = "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", + name = "ra_ap_stdx-0.0.301", + actual = "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", tags = ["manual"], ) alias( - name = "stdx-0.0.300", - actual = "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", + name = "stdx-0.0.301", + actual = "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", tags = ["manual"], ) alias( name = "stdx", - actual = "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", + actual = "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", tags = ["manual"], ) alias( - name = "ra_ap_syntax-0.0.300", - actual = "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", + name = "ra_ap_syntax-0.0.301", + actual = "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", tags = ["manual"], ) alias( name = "ra_ap_syntax", - actual = "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", + actual = "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", tags = ["manual"], ) alias( - name = "ra_ap_vfs-0.0.300", - actual = "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", + name = "ra_ap_vfs-0.0.301", + actual = "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", tags = ["manual"], ) alias( name = "ra_ap_vfs", - actual = "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", + actual = "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", tags = ["manual"], ) @@ -470,26 +470,26 @@ alias( ) alias( - name = "rayon-1.10.0", - actual = "@vendor_ts__rayon-1.10.0//:rayon", + name = "rayon-1.11.0", + actual = "@vendor_ts__rayon-1.11.0//:rayon", tags = ["manual"], ) alias( name = "rayon", - actual = "@vendor_ts__rayon-1.10.0//:rayon", + actual = "@vendor_ts__rayon-1.11.0//:rayon", tags = ["manual"], ) alias( - name = "regex-1.11.1", - actual = "@vendor_ts__regex-1.11.1//:regex", + name = "regex-1.11.2", + actual = "@vendor_ts__regex-1.11.2//:regex", tags = ["manual"], ) alias( name = "regex", - actual = "@vendor_ts__regex-1.11.1//:regex", + actual = "@vendor_ts__regex-1.11.2//:regex", tags = ["manual"], ) @@ -506,14 +506,14 @@ alias( ) alias( - name = "serde_json-1.0.142", - actual = "@vendor_ts__serde_json-1.0.142//:serde_json", + name = "serde_json-1.0.143", + actual = "@vendor_ts__serde_json-1.0.143//:serde_json", tags = ["manual"], ) alias( name = "serde_json", - actual = "@vendor_ts__serde_json-1.0.142//:serde_json", + actual = "@vendor_ts__serde_json-1.0.143//:serde_json", tags = ["manual"], ) @@ -530,14 +530,14 @@ alias( ) alias( - name = "syn-2.0.104", - actual = "@vendor_ts__syn-2.0.104//:syn", + name = "syn-2.0.106", + actual = "@vendor_ts__syn-2.0.106//:syn", tags = ["manual"], ) alias( name = "syn", - actual = "@vendor_ts__syn-2.0.104//:syn", + actual = "@vendor_ts__syn-2.0.106//:syn", tags = ["manual"], ) @@ -578,14 +578,14 @@ alias( ) alias( - name = "tracing-subscriber-0.3.19", - actual = "@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber", + name = "tracing-subscriber-0.3.20", + actual = "@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber", tags = ["manual"], ) alias( name = "tracing-subscriber", - actual = "@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber", + actual = "@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber", tags = ["manual"], ) @@ -602,14 +602,14 @@ alias( ) alias( - name = "tree-sitter-embedded-template-0.23.2", - actual = "@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template", + name = "tree-sitter-embedded-template-0.25.0", + actual = "@vendor_ts__tree-sitter-embedded-template-0.25.0//:tree_sitter_embedded_template", tags = ["manual"], ) alias( name = "tree-sitter-embedded-template", - actual = "@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template", + actual = "@vendor_ts__tree-sitter-embedded-template-0.25.0//:tree_sitter_embedded_template", tags = ["manual"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel index fbb0a5c36567..f4b462ce1317 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.9.1", + version = "2.9.4", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.13.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.13.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel index ac24b2ad6298..2286d8017db1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.13.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.13", + version = "0.2.14", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.10.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.10.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel index f7df381842ed..9a90162b227e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.10.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel @@ -96,9 +96,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.1.10", + version = "1.1.12", deps = [ - "@vendor_ts__camino-1.1.10//:build_script_build", + "@vendor_ts__camino-1.1.12//:build_script_build", "@vendor_ts__serde-1.0.219//:serde", ], ) @@ -155,7 +155,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.1.10", + version = "1.1.12", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel index a4d476d9ad99..d0dfee25c63c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel @@ -92,11 +92,11 @@ rust_library( deps = [ "@vendor_ts__semver-1.0.26//:semver", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde-untagged-0.1.7//:serde_untagged", + "@vendor_ts__serde-untagged-0.1.8//:serde_untagged", "@vendor_ts__serde-value-0.7.0//:serde_value", - "@vendor_ts__thiserror-2.0.12//:thiserror", + "@vendor_ts__thiserror-2.0.16//:thiserror", "@vendor_ts__toml-0.8.23//:toml", "@vendor_ts__unicode-xid-0.2.6//:unicode_xid", - "@vendor_ts__url-2.5.4//:url", + "@vendor_ts__url-2.5.7//:url", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel index 37ecc0be0e08..c96de37e1161 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel @@ -93,12 +93,12 @@ rust_library( }), version = "0.21.0", deps = [ - "@vendor_ts__camino-1.1.10//:camino", + "@vendor_ts__camino-1.1.12//:camino", "@vendor_ts__cargo-platform-0.2.0//:cargo_platform", "@vendor_ts__cargo-util-schemas-0.8.2//:cargo_util_schemas", "@vendor_ts__semver-1.0.26//:semver", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde_json-1.0.142//:serde_json", - "@vendor_ts__thiserror-2.0.12//:thiserror", + "@vendor_ts__serde_json-1.0.143//:serde_json", + "@vendor_ts__thiserror-2.0.16//:thiserror", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.29.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.36.bazel similarity index 85% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.29.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.36.bazel index 94f1085dc752..cd5b1bec0ac0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.29.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.36.bazel @@ -91,43 +91,44 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.2.29", + version = "1.2.36", deps = [ - "@vendor_ts__jobserver-0.1.32//:jobserver", + "@vendor_ts__find-msvc-tools-0.1.1//:find_msvc_tools", + "@vendor_ts__jobserver-0.1.34//:jobserver", "@vendor_ts__shlex-1.3.0//:shlex", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # aarch64-apple-darwin + "@vendor_ts__libc-0.2.175//:libc", # aarch64-apple-darwin ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # aarch64-unknown-linux-gnu + "@vendor_ts__libc-0.2.175//:libc", # aarch64-unknown-linux-gnu ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu + "@vendor_ts__libc-0.2.175//:libc", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # arm-unknown-linux-gnueabi + "@vendor_ts__libc-0.2.175//:libc", # arm-unknown-linux-gnueabi ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # i686-unknown-linux-gnu + "@vendor_ts__libc-0.2.175//:libc", # i686-unknown-linux-gnu ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # powerpc-unknown-linux-gnu + "@vendor_ts__libc-0.2.175//:libc", # powerpc-unknown-linux-gnu ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # s390x-unknown-linux-gnu + "@vendor_ts__libc-0.2.175//:libc", # s390x-unknown-linux-gnu ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # x86_64-apple-darwin + "@vendor_ts__libc-0.2.175//:libc", # x86_64-apple-darwin ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # x86_64-unknown-freebsd + "@vendor_ts__libc-0.2.175//:libc", # x86_64-unknown-freebsd ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # x86_64-unknown-linux-gnu + "@vendor_ts__libc-0.2.175//:libc", # x86_64-unknown-linux-gnu ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu + "@vendor_ts__libc-0.2.175//:libc", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel index 3c46f710630a..ca5231827c85 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.1", + version = "1.0.3", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel index 43156f3cd950..5f5338398884 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel @@ -90,9 +90,9 @@ rust_proc_macro( }), version = "0.103.0", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__synstructure-0.13.2//:synstructure", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel index b37413cd6c08..cd0251c5806b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel @@ -90,9 +90,9 @@ rust_proc_macro( }), version = "0.104.0", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__synstructure-0.13.2//:synstructure", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel index 1e3c900ab907..efafd49d342b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel @@ -93,6 +93,6 @@ rust_library( }), version = "0.103.0", deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel index 16b835996d69..60a6ae9176f7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel @@ -93,6 +93,6 @@ rust_library( }), version = "0.104.0", deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel index 4966053d4f36..9f0abb9530a3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel @@ -95,7 +95,7 @@ rust_library( deps = [ "@vendor_ts__chalk-ir-0.103.0//:chalk_ir", "@vendor_ts__ena-0.14.3//:ena", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__petgraph-0.6.5//:petgraph", "@vendor_ts__rustc-hash-1.1.0//:rustc_hash", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.41.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.41.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel index c96eee266690..6a1c5e8e71fc 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.41.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel @@ -36,7 +36,6 @@ rust_library( ), crate_features = [ "alloc", - "android-tzdata", "clock", "default", "iana-time-zone", @@ -104,7 +103,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.41", + version = "0.4.42", deps = [ "@vendor_ts__num-traits-0.2.19//:num_traits", "@vendor_ts__serde-1.0.219//:serde", @@ -119,11 +118,10 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # aarch64-apple-ios-sim ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__android-tzdata-0.1.1//:android_tzdata", # aarch64-linux-android "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # aarch64-linux-android ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows-link-0.1.3//:windows_link", # aarch64-pc-windows-msvc + "@vendor_ts__windows-link-0.2.0//:windows_link", # aarch64-pc-windows-msvc ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # aarch64-unknown-fuchsia @@ -141,7 +139,6 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # arm-unknown-linux-gnueabi ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__android-tzdata-0.1.1//:android_tzdata", # armv7-linux-androideabi "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # armv7-linux-androideabi ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ @@ -151,11 +148,10 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # i686-apple-darwin ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__android-tzdata-0.1.1//:android_tzdata", # i686-linux-android "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # i686-linux-android ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows-link-0.1.3//:windows_link", # i686-pc-windows-msvc + "@vendor_ts__windows-link-0.2.0//:windows_link", # i686-pc-windows-msvc ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # i686-unknown-freebsd @@ -180,11 +176,10 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # x86_64-apple-ios ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__android-tzdata-0.1.1//:android_tzdata", # x86_64-linux-android "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # x86_64-linux-android ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows-link-0.1.3//:windows_link", # x86_64-pc-windows-msvc + "@vendor_ts__windows-link-0.2.0//:windows_link", # x86_64-pc-windows-msvc ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # x86_64-unknown-freebsd diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.44.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.47.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.44.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.47.bazel index df9619c99eaf..6156a05c6ff3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.44.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.47.bazel @@ -47,7 +47,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ - "@vendor_ts__clap_derive-4.5.41//:clap_derive", + "@vendor_ts__clap_derive-4.5.47//:clap_derive", ], rustc_env_files = [ ":cargo_toml_env_vars", @@ -101,8 +101,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "4.5.44", + version = "4.5.47", deps = [ - "@vendor_ts__clap_builder-4.5.44//:clap_builder", + "@vendor_ts__clap_builder-4.5.47//:clap_builder", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.44.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.47.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.44.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.47.bazel index 639d48d46379..70d567834783 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.44.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.47.bazel @@ -96,9 +96,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "4.5.44", + version = "4.5.47", deps = [ - "@vendor_ts__anstream-0.6.19//:anstream", + "@vendor_ts__anstream-0.6.20//:anstream", "@vendor_ts__anstyle-1.0.11//:anstyle", "@vendor_ts__clap_lex-0.7.5//:clap_lex", "@vendor_ts__strsim-0.11.1//:strsim", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.41.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.41.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel index 177f948947f5..1f2d042d69d8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.41.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel @@ -91,11 +91,11 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "4.5.41", + version = "4.5.47", deps = [ "@vendor_ts__heck-0.5.0//:heck", - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel index 24f106b3eda0..f6ad1b52a493 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel @@ -94,6 +94,6 @@ rust_library( }), version = "1.4.2", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.11.bazel index 3f33e24ebe29..8fe1dfc0606f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.11.bazel @@ -96,9 +96,9 @@ rust_library( deps = [ "@vendor_ts__fnv-1.0.7//:fnv", "@vendor_ts__ident_case-1.0.1//:ident_case", - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", "@vendor_ts__strsim-0.11.1//:strsim", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.11.bazel index f4d01d9198e9..c32d23d3c48a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.11.bazel @@ -92,6 +92,6 @@ rust_proc_macro( deps = [ "@vendor_ts__darling_core-0.20.11//:darling_core", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel index e4f933a3d510..6a7ea4215532 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "6.1.0", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", "@vendor_ts__crossbeam-utils-0.8.21//:crossbeam_utils", "@vendor_ts__hashbrown-0.14.5//:hashbrown", "@vendor_ts__lock_api-0.4.13//:lock_api", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel index 7c6b8f96bbf6..a486cb7c1285 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.2.5", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel index d006d25618c3..50d4b33db9a6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "0.14.3", deps = [ - "@vendor_ts__log-0.4.27//:log", + "@vendor_ts__log-0.4.28//:log", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android-tzdata-0.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android-tzdata-0.1.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel index 8a7e7f71b1fe..d956f0084449 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android-tzdata-0.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel @@ -17,7 +17,7 @@ cargo_toml_env_vars( ) rust_library( - name = "android_tzdata", + name = "find_msvc_tools", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -44,7 +44,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=android-tzdata", + "crate-name=find-msvc-tools", "manual", "noclippy", "norustfmt", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel index be5dbcf148d9..e0bb0c5b348a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel @@ -92,8 +92,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.2.1", + version = "1.2.2", deps = [ - "@vendor_ts__percent-encoding-2.3.1//:percent_encoding", + "@vendor_ts__percent-encoding-2.3.2//:percent_encoding", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel index f6e6c4fad543..ae27e0cf00e7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "4.1.0", deps = [ - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel index 54516ab2d7a6..49103f0d3037 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel @@ -97,74 +97,74 @@ rust_library( }), version = "0.3.3", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", "@vendor_ts__getrandom-0.3.3//:build_script_build", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")) ], "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")) ], "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")) ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "haiku", target_os = "redox", target_os = "nto", target_os = "aix")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "haiku", target_os = "redox", target_os = "nto", target_os = "aix")) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "hurd", target_os = "illumos", target_os = "cygwin", all(target_os = "horizon", target_arch = "arm"))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "hurd", target_os = "illumos", target_os = "cygwin", all(target_os = "horizon", target_arch = "arm"))) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")) ], "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")) ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "hurd", target_os = "illumos", target_os = "cygwin", all(target_os = "horizon", target_arch = "arm"))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "hurd", target_os = "illumos", target_os = "cygwin", all(target_os = "horizon", target_arch = "arm"))) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel index 23ffeea84c3b..7d2c1d7ec7fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel @@ -96,8 +96,8 @@ rust_library( deps = [ "@vendor_ts__aho-corasick-1.1.3//:aho_corasick", "@vendor_ts__bstr-1.11.3//:bstr", - "@vendor_ts__log-0.4.27//:log", - "@vendor_ts__regex-automata-0.4.9//:regex_automata", - "@vendor_ts__regex-syntax-0.8.5//:regex_syntax", + "@vendor_ts__log-0.4.28//:log", + "@vendor_ts__regex-automata-0.4.10//:regex_automata", + "@vendor_ts__regex-syntax-0.8.6//:regex_syntax", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.4.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel index e787c0b73f36..4f57dca3c972 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel @@ -96,7 +96,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.15.4", + version = "0.15.5", deps = [ "@vendor_ts__allocator-api2-0.2.21//:allocator_api2", "@vendor_ts__equivalent-1.0.2//:equivalent", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel index cede17426a82..785d16ee2930 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "0.10.0", deps = [ - "@vendor_ts__hashbrown-0.15.4//:hashbrown", + "@vendor_ts__hashbrown-0.15.5//:hashbrown", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel index 19f174690010..fb97e330e703 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel @@ -122,7 +122,7 @@ rust_library( ], "@rules_rust//rust/platform:wasm32-unknown-unknown": [ "@vendor_ts__js-sys-0.3.77//:js_sys", # cfg(all(target_arch = "wasm32", target_os = "unknown")) - "@vendor_ts__log-0.4.27//:log", # cfg(all(target_arch = "wasm32", target_os = "unknown")) + "@vendor_ts__log-0.4.28//:log", # cfg(all(target_arch = "wasm32", target_os = "unknown")) "@vendor_ts__wasm-bindgen-0.2.100//:wasm_bindgen", # cfg(all(target_arch = "wasm32", target_os = "unknown")) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel index ac8feaf79a27..c15142f5bdc9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel @@ -149,7 +149,7 @@ cargo_build_script( version = "0.1.2", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel index 73ee415f9a1a..c15de7a0de7f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel @@ -93,9 +93,9 @@ rust_library( }), version = "2.0.0", deps = [ - "@vendor_ts__potential_utf-0.1.2//:potential_utf", + "@vendor_ts__potential_utf-0.1.3//:potential_utf", "@vendor_ts__yoke-0.8.0//:yoke", "@vendor_ts__zerofrom-0.1.6//:zerofrom", - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel index 91cf4cab2963..fe541bdd5d91 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel @@ -99,6 +99,6 @@ rust_library( "@vendor_ts__litemap-0.8.0//:litemap", "@vendor_ts__tinystr-0.8.1//:tinystr", "@vendor_ts__writeable-0.6.1//:writeable", - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel index f604cf034a98..0d7fa879c944 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel @@ -100,6 +100,6 @@ rust_library( "@vendor_ts__icu_normalizer_data-2.0.0//:icu_normalizer_data", "@vendor_ts__icu_provider-2.0.0//:icu_provider", "@vendor_ts__smallvec-1.15.1//:smallvec", - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel index cee332f06e1b..0775afcb043c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel @@ -100,8 +100,8 @@ rust_library( "@vendor_ts__icu_locale_core-2.0.0//:icu_locale_core", "@vendor_ts__icu_properties_data-2.0.1//:icu_properties_data", "@vendor_ts__icu_provider-2.0.0//:icu_provider", - "@vendor_ts__potential_utf-0.1.2//:potential_utf", + "@vendor_ts__potential_utf-0.1.3//:potential_utf", "@vendor_ts__zerotrie-0.2.2//:zerotrie", - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel index 0a9c998ee12d..42dc4eb7c341 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel @@ -104,6 +104,6 @@ rust_library( "@vendor_ts__yoke-0.8.0//:yoke", "@vendor_ts__zerofrom-0.1.6//:zerofrom", "@vendor_ts__zerotrie-0.2.2//:zerotrie", - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.0.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.0.3.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel index ca624309664d..1e4fe273978b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.0.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel @@ -93,7 +93,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.3", + version = "1.1.0", deps = [ "@vendor_ts__idna_adapter-1.2.1//:idna_adapter", "@vendor_ts__smallvec-1.15.1//:smallvec", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.10.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.1.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.10.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.1.bazel index 110e79e3f128..c3763099eb85 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.10.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.1.bazel @@ -93,10 +93,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.10.0", + version = "2.11.1", deps = [ "@vendor_ts__equivalent-1.0.2//:equivalent", - "@vendor_ts__hashbrown-0.15.4//:hashbrown", + "@vendor_ts__hashbrown-0.15.5//:hashbrown", "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel index 455b1ada88bf..31a69e5e7609 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel @@ -90,8 +90,8 @@ rust_library( }), version = "0.11.0", deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", "@vendor_ts__inotify-sys-0.1.5//:inotify_sys", - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel index 64a360cc60b3..757c2e30a5b1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "0.1.5", deps = [ - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.32.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.32.bazel deleted file mode 100644 index 5e1bfd6978ce..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.32.bazel +++ /dev/null @@ -1,167 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "jobserver", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2021", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=jobserver", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.1.32", - deps = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) - ], - "//conditions:default": [], - }), -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.filetime-0.2.25.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel similarity index 75% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.filetime-0.2.25.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel index 35820d594a5f..c92c87746bf9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.filetime-0.2.25.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel @@ -17,7 +17,7 @@ cargo_toml_env_vars( ) rust_library( - name = "filetime", + name = "jobserver", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -35,7 +35,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -44,7 +44,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=filetime", + "crate-name=jobserver", "manual", "noclippy", "norustfmt", @@ -88,90 +88,88 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.25", - deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", - ] + select({ + version = "0.1.34", + deps = select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__getrandom-0.3.3//:getrandom", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__getrandom-0.3.3//:getrandom", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__getrandom-0.3.3//:getrandom", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel index d2fcbb68bae6..81d5b18a81bb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel @@ -91,6 +91,6 @@ rust_library( version = "1.1.1", deps = [ "@vendor_ts__kqueue-sys-1.0.4//:kqueue_sys", - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel index ad1e457dfe6d..46c5f37608fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel @@ -91,6 +91,6 @@ rust_library( version = "1.0.4", deps = [ "@vendor_ts__bitflags-1.3.2//:bitflags", - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.174.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.174.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel index 55fe8a8115be..4aad3afd224a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.174.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel @@ -96,9 +96,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.174", + version = "0.2.175", deps = [ - "@vendor_ts__libc-0.2.174//:build_script_build", + "@vendor_ts__libc-0.2.175//:build_script_build", ], ) @@ -154,7 +154,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.2.174", + version = "0.2.175", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libredox-0.1.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libredox-0.1.4.bazel deleted file mode 100644 index 606bd2a25950..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libredox-0.1.4.bazel +++ /dev/null @@ -1,97 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "libredox", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2021", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=libredox", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.1.4", - deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", - "@vendor_ts__libc-0.2.174//:libc", - "@vendor_ts__redox_syscall-0.5.13//:syscall", - ], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel index cc061b625ca6..961aa4b6dabb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel @@ -94,6 +94,6 @@ rust_library( }), version = "0.3.9", deps = [ - "@vendor_ts__log-0.4.27//:log", + "@vendor_ts__log-0.4.28//:log", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.27.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.27.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel index 8e1f88973356..8d88e063c67d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.27.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel @@ -91,5 +91,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.27", + version = "0.4.28", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.1.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel index 9a3778fcabce..4ba339428228 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel @@ -88,8 +88,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.0", + version = "0.2.0", deps = [ - "@vendor_ts__regex-automata-0.1.10//:regex_automata", + "@vendor_ts__regex-automata-0.4.10//:regex_automata", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel index 098fbb7173c2..28e096bc418e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel @@ -96,92 +96,92 @@ rust_library( }), version = "1.0.4", deps = [ - "@vendor_ts__log-0.4.27//:log", + "@vendor_ts__log-0.4.28//:log", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:wasm32-wasip1": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(target_os = "wasi") + "@vendor_ts__libc-0.2.175//:libc", # cfg(target_os = "wasi") "@vendor_ts__wasi-0.11.1-wasi-snapshot-preview1//:wasi", # cfg(target_os = "wasi") ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.1.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.0.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.1.0.bazel index 70889e441f02..6b875aaa270f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.1.0.bazel @@ -93,16 +93,15 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "8.0.0", + version = "8.1.0", deps = [ - "@vendor_ts__filetime-0.2.25//:filetime", - "@vendor_ts__libc-0.2.174//:libc", - "@vendor_ts__log-0.4.27//:log", + "@vendor_ts__libc-0.2.175//:libc", + "@vendor_ts__log-0.4.28//:log", "@vendor_ts__notify-types-2.0.0//:notify_types", "@vendor_ts__walkdir-2.5.0//:walkdir", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__bitflags-2.9.1//:bitflags", # cfg(target_os = "macos") + "@vendor_ts__bitflags-2.9.4//:bitflags", # cfg(target_os = "macos") "@vendor_ts__fsevent-sys-4.1.0//:fsevent_sys", # aarch64-apple-darwin ], "@rules_rust//rust/platform:aarch64-apple-ios": [ @@ -118,7 +117,7 @@ rust_library( "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ "@vendor_ts__inotify-0.11.0//:inotify", # cfg(any(target_os = "linux", target_os = "android")) @@ -141,7 +140,7 @@ rust_library( "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__bitflags-2.9.1//:bitflags", # cfg(target_os = "macos") + "@vendor_ts__bitflags-2.9.4//:bitflags", # cfg(target_os = "macos") "@vendor_ts__fsevent-sys-4.1.0//:fsevent_sys", # i686-apple-darwin ], "@rules_rust//rust/platform:i686-linux-android": [ @@ -149,7 +148,7 @@ rust_library( "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ "@vendor_ts__kqueue-1.1.1//:kqueue", # cfg(any(target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", target_os = "dragonflybsd", target_os = "ios")) @@ -168,7 +167,7 @@ rust_library( "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__bitflags-2.9.1//:bitflags", # cfg(target_os = "macos") + "@vendor_ts__bitflags-2.9.4//:bitflags", # cfg(target_os = "macos") "@vendor_ts__fsevent-sys-4.1.0//:fsevent_sys", # x86_64-apple-darwin ], "@rules_rust//rust/platform:x86_64-apple-ios": [ @@ -180,7 +179,7 @@ rust_library( "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ "@vendor_ts__kqueue-1.1.1//:kqueue", # cfg(any(target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", target_os = "dragonflybsd", target_os = "ios")) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.46.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel similarity index 82% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.46.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel index b436335be0c9..1e9f6c7d54a3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.46.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel @@ -22,6 +22,18 @@ rust_library( include = ["**/*.rs"], allow_empty = True, ), + aliases = select({ + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": { + "@vendor_ts__windows-sys-0.52.0//:windows_sys": "windows", # cfg(windows) + }, + "@rules_rust//rust/platform:i686-pc-windows-msvc": { + "@vendor_ts__windows-sys-0.52.0//:windows_sys": "windows", # cfg(windows) + }, + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": { + "@vendor_ts__windows-sys-0.52.0//:windows_sys": "windows", # cfg(windows) + }, + "//conditions:default": {}, + }), compile_data = glob( include = ["**"], allow_empty = True, @@ -35,7 +47,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -88,18 +100,16 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.46.0", - deps = [ - "@vendor_ts__overload-0.1.1//:overload", - ] + select({ + version = "0.50.1", + deps = select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__winapi-0.3.9//:winapi", # cfg(target_os = "windows") + "@vendor_ts__windows-sys-0.52.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__winapi-0.3.9//:winapi", # cfg(target_os = "windows") + "@vendor_ts__windows-sys-0.52.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__winapi-0.3.9//:winapi", # cfg(target_os = "windows") + "@vendor_ts__windows-sys-0.52.0//:windows_sys", # cfg(windows) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel index 65ccdc7fd1af..84ac7e536d76 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel @@ -91,103 +91,103 @@ rust_library( version = "1.17.0", deps = select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:aarch64-unknown-uefi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:thumbv7em-none-eabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:wasm32-unknown-unknown": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:wasm32-wasip1": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-unknown-none": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "@rules_rust//rust/platform:x86_64-unknown-uefi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(not(windows)) + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel index dd30b9a5bc13..ffcde4b57f26 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel @@ -94,90 +94,90 @@ rust_library( }), version = "0.9.11", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", "@vendor_ts__parking_lot_core-0.9.11//:build_script_build", "@vendor_ts__smallvec-1.15.1//:smallvec", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__windows-targets-0.52.6//:windows_targets", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ "@vendor_ts__windows-targets-0.52.6//:windows_targets", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ "@vendor_ts__windows-targets-0.52.6//:windows_targets", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel index 44f538367d37..ce5597c6f7ef 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel @@ -90,9 +90,9 @@ rust_proc_macro( }), version = "0.2.9", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__proc-macro2-diagnostics-0.10.1//:proc_macro2_diagnostics", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel index dae967123fc6..06f5a6f9f7e9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel @@ -92,5 +92,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.3.1", + version = "2.3.2", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel index c6512969320d..bd473ae5a3f9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel @@ -90,7 +90,7 @@ rust_library( }), version = "0.4.7", deps = [ - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", "@vendor_ts__perf-event-open-sys-1.0.1//:perf_event_open_sys", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel index 2f975dbab226..3f12c00274f0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "1.0.1", deps = [ - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel index aec5d8e678db..c643aefe2c7b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel @@ -97,6 +97,6 @@ rust_library( version = "0.6.5", deps = [ "@vendor_ts__fixedbitset-0.4.2//:fixedbitset", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.2.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel index 2c1aa625c77f..f4fc2d5dee04 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel @@ -91,8 +91,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.2", + version = "0.1.3", deps = [ - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.97.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.97.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel index 393ebc5392bf..e09b5045cc33 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.97.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel @@ -96,10 +96,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.97", + version = "1.0.101", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:build_script_build", - "@vendor_ts__unicode-ident-1.0.18//:unicode_ident", + "@vendor_ts__proc-macro2-1.0.101//:build_script_build", + "@vendor_ts__unicode-ident-1.0.19//:unicode_ident", ], ) @@ -155,7 +155,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.97", + version = "1.0.101", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel index 7e1cf59384c8..120c4d6c2654 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel @@ -99,10 +99,10 @@ rust_library( }), version = "0.10.1", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__proc-macro2-diagnostics-0.10.1//:build_script_build", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__yansi-1.0.1//:yansi", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel index aa96a49c642e..66b79239e47b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel @@ -94,6 +94,6 @@ rust_library( }), version = "1.0.40", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel index df3ed9bebacd..0d136750f61b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "0.123.0", deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", "@vendor_ts__ra-ap-rustc_hashes-0.123.0//:ra_ap_rustc_hashes", "@vendor_ts__ra-ap-rustc_index-0.123.0//:ra_ap_rustc_index", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel index 6bb6017e68d6..b45b48ce2b9b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.123.0", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel similarity index 84% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel index de5ec1e085de..3931158e4a14 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel @@ -23,12 +23,12 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro": "query_group", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -45,7 +45,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2024", proc_macro_deps = [ - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro", "@vendor_ts__salsa-macros-0.23.0//:salsa_macros", ], rustc_env_files = [ @@ -100,16 +100,16 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__dashmap-6.1.0//:dashmap", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__salsa-0.23.0//:salsa", "@vendor_ts__semver-1.0.26//:semver", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel index 164407b7d4e3..f36d971d226b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel @@ -23,8 +23,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -95,10 +95,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel index 43ed08a0c63a..900a93657940 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel similarity index 76% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel index 8ddcf402e834..3134859b4d20 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel @@ -23,16 +23,16 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def": "hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_hir_ty-0.0.300//:ra_ap_hir_ty": "hir_ty", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def": "hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_hir_ty-0.0.301//:ra_ap_hir_ty": "hir_ty", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -100,22 +100,22 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__either-1.15.0//:either", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__itertools-0.14.0//:itertools", - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", - "@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_hir_ty-0.0.300//:ra_ap_hir_ty", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", + "@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_hir_ty-0.0.301//:ra_ap_hir_ty", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__smallvec-1.15.1//:smallvec", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel similarity index 78% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel index c44207c333df..135541bdb1e0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel @@ -23,16 +23,16 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_mbe-0.0.300//:ra_ap_mbe": "mbe", - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro": "query_group", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_mbe-0.0.301//:ra_ap_mbe": "mbe", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -49,7 +49,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2024", proc_macro_deps = [ - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro", "@vendor_ts__salsa-macros-0.23.0//:salsa_macros", ], rustc_env_files = [ @@ -104,28 +104,28 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__drop_bomb-0.1.5//:drop_bomb", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__fst-0.4.7//:fst", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__itertools-0.14.0//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", "@vendor_ts__ra-ap-rustc_abi-0.123.0//:ra_ap_rustc_abi", "@vendor_ts__ra-ap-rustc_parse_format-0.121.0//:ra_ap_rustc_parse_format", - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_mbe-0.0.300//:ra_ap_mbe", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_mbe-0.0.301//:ra_ap_mbe", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__rustc_apfloat-0.2.3-llvm-462a31f5a5ab//:rustc_apfloat", "@vendor_ts__salsa-0.23.0//:salsa", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel similarity index 76% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel index af75f70ce67d..ad5b2f0f0cfe 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel @@ -23,17 +23,17 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_mbe-0.0.300//:ra_ap_mbe": "mbe", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro": "query_group", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_syntax-bridge-0.0.300//:ra_ap_syntax_bridge": "syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_mbe-0.0.301//:ra_ap_mbe": "mbe", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_syntax-bridge-0.0.301//:ra_ap_syntax_bridge": "syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -50,7 +50,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2024", proc_macro_deps = [ - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro", "@vendor_ts__salsa-macros-0.23.0//:salsa_macros", ], rustc_env_files = [ @@ -105,21 +105,21 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__itertools-0.14.0//:itertools", - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_mbe-0.0.300//:ra_ap_mbe", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_syntax-bridge-0.0.300//:ra_ap_syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_mbe-0.0.301//:ra_ap_mbe", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_syntax-bridge-0.0.301//:ra_ap_syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__salsa-0.23.0//:salsa", "@vendor_ts__smallvec-1.15.1//:smallvec", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel similarity index 82% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel index 689b518ccf38..fd3eec1b4b30 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel @@ -23,14 +23,14 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def": "hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro": "query_group", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def": "hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", }, compile_data = glob( include = ["**"], @@ -48,7 +48,7 @@ rust_library( edition = "2024", proc_macro_deps = [ "@vendor_ts__chalk-derive-0.103.0//:chalk_derive", - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro", "@vendor_ts__salsa-macros-0.23.0//:salsa_macros", ], rustc_env_files = [ @@ -103,30 +103,30 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", "@vendor_ts__chalk-ir-0.103.0//:chalk_ir", "@vendor_ts__chalk-recursive-0.103.0//:chalk_recursive", "@vendor_ts__chalk-solve-0.103.0//:chalk_solve", "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__ena-0.14.3//:ena", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__itertools-0.14.0//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", "@vendor_ts__oorandom-11.1.5//:oorandom", "@vendor_ts__ra-ap-rustc_abi-0.123.0//:ra_ap_rustc_abi", "@vendor_ts__ra-ap-rustc_index-0.123.0//:ra_ap_rustc_index", "@vendor_ts__ra-ap-rustc_pattern_analysis-0.123.0//:ra_ap_rustc_pattern_analysis", - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", - "@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", + "@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__rustc_apfloat-0.2.3-llvm-462a31f5a5ab//:rustc_apfloat", "@vendor_ts__salsa-0.23.0//:salsa", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel similarity index 78% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel index af1e936dc0ca..97fa763dc314 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel @@ -23,15 +23,15 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_hir-0.0.300//:ra_ap_hir": "hir", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_profile-0.0.300//:ra_ap_profile": "profile", - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro": "query_group", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_hir-0.0.301//:ra_ap_hir": "hir", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_profile-0.0.301//:ra_ap_profile": "profile", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -48,7 +48,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2024", proc_macro_deps = [ - "@vendor_ts__ra_ap_query-group-macro-0.0.300//:ra_ap_query_group_macro", + "@vendor_ts__ra_ap_query-group-macro-0.0.301//:ra_ap_query_group_macro", "@vendor_ts__salsa-macros-0.23.0//:salsa_macros", ], rustc_env_files = [ @@ -103,28 +103,28 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__fst-0.4.7//:fst", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__itertools-0.14.0//:itertools", "@vendor_ts__line-index-0.1.2//:line_index", "@vendor_ts__memchr-2.7.5//:memchr", "@vendor_ts__nohash-hasher-0.2.0//:nohash_hasher", - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", - "@vendor_ts__ra_ap_hir-0.0.300//:ra_ap_hir", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", - "@vendor_ts__ra_ap_profile-0.0.300//:ra_ap_profile", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", - "@vendor_ts__rayon-1.10.0//:rayon", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", + "@vendor_ts__ra_ap_hir-0.0.301//:ra_ap_hir", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", + "@vendor_ts__ra_ap_profile-0.0.301//:ra_ap_profile", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", + "@vendor_ts__rayon-1.11.0//:rayon", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__salsa-0.23.0//:salsa", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel index 27f7bab382c9..556a788d138b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel @@ -88,7 +88,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__dashmap-6.1.0//:dashmap", "@vendor_ts__hashbrown-0.14.5//:hashbrown", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel similarity index 78% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel index 946a2dc743ff..81cbfdd3eaf4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel @@ -23,15 +23,15 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_ide_db-0.0.300//:ra_ap_ide_db": "ide_db", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_proc_macro_api-0.0.300//:ra_ap_proc_macro_api": "proc_macro_api", - "@vendor_ts__ra_ap_project_model-0.0.300//:ra_ap_project_model": "project_model", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs": "vfs", - "@vendor_ts__ra_ap_vfs-notify-0.0.300//:ra_ap_vfs_notify": "vfs_notify", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_ide_db-0.0.301//:ra_ap_ide_db": "ide_db", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_proc_macro_api-0.0.301//:ra_ap_proc_macro_api": "proc_macro_api", + "@vendor_ts__ra_ap_project_model-0.0.301//:ra_ap_project_model": "project_model", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_vfs-notify-0.0.301//:ra_ap_vfs_notify": "vfs_notify", }, compile_data = glob( include = ["**"], @@ -99,20 +99,20 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__anyhow-1.0.99//:anyhow", "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", "@vendor_ts__itertools-0.14.0//:itertools", - "@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_ide_db-0.0.300//:ra_ap_ide_db", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_proc_macro_api-0.0.300//:ra_ap_proc_macro_api", - "@vendor_ts__ra_ap_project_model-0.0.300//:ra_ap_project_model", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", - "@vendor_ts__ra_ap_vfs-notify-0.0.300//:ra_ap_vfs_notify", + "@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_ide_db-0.0.301//:ra_ap_ide_db", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_proc_macro_api-0.0.301//:ra_ap_proc_macro_api", + "@vendor_ts__ra_ap_project_model-0.0.301//:ra_ap_project_model", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", + "@vendor_ts__ra_ap_vfs-notify-0.0.301//:ra_ap_vfs_notify", "@vendor_ts__tracing-0.1.41//:tracing", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel similarity index 84% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel index 5417da2031a7..b6b27a0a8421 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel @@ -23,12 +23,12 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-bridge-0.0.300//:ra_ap_syntax_bridge": "syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-bridge-0.0.301//:ra_ap_syntax_bridge": "syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -96,17 +96,17 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__ra-ap-rustc_lexer-0.123.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-bridge-0.0.300//:ra_ap_syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-bridge-0.0.301//:ra_ap_syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__smallvec-1.15.1//:smallvec", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel index 8ed11d914952..f27215feb49d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel @@ -23,7 +23,7 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_edition-0.0.300//:ra_ap_edition": "edition", + "@vendor_ts__ra_ap_edition-0.0.301//:ra_ap_edition": "edition", }, compile_data = glob( include = ["**"], @@ -95,11 +95,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__drop_bomb-0.1.5//:drop_bomb", "@vendor_ts__ra-ap-rustc_lexer-0.123.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_edition-0.0.300//:ra_ap_edition", + "@vendor_ts__ra_ap_edition-0.0.301//:ra_ap_edition", "@vendor_ts__rustc-literal-escaper-0.0.4//:rustc_literal_escaper", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel index ecaa639c662e..68cfd57af753 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel @@ -91,8 +91,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__camino-1.1.10//:camino", + "@vendor_ts__camino-1.1.12//:camino", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel similarity index 84% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel index 332966ee7491..b23675474150 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel @@ -23,11 +23,11 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -98,17 +98,17 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__indexmap-2.10.0//:indexmap", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__indexmap-2.11.1//:indexmap", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde_json-1.0.142//:serde_json", + "@vendor_ts__serde_json-1.0.143//:serde_json", "@vendor_ts__tracing-0.1.41//:tracing", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel similarity index 90% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel index c897e7748da6..89463b1ab354 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel @@ -88,53 +88,53 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", ] + select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "//conditions:default": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel similarity index 82% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel index fb930fafd0ab..4332ecda1a72 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel @@ -23,13 +23,13 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_toolchain-0.0.300//:ra_ap_toolchain": "toolchain", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_toolchain-0.0.301//:ra_ap_toolchain": "toolchain", }, compile_data = glob( include = ["**"], @@ -100,23 +100,23 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__anyhow-1.0.99//:anyhow", "@vendor_ts__cargo_metadata-0.21.0//:cargo_metadata", "@vendor_ts__itertools-0.14.0//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_toolchain-0.0.300//:ra_ap_toolchain", + "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_toolchain-0.0.301//:ra_ap_toolchain", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__semver-1.0.26//:semver", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde_json-1.0.142//:serde_json", + "@vendor_ts__serde_json-1.0.143//:serde_json", "@vendor_ts__temp-dir-0.1.16//:temp_dir", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__triomphe-0.1.14//:triomphe", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel index a5444525a4aa..a4099d462eef 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel @@ -88,10 +88,10 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel similarity index 91% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel index 888665c53d4e..e9e64e5fa085 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel @@ -23,9 +23,9 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -97,13 +97,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__hashbrown-0.14.5//:hashbrown", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__salsa-0.23.0//:salsa", "@vendor_ts__text-size-1.1.1//:text_size", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel similarity index 81% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel index 0ec1196ed3f6..c00b158415e7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel @@ -88,7 +88,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", "@vendor_ts__crossbeam-utils-0.8.21//:crossbeam_utils", @@ -97,88 +97,88 @@ rust_library( "@vendor_ts__tracing-0.1.41//:tracing", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-apple-ios": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-linux-android": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__libc-0.2.174//:libc", # cfg(unix) + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel similarity index 94% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel index 77c147097a4b..277ab6b967c0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel @@ -23,8 +23,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", }, compile_data = glob( include = ["**"], @@ -92,12 +92,12 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__either-1.15.0//:either", "@vendor_ts__itertools-0.14.0//:itertools", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", "@vendor_ts__rowan-0.15.15//:rowan", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__rustc-literal-escaper-0.0.4//:rustc_literal_escaper", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel similarity index 84% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel index b9741a866e05..9894d99260ca 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel @@ -23,12 +23,12 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -96,14 +96,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser", - "@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax", - "@vendor_ts__ra_ap_tt-0.0.300//:ra_ap_tt", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", + "@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax", + "@vendor_ts__ra_ap_tt-0.0.301//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel index b077ab9b1ef8..dd6e2e7de24d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel @@ -88,9 +88,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ - "@vendor_ts__camino-1.1.10//:camino", + "@vendor_ts__camino-1.1.12//:camino", "@vendor_ts__home-0.5.11//:home", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel index a9dc4cbb42f3..3eb42ebd0196 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel @@ -23,8 +23,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", }, compile_data = glob( include = ["**"], @@ -92,12 +92,12 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__ra-ap-rustc_lexer-0.123.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", + "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", "@vendor_ts__text-size-1.1.1//:text_size", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel similarity index 92% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel index 1ddf26373e25..33b4db4d3562 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel @@ -23,8 +23,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", }, compile_data = glob( include = ["**"], @@ -92,14 +92,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", "@vendor_ts__fst-0.4.7//:fst", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__nohash-hasher-0.2.0//:nohash_hasher", - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.300.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel similarity index 89% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.300.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel index 1c9c87f94bfc..e58c4364d162 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.300.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel @@ -23,9 +23,9 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -93,14 +93,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.300", + version = "0.0.301", deps = [ "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", - "@vendor_ts__notify-8.0.0//:notify", - "@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths", - "@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx", - "@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs", - "@vendor_ts__rayon-1.10.0//:rayon", + "@vendor_ts__notify-8.1.0//:notify", + "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", + "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", + "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", + "@vendor_ts__rayon-1.11.0//:rayon", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__walkdir-2.5.0//:walkdir", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel index 54b0313af6f7..25d4bda52c87 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel @@ -88,9 +88,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.10.0", + version = "1.11.0", deps = [ "@vendor_ts__either-1.15.0//:either", - "@vendor_ts__rayon-core-1.12.1//:rayon_core", + "@vendor_ts__rayon-core-1.13.0//:rayon_core", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.12.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.12.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel index 32592b58e8a1..9925b0366bda 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.12.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel @@ -92,11 +92,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.12.1", + version = "1.13.0", deps = [ "@vendor_ts__crossbeam-deque-0.8.6//:crossbeam_deque", "@vendor_ts__crossbeam-utils-0.8.21//:crossbeam_utils", - "@vendor_ts__rayon-core-1.12.1//:build_script_build", + "@vendor_ts__rayon-core-1.13.0//:build_script_build", ], ) @@ -149,7 +149,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.12.1", + version = "1.13.0", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel index 2c22ff5a4c54..af919915d087 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel @@ -90,6 +90,6 @@ rust_library( }), version = "0.5.13", deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel index 38fec2277f01..ba548e9113ae 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "1.0.24", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.2.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.2.bazel index 92e631bc9578..1c4f925a111f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.2.bazel @@ -107,11 +107,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.11.1", + version = "1.11.2", deps = [ "@vendor_ts__aho-corasick-1.1.3//:aho_corasick", "@vendor_ts__memchr-2.7.5//:memchr", - "@vendor_ts__regex-automata-0.4.9//:regex_automata", - "@vendor_ts__regex-syntax-0.8.5//:regex_syntax", + "@vendor_ts__regex-automata-0.4.10//:regex_automata", + "@vendor_ts__regex-syntax-0.8.6//:regex_syntax", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.1.10.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.1.10.bazel deleted file mode 100644 index 9b58dc740066..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.1.10.bazel +++ /dev/null @@ -1,100 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "regex_automata", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "default", - "regex-syntax", - "std", - ], - crate_root = "src/lib.rs", - edition = "2015", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=regex-automata", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.1.10", - deps = [ - "@vendor_ts__regex-syntax-0.6.29//:regex_syntax", - ], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.10.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.9.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.10.bazel index bdfd5c10b877..4b17c645f346 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.10.bazel @@ -36,7 +36,9 @@ rust_library( ), crate_features = [ "alloc", + "dfa-build", "dfa-onepass", + "dfa-search", "hybrid", "meta", "nfa", @@ -114,10 +116,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.9", + version = "0.4.10", deps = [ "@vendor_ts__aho-corasick-1.1.3//:aho_corasick", "@vendor_ts__memchr-2.7.5//:memchr", - "@vendor_ts__regex-syntax-0.8.5//:regex_syntax", + "@vendor_ts__regex-syntax-0.8.6//:regex_syntax", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.6.29.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.6.29.bazel deleted file mode 100644 index dbfafb2e61fe..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.6.29.bazel +++ /dev/null @@ -1,103 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "regex_syntax", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "default", - "unicode", - "unicode-age", - "unicode-bool", - "unicode-case", - "unicode-gencat", - "unicode-perl", - "unicode-script", - "unicode-segment", - ], - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=regex-syntax", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.6.29", -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.5.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel index 78a2a7ef6bc3..678ff923f0b4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel @@ -100,5 +100,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.8.5", + version = "0.8.6", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel index c63cc2939bae..7947e6e3b806 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "0.2.3+llvm-462a31f5a5ab", deps = [ - "@vendor_ts__bitflags-2.9.1//:bitflags", + "@vendor_ts__bitflags-2.9.4//:bitflags", "@vendor_ts__rustc_apfloat-0.2.3-llvm-462a31f5a5ab//:build_script_build", "@vendor_ts__smallvec-1.15.1//:smallvec", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel index 949a19b9b1bd..a7a2366514f8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel @@ -99,17 +99,17 @@ rust_library( }), version = "0.23.0", deps = [ - "@vendor_ts__boxcar-0.2.13//:boxcar", + "@vendor_ts__boxcar-0.2.14//:boxcar", "@vendor_ts__crossbeam-queue-0.3.12//:crossbeam_queue", "@vendor_ts__crossbeam-utils-0.8.21//:crossbeam_utils", - "@vendor_ts__hashbrown-0.15.4//:hashbrown", + "@vendor_ts__hashbrown-0.15.5//:hashbrown", "@vendor_ts__hashlink-0.10.0//:hashlink", - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__intrusive-collections-0.9.7//:intrusive_collections", "@vendor_ts__papaya-0.2.3//:papaya", "@vendor_ts__parking_lot-0.12.4//:parking_lot", "@vendor_ts__portable-atomic-1.11.1//:portable_atomic", - "@vendor_ts__rayon-1.10.0//:rayon", + "@vendor_ts__rayon-1.11.0//:rayon", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__salsa-macro-rules-0.23.0//:salsa_macro_rules", "@vendor_ts__smallvec-1.15.1//:smallvec", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel index 72f1a5b649aa..03a3ef58912a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel @@ -90,9 +90,9 @@ rust_proc_macro( }), version = "0.23.0", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__synstructure-0.13.2//:synstructure", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel index 3f8b85b24489..e20972ba9f51 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel @@ -93,6 +93,6 @@ rust_library( "@vendor_ts__dyn-clone-1.0.19//:dyn_clone", "@vendor_ts__ref-cast-1.0.24//:ref_cast", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde_json-1.0.142//:serde_json", + "@vendor_ts__serde_json-1.0.143//:serde_json", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel index 1197212d2bcb..d3f2babb7fe9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel @@ -93,6 +93,6 @@ rust_library( "@vendor_ts__dyn-clone-1.0.19//:dyn_clone", "@vendor_ts__ref-cast-1.0.24//:ref_cast", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde_json-1.0.142//:serde_json", + "@vendor_ts__serde_json-1.0.143//:serde_json", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel index f7104958ace5..b54e1b89da30 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel @@ -96,7 +96,7 @@ rust_library( }), version = "0.5.0", deps = [ - "@vendor_ts__libc-0.2.174//:libc", + "@vendor_ts__libc-0.2.175//:libc", ] + select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.52.0//:windows_sys", # aarch64-pc-windows-msvc diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.7.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel index 8336f37c318a..0191982b73aa 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel @@ -88,7 +88,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.7", + version = "0.1.8", deps = [ "@vendor_ts__erased-serde-0.4.6//:erased_serde", "@vendor_ts__serde-1.0.219//:serde", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel index 54f67711a1ef..f11ee965dbac 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel @@ -93,8 +93,8 @@ rust_proc_macro( }), version = "1.0.219", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.142.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.142.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel index 2da5ba551f16..ba039844fa6b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.142.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel @@ -97,13 +97,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.142", + version = "1.0.143", deps = [ "@vendor_ts__itoa-1.0.15//:itoa", "@vendor_ts__memchr-2.7.5//:memchr", "@vendor_ts__ryu-1.0.20//:ryu", "@vendor_ts__serde-1.0.219//:serde", - "@vendor_ts__serde_json-1.0.142//:build_script_build", + "@vendor_ts__serde_json-1.0.143//:build_script_build", ], ) @@ -160,7 +160,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.142", + version = "1.0.143", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.0.bazel index e36f146513e7..5ce2041aa7f0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.0.bazel @@ -91,8 +91,8 @@ rust_proc_macro( version = "3.14.0", deps = [ "@vendor_ts__darling-0.20.11//:darling", - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel index 9a4e6a300877..46287f3ed281 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel @@ -90,7 +90,7 @@ rust_library( }), version = "0.9.34+deprecated", deps = [ - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__itoa-1.0.15//:itoa", "@vendor_ts__ryu-1.0.20//:ryu", "@vendor_ts__serde-1.0.219//:serde", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.104.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.104.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel index d33a680bd2ee..a4bd833e8e59 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.104.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel @@ -101,10 +101,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.104", + version = "2.0.106", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__unicode-ident-1.0.18//:unicode_ident", + "@vendor_ts__unicode-ident-1.0.19//:unicode_ident", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel index 5b31bf98d6f1..ed7ebbca4014 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel @@ -94,8 +94,8 @@ rust_library( }), version = "0.13.2", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.12.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.12.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel index 22a50f358c84..e50ec05152d5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.12.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel @@ -45,7 +45,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ - "@vendor_ts__thiserror-impl-2.0.12//:thiserror_impl", + "@vendor_ts__thiserror-impl-2.0.16//:thiserror_impl", ], rustc_env_files = [ ":cargo_toml_env_vars", @@ -99,9 +99,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.12", + version = "2.0.16", deps = [ - "@vendor_ts__thiserror-2.0.12//:build_script_build", + "@vendor_ts__thiserror-2.0.16//:build_script_build", ], ) @@ -157,7 +157,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "2.0.12", + version = "2.0.16", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.12.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.12.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel index ff86a30bb1c6..4f363e2e5ca5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.12.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel @@ -88,10 +88,10 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.12", + version = "2.0.16", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.8.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel index fdb1e3df88ca..649948406e7a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel @@ -88,9 +88,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.1.8", + version = "1.1.9", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", - "@vendor_ts__once_cell-1.21.3//:once_cell", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel index e59752c07878..c499cc1b6804 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel @@ -97,6 +97,6 @@ rust_library( }), version = "0.8.1", deps = [ - "@vendor_ts__zerovec-0.11.2//:zerovec", + "@vendor_ts__zerovec-0.11.4//:zerovec", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.5.bazel index 196f0c87a31e..50e11857e38f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.5.bazel @@ -102,6 +102,6 @@ rust_library( "@vendor_ts__toml_datetime-0.7.0//:toml_datetime", "@vendor_ts__toml_parser-1.0.2//:toml_parser", "@vendor_ts__toml_writer-1.0.2//:toml_writer", - "@vendor_ts__winnow-0.7.11//:winnow", + "@vendor_ts__winnow-0.7.13//:winnow", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel index 73e49a5bec17..dad3750bcfec 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel @@ -95,11 +95,11 @@ rust_library( }), version = "0.22.27", deps = [ - "@vendor_ts__indexmap-2.10.0//:indexmap", + "@vendor_ts__indexmap-2.11.1//:indexmap", "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_spanned-0.6.9//:serde_spanned", "@vendor_ts__toml_datetime-0.6.11//:toml_datetime", "@vendor_ts__toml_write-0.1.2//:toml_write", - "@vendor_ts__winnow-0.7.11//:winnow", + "@vendor_ts__winnow-0.7.13//:winnow", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.2.bazel index d5c30a262907..424946c20a6a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.2.bazel @@ -94,6 +94,6 @@ rust_library( }), version = "1.0.2", deps = [ - "@vendor_ts__winnow-0.7.11//:winnow", + "@vendor_ts__winnow-0.7.13//:winnow", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel index fa6532ba1fdf..f426539a31c0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.1.30", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel index 7bc42503a2b3..49318221b2f9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel @@ -96,6 +96,6 @@ rust_library( deps = [ "@vendor_ts__lazy_static-1.5.0//:lazy_static", "@vendor_ts__tracing-0.1.41//:tracing", - "@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber", + "@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel index afde86be9452..884615bcabe0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "0.2.0", deps = [ - "@vendor_ts__log-0.4.27//:log", + "@vendor_ts__log-0.4.28//:log", "@vendor_ts__once_cell-1.21.3//:once_cell", "@vendor_ts__tracing-core-0.1.34//:tracing_core", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel similarity index 94% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.19.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel index b66d0003b2a4..13b54631970b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel @@ -43,7 +43,6 @@ rust_library( "matchers", "nu-ansi-term", "once_cell", - "regex", "registry", "sharded-slab", "smallvec", @@ -106,15 +105,15 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.3.19", + version = "0.3.20", deps = [ - "@vendor_ts__matchers-0.1.0//:matchers", - "@vendor_ts__nu-ansi-term-0.46.0//:nu_ansi_term", + "@vendor_ts__matchers-0.2.0//:matchers", + "@vendor_ts__nu-ansi-term-0.50.1//:nu_ansi_term", "@vendor_ts__once_cell-1.21.3//:once_cell", - "@vendor_ts__regex-1.11.1//:regex", + "@vendor_ts__regex-automata-0.4.10//:regex_automata", "@vendor_ts__sharded-slab-0.1.7//:sharded_slab", "@vendor_ts__smallvec-1.15.1//:smallvec", - "@vendor_ts__thread_local-1.1.8//:thread_local", + "@vendor_ts__thread_local-1.1.9//:thread_local", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__tracing-core-0.1.34//:tracing_core", "@vendor_ts__tracing-log-0.2.0//:tracing_log", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel index cfa7b65f2055..a7a0383b0e80 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel @@ -98,11 +98,11 @@ rust_library( }), version = "0.24.6", deps = [ - "@vendor_ts__regex-1.11.1//:regex", - "@vendor_ts__regex-syntax-0.8.5//:regex_syntax", + "@vendor_ts__regex-1.11.2//:regex", + "@vendor_ts__regex-syntax-0.8.6//:regex_syntax", "@vendor_ts__streaming-iterator-0.1.9//:streaming_iterator", "@vendor_ts__tree-sitter-0.24.6//:build_script_build", - "@vendor_ts__tree-sitter-language-0.1.3//:tree_sitter_language", + "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", ], ) @@ -162,7 +162,7 @@ cargo_build_script( version = "0.24.6", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel index 47d76515ad12..d1680d1d6242 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel @@ -92,10 +92,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.23.2", + version = "0.25.0", deps = [ - "@vendor_ts__tree-sitter-embedded-template-0.23.2//:build_script_build", - "@vendor_ts__tree-sitter-language-0.1.3//:tree_sitter_language", + "@vendor_ts__tree-sitter-embedded-template-0.25.0//:build_script_build", + "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", ], ) @@ -147,10 +147,10 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.23.2", + version = "0.25.0", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel index daedbc6cdb56..c3486fc0767f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel @@ -95,7 +95,7 @@ rust_library( version = "0.24.8", deps = [ "@vendor_ts__tree-sitter-json-0.24.8//:build_script_build", - "@vendor_ts__tree-sitter-language-0.1.3//:tree_sitter_language", + "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", ], ) @@ -150,7 +150,7 @@ cargo_build_script( version = "0.24.8", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.3.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel index c714fc492e31..8bc56f476d98 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.3", + version = "0.1.5", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel index d08108c5cc86..d2a2bd95c412 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "0.23.1", deps = [ - "@vendor_ts__tree-sitter-language-0.1.3//:tree_sitter_language", + "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", "@vendor_ts__tree-sitter-ql-0.23.1//:build_script_build", ], ) @@ -150,7 +150,7 @@ cargo_build_script( version = "0.23.1", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel index 6fb0fab3b2bd..0ffef789ac29 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "0.23.1", deps = [ - "@vendor_ts__tree-sitter-language-0.1.3//:tree_sitter_language", + "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", "@vendor_ts__tree-sitter-ruby-0.23.1//:build_script_build", ], ) @@ -150,7 +150,7 @@ cargo_build_script( version = "0.23.1", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.18.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.18.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel index 39820863a2ce..f0f3da9a94c4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.18.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.18", + version = "1.0.19", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.4.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel index 58f034d5353d..4ac8b9941e57 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel @@ -36,6 +36,7 @@ rust_library( ), crate_features = [ "default", + "serde", "std", ], crate_root = "src/lib.rs", @@ -92,10 +93,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.5.4", + version = "2.5.7", deps = [ - "@vendor_ts__form_urlencoded-1.2.1//:form_urlencoded", - "@vendor_ts__idna-1.0.3//:idna", - "@vendor_ts__percent-encoding-2.3.1//:percent_encoding", + "@vendor_ts__form_urlencoded-1.2.2//:form_urlencoded", + "@vendor_ts__idna-1.1.0//:idna", + "@vendor_ts__percent-encoding-2.3.2//:percent_encoding", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel index c707d350e7ae..6f2e24a7df13 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel @@ -104,7 +104,7 @@ rust_library( }), version = "0.2.100", deps = [ - "@vendor_ts__cfg-if-1.0.1//:cfg_if", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", "@vendor_ts__once_cell-1.21.3//:once_cell", "@vendor_ts__wasm-bindgen-0.2.100//:build_script_build", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel index 5459cb634465..28ad2fb698ae 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel @@ -91,10 +91,10 @@ rust_library( version = "0.2.100", deps = [ "@vendor_ts__bumpalo-3.19.0//:bumpalo", - "@vendor_ts__log-0.4.27//:log", - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__log-0.4.28//:log", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__wasm-bindgen-shared-0.2.100//:wasm_bindgen_shared", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel index 026a0784f832..fee49d321cd4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel @@ -90,9 +90,9 @@ rust_library( }), version = "0.2.100", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__wasm-bindgen-backend-0.2.100//:wasm_bindgen_backend", "@vendor_ts__wasm-bindgen-shared-0.2.100//:wasm_bindgen_shared", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel index 0be6d5b0e337..294ab4320f66 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel @@ -94,7 +94,7 @@ rust_library( }), version = "0.2.100", deps = [ - "@vendor_ts__unicode-ident-1.0.18//:unicode_ident", + "@vendor_ts__unicode-ident-1.0.19//:unicode_ident", "@vendor_ts__wasm-bindgen-shared-0.2.100//:build_script_build", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-0.3.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-0.3.9.bazel deleted file mode 100644 index bdfcc0a93472..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-0.3.9.bazel +++ /dev/null @@ -1,171 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "winapi", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "consoleapi", - "errhandlingapi", - "fileapi", - "handleapi", - "processenv", - ], - crate_root = "src/lib.rs", - edition = "2015", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=winapi", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.3.9", - deps = [ - "@vendor_ts__winapi-0.3.9//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "consoleapi", - "errhandlingapi", - "fileapi", - "handleapi", - "processenv", - ], - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2015", - pkg_name = "winapi", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=winapi", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.3.9", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel deleted file mode 100644 index 45130211eb69..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "winapi_i686_pc_windows_gnu", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2015", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=winapi-i686-pc-windows-gnu", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.4.0", - deps = [ - "@vendor_ts__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2015", - pkg_name = "winapi-i686-pc-windows-gnu", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=winapi-i686-pc-windows-gnu", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.4.0", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel deleted file mode 100644 index 200e251f5bd0..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "winapi_x86_64_pc_windows_gnu", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2015", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=winapi-x86_64-pc-windows-gnu", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.4.0", - deps = [ - "@vendor_ts__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2015", - pkg_name = "winapi-x86_64-pc-windows-gnu", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=winapi-x86_64-pc-windows-gnu", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.4.0", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel index 4c5780af7b77..b851ac187258 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.60.0", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel index ad3593fff25f..0d2150974e06 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.59.1", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.overload-0.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.overload-0.1.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel index 047ca4a24895..dc214f6dacb7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.overload-0.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel @@ -17,7 +17,7 @@ cargo_toml_env_vars( ) rust_library( - name = "overload", + name = "windows_link", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -35,7 +35,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -44,7 +44,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=overload", + "crate-name=windows-link", "manual", "noclippy", "norustfmt", @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.1", + version = "0.2.0", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel index 98dc28b5fcf4..8e8b30891c17 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel @@ -36,7 +36,12 @@ rust_library( ), crate_features = [ "Win32", + "Win32_Foundation", + "Win32_Security", + "Win32_Storage", + "Win32_Storage_FileSystem", "Win32_System", + "Win32_System_Console", "Win32_System_Threading", "default", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel index 3c282e594c9d..1b642978cc0f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel @@ -37,16 +37,12 @@ rust_library( crate_features = [ "Win32", "Win32_Foundation", - "Win32_Security", "Win32_Storage", "Win32_Storage_FileSystem", "Win32_System", "Win32_System_Com", "Win32_System_Console", - "Win32_System_IO", "Win32_System_SystemInformation", - "Win32_System_Threading", - "Win32_System_WindowsProgramming", "Win32_UI", "Win32_UI_Shell", "default", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel index 02aff274771b..37a3356269b7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel @@ -37,9 +37,15 @@ rust_library( crate_features = [ "Win32", "Win32_Foundation", + "Win32_Security", + "Win32_Storage", + "Win32_Storage_FileSystem", "Win32_System", + "Win32_System_Console", + "Win32_System_IO", "Win32_System_ProcessStatus", "Win32_System_Threading", + "Win32_System_WindowsProgramming", "default", ], crate_root = "src/lib.rs", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.11.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel index ad39ba9d1212..8ac650c5d96c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel @@ -93,5 +93,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.7.11", + version = "0.7.13", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel index 507697272f25..88b72641dcb8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel @@ -90,9 +90,9 @@ rust_proc_macro( }), version = "0.8.0", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__synstructure-0.13.2//:synstructure", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel index 136da86dc00a..3a67f140d49b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.8.26", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel index 516b57bbff02..facba68b2c70 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel @@ -90,9 +90,9 @@ rust_proc_macro( }), version = "0.1.6", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", "@vendor_ts__synstructure-0.13.2//:synstructure", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.2.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel index 5a3209f87c0d..5b82e659f327 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel @@ -96,7 +96,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.11.2", + version = "0.11.4", deps = [ "@vendor_ts__yoke-0.8.0//:yoke", "@vendor_ts__zerofrom-0.1.6//:zerofrom", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel index 2d416230e0c1..06b27ed643f5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel @@ -90,8 +90,8 @@ rust_proc_macro( }), version = "0.11.1", deps = [ - "@vendor_ts__proc-macro2-1.0.97//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__syn-2.0.104//:syn", + "@vendor_ts__syn-2.0.106//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel index 0d8bdc167574..0f7e49bb7723 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel @@ -160,7 +160,7 @@ cargo_build_script( version = "2.0.15+zstd.1.5.7", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.29//:cc", + "@vendor_ts__cc-1.2.36//:cc", "@vendor_ts__pkg-config-0.3.32//:pkg_config", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index 1ac8707748c0..4d5c4b9d371e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -295,16 +295,16 @@ def aliases( _NORMAL_DEPENDENCIES = { "ruby/extractor": { _COMMON_CONDITION: { - "clap": Label("@vendor_ts__clap-4.5.44//:clap"), + "clap": Label("@vendor_ts__clap-4.5.47//:clap"), "encoding": Label("@vendor_ts__encoding-0.2.33//:encoding"), "lazy_static": Label("@vendor_ts__lazy_static-1.5.0//:lazy_static"), - "rayon": Label("@vendor_ts__rayon-1.10.0//:rayon"), - "regex": Label("@vendor_ts__regex-1.11.1//:regex"), - "serde_json": Label("@vendor_ts__serde_json-1.0.142//:serde_json"), + "rayon": Label("@vendor_ts__rayon-1.11.0//:rayon"), + "regex": Label("@vendor_ts__regex-1.11.2//:regex"), + "serde_json": Label("@vendor_ts__serde_json-1.0.143//:serde_json"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), - "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber"), + "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber"), "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), - "tree-sitter-embedded-template": Label("@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template"), + "tree-sitter-embedded-template": Label("@vendor_ts__tree-sitter-embedded-template-0.25.0//:tree_sitter_embedded_template"), "tree-sitter-ruby": Label("@vendor_ts__tree-sitter-ruby-0.23.1//:tree_sitter_ruby"), }, }, @@ -314,10 +314,10 @@ _NORMAL_DEPENDENCIES = { "either": Label("@vendor_ts__either-1.15.0//:either"), "itertools": Label("@vendor_ts__itertools-0.14.0//:itertools"), "mustache": Label("@vendor_ts__mustache-0.9.0//:mustache"), - "proc-macro2": Label("@vendor_ts__proc-macro2-1.0.97//:proc_macro2"), + "proc-macro2": Label("@vendor_ts__proc-macro2-1.0.101//:proc_macro2"), "quote": Label("@vendor_ts__quote-1.0.40//:quote"), "serde": Label("@vendor_ts__serde-1.0.219//:serde"), - "stdx": Label("@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx"), + "stdx": Label("@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx"), "ungrammar": Label("@vendor_ts__ungrammar-1.16.1//:ungrammar"), }, }, @@ -328,59 +328,59 @@ _NORMAL_DEPENDENCIES = { "anyhow": Label("@vendor_ts__anyhow-1.0.99//:anyhow"), "argfile": Label("@vendor_ts__argfile-0.2.1//:argfile"), "chalk-ir": Label("@vendor_ts__chalk-ir-0.104.0//:chalk_ir"), - "chrono": Label("@vendor_ts__chrono-0.4.41//:chrono"), - "clap": Label("@vendor_ts__clap-4.5.44//:clap"), + "chrono": Label("@vendor_ts__chrono-0.4.42//:chrono"), + "clap": Label("@vendor_ts__clap-4.5.47//:clap"), "dunce": Label("@vendor_ts__dunce-1.0.5//:dunce"), "figment": Label("@vendor_ts__figment-0.10.19//:figment"), "glob": Label("@vendor_ts__glob-0.3.3//:glob"), "itertools": Label("@vendor_ts__itertools-0.14.0//:itertools"), "mustache": Label("@vendor_ts__mustache-0.9.0//:mustache"), "num-traits": Label("@vendor_ts__num-traits-0.2.19//:num_traits"), - "ra_ap_base_db": Label("@vendor_ts__ra_ap_base_db-0.0.300//:ra_ap_base_db"), - "ra_ap_cfg": Label("@vendor_ts__ra_ap_cfg-0.0.300//:ra_ap_cfg"), - "ra_ap_hir": Label("@vendor_ts__ra_ap_hir-0.0.300//:ra_ap_hir"), - "ra_ap_hir_def": Label("@vendor_ts__ra_ap_hir_def-0.0.300//:ra_ap_hir_def"), - "ra_ap_hir_expand": Label("@vendor_ts__ra_ap_hir_expand-0.0.300//:ra_ap_hir_expand"), - "ra_ap_hir_ty": Label("@vendor_ts__ra_ap_hir_ty-0.0.300//:ra_ap_hir_ty"), - "ra_ap_ide_db": Label("@vendor_ts__ra_ap_ide_db-0.0.300//:ra_ap_ide_db"), - "ra_ap_intern": Label("@vendor_ts__ra_ap_intern-0.0.300//:ra_ap_intern"), - "ra_ap_load-cargo": Label("@vendor_ts__ra_ap_load-cargo-0.0.300//:ra_ap_load_cargo"), - "ra_ap_parser": Label("@vendor_ts__ra_ap_parser-0.0.300//:ra_ap_parser"), - "ra_ap_paths": Label("@vendor_ts__ra_ap_paths-0.0.300//:ra_ap_paths"), - "ra_ap_project_model": Label("@vendor_ts__ra_ap_project_model-0.0.300//:ra_ap_project_model"), - "ra_ap_span": Label("@vendor_ts__ra_ap_span-0.0.300//:ra_ap_span"), - "ra_ap_syntax": Label("@vendor_ts__ra_ap_syntax-0.0.300//:ra_ap_syntax"), - "ra_ap_vfs": Label("@vendor_ts__ra_ap_vfs-0.0.300//:ra_ap_vfs"), + "ra_ap_base_db": Label("@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db"), + "ra_ap_cfg": Label("@vendor_ts__ra_ap_cfg-0.0.301//:ra_ap_cfg"), + "ra_ap_hir": Label("@vendor_ts__ra_ap_hir-0.0.301//:ra_ap_hir"), + "ra_ap_hir_def": Label("@vendor_ts__ra_ap_hir_def-0.0.301//:ra_ap_hir_def"), + "ra_ap_hir_expand": Label("@vendor_ts__ra_ap_hir_expand-0.0.301//:ra_ap_hir_expand"), + "ra_ap_hir_ty": Label("@vendor_ts__ra_ap_hir_ty-0.0.301//:ra_ap_hir_ty"), + "ra_ap_ide_db": Label("@vendor_ts__ra_ap_ide_db-0.0.301//:ra_ap_ide_db"), + "ra_ap_intern": Label("@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern"), + "ra_ap_load-cargo": Label("@vendor_ts__ra_ap_load-cargo-0.0.301//:ra_ap_load_cargo"), + "ra_ap_parser": Label("@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser"), + "ra_ap_paths": Label("@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths"), + "ra_ap_project_model": Label("@vendor_ts__ra_ap_project_model-0.0.301//:ra_ap_project_model"), + "ra_ap_span": Label("@vendor_ts__ra_ap_span-0.0.301//:ra_ap_span"), + "ra_ap_syntax": Label("@vendor_ts__ra_ap_syntax-0.0.301//:ra_ap_syntax"), + "ra_ap_vfs": Label("@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs"), "serde": Label("@vendor_ts__serde-1.0.219//:serde"), - "serde_json": Label("@vendor_ts__serde_json-1.0.142//:serde_json"), + "serde_json": Label("@vendor_ts__serde_json-1.0.143//:serde_json"), "serde_with": Label("@vendor_ts__serde_with-3.14.0//:serde_with"), "toml": Label("@vendor_ts__toml-0.9.5//:toml"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), "tracing-flame": Label("@vendor_ts__tracing-flame-0.2.0//:tracing_flame"), - "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber"), + "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber"), "triomphe": Label("@vendor_ts__triomphe-0.1.14//:triomphe"), }, }, "rust/extractor/macros": { _COMMON_CONDITION: { "quote": Label("@vendor_ts__quote-1.0.40//:quote"), - "syn": Label("@vendor_ts__syn-2.0.104//:syn"), + "syn": Label("@vendor_ts__syn-2.0.106//:syn"), }, }, "shared/tree-sitter-extractor": { _COMMON_CONDITION: { - "chrono": Label("@vendor_ts__chrono-0.4.41//:chrono"), + "chrono": Label("@vendor_ts__chrono-0.4.42//:chrono"), "encoding": Label("@vendor_ts__encoding-0.2.33//:encoding"), "flate2": Label("@vendor_ts__flate2-1.1.0//:flate2"), "globset": Label("@vendor_ts__globset-0.4.15//:globset"), "lazy_static": Label("@vendor_ts__lazy_static-1.5.0//:lazy_static"), "num_cpus": Label("@vendor_ts__num_cpus-1.17.0//:num_cpus"), - "rayon": Label("@vendor_ts__rayon-1.10.0//:rayon"), - "regex": Label("@vendor_ts__regex-1.11.1//:regex"), + "rayon": Label("@vendor_ts__rayon-1.11.0//:rayon"), + "regex": Label("@vendor_ts__regex-1.11.2//:regex"), "serde": Label("@vendor_ts__serde-1.0.219//:serde"), - "serde_json": Label("@vendor_ts__serde_json-1.0.142//:serde_json"), + "serde_json": Label("@vendor_ts__serde_json-1.0.143//:serde_json"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), - "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber"), + "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber"), "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), "zstd": Label("@vendor_ts__zstd-0.13.3//:zstd"), }, @@ -394,7 +394,7 @@ _NORMAL_ALIASES = { }, "rust/ast-generator": { _COMMON_CONDITION: { - Label("@vendor_ts__ra_ap_stdx-0.0.300//:ra_ap_stdx"): "stdx", + Label("@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx"): "stdx", }, }, "rust/autobuild": { @@ -624,7 +624,6 @@ _CONDITIONS = { "cfg(windows)": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc"], "i686-apple-darwin": ["@rules_rust//rust/platform:i686-apple-darwin"], "i686-linux-android": ["@rules_rust//rust/platform:i686-linux-android"], - "i686-pc-windows-gnu": [], "i686-pc-windows-gnullvm": [], "i686-pc-windows-msvc": ["@rules_rust//rust/platform:i686-pc-windows-msvc"], "i686-unknown-freebsd": ["@rules_rust//rust/platform:i686-unknown-freebsd"], @@ -640,7 +639,6 @@ _CONDITIONS = { "x86_64-apple-darwin": ["@rules_rust//rust/platform:x86_64-apple-darwin"], "x86_64-apple-ios": ["@rules_rust//rust/platform:x86_64-apple-ios"], "x86_64-linux-android": ["@rules_rust//rust/platform:x86_64-linux-android"], - "x86_64-pc-windows-gnu": [], "x86_64-pc-windows-gnullvm": [], "x86_64-pc-windows-msvc": ["@rules_rust//rust/platform:x86_64-pc-windows-msvc"], "x86_64-unknown-freebsd": ["@rules_rust//rust/platform:x86_64-unknown-freebsd"], @@ -689,16 +687,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.allocator-api2-0.2.21.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__android-tzdata-0.1.1", - sha256 = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0", - type = "tar.gz", - urls = ["https://static.crates.io/crates/android-tzdata/0.1.1/download"], - strip_prefix = "android-tzdata-0.1.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.android-tzdata-0.1.1.bazel"), - ) - maybe( http_archive, name = "vendor_ts__android_system_properties-0.1.5", @@ -711,12 +699,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__anstream-0.6.19", - sha256 = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933", + name = "vendor_ts__anstream-0.6.20", + sha256 = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192", type = "tar.gz", - urls = ["https://static.crates.io/crates/anstream/0.6.19/download"], - strip_prefix = "anstream-0.6.19", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anstream-0.6.19.bazel"), + urls = ["https://static.crates.io/crates/anstream/0.6.20/download"], + strip_prefix = "anstream-0.6.20", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anstream-0.6.20.bazel"), ) maybe( @@ -741,12 +729,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__anstyle-query-1.1.3", - sha256 = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9", + name = "vendor_ts__anstyle-query-1.1.4", + sha256 = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2", type = "tar.gz", - urls = ["https://static.crates.io/crates/anstyle-query/1.1.3/download"], - strip_prefix = "anstyle-query-1.1.3", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anstyle-query-1.1.3.bazel"), + urls = ["https://static.crates.io/crates/anstyle-query/1.1.4/download"], + strip_prefix = "anstyle-query-1.1.4", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anstyle-query-1.1.4.bazel"), ) maybe( @@ -831,12 +819,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__bitflags-2.9.1", - sha256 = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967", + name = "vendor_ts__bitflags-2.9.4", + sha256 = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394", type = "tar.gz", - urls = ["https://static.crates.io/crates/bitflags/2.9.1/download"], - strip_prefix = "bitflags-2.9.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.bitflags-2.9.1.bazel"), + urls = ["https://static.crates.io/crates/bitflags/2.9.4/download"], + strip_prefix = "bitflags-2.9.4", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.bitflags-2.9.4.bazel"), ) maybe( @@ -851,12 +839,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__boxcar-0.2.13", - sha256 = "26c4925bc979b677330a8c7fe7a8c94af2dbb4a2d37b4a20a80d884400f46baa", + name = "vendor_ts__boxcar-0.2.14", + sha256 = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e", type = "tar.gz", - urls = ["https://static.crates.io/crates/boxcar/0.2.13/download"], - strip_prefix = "boxcar-0.2.13", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.boxcar-0.2.13.bazel"), + urls = ["https://static.crates.io/crates/boxcar/0.2.14/download"], + strip_prefix = "boxcar-0.2.14", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.boxcar-0.2.14.bazel"), ) maybe( @@ -891,12 +879,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__camino-1.1.10", - sha256 = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab", + name = "vendor_ts__camino-1.1.12", + sha256 = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5", type = "tar.gz", - urls = ["https://static.crates.io/crates/camino/1.1.10/download"], - strip_prefix = "camino-1.1.10", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.camino-1.1.10.bazel"), + urls = ["https://static.crates.io/crates/camino/1.1.12/download"], + strip_prefix = "camino-1.1.12", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.camino-1.1.12.bazel"), ) maybe( @@ -931,22 +919,22 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__cc-1.2.29", - sha256 = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362", + name = "vendor_ts__cc-1.2.36", + sha256 = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54", type = "tar.gz", - urls = ["https://static.crates.io/crates/cc/1.2.29/download"], - strip_prefix = "cc-1.2.29", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cc-1.2.29.bazel"), + urls = ["https://static.crates.io/crates/cc/1.2.36/download"], + strip_prefix = "cc-1.2.36", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cc-1.2.36.bazel"), ) maybe( http_archive, - name = "vendor_ts__cfg-if-1.0.1", - sha256 = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268", + name = "vendor_ts__cfg-if-1.0.3", + sha256 = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9", type = "tar.gz", - urls = ["https://static.crates.io/crates/cfg-if/1.0.1/download"], - strip_prefix = "cfg-if-1.0.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cfg-if-1.0.1.bazel"), + urls = ["https://static.crates.io/crates/cfg-if/1.0.3/download"], + strip_prefix = "cfg-if-1.0.3", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cfg-if-1.0.3.bazel"), ) maybe( @@ -1021,42 +1009,42 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__chrono-0.4.41", - sha256 = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d", + name = "vendor_ts__chrono-0.4.42", + sha256 = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2", type = "tar.gz", - urls = ["https://static.crates.io/crates/chrono/0.4.41/download"], - strip_prefix = "chrono-0.4.41", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chrono-0.4.41.bazel"), + urls = ["https://static.crates.io/crates/chrono/0.4.42/download"], + strip_prefix = "chrono-0.4.42", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chrono-0.4.42.bazel"), ) maybe( http_archive, - name = "vendor_ts__clap-4.5.44", - sha256 = "1c1f056bae57e3e54c3375c41ff79619ddd13460a17d7438712bd0d83fda4ff8", + name = "vendor_ts__clap-4.5.47", + sha256 = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931", type = "tar.gz", - urls = ["https://static.crates.io/crates/clap/4.5.44/download"], - strip_prefix = "clap-4.5.44", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap-4.5.44.bazel"), + urls = ["https://static.crates.io/crates/clap/4.5.47/download"], + strip_prefix = "clap-4.5.47", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap-4.5.47.bazel"), ) maybe( http_archive, - name = "vendor_ts__clap_builder-4.5.44", - sha256 = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8", + name = "vendor_ts__clap_builder-4.5.47", + sha256 = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6", type = "tar.gz", - urls = ["https://static.crates.io/crates/clap_builder/4.5.44/download"], - strip_prefix = "clap_builder-4.5.44", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_builder-4.5.44.bazel"), + urls = ["https://static.crates.io/crates/clap_builder/4.5.47/download"], + strip_prefix = "clap_builder-4.5.47", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_builder-4.5.47.bazel"), ) maybe( http_archive, - name = "vendor_ts__clap_derive-4.5.41", - sha256 = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491", + name = "vendor_ts__clap_derive-4.5.47", + sha256 = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c", type = "tar.gz", - urls = ["https://static.crates.io/crates/clap_derive/4.5.41/download"], - strip_prefix = "clap_derive-4.5.41", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_derive-4.5.41.bazel"), + urls = ["https://static.crates.io/crates/clap_derive/4.5.47/download"], + strip_prefix = "clap_derive-4.5.47", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_derive-4.5.47.bazel"), ) maybe( @@ -1381,12 +1369,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__filetime-0.2.25", - sha256 = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586", + name = "vendor_ts__find-msvc-tools-0.1.1", + sha256 = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d", type = "tar.gz", - urls = ["https://static.crates.io/crates/filetime/0.2.25/download"], - strip_prefix = "filetime-0.2.25", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.filetime-0.2.25.bazel"), + urls = ["https://static.crates.io/crates/find-msvc-tools/0.1.1/download"], + strip_prefix = "find-msvc-tools-0.1.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.find-msvc-tools-0.1.1.bazel"), ) maybe( @@ -1431,12 +1419,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__form_urlencoded-1.2.1", - sha256 = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456", + name = "vendor_ts__form_urlencoded-1.2.2", + sha256 = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf", type = "tar.gz", - urls = ["https://static.crates.io/crates/form_urlencoded/1.2.1/download"], - strip_prefix = "form_urlencoded-1.2.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.form_urlencoded-1.2.1.bazel"), + urls = ["https://static.crates.io/crates/form_urlencoded/1.2.2/download"], + strip_prefix = "form_urlencoded-1.2.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.form_urlencoded-1.2.2.bazel"), ) maybe( @@ -1521,12 +1509,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__hashbrown-0.15.4", - sha256 = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5", + name = "vendor_ts__hashbrown-0.15.5", + sha256 = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1", type = "tar.gz", - urls = ["https://static.crates.io/crates/hashbrown/0.15.4/download"], - strip_prefix = "hashbrown-0.15.4", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.hashbrown-0.15.4.bazel"), + urls = ["https://static.crates.io/crates/hashbrown/0.15.5/download"], + strip_prefix = "hashbrown-0.15.5", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.hashbrown-0.15.5.bazel"), ) maybe( @@ -1681,12 +1669,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__idna-1.0.3", - sha256 = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e", + name = "vendor_ts__idna-1.1.0", + sha256 = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de", type = "tar.gz", - urls = ["https://static.crates.io/crates/idna/1.0.3/download"], - strip_prefix = "idna-1.0.3", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.idna-1.0.3.bazel"), + urls = ["https://static.crates.io/crates/idna/1.1.0/download"], + strip_prefix = "idna-1.1.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.idna-1.1.0.bazel"), ) maybe( @@ -1711,12 +1699,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__indexmap-2.10.0", - sha256 = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661", + name = "vendor_ts__indexmap-2.11.1", + sha256 = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921", type = "tar.gz", - urls = ["https://static.crates.io/crates/indexmap/2.10.0/download"], - strip_prefix = "indexmap-2.10.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.indexmap-2.10.0.bazel"), + urls = ["https://static.crates.io/crates/indexmap/2.11.1/download"], + strip_prefix = "indexmap-2.11.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.indexmap-2.11.1.bazel"), ) maybe( @@ -1801,12 +1789,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__jobserver-0.1.32", - sha256 = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0", + name = "vendor_ts__jobserver-0.1.34", + sha256 = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33", type = "tar.gz", - urls = ["https://static.crates.io/crates/jobserver/0.1.32/download"], - strip_prefix = "jobserver-0.1.32", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.jobserver-0.1.32.bazel"), + urls = ["https://static.crates.io/crates/jobserver/0.1.34/download"], + strip_prefix = "jobserver-0.1.34", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.jobserver-0.1.34.bazel"), ) maybe( @@ -1871,22 +1859,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__libc-0.2.174", - sha256 = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776", - type = "tar.gz", - urls = ["https://static.crates.io/crates/libc/0.2.174/download"], - strip_prefix = "libc-0.2.174", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.libc-0.2.174.bazel"), - ) - - maybe( - http_archive, - name = "vendor_ts__libredox-0.1.4", - sha256 = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638", + name = "vendor_ts__libc-0.2.175", + sha256 = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543", type = "tar.gz", - urls = ["https://static.crates.io/crates/libredox/0.1.4/download"], - strip_prefix = "libredox-0.1.4", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.libredox-0.1.4.bazel"), + urls = ["https://static.crates.io/crates/libc/0.2.175/download"], + strip_prefix = "libc-0.2.175", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.libc-0.2.175.bazel"), ) maybe( @@ -1931,22 +1909,22 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__log-0.4.27", - sha256 = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94", + name = "vendor_ts__log-0.4.28", + sha256 = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432", type = "tar.gz", - urls = ["https://static.crates.io/crates/log/0.4.27/download"], - strip_prefix = "log-0.4.27", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.log-0.4.27.bazel"), + urls = ["https://static.crates.io/crates/log/0.4.28/download"], + strip_prefix = "log-0.4.28", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.log-0.4.28.bazel"), ) maybe( http_archive, - name = "vendor_ts__matchers-0.1.0", - sha256 = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558", + name = "vendor_ts__matchers-0.2.0", + sha256 = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9", type = "tar.gz", - urls = ["https://static.crates.io/crates/matchers/0.1.0/download"], - strip_prefix = "matchers-0.1.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.matchers-0.1.0.bazel"), + urls = ["https://static.crates.io/crates/matchers/0.2.0/download"], + strip_prefix = "matchers-0.2.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.matchers-0.2.0.bazel"), ) maybe( @@ -2021,12 +1999,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__notify-8.0.0", - sha256 = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943", + name = "vendor_ts__notify-8.1.0", + sha256 = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97", type = "tar.gz", - urls = ["https://static.crates.io/crates/notify/8.0.0/download"], - strip_prefix = "notify-8.0.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.notify-8.0.0.bazel"), + urls = ["https://static.crates.io/crates/notify/8.1.0/download"], + strip_prefix = "notify-8.1.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.notify-8.1.0.bazel"), ) maybe( @@ -2041,12 +2019,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__nu-ansi-term-0.46.0", - sha256 = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84", + name = "vendor_ts__nu-ansi-term-0.50.1", + sha256 = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399", type = "tar.gz", - urls = ["https://static.crates.io/crates/nu-ansi-term/0.46.0/download"], - strip_prefix = "nu-ansi-term-0.46.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.nu-ansi-term-0.46.0.bazel"), + urls = ["https://static.crates.io/crates/nu-ansi-term/0.50.1/download"], + strip_prefix = "nu-ansi-term-0.50.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.nu-ansi-term-0.50.1.bazel"), ) maybe( @@ -2129,16 +2107,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.os_str_bytes-7.0.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__overload-0.1.1", - sha256 = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39", - type = "tar.gz", - urls = ["https://static.crates.io/crates/overload/0.1.1/download"], - strip_prefix = "overload-0.1.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.overload-0.1.1.bazel"), - ) - maybe( http_archive, name = "vendor_ts__papaya-0.2.3", @@ -2191,12 +2159,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__percent-encoding-2.3.1", - sha256 = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e", + name = "vendor_ts__percent-encoding-2.3.2", + sha256 = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220", type = "tar.gz", - urls = ["https://static.crates.io/crates/percent-encoding/2.3.1/download"], - strip_prefix = "percent-encoding-2.3.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.percent-encoding-2.3.1.bazel"), + urls = ["https://static.crates.io/crates/percent-encoding/2.3.2/download"], + strip_prefix = "percent-encoding-2.3.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.percent-encoding-2.3.2.bazel"), ) maybe( @@ -2261,12 +2229,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__potential_utf-0.1.2", - sha256 = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585", + name = "vendor_ts__potential_utf-0.1.3", + sha256 = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a", type = "tar.gz", - urls = ["https://static.crates.io/crates/potential_utf/0.1.2/download"], - strip_prefix = "potential_utf-0.1.2", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.potential_utf-0.1.2.bazel"), + urls = ["https://static.crates.io/crates/potential_utf/0.1.3/download"], + strip_prefix = "potential_utf-0.1.3", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.potential_utf-0.1.3.bazel"), ) maybe( @@ -2291,12 +2259,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__proc-macro2-1.0.97", - sha256 = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1", + name = "vendor_ts__proc-macro2-1.0.101", + sha256 = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de", type = "tar.gz", - urls = ["https://static.crates.io/crates/proc-macro2/1.0.97/download"], - strip_prefix = "proc-macro2-1.0.97", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.proc-macro2-1.0.97.bazel"), + urls = ["https://static.crates.io/crates/proc-macro2/1.0.101/download"], + strip_prefix = "proc-macro2-1.0.101", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.proc-macro2-1.0.101.bazel"), ) maybe( @@ -2411,252 +2379,252 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__ra_ap_base_db-0.0.300", - sha256 = "47cac371778785196064f1a347fbbac0aafb1053786f17378bb138be59e57fc2", + name = "vendor_ts__ra_ap_base_db-0.0.301", + sha256 = "e876bb2c3e52a8d4e6684526a2d4e81f9d028b939ee4dc5dc775fe10deb44d59", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_base_db/0.0.300/download"], - strip_prefix = "ra_ap_base_db-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_base_db-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_base_db/0.0.301/download"], + strip_prefix = "ra_ap_base_db-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_base_db-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_cfg-0.0.300", - sha256 = "6789ed14467e6625bef45b29555844d0168d8af1bea9edb0f1d44f0a9b69f398", + name = "vendor_ts__ra_ap_cfg-0.0.301", + sha256 = "3a0b56eb4536ce6d2431932c4d337aeeaf7bb22c9249b38cbe80677b5881228f", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_cfg/0.0.300/download"], - strip_prefix = "ra_ap_cfg-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_cfg-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_cfg/0.0.301/download"], + strip_prefix = "ra_ap_cfg-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_cfg-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_edition-0.0.300", - sha256 = "637b74c692dc9d9b44394f8c0f91c063e1b6223c6e54f4ee89c943db2f2ee26e", + name = "vendor_ts__ra_ap_edition-0.0.301", + sha256 = "1bdc6cbe42c63ca78611bae82bfc8db24864f33dccc813697c5fde43a0907285", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_edition/0.0.300/download"], - strip_prefix = "ra_ap_edition-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_edition-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_edition/0.0.301/download"], + strip_prefix = "ra_ap_edition-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_edition-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir-0.0.300", - sha256 = "a94c69a3830f0b6fbc36c1d098fcc9430f63c8d47ee6f93e3d6810c3bf440296", + name = "vendor_ts__ra_ap_hir-0.0.301", + sha256 = "ebffdc134eccabc17209d7760cfff7fd12ed18ab6e21188c5e084b97aa38504c", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir/0.0.300/download"], - strip_prefix = "ra_ap_hir-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir/0.0.301/download"], + strip_prefix = "ra_ap_hir-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir_def-0.0.300", - sha256 = "7d94fcf7743db2f4f7e2c2911563847eb8efe2b7fb9fa430c107f0ac05962254", + name = "vendor_ts__ra_ap_hir_def-0.0.301", + sha256 = "81d2337ef59550392d42aa997aa1105a3d6d1c2b3a583c777786bc4a0a074fd5", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir_def/0.0.300/download"], - strip_prefix = "ra_ap_hir_def-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_def-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir_def/0.0.301/download"], + strip_prefix = "ra_ap_hir_def-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_def-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir_expand-0.0.300", - sha256 = "67ea3f6a0ba0c1e8b63f4a41bc596c07aeb2db2f99b67fa077820cfb5fce58bd", + name = "vendor_ts__ra_ap_hir_expand-0.0.301", + sha256 = "97cf8ececb2743a819d8299a408e17f164dd1a1004d65936b3d5493b55330326", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir_expand/0.0.300/download"], - strip_prefix = "ra_ap_hir_expand-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_expand-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir_expand/0.0.301/download"], + strip_prefix = "ra_ap_hir_expand-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_expand-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir_ty-0.0.300", - sha256 = "eccf6c291a88892e59e7591e081da8b9158f8c0b1ed9cb9b73d02d29a0d3d6d9", + name = "vendor_ts__ra_ap_hir_ty-0.0.301", + sha256 = "bc004e1099ba766a61500c27d34eb5cd336430d0a89a9620315a90d7a202a73a", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir_ty/0.0.300/download"], - strip_prefix = "ra_ap_hir_ty-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_ty-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir_ty/0.0.301/download"], + strip_prefix = "ra_ap_hir_ty-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_ty-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_ide_db-0.0.300", - sha256 = "0bbbc97cc9837f91100711b65fb0d8ce9d7ed8da0dc418e08678d973d53da6a3", + name = "vendor_ts__ra_ap_ide_db-0.0.301", + sha256 = "d2acb572d6dbeb1c96d0339890ba91298b8f5f0ab22648da4ee2b4ab77dbc3fe", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_ide_db/0.0.300/download"], - strip_prefix = "ra_ap_ide_db-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_ide_db-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_ide_db/0.0.301/download"], + strip_prefix = "ra_ap_ide_db-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_ide_db-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_intern-0.0.300", - sha256 = "10f4785a674a41f9f52414fb7f19ab9a1d6886cad572e68721a883b0b85c256b", + name = "vendor_ts__ra_ap_intern-0.0.301", + sha256 = "14586c2c4781b69fdd0c505972d9bff8c162a8740537a3ee506faff686d9a20d", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_intern/0.0.300/download"], - strip_prefix = "ra_ap_intern-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_intern-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_intern/0.0.301/download"], + strip_prefix = "ra_ap_intern-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_intern-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_load-cargo-0.0.300", - sha256 = "f3be9990782fd2c2d90b67e2e0b4a86e7412ec8a0719950d9a68292924e85691", + name = "vendor_ts__ra_ap_load-cargo-0.0.301", + sha256 = "50ce5546b3e3414507ab4d12348d0a28748062e33a1448895c68466d0b015503", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_load-cargo/0.0.300/download"], - strip_prefix = "ra_ap_load-cargo-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_load-cargo-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_load-cargo/0.0.301/download"], + strip_prefix = "ra_ap_load-cargo-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_load-cargo-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_mbe-0.0.300", - sha256 = "5b713f4d927f9d86391f66237019b8e5dbcad4ddbbe37c91c2e21adca258b9aa", + name = "vendor_ts__ra_ap_mbe-0.0.301", + sha256 = "67333c6405797cb64aafb994b9a179157b30beeda2352e203e800be2b184a22d", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_mbe/0.0.300/download"], - strip_prefix = "ra_ap_mbe-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_mbe-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_mbe/0.0.301/download"], + strip_prefix = "ra_ap_mbe-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_mbe-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_parser-0.0.300", - sha256 = "0d3fb8a5891c1c1d6fba5e58caa86b88f831990c878e361c54c1c1ff44ca8401", + name = "vendor_ts__ra_ap_parser-0.0.301", + sha256 = "3a3b92b8b147c0826b83e70ad44e3c98e94201fc93e1f09396c43b4d7958c22a", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_parser/0.0.300/download"], - strip_prefix = "ra_ap_parser-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_parser-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_parser/0.0.301/download"], + strip_prefix = "ra_ap_parser-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_parser-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_paths-0.0.300", - sha256 = "9ccd5cfd0dae89ab2c70c4e5aa646f64bb8b5591622477342863c23a5f32dabc", + name = "vendor_ts__ra_ap_paths-0.0.301", + sha256 = "d4991f3d57fac0def7822bebfeb159c8d7b58c824bf82044b765c54f2c0971e2", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_paths/0.0.300/download"], - strip_prefix = "ra_ap_paths-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_paths-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_paths/0.0.301/download"], + strip_prefix = "ra_ap_paths-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_paths-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_proc_macro_api-0.0.300", - sha256 = "dae43c707bfb78f1b841ffb3731cc7876550463306c3b3986c20abd31033e7a2", + name = "vendor_ts__ra_ap_proc_macro_api-0.0.301", + sha256 = "45db9e2df587d56f0738afa89fb2c100ff7c1e9cbe49e07f6a8b62342832211b", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_proc_macro_api/0.0.300/download"], - strip_prefix = "ra_ap_proc_macro_api-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_proc_macro_api-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_proc_macro_api/0.0.301/download"], + strip_prefix = "ra_ap_proc_macro_api-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_proc_macro_api-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_profile-0.0.300", - sha256 = "95a7b93ca94cf0821e8bcac6bf8464cc94d7b3cbe63ffb74946a58ad03991fae", + name = "vendor_ts__ra_ap_profile-0.0.301", + sha256 = "19981637b8ee4160e228c815a7fef3944b5c0555d6af41a931be92d68978bc6c", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_profile/0.0.300/download"], - strip_prefix = "ra_ap_profile-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_profile-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_profile/0.0.301/download"], + strip_prefix = "ra_ap_profile-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_profile-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_project_model-0.0.300", - sha256 = "0751b9433a0dd49c6ae58c9572faf9557d2b53818370d72112b3adeaae5eabc4", + name = "vendor_ts__ra_ap_project_model-0.0.301", + sha256 = "5bda0769fd6ca949fdd5917acb68ddc2c143745614ddd94ef38b376838611cf8", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_project_model/0.0.300/download"], - strip_prefix = "ra_ap_project_model-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_project_model-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_project_model/0.0.301/download"], + strip_prefix = "ra_ap_project_model-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_project_model-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_query-group-macro-0.0.300", - sha256 = "5a82732eb8f5dc592d1d8d9bee23c1d66532e39293f02e23c7a546b60b35072b", + name = "vendor_ts__ra_ap_query-group-macro-0.0.301", + sha256 = "5f182a4b05f004eabaa83250a5de7ea3a13a92c88f3cbe98bfa1880cd9fbce0a", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_query-group-macro/0.0.300/download"], - strip_prefix = "ra_ap_query-group-macro-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_query-group-macro-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_query-group-macro/0.0.301/download"], + strip_prefix = "ra_ap_query-group-macro-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_query-group-macro-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_span-0.0.300", - sha256 = "c498ddf2d71705dcef9fb142269c0027c959a5eb17c435eea5466af7c3b9c47c", + name = "vendor_ts__ra_ap_span-0.0.301", + sha256 = "ca6f9fa2de07f5cccf431674b90e82c1fe1ea2339db3b3869eec44d135de09a4", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_span/0.0.300/download"], - strip_prefix = "ra_ap_span-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_span-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_span/0.0.301/download"], + strip_prefix = "ra_ap_span-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_span-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_stdx-0.0.300", - sha256 = "26ade567b0d692c7efd4ceb921cdbe182beca0b5af9a5cf05c07cf0e14db512a", + name = "vendor_ts__ra_ap_stdx-0.0.301", + sha256 = "aa770adb32896fcba934b464ac3bd179163ba2b0766e275eed5b4e262e08492b", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_stdx/0.0.300/download"], - strip_prefix = "ra_ap_stdx-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_stdx-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_stdx/0.0.301/download"], + strip_prefix = "ra_ap_stdx-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_stdx-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_syntax-0.0.300", - sha256 = "dba62d25b0296eb095d9db77e56d096417a89db4f4de1956add0d472ebcaf922", + name = "vendor_ts__ra_ap_syntax-0.0.301", + sha256 = "6e9e1393281ad5c635239d353ed3cfbf28c8d0af03d0c61a3b24b31d1143b17f", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_syntax/0.0.300/download"], - strip_prefix = "ra_ap_syntax-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_syntax/0.0.301/download"], + strip_prefix = "ra_ap_syntax-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_syntax-bridge-0.0.300", - sha256 = "664466f2e824e285b671366f81128aa4a91b501fedbf7956a6bfb1f13d8b0b39", + name = "vendor_ts__ra_ap_syntax-bridge-0.0.301", + sha256 = "684e6ff1008ee5340335888f0453d94bb38950f110059a51f1818c7f6a56a807", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_syntax-bridge/0.0.300/download"], - strip_prefix = "ra_ap_syntax-bridge-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-bridge-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_syntax-bridge/0.0.301/download"], + strip_prefix = "ra_ap_syntax-bridge-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-bridge-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_toolchain-0.0.300", - sha256 = "2ef82cfc5eb8f9d4a3be9876ce019b78fbfdb8ff4f7e4dee9e384d65122096ab", + name = "vendor_ts__ra_ap_toolchain-0.0.301", + sha256 = "61969c5f72af03a9837e077c2d939d87a5c863623725c461777c352664a3bb03", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_toolchain/0.0.300/download"], - strip_prefix = "ra_ap_toolchain-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_toolchain-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_toolchain/0.0.301/download"], + strip_prefix = "ra_ap_toolchain-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_toolchain-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_tt-0.0.300", - sha256 = "cbc858f5208f0d00f8638d14ab5ffab5d1bc79ad7fe1db5c5e0d478b9a02155c", + name = "vendor_ts__ra_ap_tt-0.0.301", + sha256 = "fb87c7b35572c18a580ea811e970b94875fad5ac7cfa8644266a59081044f959", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_tt/0.0.300/download"], - strip_prefix = "ra_ap_tt-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_tt-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_tt/0.0.301/download"], + strip_prefix = "ra_ap_tt-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_tt-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_vfs-0.0.300", - sha256 = "e065b27829f5281d2ffc41de72551a0e4c4f49a9989ba7721676f414100c8af2", + name = "vendor_ts__ra_ap_vfs-0.0.301", + sha256 = "6c174d6b9b7a7f54687df7e00c3e75ed6f082a7943a9afb1d54f33c0c12773de", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_vfs/0.0.300/download"], - strip_prefix = "ra_ap_vfs-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_vfs/0.0.301/download"], + strip_prefix = "ra_ap_vfs-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-0.0.301.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_vfs-notify-0.0.300", - sha256 = "5a3c795e86c9b5fcdbb99145e401a0d6348ed471ac96f1b7de151c0abe07a5af", + name = "vendor_ts__ra_ap_vfs-notify-0.0.301", + sha256 = "04f6fce8d47c7ce9b8f2cd0e5a55f8fc4878d6043e61f46cde4391d3a5c6086f", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_vfs-notify/0.0.300/download"], - strip_prefix = "ra_ap_vfs-notify-0.0.300", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-notify-0.0.300.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_vfs-notify/0.0.301/download"], + strip_prefix = "ra_ap_vfs-notify-0.0.301", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-notify-0.0.301.bazel"), ) maybe( @@ -2691,22 +2659,22 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__rayon-1.10.0", - sha256 = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa", + name = "vendor_ts__rayon-1.11.0", + sha256 = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f", type = "tar.gz", - urls = ["https://static.crates.io/crates/rayon/1.10.0/download"], - strip_prefix = "rayon-1.10.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rayon-1.10.0.bazel"), + urls = ["https://static.crates.io/crates/rayon/1.11.0/download"], + strip_prefix = "rayon-1.11.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rayon-1.11.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__rayon-core-1.12.1", - sha256 = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2", + name = "vendor_ts__rayon-core-1.13.0", + sha256 = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91", type = "tar.gz", - urls = ["https://static.crates.io/crates/rayon-core/1.12.1/download"], - strip_prefix = "rayon-core-1.12.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rayon-core-1.12.1.bazel"), + urls = ["https://static.crates.io/crates/rayon-core/1.13.0/download"], + strip_prefix = "rayon-core-1.13.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rayon-core-1.13.0.bazel"), ) maybe( @@ -2741,52 +2709,32 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__regex-1.11.1", - sha256 = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191", + name = "vendor_ts__regex-1.11.2", + sha256 = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912", type = "tar.gz", - urls = ["https://static.crates.io/crates/regex/1.11.1/download"], - strip_prefix = "regex-1.11.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-1.11.1.bazel"), + urls = ["https://static.crates.io/crates/regex/1.11.2/download"], + strip_prefix = "regex-1.11.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-1.11.2.bazel"), ) maybe( http_archive, - name = "vendor_ts__regex-automata-0.1.10", - sha256 = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132", + name = "vendor_ts__regex-automata-0.4.10", + sha256 = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6", type = "tar.gz", - urls = ["https://static.crates.io/crates/regex-automata/0.1.10/download"], - strip_prefix = "regex-automata-0.1.10", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-automata-0.1.10.bazel"), + urls = ["https://static.crates.io/crates/regex-automata/0.4.10/download"], + strip_prefix = "regex-automata-0.4.10", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-automata-0.4.10.bazel"), ) maybe( http_archive, - name = "vendor_ts__regex-automata-0.4.9", - sha256 = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908", + name = "vendor_ts__regex-syntax-0.8.6", + sha256 = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001", type = "tar.gz", - urls = ["https://static.crates.io/crates/regex-automata/0.4.9/download"], - strip_prefix = "regex-automata-0.4.9", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-automata-0.4.9.bazel"), - ) - - maybe( - http_archive, - name = "vendor_ts__regex-syntax-0.6.29", - sha256 = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1", - type = "tar.gz", - urls = ["https://static.crates.io/crates/regex-syntax/0.6.29/download"], - strip_prefix = "regex-syntax-0.6.29", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-syntax-0.6.29.bazel"), - ) - - maybe( - http_archive, - name = "vendor_ts__regex-syntax-0.8.5", - sha256 = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c", - type = "tar.gz", - urls = ["https://static.crates.io/crates/regex-syntax/0.8.5/download"], - strip_prefix = "regex-syntax-0.8.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-syntax-0.8.5.bazel"), + urls = ["https://static.crates.io/crates/regex-syntax/0.8.6/download"], + strip_prefix = "regex-syntax-0.8.6", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.regex-syntax-0.8.6.bazel"), ) maybe( @@ -2981,12 +2929,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__serde-untagged-0.1.7", - sha256 = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e", + name = "vendor_ts__serde-untagged-0.1.8", + sha256 = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3", type = "tar.gz", - urls = ["https://static.crates.io/crates/serde-untagged/0.1.7/download"], - strip_prefix = "serde-untagged-0.1.7", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde-untagged-0.1.7.bazel"), + urls = ["https://static.crates.io/crates/serde-untagged/0.1.8/download"], + strip_prefix = "serde-untagged-0.1.8", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde-untagged-0.1.8.bazel"), ) maybe( @@ -3011,12 +2959,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__serde_json-1.0.142", - sha256 = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7", + name = "vendor_ts__serde_json-1.0.143", + sha256 = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a", type = "tar.gz", - urls = ["https://static.crates.io/crates/serde_json/1.0.142/download"], - strip_prefix = "serde_json-1.0.142", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_json-1.0.142.bazel"), + urls = ["https://static.crates.io/crates/serde_json/1.0.143/download"], + strip_prefix = "serde_json-1.0.143", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_json-1.0.143.bazel"), ) maybe( @@ -3141,12 +3089,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__syn-2.0.104", - sha256 = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40", + name = "vendor_ts__syn-2.0.106", + sha256 = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6", type = "tar.gz", - urls = ["https://static.crates.io/crates/syn/2.0.104/download"], - strip_prefix = "syn-2.0.104", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.syn-2.0.104.bazel"), + urls = ["https://static.crates.io/crates/syn/2.0.106/download"], + strip_prefix = "syn-2.0.106", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.syn-2.0.106.bazel"), ) maybe( @@ -3191,32 +3139,32 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__thiserror-2.0.12", - sha256 = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708", + name = "vendor_ts__thiserror-2.0.16", + sha256 = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0", type = "tar.gz", - urls = ["https://static.crates.io/crates/thiserror/2.0.12/download"], - strip_prefix = "thiserror-2.0.12", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.thiserror-2.0.12.bazel"), + urls = ["https://static.crates.io/crates/thiserror/2.0.16/download"], + strip_prefix = "thiserror-2.0.16", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.thiserror-2.0.16.bazel"), ) maybe( http_archive, - name = "vendor_ts__thiserror-impl-2.0.12", - sha256 = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d", + name = "vendor_ts__thiserror-impl-2.0.16", + sha256 = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960", type = "tar.gz", - urls = ["https://static.crates.io/crates/thiserror-impl/2.0.12/download"], - strip_prefix = "thiserror-impl-2.0.12", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.thiserror-impl-2.0.12.bazel"), + urls = ["https://static.crates.io/crates/thiserror-impl/2.0.16/download"], + strip_prefix = "thiserror-impl-2.0.16", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.thiserror-impl-2.0.16.bazel"), ) maybe( http_archive, - name = "vendor_ts__thread_local-1.1.8", - sha256 = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c", + name = "vendor_ts__thread_local-1.1.9", + sha256 = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185", type = "tar.gz", - urls = ["https://static.crates.io/crates/thread_local/1.1.8/download"], - strip_prefix = "thread_local-1.1.8", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.thread_local-1.1.8.bazel"), + urls = ["https://static.crates.io/crates/thread_local/1.1.9/download"], + strip_prefix = "thread_local-1.1.9", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.thread_local-1.1.9.bazel"), ) maybe( @@ -3391,12 +3339,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__tracing-subscriber-0.3.19", - sha256 = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008", + name = "vendor_ts__tracing-subscriber-0.3.20", + sha256 = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5", type = "tar.gz", - urls = ["https://static.crates.io/crates/tracing-subscriber/0.3.19/download"], - strip_prefix = "tracing-subscriber-0.3.19", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tracing-subscriber-0.3.19.bazel"), + urls = ["https://static.crates.io/crates/tracing-subscriber/0.3.20/download"], + strip_prefix = "tracing-subscriber-0.3.20", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tracing-subscriber-0.3.20.bazel"), ) maybe( @@ -3411,12 +3359,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__tree-sitter-embedded-template-0.23.2", - sha256 = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af", + name = "vendor_ts__tree-sitter-embedded-template-0.25.0", + sha256 = "833d528e8fcb4e49ddb04d4d6450ddb8ac08f282a58fec94ce981c9c5dbf7e3a", type = "tar.gz", - urls = ["https://static.crates.io/crates/tree-sitter-embedded-template/0.23.2/download"], - strip_prefix = "tree-sitter-embedded-template-0.23.2", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-embedded-template-0.23.2.bazel"), + urls = ["https://static.crates.io/crates/tree-sitter-embedded-template/0.25.0/download"], + strip_prefix = "tree-sitter-embedded-template-0.25.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-embedded-template-0.25.0.bazel"), ) maybe( @@ -3431,12 +3379,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__tree-sitter-language-0.1.3", - sha256 = "c199356c799a8945965bb5f2c55b2ad9d9aa7c4b4f6e587fe9dea0bc715e5f9c", + name = "vendor_ts__tree-sitter-language-0.1.5", + sha256 = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8", type = "tar.gz", - urls = ["https://static.crates.io/crates/tree-sitter-language/0.1.3/download"], - strip_prefix = "tree-sitter-language-0.1.3", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-language-0.1.3.bazel"), + urls = ["https://static.crates.io/crates/tree-sitter-language/0.1.5/download"], + strip_prefix = "tree-sitter-language-0.1.5", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-language-0.1.5.bazel"), ) maybe( @@ -3511,12 +3459,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__unicode-ident-1.0.18", - sha256 = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512", + name = "vendor_ts__unicode-ident-1.0.19", + sha256 = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d", type = "tar.gz", - urls = ["https://static.crates.io/crates/unicode-ident/1.0.18/download"], - strip_prefix = "unicode-ident-1.0.18", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.unicode-ident-1.0.18.bazel"), + urls = ["https://static.crates.io/crates/unicode-ident/1.0.19/download"], + strip_prefix = "unicode-ident-1.0.19", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.unicode-ident-1.0.19.bazel"), ) maybe( @@ -3551,12 +3499,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__url-2.5.4", - sha256 = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60", + name = "vendor_ts__url-2.5.7", + sha256 = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b", type = "tar.gz", - urls = ["https://static.crates.io/crates/url/2.5.4/download"], - strip_prefix = "url-2.5.4", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.url-2.5.4.bazel"), + urls = ["https://static.crates.io/crates/url/2.5.7/download"], + strip_prefix = "url-2.5.7", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.url-2.5.7.bazel"), ) maybe( @@ -3679,26 +3627,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-shared-0.2.100.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__winapi-0.3.9", - sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419", - type = "tar.gz", - urls = ["https://static.crates.io/crates/winapi/0.3.9/download"], - strip_prefix = "winapi-0.3.9", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-0.3.9.bazel"), - ) - - maybe( - http_archive, - name = "vendor_ts__winapi-i686-pc-windows-gnu-0.4.0", - sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6", - type = "tar.gz", - urls = ["https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download"], - strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"), - ) - maybe( http_archive, name = "vendor_ts__winapi-util-0.1.9", @@ -3709,16 +3637,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-util-0.1.9.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__winapi-x86_64-pc-windows-gnu-0.4.0", - sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f", - type = "tar.gz", - urls = ["https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"], - strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows-core-0.61.2", @@ -3759,6 +3677,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-link-0.1.3.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__windows-link-0.2.0", + sha256 = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-link/0.2.0/download"], + strip_prefix = "windows-link-0.2.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-link-0.2.0.bazel"), + ) + maybe( http_archive, name = "vendor_ts__windows-result-0.3.4", @@ -4081,12 +4009,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__winnow-0.7.11", - sha256 = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd", + name = "vendor_ts__winnow-0.7.13", + sha256 = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf", type = "tar.gz", - urls = ["https://static.crates.io/crates/winnow/0.7.11/download"], - strip_prefix = "winnow-0.7.11", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winnow-0.7.11.bazel"), + urls = ["https://static.crates.io/crates/winnow/0.7.13/download"], + strip_prefix = "winnow-0.7.13", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winnow-0.7.13.bazel"), ) maybe( @@ -4191,12 +4119,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__zerovec-0.11.2", - sha256 = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428", + name = "vendor_ts__zerovec-0.11.4", + sha256 = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b", type = "tar.gz", - urls = ["https://static.crates.io/crates/zerovec/0.11.2/download"], - strip_prefix = "zerovec-0.11.2", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zerovec-0.11.2.bazel"), + urls = ["https://static.crates.io/crates/zerovec/0.11.4/download"], + strip_prefix = "zerovec-0.11.4", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zerovec-0.11.4.bazel"), ) maybe( @@ -4243,8 +4171,8 @@ def crate_repositories(): struct(repo = "vendor_ts__anyhow-1.0.99", is_dev_dep = False), struct(repo = "vendor_ts__argfile-0.2.1", is_dev_dep = False), struct(repo = "vendor_ts__chalk-ir-0.104.0", is_dev_dep = False), - struct(repo = "vendor_ts__chrono-0.4.41", is_dev_dep = False), - struct(repo = "vendor_ts__clap-4.5.44", is_dev_dep = False), + struct(repo = "vendor_ts__chrono-0.4.42", is_dev_dep = False), + struct(repo = "vendor_ts__clap-4.5.47", is_dev_dep = False), struct(repo = "vendor_ts__dunce-1.0.5", is_dev_dep = False), struct(repo = "vendor_ts__either-1.15.0", is_dev_dep = False), struct(repo = "vendor_ts__encoding-0.2.33", is_dev_dep = False), @@ -4257,36 +4185,36 @@ def crate_repositories(): struct(repo = "vendor_ts__mustache-0.9.0", is_dev_dep = False), struct(repo = "vendor_ts__num-traits-0.2.19", is_dev_dep = False), struct(repo = "vendor_ts__num_cpus-1.17.0", is_dev_dep = False), - struct(repo = "vendor_ts__proc-macro2-1.0.97", is_dev_dep = False), + struct(repo = "vendor_ts__proc-macro2-1.0.101", is_dev_dep = False), struct(repo = "vendor_ts__quote-1.0.40", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_base_db-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_cfg-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir_def-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir_expand-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir_ty-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_ide_db-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_intern-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_load-cargo-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_parser-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_paths-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_project_model-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_span-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_stdx-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_syntax-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_vfs-0.0.300", is_dev_dep = False), - struct(repo = "vendor_ts__rayon-1.10.0", is_dev_dep = False), - struct(repo = "vendor_ts__regex-1.11.1", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_base_db-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_cfg-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir_def-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir_expand-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir_ty-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_ide_db-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_intern-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_load-cargo-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_parser-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_paths-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_project_model-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_span-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_stdx-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_syntax-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_vfs-0.0.301", is_dev_dep = False), + struct(repo = "vendor_ts__rayon-1.11.0", is_dev_dep = False), + struct(repo = "vendor_ts__regex-1.11.2", is_dev_dep = False), struct(repo = "vendor_ts__serde-1.0.219", is_dev_dep = False), - struct(repo = "vendor_ts__serde_json-1.0.142", is_dev_dep = False), + struct(repo = "vendor_ts__serde_json-1.0.143", is_dev_dep = False), struct(repo = "vendor_ts__serde_with-3.14.0", is_dev_dep = False), - struct(repo = "vendor_ts__syn-2.0.104", is_dev_dep = False), + struct(repo = "vendor_ts__syn-2.0.106", is_dev_dep = False), struct(repo = "vendor_ts__toml-0.9.5", is_dev_dep = False), struct(repo = "vendor_ts__tracing-0.1.41", is_dev_dep = False), struct(repo = "vendor_ts__tracing-flame-0.2.0", is_dev_dep = False), - struct(repo = "vendor_ts__tracing-subscriber-0.3.19", is_dev_dep = False), + struct(repo = "vendor_ts__tracing-subscriber-0.3.20", is_dev_dep = False), struct(repo = "vendor_ts__tree-sitter-0.24.6", is_dev_dep = False), - struct(repo = "vendor_ts__tree-sitter-embedded-template-0.23.2", is_dev_dep = False), + struct(repo = "vendor_ts__tree-sitter-embedded-template-0.25.0", is_dev_dep = False), struct(repo = "vendor_ts__tree-sitter-ruby-0.23.1", is_dev_dep = False), struct(repo = "vendor_ts__triomphe-0.1.14", is_dev_dep = False), struct(repo = "vendor_ts__ungrammar-1.16.1", is_dev_dep = False), From 50b35711241219a13e7cf60b2dcd6be305ecc47f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 11 Sep 2025 11:32:09 +0200 Subject: [PATCH 047/219] Cargo: Revert changes to the Ruby extractors Cargo file --- Cargo.lock | 4 ++-- ruby/extractor/Cargo.toml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6dfeee4ac81a..4a2d0c3614fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2854,9 +2854,9 @@ dependencies = [ [[package]] name = "tree-sitter-embedded-template" -version = "0.25.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d528e8fcb4e49ddb04d4d6450ddb8ac08f282a58fec94ce981c9c5dbf7e3a" +checksum = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af" dependencies = [ "cc", "tree-sitter-language", diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 41541714485d..63c6d16d53ca 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -8,15 +8,15 @@ edition = "2024" # When updating these dependencies, run `misc/bazel/3rdparty/update_cargo_deps.sh` [dependencies] tree-sitter = ">= 0.23.0" -tree-sitter-embedded-template = "0.25.0" +tree-sitter-embedded-template = "0.23.2" tree-sitter-ruby = "0.23.1" clap = { version = "4.5", features = ["derive"] } tracing = "0.1" -tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } -rayon = "1.11.0" -regex = "1.11.2" +tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } +rayon = "1.10.0" +regex = "1.11.1" encoding = "0.2" lazy_static = "1.5.0" -serde_json = "1.0.143" +serde_json = "1.0.142" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } From d729ab501b0d7ed30e2a6e3ea9c14dcd96245973 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 12 Sep 2025 08:45:18 +0200 Subject: [PATCH 048/219] JS: Add test that calls .json or .jsonp --- .../frameworks/Express/src/json.js | 10 +++ .../frameworks/Express/tests.expected | 73 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 javascript/ql/test/library-tests/frameworks/Express/src/json.js diff --git a/javascript/ql/test/library-tests/frameworks/Express/src/json.js b/javascript/ql/test/library-tests/frameworks/Express/src/json.js new file mode 100644 index 000000000000..6b87cad68cfc --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/Express/src/json.js @@ -0,0 +1,10 @@ +const express = require('express'); +const app = express(); + +app.get('/test/json', function(req, res) { + res.json(req.query.data); +}); + +app.get('/test/jsonp', function(req, res) { + res.jsonp(req.query.data); +}); diff --git a/javascript/ql/test/library-tests/frameworks/Express/tests.expected b/javascript/ql/test/library-tests/frameworks/Express/tests.expected index ec4253740f77..0abc2dbdf956 100644 --- a/javascript/ql/test/library-tests/frameworks/Express/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Express/tests.expected @@ -131,6 +131,12 @@ test_isRequest | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:7:2:7:4 | req | +| src/json.js:4:32:4:34 | req | +| src/json.js:4:32:4:34 | req | +| src/json.js:5:14:5:16 | req | +| src/json.js:8:33:8:35 | req | +| src/json.js:8:33:8:35 | req | +| src/json.js:9:15:9:17 | req | | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:6:5:6:7 | req | @@ -201,6 +207,8 @@ test_RouteSetup | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | false | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | false | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() | false | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | false | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | false | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:2:13:2:21 | express() | true | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:2:13:2:21 | express() | false | | src/middleware-flow.js:39:1:43:2 | unrelat ... .db;\\n}) | src/middleware-flow.js:37:22:37:30 | express() | false | @@ -345,6 +353,14 @@ test_isResponse | src/inheritedFromNode.js:4:29:4:31 | res | | src/inheritedFromNode.js:5:2:5:4 | res | | src/inheritedFromNode.js:6:2:6:4 | res | +| src/json.js:4:37:4:39 | res | +| src/json.js:4:37:4:39 | res | +| src/json.js:5:5:5:7 | res | +| src/json.js:5:5:5:28 | res.jso ... y.data) | +| src/json.js:8:38:8:40 | res | +| src/json.js:8:38:8:40 | res | +| src/json.js:9:5:9:7 | res | +| src/json.js:9:5:9:29 | res.jso ... y.data) | | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:23:23:23:25 | res | @@ -575,6 +591,12 @@ test_RequestExpr | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:7:2:7:4 | req | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:32:4:34 | req | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:4:32:4:34 | req | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:5:14:5:16 | req | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:33:8:35 | req | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:8:33:8:35 | req | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:17 | req | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:6:5:6:7 | req | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | @@ -627,6 +649,7 @@ test_appCreation | src/express4.js:2:11:2:19 | express() | | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:37:22:37:30 | express() | | src/params.js:2:11:2:19 | express() | @@ -820,6 +843,14 @@ test_ResponseExpr | src/inheritedFromNode.js:4:29:4:31 | res | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:5:2:5:4 | res | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:6:2:6:4 | res | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:37:4:39 | res | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:4:37:4:39 | res | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:5:5:5:7 | res | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:5:5:5:28 | res.jso ... y.data) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:38:8:40 | res | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:8:38:8:40 | res | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:9:5:9:7 | res | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:9:5:9:29 | res.jso ... y.data) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:5:25:5:27 | res | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:17:30:17:32 | res | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:23:23:23:25 | res | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | @@ -940,6 +971,8 @@ test_RouteHandler | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:65:36:65:38 | req | src/express.js:65:41:65:43 | res | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:71:32:71:34 | req | src/express.js:71:37:71:39 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:29:4:31 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:32:4:34 | req | src/json.js:4:37:4:39 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:33:8:35 | req | src/json.js:8:38:8:40 | res | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:25:17:27 | req | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | src/middleware-flow.js:23:18:23:20 | req | src/middleware-flow.js:23:23:23:25 | res | @@ -1036,6 +1069,8 @@ test_RouteHandlerExpr | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:65:1:69:2 | app.get ... es);\\n}) | true | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:71:1:75:2 | app.get ... es);\\n}) | true | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | true | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:1:6:2 | app.get ... ta);\\n}) | true | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:1:10:2 | app.get ... ta);\\n}) | true | | src/middleware-flow.js:13:16:13:24 | installDb | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | false | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | true | | src/middleware-flow.js:27:23:27:32 | routers[p] | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | true | @@ -1068,6 +1103,7 @@ test_isRouterCreation | src/express4.js:2:11:2:19 | express() | | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:37:22:37:30 | express() | | src/params.js:2:11:2:19 | express() | @@ -1111,6 +1147,8 @@ test_RequestInputAccess | src/express.js:67:12:67:25 | req.params.foo | parameter | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:73:12:73:19 | req.path | url | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:7:2:7:8 | req.url | url | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:5:14:5:27 | req.query.data | parameter | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:28 | req.query.data | parameter | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/params.js:4:35:4:39 | value | parameter | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:5:17:5:28 | req.query.xx | parameter | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:6:17:6:24 | req.body | body | src/params.js:4:18:12:1 | (req, r ... }\\n} | @@ -1182,6 +1220,8 @@ test_RouteSetup_getRouter | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:2:13:2:21 | express() | @@ -1226,6 +1266,8 @@ test_RouteSetup_getServer | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:39:1:43:2 | unrelat ... .db;\\n}) | src/middleware-flow.js:37:22:37:30 | express() | @@ -1266,6 +1308,8 @@ test_StandardRouteHandler | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:2:11:2:19 | express() | src/express.js:65:36:65:38 | req | src/express.js:65:41:65:43 | res | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:2:11:2:19 | express() | src/express.js:71:32:71:34 | req | src/express.js:71:37:71:39 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:2:11:2:19 | express() | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:29:4:31 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:2:13:2:21 | express() | src/json.js:4:32:4:34 | req | src/json.js:4:37:4:39 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:2:13:2:21 | express() | src/json.js:8:33:8:35 | req | src/json.js:8:38:8:40 | res | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:17:25:17:27 | req | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | src/middleware-flow.js:37:22:37:30 | express() | src/middleware-flow.js:39:24:39:26 | req | src/middleware-flow.js:39:29:39:31 | res | @@ -1346,6 +1390,8 @@ test_RouteHandlerExpr_getBody | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:16:13:24 | installDb | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | @@ -1466,6 +1512,8 @@ test_RouteSetup_getARouteHandler | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | @@ -1526,6 +1574,8 @@ test_RouteSetup_getRequestMethod | src/express.js:65:1:69:2 | app.get ... es);\\n}) | GET | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | GET | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | POST | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | GET | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | GET | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | GET | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | GET | | src/middleware-flow.js:39:1:43:2 | unrelat ... .db;\\n}) | GET | @@ -1699,6 +1749,12 @@ test_RouteHandler_getARequestExpr | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:7:2:7:4 | req | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:32:4:34 | req | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:32:4:34 | req | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:5:14:5:16 | req | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:33:8:35 | req | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:33:8:35 | req | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:9:15:9:17 | req | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:6:5:6:7 | req | @@ -1909,6 +1965,14 @@ test_RouteHandler_getAResponseExpr | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:29:4:31 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:5:2:5:4 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:6:2:6:4 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:37:4:39 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:37:4:39 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:5:5:5:7 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:5:5:5:28 | res.jso ... y.data) | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:38:8:40 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:38:8:40 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:9:5:9:7 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:9:5:9:29 | res.jso ... y.data) | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | src/middleware-flow.js:23:23:23:25 | res | @@ -2041,6 +2105,8 @@ test_RouteSetup_getRouteHandlerExpr | src/express.js:65:1:69:2 | app.get ... es);\\n}) | 0 | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | 0 | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | 0 | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | 0 | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | 0 | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | 0 | src/middleware-flow.js:13:16:13:24 | installDb | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | 0 | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | 0 | src/middleware-flow.js:27:23:27:32 | routers[p] | @@ -2149,6 +2215,8 @@ test_RouteSetup_getARouteHandlerExpr | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:13:16:13:24 | installDb | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:27:23:27:32 | routers[p] | @@ -2181,6 +2249,7 @@ test_RouterDefinition_RouterDefinition | src/express4.js:2:11:2:19 | express() | | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:37:22:37:30 | express() | | src/params.js:2:11:2:19 | express() | @@ -2216,6 +2285,8 @@ test_RouterDefinition_getARouteHandler | src/express.js:2:11:2:19 | express() | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:2:11:2:19 | express() | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:2:11:2:19 | express() | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:2:13:2:21 | express() | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:2:13:2:21 | express() | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:37:22:37:30 | express() | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | @@ -2334,6 +2405,8 @@ test_RouteSetup_getLastRouteHandlerExpr | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:13:16:13:24 | installDb | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:27:23:27:32 | routers[p] | From 132a8b8b53bd8ce115d0641c8b11d47a0e0648e2 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 12 Sep 2025 08:46:21 +0200 Subject: [PATCH 049/219] JS: Model json and jsonp methods --- .../semmle/javascript/frameworks/Express.qll | 34 +++++++++++++++++++ .../frameworks/Express/tests.expected | 12 +++++++ 2 files changed, 46 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll index 8c016b3afe91..41e4d1c860c1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll @@ -781,6 +781,40 @@ module Express { override RouteHandler getRouteHandler() { result = response.getRouteHandler() } } + /** + * A call to `res.json()` or `res.jsonp()`. + * + * This sets the `content-type` header. + */ + private class ResponseJsonCall extends DataFlow::MethodCallNode, Http::HeaderDefinition { + private ResponseSource response; + + ResponseJsonCall() { this = response.ref().getAMethodCall(["json", "jsonp"]) } + + override RouteHandler getRouteHandler() { result = response.getRouteHandler() } + + override string getAHeaderName() { result = "content-type" } + + override predicate defines(string headerName, string headerValue) { + // Note: for `jsonp` the actual content-type header will be `text/javascript` or similar, but to avoid + // generating a spurious HTML injection sink, we treat it as `application/json` here. + headerName = "content-type" and headerValue = "application/json" + } + } + + /** + * An argument passed to the `json` or `json` method of an HTTP response object. + */ + private class ResponseJsonCallArgument extends Http::ResponseSendArgument { + ResponseJsonCall call; + + ResponseJsonCallArgument() { this = call.getArgument(0) } + + override RouteHandler getRouteHandler() { result = call.getRouteHandler() } + + override HeaderDefinition getAnAssociatedHeaderDefinition() { result = call } + } + /** * An invocation of the `cookie` method on an HTTP response object. */ diff --git a/javascript/ql/test/library-tests/frameworks/Express/tests.expected b/javascript/ql/test/library-tests/frameworks/Express/tests.expected index 0abc2dbdf956..9007a1ed984e 100644 --- a/javascript/ql/test/library-tests/frameworks/Express/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Express/tests.expected @@ -674,6 +674,8 @@ test_ResponseBody | src/express.js:61:12:61:25 | req.params.foo | src/express.js:59:23:63:1 | functio ... res);\\n} | | src/express.js:67:12:67:25 | req.params.foo | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:73:12:73:19 | req.path | src/express.js:71:23:75:1 | functio ... res);\\n} | +| src/json.js:5:14:5:27 | req.query.data | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:28 | req.query.data | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/params.js:8:18:8:22 | value | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:15:12:15:18 | "Hello" | src/params.js:14:24:16:1 | functio ... lo");\\n} | test_ResponseExpr @@ -1005,6 +1007,8 @@ test_HeaderDefinition | src/express.js:66:3:66:42 | res.hea ... plain") | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:72:3:72:41 | res.hea ... /html") | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:6:2:6:16 | res.setHeader() | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:5:5:5:28 | res.jso ... y.data) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:5:9:29 | res.jso ... y.data) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/responseExprs.js:19:5:19:16 | res.append() | src/responseExprs.js:16:30:42:1 | functio ... }\\n} | | src/responseExprs.js:37:5:37:28 | f(res.a ... ppend() | src/responseExprs.js:16:30:42:1 | functio ... }\\n} | | src/responseExprs.js:37:7:37:18 | res.append() | src/responseExprs.js:16:30:42:1 | functio ... }\\n} | @@ -1163,6 +1167,8 @@ test_ResponseSendArgument | src/express.js:61:12:61:25 | req.params.foo | src/express.js:59:23:63:1 | functio ... res);\\n} | | src/express.js:67:12:67:25 | req.params.foo | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:73:12:73:19 | req.path | src/express.js:71:23:75:1 | functio ... res);\\n} | +| src/json.js:5:14:5:27 | req.query.data | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:28 | req.query.data | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/params.js:8:18:8:22 | value | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:15:12:15:18 | "Hello" | src/params.js:14:24:16:1 | functio ... lo");\\n} | test_RouteSetup_getRouter @@ -1366,6 +1372,8 @@ test_HeaderDefinition_defines | src/express.js:60:3:60:47 | res.hea ... n/xml") | content-type | application/xml | | src/express.js:66:3:66:42 | res.hea ... plain") | content-type | text/plain | | src/express.js:72:3:72:41 | res.hea ... /html") | content-type | text/html | +| src/json.js:5:5:5:28 | res.jso ... y.data) | content-type | application/json | +| src/json.js:9:5:9:29 | res.jso ... y.data) | content-type | application/json | test_RouteHandlerExpr_getBody | src/advanced-routehandler-registration.js:51:9:51:60 | (req, r ... tever") | src/advanced-routehandler-registration.js:51:9:51:60 | (req, r ... tever") | | src/advanced-routehandler-registration.js:64:9:64:53 | (req, r ... q, res) | src/advanced-routehandler-registration.js:64:9:64:53 | (req, r ... q, res) | @@ -2139,6 +2147,8 @@ test_HeaderDefinition_getAHeaderName | src/express.js:60:3:60:47 | res.hea ... n/xml") | content-type | | src/express.js:66:3:66:42 | res.hea ... plain") | content-type | | src/express.js:72:3:72:41 | res.hea ... /html") | content-type | +| src/json.js:5:5:5:28 | res.jso ... y.data) | content-type | +| src/json.js:9:5:9:29 | res.jso ... y.data) | content-type | test_RouteHandlerExpr_getAsSubRouter | src/csurf-example.js:13:17:13:19 | api | src/csurf-example.js:30:16:30:35 | new express.Router() | | src/express2.js:6:9:6:14 | router | src/express2.js:2:14:2:23 | e.Router() | @@ -2155,6 +2165,8 @@ test_RouteHandler_getAResponseHeader | src/express.js:65:27:69:1 | functio ... res);\\n} | content-type | src/express.js:66:3:66:42 | res.hea ... plain") | | src/express.js:71:23:75:1 | functio ... res);\\n} | access-control-allow-credentials | src/express.js:12:3:12:54 | arg.hea ... , true) | | src/express.js:71:23:75:1 | functio ... res);\\n} | content-type | src/express.js:72:3:72:41 | res.hea ... /html") | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | content-type | src/json.js:5:5:5:28 | res.jso ... y.data) | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | content-type | src/json.js:9:5:9:29 | res.jso ... y.data) | test_RouteSetup_getARouteHandlerExpr | src/advanced-routehandler-registration.js:10:3:10:24 | app.get ... es0[p]) | src/advanced-routehandler-registration.js:10:14:10:23 | routes0[p] | | src/advanced-routehandler-registration.js:19:3:19:18 | app.use(handler) | src/advanced-routehandler-registration.js:19:11:19:17 | handler | From f48b643375245a58af335690694ec2f66ef76ed2 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 11 Sep 2025 11:39:09 +0200 Subject: [PATCH 050/219] Bazel: regenerate vendored cargo dependencies --- MODULE.bazel | 2 +- .../tree_sitter_extractors_deps/BUILD.bazel | 6 +++--- ...ILD.tree-sitter-embedded-template-0.23.2.bazel} | 6 +++--- .../3rdparty/tree_sitter_extractors_deps/defs.bzl | 14 +++++++------- 4 files changed, 14 insertions(+), 14 deletions(-) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.tree-sitter-embedded-template-0.25.0.bazel => BUILD.tree-sitter-embedded-template-0.23.2.bazel} (97%) diff --git a/MODULE.bazel b/MODULE.bazel index eb96427d65a9..d760a3c1e42c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -145,7 +145,7 @@ use_repo( "vendor_ts__tracing-flame-0.2.0", "vendor_ts__tracing-subscriber-0.3.20", "vendor_ts__tree-sitter-0.24.6", - "vendor_ts__tree-sitter-embedded-template-0.25.0", + "vendor_ts__tree-sitter-embedded-template-0.23.2", "vendor_ts__tree-sitter-json-0.24.8", "vendor_ts__tree-sitter-ql-0.23.1", "vendor_ts__tree-sitter-ruby-0.23.1", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel index 93f3c532ffdd..b7f590e16941 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel @@ -602,14 +602,14 @@ alias( ) alias( - name = "tree-sitter-embedded-template-0.25.0", - actual = "@vendor_ts__tree-sitter-embedded-template-0.25.0//:tree_sitter_embedded_template", + name = "tree-sitter-embedded-template-0.23.2", + actual = "@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template", tags = ["manual"], ) alias( name = "tree-sitter-embedded-template", - actual = "@vendor_ts__tree-sitter-embedded-template-0.25.0//:tree_sitter_embedded_template", + actual = "@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template", tags = ["manual"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel index d1680d1d6242..8670b58b2598 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel @@ -92,9 +92,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.25.0", + version = "0.23.2", deps = [ - "@vendor_ts__tree-sitter-embedded-template-0.25.0//:build_script_build", + "@vendor_ts__tree-sitter-embedded-template-0.23.2//:build_script_build", "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", ], ) @@ -147,7 +147,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.25.0", + version = "0.23.2", visibility = ["//visibility:private"], deps = [ "@vendor_ts__cc-1.2.36//:cc", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index 4d5c4b9d371e..a6ed91398fa3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -304,7 +304,7 @@ _NORMAL_DEPENDENCIES = { "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber"), "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), - "tree-sitter-embedded-template": Label("@vendor_ts__tree-sitter-embedded-template-0.25.0//:tree_sitter_embedded_template"), + "tree-sitter-embedded-template": Label("@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template"), "tree-sitter-ruby": Label("@vendor_ts__tree-sitter-ruby-0.23.1//:tree_sitter_ruby"), }, }, @@ -3359,12 +3359,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__tree-sitter-embedded-template-0.25.0", - sha256 = "833d528e8fcb4e49ddb04d4d6450ddb8ac08f282a58fec94ce981c9c5dbf7e3a", + name = "vendor_ts__tree-sitter-embedded-template-0.23.2", + sha256 = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af", type = "tar.gz", - urls = ["https://static.crates.io/crates/tree-sitter-embedded-template/0.25.0/download"], - strip_prefix = "tree-sitter-embedded-template-0.25.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-embedded-template-0.25.0.bazel"), + urls = ["https://static.crates.io/crates/tree-sitter-embedded-template/0.23.2/download"], + strip_prefix = "tree-sitter-embedded-template-0.23.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-embedded-template-0.23.2.bazel"), ) maybe( @@ -4214,7 +4214,7 @@ def crate_repositories(): struct(repo = "vendor_ts__tracing-flame-0.2.0", is_dev_dep = False), struct(repo = "vendor_ts__tracing-subscriber-0.3.20", is_dev_dep = False), struct(repo = "vendor_ts__tree-sitter-0.24.6", is_dev_dep = False), - struct(repo = "vendor_ts__tree-sitter-embedded-template-0.25.0", is_dev_dep = False), + struct(repo = "vendor_ts__tree-sitter-embedded-template-0.23.2", is_dev_dep = False), struct(repo = "vendor_ts__tree-sitter-ruby-0.23.1", is_dev_dep = False), struct(repo = "vendor_ts__triomphe-0.1.14", is_dev_dep = False), struct(repo = "vendor_ts__ungrammar-1.16.1", is_dev_dep = False), From 3cf1a16a13f115f5fcbcfb014c4c16d767f95bb4 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 12 Sep 2025 15:45:37 +0200 Subject: [PATCH 051/219] Cargo: upgrade dependencies --- Cargo.lock | 236 +++++++++++++++----------------------- ruby/extractor/Cargo.toml | 8 +- 2 files changed, 98 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a2d0c3614fe..77be7b054ed7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" @@ -73,13 +73,13 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -121,9 +121,9 @@ dependencies = [ [[package]] name = "atomic" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" dependencies = [ "bytemuck", ] @@ -169,9 +169,9 @@ checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" [[package]] name = "bstr" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "serde", @@ -185,9 +185,9 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "camino" @@ -240,9 +240,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.36" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "jobserver", @@ -499,15 +499,15 @@ checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" [[package]] name = "cov-mark" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0570650661aa447e7335f1d5e4f499d8e58796e617bedc9267d971e51c8b49d4" +checksum = "3f1d92727879fb4f24cec33a35e3bff74035541326cbc12ad44ba8886d1927b0" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -606,9 +606,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", "serde", @@ -639,9 +639,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" @@ -766,9 +766,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -828,7 +828,7 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.5+wasi-0.2.4", ] [[package]] @@ -839,9 +839,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", @@ -1151,9 +1151,9 @@ checksum = "a037eddb7d28de1d0fc42411f501b53b75838d313908078d6698d064f3029b24" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -1264,9 +1264,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] @@ -1285,11 +1285,11 @@ dependencies = [ [[package]] name = "miow" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" +checksum = "536bfad37a309d62069485248eeaba1e8d9853aaf951caaeaed0585a95346f08" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.0", ] [[package]] @@ -1310,9 +1310,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "notify" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ "bitflags 2.9.4", "fsevent-sys", @@ -1395,9 +1395,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "7.0.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ac44c994af577c799b1b4bd80dc214701e349873ad894d6cdf96f4f7526e0b9" +checksum = "63eceb7b5d757011a87d08eb2123db15d87fb0c281f65d101ce30a1e96c3ad5c" dependencies = [ "memchr", ] @@ -2182,9 +2182,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ "bitflags 2.9.4", ] @@ -2295,9 +2295,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -2459,6 +2459,7 @@ version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ + "indexmap 2.11.1", "itoa", "memchr", "ryu", @@ -2648,12 +2649,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde", @@ -2663,15 +2663,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -2841,13 +2841,14 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.24.6" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2434c86ba59ed15af56039cc5bf1acf8ba76ce301e32ef08827388ef285ec5" +checksum = "ccd2a058a86cfece0bf96f7cce1021efef9c8ed0e892ab74639173e5ed7a34fa" dependencies = [ "cc", "regex", "regex-syntax", + "serde_json", "streaming-iterator", "tree-sitter-language", ] @@ -3013,30 +3014,40 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.5+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" dependencies = [ - "wit-bindgen-rt", + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log 0.4.28", @@ -3048,9 +3059,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3058,9 +3069,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", @@ -3071,20 +3082,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ "unicode-ident", ] [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] @@ -3152,15 +3163,6 @@ dependencies = [ "windows-link 0.1.3", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -3185,22 +3187,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-sys" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-link 0.2.0", ] [[package]] @@ -3221,10 +3217,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -3235,12 +3232,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -3253,12 +3244,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -3271,12 +3256,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -3301,12 +3280,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -3319,12 +3292,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -3337,12 +3304,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -3355,12 +3316,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -3383,13 +3338,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.4", -] +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" [[package]] name = "writeable" @@ -3429,18 +3381,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -3521,9 +3473,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 63c6d16d53ca..f4de37e85126 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -12,11 +12,11 @@ tree-sitter-embedded-template = "0.23.2" tree-sitter-ruby = "0.23.1" clap = { version = "4.5", features = ["derive"] } tracing = "0.1" -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } -rayon = "1.10.0" -regex = "1.11.1" +tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } +rayon = "1.11.0" +regex = "1.11.2" encoding = "0.2" lazy_static = "1.5.0" -serde_json = "1.0.142" +serde_json = "1.0.143" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } From 19c529e87b98aa48d956f5d7fe1c00d667c40540 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 12 Sep 2025 15:48:23 +0200 Subject: [PATCH 052/219] Bazel: regenerate vendored cargo dependencies --- MODULE.bazel | 6 +- ...2-2.0.0.bazel => BUILD.adler2-2.0.1.bazel} | 2 +- .../BUILD.anstream-0.6.20.bazel | 6 +- ...azel => BUILD.anstyle-wincon-3.0.10.bazel} | 8 +- .../BUILD.argfile-0.2.1.bazel | 2 +- ...c-0.6.0.bazel => BUILD.atomic-0.6.1.bazel} | 4 +- .../tree_sitter_extractors_deps/BUILD.bazel | 18 +- ...r-1.11.3.bazel => BUILD.bstr-1.12.0.bazel} | 2 +- ...21.0.bazel => BUILD.bytemuck-1.23.2.bazel} | 2 +- ....cc-1.2.36.bazel => BUILD.cc-1.2.37.bazel} | 2 +- .../BUILD.chrono-0.4.42.bazel | 4 +- ...2.0.0.bazel => BUILD.cov-mark-2.1.0.bazel} | 2 +- .../BUILD.crc32fast-1.4.2.bazel | 99 ---- ...48.5.bazel => BUILD.crc32fast-1.5.0.bazel} | 27 +- ...0.4.0.bazel => BUILD.deranged-0.5.3.bazel} | 2 +- ....19.bazel => BUILD.dyn-clone-1.0.20.bazel} | 2 +- .../BUILD.figment-0.10.19.bazel | 28 +- ...2-1.1.0.bazel => BUILD.flate2-1.1.2.bazel} | 6 +- ....4.15.bazel => BUILD.globset-0.4.16.bazel} | 4 +- .../BUILD.iana-time-zone-0.1.63.bazel | 4 +- .../BUILD.iana-time-zone-haiku-0.1.2.bazel | 2 +- ...0.3.77.bazel => BUILD.js-sys-0.3.78.bazel} | 4 +- ....5.bazel => BUILD.miniz_oxide-0.8.9.bazel} | 4 +- ...iow-0.6.0.bazel => BUILD.miow-0.6.1.bazel} | 4 +- ...y-8.1.0.bazel => BUILD.notify-8.2.0.bazel} | 2 +- ...0.bazel => BUILD.os_str_bytes-7.1.1.bazel} | 2 +- .../BUILD.ppv-lite86-0.2.21.bazel | 2 +- .../BUILD.ra_ap_hir_def-0.0.301.bazel | 2 +- .../BUILD.ra_ap_hir_expand-0.0.301.bazel | 2 +- .../BUILD.ra_ap_hir_ty-0.0.301.bazel | 2 +- .../BUILD.ra_ap_ide_db-0.0.301.bazel | 2 +- .../BUILD.ra_ap_mbe-0.0.301.bazel | 2 +- .../BUILD.ra_ap_stdx-0.0.301.bazel | 6 +- .../BUILD.ra_ap_vfs-notify-0.0.301.bazel | 2 +- ...bazel => BUILD.redox_syscall-0.5.17.bazel} | 2 +- ...1.bazel => BUILD.rustversion-1.0.22.bazel} | 6 +- .../BUILD.same-file-1.0.6.bazel | 6 +- .../BUILD.schemars-0.9.0.bazel | 2 +- .../BUILD.schemars-1.0.4.bazel | 2 +- .../BUILD.serde_json-1.0.143.bazel | 166 ++++++- ...e-0.3.41.bazel => BUILD.time-0.3.43.bazel} | 6 +- ....1.4.bazel => BUILD.time-core-0.1.6.bazel} | 2 +- ...2.bazel => BUILD.time-macros-0.2.24.bazel} | 4 +- ...6.bazel => BUILD.tree-sitter-0.25.9.bazel} | 9 +- ...tree-sitter-embedded-template-0.23.2.bazel | 2 +- .../BUILD.tree-sitter-json-0.24.8.bazel | 2 +- .../BUILD.tree-sitter-ql-0.23.1.bazel | 2 +- .../BUILD.tree-sitter-ruby-0.23.1.bazel | 2 +- .../BUILD.walkdir-2.5.0.bazel | 6 +- ...zel => BUILD.wasi-0.14.5+wasi-0.2.4.bazel} | 4 +- .../BUILD.wasip2-1.0.0+wasi-0.2.4.bazel | 95 ++++ ...bazel => BUILD.wasm-bindgen-0.2.101.bazel} | 14 +- ... BUILD.wasm-bindgen-backend-0.2.101.bazel} | 4 +- ...=> BUILD.wasm-bindgen-macro-0.2.101.bazel} | 4 +- ....wasm-bindgen-macro-support-0.2.101.bazel} | 6 +- ...> BUILD.wasm-bindgen-shared-0.2.101.bazel} | 6 +- ...9.bazel => BUILD.winapi-util-0.1.11.bazel} | 8 +- .../BUILD.windows-sys-0.59.0.bazel | 4 - .../BUILD.windows-sys-0.60.2.bazel | 2 +- ...0.bazel => BUILD.windows-sys-0.61.0.bazel} | 8 +- .../BUILD.windows-targets-0.48.5.bazel | 113 ----- ...zel => BUILD.windows-targets-0.53.3.bazel} | 2 +- .../BUILD.windows_aarch64_msvc-0.48.5.bazel | 157 ------ .../BUILD.windows_i686_gnu-0.48.5.bazel | 157 ------ .../BUILD.windows_i686_msvc-0.48.5.bazel | 157 ------ .../BUILD.windows_x86_64_gnu-0.48.5.bazel | 157 ------ .../BUILD.windows_x86_64_gnullvm-0.48.5.bazel | 157 ------ .../BUILD.windows_x86_64_msvc-0.48.5.bazel | 157 ------ ...0.bazel => BUILD.wit-bindgen-0.45.1.bazel} | 14 +- ...8.26.bazel => BUILD.zerocopy-0.8.27.bazel} | 6 +- ...zel => BUILD.zerocopy-derive-0.8.27.bazel} | 2 +- .../BUILD.zstd-safe-7.2.4.bazel | 4 +- ...=> BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel} | 8 +- .../tree_sitter_extractors_deps/defs.bzl | 467 ++++++++---------- 74 files changed, 621 insertions(+), 1579 deletions(-) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.adler2-2.0.0.bazel => BUILD.adler2-2.0.1.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.anstyle-wincon-3.0.9.bazel => BUILD.anstyle-wincon-3.0.10.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.atomic-0.6.0.bazel => BUILD.atomic-0.6.1.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.bstr-1.11.3.bazel => BUILD.bstr-1.12.0.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.bytemuck-1.21.0.bazel => BUILD.bytemuck-1.23.2.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.cc-1.2.36.bazel => BUILD.cc-1.2.37.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.cov-mark-2.0.0.bazel => BUILD.cov-mark-2.1.0.bazel} (99%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.windows_aarch64_gnullvm-0.48.5.bazel => BUILD.crc32fast-1.5.0.bazel} (91%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.deranged-0.4.0.bazel => BUILD.deranged-0.5.3.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.dyn-clone-1.0.19.bazel => BUILD.dyn-clone-1.0.20.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.flate2-1.1.0.bazel => BUILD.flate2-1.1.2.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.globset-0.4.15.bazel => BUILD.globset-0.4.16.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.js-sys-0.3.77.bazel => BUILD.js-sys-0.3.78.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.miniz_oxide-0.8.5.bazel => BUILD.miniz_oxide-0.8.9.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.miow-0.6.0.bazel => BUILD.miow-0.6.1.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.notify-8.1.0.bazel => BUILD.notify-8.2.0.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.os_str_bytes-7.0.0.bazel => BUILD.os_str_bytes-7.1.1.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.redox_syscall-0.5.13.bazel => BUILD.redox_syscall-0.5.17.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.rustversion-1.0.21.bazel => BUILD.rustversion-1.0.22.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.time-0.3.41.bazel => BUILD.time-0.3.43.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.time-core-0.1.4.bazel => BUILD.time-core-0.1.6.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.time-macros-0.2.22.bazel => BUILD.time-macros-0.2.24.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.tree-sitter-0.24.6.bazel => BUILD.tree-sitter-0.25.9.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wasi-0.14.2+wasi-0.2.4.bazel => BUILD.wasi-0.14.5+wasi-0.2.4.bazel} (97%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wasm-bindgen-0.2.100.bazel => BUILD.wasm-bindgen-0.2.101.bazel} (92%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wasm-bindgen-backend-0.2.100.bazel => BUILD.wasm-bindgen-backend-0.2.101.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wasm-bindgen-macro-0.2.100.bazel => BUILD.wasm-bindgen-macro-0.2.101.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wasm-bindgen-macro-support-0.2.100.bazel => BUILD.wasm-bindgen-macro-support-0.2.101.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wasm-bindgen-shared-0.2.100.bazel => BUILD.wasm-bindgen-shared-0.2.101.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.winapi-util-0.1.9.bazel => BUILD.winapi-util-0.1.11.bazel} (94%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.windows-sys-0.48.0.bazel => BUILD.windows-sys-0.61.0.bazel} (95%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.48.5.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.windows-targets-0.53.2.bazel => BUILD.windows-targets-0.53.3.bazel} (99%) delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.48.5.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.48.5.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.48.5.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.48.5.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.48.5.bazel delete mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.48.5.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.wit-bindgen-rt-0.39.0.bazel => BUILD.wit-bindgen-0.45.1.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.zerocopy-0.8.26.bazel => BUILD.zerocopy-0.8.27.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.zerocopy-derive-0.8.26.bazel => BUILD.zerocopy-derive-0.8.27.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel => BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel} (96%) diff --git a/MODULE.bazel b/MODULE.bazel index d760a3c1e42c..dfb99ec301a2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -107,9 +107,9 @@ use_repo( "vendor_ts__either-1.15.0", "vendor_ts__encoding-0.2.33", "vendor_ts__figment-0.10.19", - "vendor_ts__flate2-1.1.0", + "vendor_ts__flate2-1.1.2", "vendor_ts__glob-0.3.3", - "vendor_ts__globset-0.4.15", + "vendor_ts__globset-0.4.16", "vendor_ts__itertools-0.14.0", "vendor_ts__lazy_static-1.5.0", "vendor_ts__mustache-0.9.0", @@ -144,7 +144,7 @@ use_repo( "vendor_ts__tracing-0.1.41", "vendor_ts__tracing-flame-0.2.0", "vendor_ts__tracing-subscriber-0.3.20", - "vendor_ts__tree-sitter-0.24.6", + "vendor_ts__tree-sitter-0.25.9", "vendor_ts__tree-sitter-embedded-template-0.23.2", "vendor_ts__tree-sitter-json-0.24.8", "vendor_ts__tree-sitter-ql-0.23.1", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel index 5ee0a08f4c77..61dd4b8015d0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.0", + version = "2.0.1", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel index 7d071b59f563..612f153cad1e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel @@ -103,13 +103,13 @@ rust_library( "@vendor_ts__utf8parse-0.2.2//:utf8parse", ] + select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__anstyle-wincon-3.0.9//:anstyle_wincon", # aarch64-pc-windows-msvc + "@vendor_ts__anstyle-wincon-3.0.10//:anstyle_wincon", # aarch64-pc-windows-msvc ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__anstyle-wincon-3.0.9//:anstyle_wincon", # i686-pc-windows-msvc + "@vendor_ts__anstyle-wincon-3.0.10//:anstyle_wincon", # i686-pc-windows-msvc ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__anstyle-wincon-3.0.9//:anstyle_wincon", # x86_64-pc-windows-msvc + "@vendor_ts__anstyle-wincon-3.0.10//:anstyle_wincon", # x86_64-pc-windows-msvc ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.9.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel index acb0616902e3..6be501fabe1c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel @@ -88,21 +88,21 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "3.0.9", + version = "3.0.10", deps = [ "@vendor_ts__anstyle-1.0.11//:anstyle", ] + select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__once_cell_polyfill-1.70.1//:once_cell_polyfill", # cfg(windows) - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ "@vendor_ts__once_cell_polyfill-1.70.1//:once_cell_polyfill", # cfg(windows) - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ "@vendor_ts__once_cell_polyfill-1.70.1//:once_cell_polyfill", # cfg(windows) - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel index c28444a73c16..5b77349d60f3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel @@ -94,6 +94,6 @@ rust_library( version = "0.2.1", deps = [ "@vendor_ts__fs-err-2.11.0//:fs_err", - "@vendor_ts__os_str_bytes-7.0.0//:os_str_bytes", + "@vendor_ts__os_str_bytes-7.1.1//:os_str_bytes", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel index 4cb9d323813b..f81c241a363e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel @@ -92,8 +92,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.6.0", + version = "0.6.1", deps = [ - "@vendor_ts__bytemuck-1.21.0//:bytemuck", + "@vendor_ts__bytemuck-1.23.2//:bytemuck", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel index b7f590e16941..720687fcb84b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel @@ -140,14 +140,14 @@ alias( ) alias( - name = "flate2-1.1.0", - actual = "@vendor_ts__flate2-1.1.0//:flate2", + name = "flate2-1.1.2", + actual = "@vendor_ts__flate2-1.1.2//:flate2", tags = ["manual"], ) alias( name = "flate2", - actual = "@vendor_ts__flate2-1.1.0//:flate2", + actual = "@vendor_ts__flate2-1.1.2//:flate2", tags = ["manual"], ) @@ -164,14 +164,14 @@ alias( ) alias( - name = "globset-0.4.15", - actual = "@vendor_ts__globset-0.4.15//:globset", + name = "globset-0.4.16", + actual = "@vendor_ts__globset-0.4.16//:globset", tags = ["manual"], ) alias( name = "globset", - actual = "@vendor_ts__globset-0.4.15//:globset", + actual = "@vendor_ts__globset-0.4.16//:globset", tags = ["manual"], ) @@ -590,14 +590,14 @@ alias( ) alias( - name = "tree-sitter-0.24.6", - actual = "@vendor_ts__tree-sitter-0.24.6//:tree_sitter", + name = "tree-sitter-0.25.9", + actual = "@vendor_ts__tree-sitter-0.25.9//:tree_sitter", tags = ["manual"], ) alias( name = "tree-sitter", - actual = "@vendor_ts__tree-sitter-0.24.6//:tree_sitter", + actual = "@vendor_ts__tree-sitter-0.25.9//:tree_sitter", tags = ["manual"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.11.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.11.3.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel index 1793e0d7daee..0433f5fe9071 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.11.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel @@ -92,7 +92,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.11.3", + version = "1.12.0", deps = [ "@vendor_ts__memchr-2.7.5//:memchr", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.21.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.21.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel index cf7710e627da..ce1e2725e32f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.21.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.21.0", + version = "1.23.2", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.36.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.36.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel index cd5b1bec0ac0..ab0df21161a2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.36.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel @@ -91,7 +91,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.2.36", + version = "1.2.37", deps = [ "@vendor_ts__find-msvc-tools-0.1.1//:find_msvc_tools", "@vendor_ts__jobserver-0.1.34//:jobserver", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel index 6a1c5e8e71fc..f6c987b4f921 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel @@ -166,8 +166,8 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # s390x-unknown-linux-gnu ], "@rules_rust//rust/platform:wasm32-unknown-unknown": [ - "@vendor_ts__js-sys-0.3.77//:js_sys", # wasm32-unknown-unknown - "@vendor_ts__wasm-bindgen-0.2.100//:wasm_bindgen", # wasm32-unknown-unknown + "@vendor_ts__js-sys-0.3.78//:js_sys", # wasm32-unknown-unknown + "@vendor_ts__wasm-bindgen-0.2.101//:wasm_bindgen", # wasm32-unknown-unknown ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # x86_64-apple-darwin diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.0.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel index 3c562e624d0e..a63921c3b4a8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel @@ -92,5 +92,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.0", + version = "2.1.0", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel deleted file mode 100644 index f6ad1b52a493..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.4.2.bazel +++ /dev/null @@ -1,99 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "crc32fast", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_features = [ - "default", - "std", - ], - crate_root = "src/lib.rs", - edition = "2015", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=crc32fast", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "1.4.2", - deps = [ - "@vendor_ts__cfg-if-1.0.3//:cfg_if", - ], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel similarity index 91% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.48.5.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel index 76ee4c4ac63f..b3a40b976a8f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.48.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel @@ -21,7 +21,7 @@ cargo_toml_env_vars( ) rust_library( - name = "windows_aarch64_gnullvm", + name = "crc32fast", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -38,8 +38,12 @@ rust_library( "WORKSPACE.bazel", ], ), + crate_features = [ + "default", + "std", + ], crate_root = "src/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -48,7 +52,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=windows_aarch64_gnullvm", + "crate-name=crc32fast", "manual", "noclippy", "norustfmt", @@ -92,9 +96,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.48.5", + version = "1.5.0", deps = [ - "@vendor_ts__windows_aarch64_gnullvm-0.48.5//:build_script_build", + "@vendor_ts__cfg-if-1.0.3//:cfg_if", + "@vendor_ts__crc32fast-1.5.0//:build_script_build", ], ) @@ -117,6 +122,10 @@ cargo_build_script( "WORKSPACE.bazel", ], ), + crate_features = [ + "default", + "std", + ], crate_name = "build_script_build", crate_root = "build.rs", data = glob( @@ -131,8 +140,8 @@ cargo_build_script( "WORKSPACE.bazel", ], ), - edition = "2018", - pkg_name = "windows_aarch64_gnullvm", + edition = "2021", + pkg_name = "crc32fast", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -141,12 +150,12 @@ cargo_build_script( ], tags = [ "cargo-bazel", - "crate-name=windows_aarch64_gnullvm", + "crate-name=crc32fast", "manual", "noclippy", "norustfmt", ], - version = "0.48.5", + version = "1.5.0", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.4.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.4.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel index c25fab4a1ad3..262c356a1ba4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.4.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.0", + version = "0.5.3", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.19.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel index 448bf06fc096..0510a6239027 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.19", + version = "1.0.20", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel index 9569df15a02f..8b6d7b8c56c6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel @@ -108,46 +108,46 @@ rust_library( "@vendor_ts__uncased-0.9.10//:uncased", ] + select({ "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:i686-apple-darwin": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:i686-linux-android": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:thumbv7em-none-eabi": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:wasm32-unknown-unknown": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "@rules_rust//rust/platform:wasm32-wasip1": [ - "@vendor_ts__atomic-0.6.0//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel index 47ffe2a16c77..b06683055f36 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel @@ -94,9 +94,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.1.0", + version = "1.1.2", deps = [ - "@vendor_ts__crc32fast-1.4.2//:crc32fast", - "@vendor_ts__miniz_oxide-0.8.5//:miniz_oxide", + "@vendor_ts__crc32fast-1.5.0//:crc32fast", + "@vendor_ts__miniz_oxide-0.8.9//:miniz_oxide", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel index 7d2c1d7ec7fb..6c5f8cd7929a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.15.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel @@ -92,10 +92,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.15", + version = "0.4.16", deps = [ "@vendor_ts__aho-corasick-1.1.3//:aho_corasick", - "@vendor_ts__bstr-1.11.3//:bstr", + "@vendor_ts__bstr-1.12.0//:bstr", "@vendor_ts__log-0.4.28//:log", "@vendor_ts__regex-automata-0.4.10//:regex_automata", "@vendor_ts__regex-syntax-0.8.6//:regex_syntax", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel index fb97e330e703..b3e809c20906 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel @@ -121,9 +121,9 @@ rust_library( "@vendor_ts__windows-core-0.61.2//:windows_core", # cfg(target_os = "windows") ], "@rules_rust//rust/platform:wasm32-unknown-unknown": [ - "@vendor_ts__js-sys-0.3.77//:js_sys", # cfg(all(target_arch = "wasm32", target_os = "unknown")) + "@vendor_ts__js-sys-0.3.78//:js_sys", # cfg(all(target_arch = "wasm32", target_os = "unknown")) "@vendor_ts__log-0.4.28//:log", # cfg(all(target_arch = "wasm32", target_os = "unknown")) - "@vendor_ts__wasm-bindgen-0.2.100//:wasm_bindgen", # cfg(all(target_arch = "wasm32", target_os = "unknown")) + "@vendor_ts__wasm-bindgen-0.2.101//:wasm_bindgen", # cfg(all(target_arch = "wasm32", target_os = "unknown")) ], "@rules_rust//rust/platform:x86_64-apple-darwin": [ "@vendor_ts__core-foundation-sys-0.8.7//:core_foundation_sys", # cfg(target_vendor = "apple") diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel index c15142f5bdc9..7de07c3e66d1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel @@ -149,7 +149,7 @@ cargo_build_script( version = "0.1.2", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.77.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.77.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel index c7cad35aed57..e7d05a34f21a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.77.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel @@ -92,9 +92,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.3.77", + version = "0.3.78", deps = [ "@vendor_ts__once_cell-1.21.3//:once_cell", - "@vendor_ts__wasm-bindgen-0.2.100//:wasm_bindgen", + "@vendor_ts__wasm-bindgen-0.2.101//:wasm_bindgen", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.5.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel index bc02579b4eac..80d0e6c3fc06 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel @@ -91,8 +91,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.8.5", + version = "0.8.9", deps = [ - "@vendor_ts__adler2-2.0.0//:adler2", + "@vendor_ts__adler2-2.0.1//:adler2", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel index 6f99dee0d2da..af5955087e3f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel @@ -88,8 +88,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.6.0", + version = "0.6.1", deps = [ - "@vendor_ts__windows-sys-0.48.0//:windows_sys", + "@vendor_ts__windows-sys-0.61.0//:windows_sys", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.1.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel index 6b875aaa270f..ffba79680267 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel @@ -93,7 +93,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "8.1.0", + version = "8.2.0", deps = [ "@vendor_ts__libc-0.2.175//:libc", "@vendor_ts__log-0.4.28//:log", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.0.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel index 5f68898f2b48..96010fb2e467 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel @@ -93,7 +93,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "7.0.0", + version = "7.1.1", deps = [ "@vendor_ts__memchr-2.7.5//:memchr", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel index 1027543b5e7f..68d235c36842 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel @@ -94,6 +94,6 @@ rust_library( }), version = "0.2.21", deps = [ - "@vendor_ts__zerocopy-0.8.26//:zerocopy", + "@vendor_ts__zerocopy-0.8.27//:zerocopy", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel index 135541bdb1e0..e97671e1b1be 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel @@ -108,7 +108,7 @@ rust_library( deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__bitflags-2.9.4//:bitflags", - "@vendor_ts__cov-mark-2.0.0//:cov_mark", + "@vendor_ts__cov-mark-2.1.0//:cov_mark", "@vendor_ts__drop_bomb-0.1.5//:drop_bomb", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__fst-0.4.7//:fst", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel index ad5b2f0f0cfe..f5ad3aa61e0c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel @@ -107,7 +107,7 @@ rust_library( }), version = "0.0.301", deps = [ - "@vendor_ts__cov-mark-2.0.0//:cov_mark", + "@vendor_ts__cov-mark-2.1.0//:cov_mark", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__itertools-0.14.0//:itertools", "@vendor_ts__ra_ap_base_db-0.0.301//:ra_ap_base_db", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel index fd3eec1b4b30..7190559d3d8a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel @@ -110,7 +110,7 @@ rust_library( "@vendor_ts__chalk-ir-0.103.0//:chalk_ir", "@vendor_ts__chalk-recursive-0.103.0//:chalk_recursive", "@vendor_ts__chalk-solve-0.103.0//:chalk_solve", - "@vendor_ts__cov-mark-2.0.0//:cov_mark", + "@vendor_ts__cov-mark-2.1.0//:cov_mark", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__ena-0.14.3//:ena", "@vendor_ts__indexmap-2.11.1//:indexmap", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel index 97fa763dc314..9df94ba41656 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel @@ -107,7 +107,7 @@ rust_library( deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__bitflags-2.9.4//:bitflags", - "@vendor_ts__cov-mark-2.0.0//:cov_mark", + "@vendor_ts__cov-mark-2.1.0//:cov_mark", "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", "@vendor_ts__either-1.15.0//:either", "@vendor_ts__fst-0.4.7//:fst", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel index b6b27a0a8421..58d0a9a3d87b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel @@ -99,7 +99,7 @@ rust_library( version = "0.0.301", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", - "@vendor_ts__cov-mark-2.0.0//:cov_mark", + "@vendor_ts__cov-mark-2.1.0//:cov_mark", "@vendor_ts__ra-ap-rustc_lexer-0.123.0//:ra_ap_rustc_lexer", "@vendor_ts__ra_ap_intern-0.0.301//:ra_ap_intern", "@vendor_ts__ra_ap_parser-0.0.301//:ra_ap_parser", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel index c00b158415e7..71c7a91ccf40 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel @@ -109,7 +109,7 @@ rust_library( "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) + "@vendor_ts__miow-0.6.1//:miow", # cfg(windows) "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ @@ -140,7 +140,7 @@ rust_library( "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) + "@vendor_ts__miow-0.6.1//:miow", # cfg(windows) "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ @@ -165,7 +165,7 @@ rust_library( "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) + "@vendor_ts__miow-0.6.1//:miow", # cfg(windows) "@vendor_ts__windows-sys-0.60.2//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel index e58c4364d162..1e93e6aa96d9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel @@ -96,7 +96,7 @@ rust_library( version = "0.0.301", deps = [ "@vendor_ts__crossbeam-channel-0.5.15//:crossbeam_channel", - "@vendor_ts__notify-8.1.0//:notify", + "@vendor_ts__notify-8.2.0//:notify", "@vendor_ts__ra_ap_paths-0.0.301//:ra_ap_paths", "@vendor_ts__ra_ap_stdx-0.0.301//:ra_ap_stdx", "@vendor_ts__ra_ap_vfs-0.0.301//:ra_ap_vfs", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel index af919915d087..f9aa145a63c8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.13.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel @@ -88,7 +88,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.5.13", + version = "0.5.17", deps = [ "@vendor_ts__bitflags-2.9.4//:bitflags", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.21.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.21.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel index 53d7609768aa..20ead5c4d95d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.21.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel @@ -92,9 +92,9 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.21", + version = "1.0.22", deps = [ - "@vendor_ts__rustversion-1.0.21//:build_script_build", + "@vendor_ts__rustversion-1.0.22//:build_script_build", ], ) @@ -146,7 +146,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.21", + version = "1.0.22", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel index 12659c8d66c0..fd655a0ce783 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel @@ -91,13 +91,13 @@ rust_library( version = "1.0.6", deps = select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__winapi-util-0.1.9//:winapi_util", # cfg(windows) + "@vendor_ts__winapi-util-0.1.11//:winapi_util", # cfg(windows) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__winapi-util-0.1.9//:winapi_util", # cfg(windows) + "@vendor_ts__winapi-util-0.1.11//:winapi_util", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__winapi-util-0.1.9//:winapi_util", # cfg(windows) + "@vendor_ts__winapi-util-0.1.11//:winapi_util", # cfg(windows) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel index e20972ba9f51..639b6c71a0d3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel @@ -90,7 +90,7 @@ rust_library( }), version = "0.9.0", deps = [ - "@vendor_ts__dyn-clone-1.0.19//:dyn_clone", + "@vendor_ts__dyn-clone-1.0.20//:dyn_clone", "@vendor_ts__ref-cast-1.0.24//:ref_cast", "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_json-1.0.143//:serde_json", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel index d3f2babb7fe9..dce895551c83 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel @@ -90,7 +90,7 @@ rust_library( }), version = "1.0.4", deps = [ - "@vendor_ts__dyn-clone-1.0.19//:dyn_clone", + "@vendor_ts__dyn-clone-1.0.20//:dyn_clone", "@vendor_ts__ref-cast-1.0.24//:ref_cast", "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_json-1.0.143//:serde_json", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel index ba039844fa6b..1a4cca70a4fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.143.bazel @@ -42,7 +42,65 @@ rust_library( "default", "std", "unbounded_depth", - ], + ] + select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [ + "indexmap", # aarch64-apple-darwin + "preserve_order", # aarch64-apple-darwin + ], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ + "indexmap", # aarch64-pc-windows-msvc + "preserve_order", # aarch64-pc-windows-msvc + ], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ + "indexmap", # aarch64-unknown-linux-gnu + "preserve_order", # aarch64-unknown-linux-gnu + ], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ + "indexmap", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu + "preserve_order", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu + ], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ + "indexmap", # arm-unknown-linux-gnueabi + "preserve_order", # arm-unknown-linux-gnueabi + ], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [ + "indexmap", # i686-pc-windows-msvc + "preserve_order", # i686-pc-windows-msvc + ], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ + "indexmap", # i686-unknown-linux-gnu + "preserve_order", # i686-unknown-linux-gnu + ], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ + "indexmap", # powerpc-unknown-linux-gnu + "preserve_order", # powerpc-unknown-linux-gnu + ], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ + "indexmap", # s390x-unknown-linux-gnu + "preserve_order", # s390x-unknown-linux-gnu + ], + "@rules_rust//rust/platform:x86_64-apple-darwin": [ + "indexmap", # x86_64-apple-darwin + "preserve_order", # x86_64-apple-darwin + ], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ + "indexmap", # x86_64-pc-windows-msvc + "preserve_order", # x86_64-pc-windows-msvc + ], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ + "indexmap", # x86_64-unknown-freebsd + "preserve_order", # x86_64-unknown-freebsd + ], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ + "indexmap", # x86_64-unknown-linux-gnu + "preserve_order", # x86_64-unknown-linux-gnu + ], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ + "indexmap", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu + "preserve_order", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu + ], + "//conditions:default": [], + }), crate_root = "src/lib.rs", edition = "2021", rustc_env_files = [ @@ -104,7 +162,51 @@ rust_library( "@vendor_ts__ryu-1.0.20//:ryu", "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_json-1.0.143//:build_script_build", - ], + ] + select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # aarch64-apple-darwin + ], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # aarch64-pc-windows-msvc + ], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # aarch64-unknown-linux-gnu + ], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu + ], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # arm-unknown-linux-gnueabi + ], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # i686-pc-windows-msvc + ], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # i686-unknown-linux-gnu + ], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # powerpc-unknown-linux-gnu + ], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # s390x-unknown-linux-gnu + ], + "@rules_rust//rust/platform:x86_64-apple-darwin": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # x86_64-apple-darwin + ], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # x86_64-pc-windows-msvc + ], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # x86_64-unknown-freebsd + ], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # x86_64-unknown-linux-gnu + ], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ + "@vendor_ts__indexmap-2.11.1//:indexmap", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu + ], + "//conditions:default": [], + }), ) cargo_build_script( @@ -130,7 +232,65 @@ cargo_build_script( "default", "std", "unbounded_depth", - ], + ] + select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [ + "indexmap", # aarch64-apple-darwin + "preserve_order", # aarch64-apple-darwin + ], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ + "indexmap", # aarch64-pc-windows-msvc + "preserve_order", # aarch64-pc-windows-msvc + ], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ + "indexmap", # aarch64-unknown-linux-gnu + "preserve_order", # aarch64-unknown-linux-gnu + ], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ + "indexmap", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu + "preserve_order", # aarch64-unknown-linux-gnu, aarch64-unknown-nixos-gnu + ], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ + "indexmap", # arm-unknown-linux-gnueabi + "preserve_order", # arm-unknown-linux-gnueabi + ], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [ + "indexmap", # i686-pc-windows-msvc + "preserve_order", # i686-pc-windows-msvc + ], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ + "indexmap", # i686-unknown-linux-gnu + "preserve_order", # i686-unknown-linux-gnu + ], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ + "indexmap", # powerpc-unknown-linux-gnu + "preserve_order", # powerpc-unknown-linux-gnu + ], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ + "indexmap", # s390x-unknown-linux-gnu + "preserve_order", # s390x-unknown-linux-gnu + ], + "@rules_rust//rust/platform:x86_64-apple-darwin": [ + "indexmap", # x86_64-apple-darwin + "preserve_order", # x86_64-apple-darwin + ], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ + "indexmap", # x86_64-pc-windows-msvc + "preserve_order", # x86_64-pc-windows-msvc + ], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ + "indexmap", # x86_64-unknown-freebsd + "preserve_order", # x86_64-unknown-freebsd + ], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ + "indexmap", # x86_64-unknown-linux-gnu + "preserve_order", # x86_64-unknown-linux-gnu + ], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ + "indexmap", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu + "preserve_order", # x86_64-unknown-linux-gnu, x86_64-unknown-nixos-gnu + ], + "//conditions:default": [], + }), crate_name = "build_script_build", crate_root = "build.rs", data = glob( diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.41.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.41.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel index 1b720393766f..9df78d1b4b6d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.41.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel @@ -88,11 +88,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.3.41", + version = "0.3.43", deps = [ - "@vendor_ts__deranged-0.4.0//:deranged", + "@vendor_ts__deranged-0.5.3//:deranged", "@vendor_ts__num-conv-0.1.0//:num_conv", "@vendor_ts__powerfmt-0.2.0//:powerfmt", - "@vendor_ts__time-core-0.1.4//:time_core", + "@vendor_ts__time-core-0.1.6//:time_core", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.4.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel index ba20cfd5d040..31940c3f306c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel @@ -88,5 +88,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.4", + version = "0.1.6", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.22.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.22.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel index 97ace68543e7..3e3c5b921ab2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.22.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel @@ -88,9 +88,9 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.22", + version = "0.2.24", deps = [ "@vendor_ts__num-conv-0.1.0//:num_conv", - "@vendor_ts__time-core-0.1.4//:time_core", + "@vendor_ts__time-core-0.1.6//:time_core", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel index a7a0383b0e80..0cb981e47550 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.24.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel @@ -96,12 +96,12 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.24.6", + version = "0.25.9", deps = [ "@vendor_ts__regex-1.11.2//:regex", "@vendor_ts__regex-syntax-0.8.6//:regex_syntax", "@vendor_ts__streaming-iterator-0.1.9//:streaming_iterator", - "@vendor_ts__tree-sitter-0.24.6//:build_script_build", + "@vendor_ts__tree-sitter-0.25.9//:build_script_build", "@vendor_ts__tree-sitter-language-0.1.5//:tree_sitter_language", ], ) @@ -159,10 +159,11 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.24.6", + version = "0.25.9", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", + "@vendor_ts__serde_json-1.0.143//:serde_json", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel index 8670b58b2598..a2cac2bd450c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.23.2.bazel @@ -150,7 +150,7 @@ cargo_build_script( version = "0.23.2", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel index c3486fc0767f..ae6d02ae4eb5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel @@ -150,7 +150,7 @@ cargo_build_script( version = "0.24.8", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel index d2a2bd95c412..4377d9f8cb9c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel @@ -150,7 +150,7 @@ cargo_build_script( version = "0.23.1", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel index 0ffef789ac29..86f87e700227 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel @@ -150,7 +150,7 @@ cargo_build_script( version = "0.23.1", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel index 3ee13a3e6f72..14ba229e7fc2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel @@ -93,13 +93,13 @@ rust_library( "@vendor_ts__same-file-1.0.6//:same_file", ] + select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__winapi-util-0.1.9//:winapi_util", # cfg(windows) + "@vendor_ts__winapi-util-0.1.11//:winapi_util", # cfg(windows) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__winapi-util-0.1.9//:winapi_util", # cfg(windows) + "@vendor_ts__winapi-util-0.1.11//:winapi_util", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__winapi-util-0.1.9//:winapi_util", # cfg(windows) + "@vendor_ts__winapi-util-0.1.11//:winapi_util", # cfg(windows) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.2+wasi-0.2.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.2+wasi-0.2.4.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel index 9fc7384facd7..81a3a287a544 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.2+wasi-0.2.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel @@ -88,8 +88,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.14.2+wasi-0.2.4", + version = "0.14.5+wasi-0.2.4", deps = [ - "@vendor_ts__wit-bindgen-rt-0.39.0//:wit_bindgen_rt", + "@vendor_ts__wasip2-1.0.0-wasi-0.2.4//:wasip2", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel new file mode 100644 index 000000000000..ce61edb001dc --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel @@ -0,0 +1,95 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +cargo_toml_env_vars( + name = "cargo_toml_env_vars", + src = "Cargo.toml", +) + +rust_library( + name = "wasip2", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_env_files = [ + ":cargo_toml_env_vars", + ], + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=wasip2", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "1.0.0+wasi-0.2.4", + deps = [ + "@vendor_ts__wit-bindgen-0.45.1//:wit_bindgen", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel similarity index 92% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel index 6f2e24a7df13..3debce4ea85a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel @@ -47,8 +47,8 @@ rust_library( crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ - "@vendor_ts__rustversion-1.0.21//:rustversion", - "@vendor_ts__wasm-bindgen-macro-0.2.100//:wasm_bindgen_macro", + "@vendor_ts__rustversion-1.0.22//:rustversion", + "@vendor_ts__wasm-bindgen-macro-0.2.101//:wasm_bindgen_macro", ], rustc_env_files = [ ":cargo_toml_env_vars", @@ -102,11 +102,12 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.100", + version = "0.2.101", deps = [ "@vendor_ts__cfg-if-1.0.3//:cfg_if", "@vendor_ts__once_cell-1.21.3//:once_cell", - "@vendor_ts__wasm-bindgen-0.2.100//:build_script_build", + "@vendor_ts__wasm-bindgen-0.2.101//:build_script_build", + "@vendor_ts__wasm-bindgen-shared-0.2.101//:wasm_bindgen_shared", ], ) @@ -150,6 +151,9 @@ cargo_build_script( ], ), edition = "2021", + link_deps = [ + "@vendor_ts__wasm-bindgen-shared-0.2.101//:wasm_bindgen_shared", + ], pkg_name = "wasm-bindgen", rustc_env_files = [ ":cargo_toml_env_vars", @@ -164,7 +168,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.2.100", + version = "0.2.101", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel index 28ad2fb698ae..5a85b0e104d2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel @@ -88,13 +88,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.100", + version = "0.2.101", deps = [ "@vendor_ts__bumpalo-3.19.0//:bumpalo", "@vendor_ts__log-0.4.28//:log", "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", "@vendor_ts__syn-2.0.106//:syn", - "@vendor_ts__wasm-bindgen-shared-0.2.100//:wasm_bindgen_shared", + "@vendor_ts__wasm-bindgen-shared-0.2.101//:wasm_bindgen_shared", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.100.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel index f6fb33e15f0a..4b1549c57ddf 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel @@ -88,9 +88,9 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.100", + version = "0.2.101", deps = [ "@vendor_ts__quote-1.0.40//:quote", - "@vendor_ts__wasm-bindgen-macro-support-0.2.100//:wasm_bindgen_macro_support", + "@vendor_ts__wasm-bindgen-macro-support-0.2.101//:wasm_bindgen_macro_support", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel index fee49d321cd4..c42233e4e244 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel @@ -88,12 +88,12 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.100", + version = "0.2.101", deps = [ "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", "@vendor_ts__syn-2.0.106//:syn", - "@vendor_ts__wasm-bindgen-backend-0.2.100//:wasm_bindgen_backend", - "@vendor_ts__wasm-bindgen-shared-0.2.100//:wasm_bindgen_shared", + "@vendor_ts__wasm-bindgen-backend-0.2.101//:wasm_bindgen_backend", + "@vendor_ts__wasm-bindgen-shared-0.2.101//:wasm_bindgen_shared", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel index 294ab4320f66..2c087bf3c823 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel @@ -92,10 +92,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.100", + version = "0.2.101", deps = [ "@vendor_ts__unicode-ident-1.0.19//:unicode_ident", - "@vendor_ts__wasm-bindgen-shared-0.2.100//:build_script_build", + "@vendor_ts__wasm-bindgen-shared-0.2.101//:build_script_build", ], ) @@ -148,7 +148,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.2.100", + version = "0.2.101", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel similarity index 94% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.9.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel index 4699f73a72eb..d31853499e8a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel @@ -88,16 +88,16 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.1.9", + version = "0.1.11", deps = select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.61.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.61.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) + "@vendor_ts__windows-sys-0.61.0//:windows_sys", # cfg(windows) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel index 1b642978cc0f..429981ce0402 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel @@ -37,12 +37,8 @@ rust_library( crate_features = [ "Win32", "Win32_Foundation", - "Win32_Storage", - "Win32_Storage_FileSystem", "Win32_System", "Win32_System_Com", - "Win32_System_Console", - "Win32_System_SystemInformation", "Win32_UI", "Win32_UI_Shell", "default", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel index 37a3356269b7..6904a3890972 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel @@ -104,6 +104,6 @@ rust_library( }), version = "0.60.2", deps = [ - "@vendor_ts__windows-targets-0.53.2//:windows_targets", + "@vendor_ts__windows-targets-0.53.3//:windows_targets", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.48.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.48.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel index 5517c53feda6..0e9f1f723ed3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.48.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel @@ -43,13 +43,15 @@ rust_library( "Win32_Storage", "Win32_Storage_FileSystem", "Win32_System", + "Win32_System_Console", "Win32_System_IO", "Win32_System_Pipes", + "Win32_System_SystemInformation", "Win32_System_Threading", "default", ], crate_root = "src/lib.rs", - edition = "2018", + edition = "2021", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -102,8 +104,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.48.0", + version = "0.61.0", deps = [ - "@vendor_ts__windows-targets-0.48.5//:windows_targets", + "@vendor_ts__windows-link-0.2.0//:windows_link", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.48.5.bazel deleted file mode 100644 index ebe18b13d6e5..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.48.5.bazel +++ /dev/null @@ -1,113 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_targets", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows-targets", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = select({ - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows_aarch64_msvc-0.48.5//:windows_aarch64_msvc", # cfg(all(target_arch = "aarch64", target_env = "msvc", not(windows_raw_dylib))) - ], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows_i686_msvc-0.48.5//:windows_i686_msvc", # cfg(all(target_arch = "x86", target_env = "msvc", not(windows_raw_dylib))) - ], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__windows_i686_gnu-0.48.5//:windows_i686_gnu", # cfg(all(target_arch = "x86", target_env = "gnu", not(windows_raw_dylib))) - ], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows_x86_64_msvc-0.48.5//:windows_x86_64_msvc", # cfg(all(target_arch = "x86_64", target_env = "msvc", not(windows_raw_dylib))) - ], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__windows_x86_64_gnu-0.48.5//:windows_x86_64_gnu", # cfg(all(target_arch = "x86_64", target_env = "gnu", not(target_abi = "llvm"), not(windows_raw_dylib))) - ], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__windows_x86_64_gnu-0.48.5//:windows_x86_64_gnu", # cfg(all(target_arch = "x86_64", target_env = "gnu", not(target_abi = "llvm"), not(windows_raw_dylib))) - ], - "//conditions:default": [], - }), -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.2.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel index 6f9255ba423e..74f5aa79ab0d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel @@ -88,7 +88,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.53.2", + version = "0.53.3", deps = select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__windows_aarch64_msvc-0.53.0//:windows_aarch64_msvc", # cfg(all(target_arch = "aarch64", target_env = "msvc", not(windows_raw_dylib))) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.48.5.bazel deleted file mode 100644 index 5d16d71c77e4..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.48.5.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_aarch64_msvc", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_aarch64_msvc", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = [ - "@vendor_ts__windows_aarch64_msvc-0.48.5//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2018", - pkg_name = "windows_aarch64_msvc", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_aarch64_msvc", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.48.5", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.48.5.bazel deleted file mode 100644 index 4e9c211e2f8e..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.48.5.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_i686_gnu", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_i686_gnu", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = [ - "@vendor_ts__windows_i686_gnu-0.48.5//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2018", - pkg_name = "windows_i686_gnu", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_i686_gnu", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.48.5", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.48.5.bazel deleted file mode 100644 index 8057157574e2..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.48.5.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_i686_msvc", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_i686_msvc", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = [ - "@vendor_ts__windows_i686_msvc-0.48.5//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2018", - pkg_name = "windows_i686_msvc", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_i686_msvc", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.48.5", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.48.5.bazel deleted file mode 100644 index 79ebf6c9ad76..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.48.5.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_x86_64_gnu", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_x86_64_gnu", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = [ - "@vendor_ts__windows_x86_64_gnu-0.48.5//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2018", - pkg_name = "windows_x86_64_gnu", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_x86_64_gnu", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.48.5", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.48.5.bazel deleted file mode 100644 index 4a8f3a921230..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.48.5.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_x86_64_gnullvm", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_x86_64_gnullvm", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = [ - "@vendor_ts__windows_x86_64_gnullvm-0.48.5//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2018", - pkg_name = "windows_x86_64_gnullvm", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_x86_64_gnullvm", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.48.5", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.48.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.48.5.bazel deleted file mode 100644 index 47c0fc5917b3..000000000000 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.48.5.bazel +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################### -# @generated -# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To -# regenerate this file, run the following: -# -# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors -############################################################################### - -load( - "@rules_rust//cargo:defs.bzl", - "cargo_build_script", - "cargo_toml_env_vars", -) -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -cargo_toml_env_vars( - name = "cargo_toml_env_vars", - src = "Cargo.toml", -) - -rust_library( - name = "windows_x86_64_msvc", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_root = "src/lib.rs", - edition = "2018", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_x86_64_msvc", - "manual", - "noclippy", - "norustfmt", - ], - target_compatible_with = select({ - "@rules_rust//rust/platform:aarch64-apple-darwin": [], - "@rules_rust//rust/platform:aarch64-apple-ios": [], - "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], - "@rules_rust//rust/platform:aarch64-linux-android": [], - "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], - "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], - "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], - "@rules_rust//rust/platform:aarch64-unknown-uefi": [], - "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:armv7-linux-androideabi": [], - "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], - "@rules_rust//rust/platform:i686-apple-darwin": [], - "@rules_rust//rust/platform:i686-linux-android": [], - "@rules_rust//rust/platform:i686-pc-windows-msvc": [], - "@rules_rust//rust/platform:i686-unknown-freebsd": [], - "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], - "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], - "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], - "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], - "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], - "@rules_rust//rust/platform:thumbv7em-none-eabi": [], - "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], - "@rules_rust//rust/platform:wasm32-unknown-unknown": [], - "@rules_rust//rust/platform:wasm32-wasip1": [], - "@rules_rust//rust/platform:x86_64-apple-darwin": [], - "@rules_rust//rust/platform:x86_64-apple-ios": [], - "@rules_rust//rust/platform:x86_64-linux-android": [], - "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], - "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], - "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], - "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], - "@rules_rust//rust/platform:x86_64-unknown-none": [], - "@rules_rust//rust/platform:x86_64-unknown-uefi": [], - "//conditions:default": ["@platforms//:incompatible"], - }), - version = "0.48.5", - deps = [ - "@vendor_ts__windows_x86_64_msvc-0.48.5//:build_script_build", - ], -) - -cargo_build_script( - name = "_bs", - srcs = glob( - include = ["**/*.rs"], - allow_empty = True, - ), - compile_data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - "**/*.rs", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - crate_name = "build_script_build", - crate_root = "build.rs", - data = glob( - include = ["**"], - allow_empty = True, - exclude = [ - "**/* *", - ".tmp_git_root/**/*", - "BUILD", - "BUILD.bazel", - "WORKSPACE", - "WORKSPACE.bazel", - ], - ), - edition = "2018", - pkg_name = "windows_x86_64_msvc", - rustc_env_files = [ - ":cargo_toml_env_vars", - ], - rustc_flags = [ - "--cap-lints=allow", - ], - tags = [ - "cargo-bazel", - "crate-name=windows_x86_64_msvc", - "manual", - "noclippy", - "norustfmt", - ], - version = "0.48.5", - visibility = ["//visibility:private"], -) - -alias( - name = "build_script_build", - actual = ":_bs", - tags = ["manual"], -) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-rt-0.39.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-rt-0.39.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel index 44b325ec96c4..a34a3e6b17dc 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-rt-0.39.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel @@ -21,7 +21,7 @@ cargo_toml_env_vars( ) rust_library( - name = "wit_bindgen_rt", + name = "wit_bindgen", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -48,7 +48,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=wit-bindgen-rt", + "crate-name=wit-bindgen", "manual", "noclippy", "norustfmt", @@ -92,9 +92,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.39.0", + version = "0.45.1", deps = [ - "@vendor_ts__wit-bindgen-rt-0.39.0//:build_script_build", + "@vendor_ts__wit-bindgen-0.45.1//:build_script_build", ], ) @@ -132,7 +132,7 @@ cargo_build_script( ], ), edition = "2021", - pkg_name = "wit-bindgen-rt", + pkg_name = "wit-bindgen", rustc_env_files = [ ":cargo_toml_env_vars", ], @@ -141,12 +141,12 @@ cargo_build_script( ], tags = [ "cargo-bazel", - "crate-name=wit-bindgen-rt", + "crate-name=wit-bindgen", "manual", "noclippy", "norustfmt", ], - version = "0.39.0", + version = "0.45.1", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.26.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.26.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel index 32d5cf2d5a39..a35e65a1f4d0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.26.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel @@ -95,9 +95,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.8.26", + version = "0.8.27", deps = [ - "@vendor_ts__zerocopy-0.8.26//:build_script_build", + "@vendor_ts__zerocopy-0.8.27//:build_script_build", ], ) @@ -152,7 +152,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "0.8.26", + version = "0.8.27", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel index 3a67f140d49b..b3cddbaed905 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.26.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel @@ -88,7 +88,7 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.8.26", + version = "0.8.27", deps = [ "@vendor_ts__proc-macro2-1.0.101//:proc_macro2", "@vendor_ts__quote-1.0.40//:quote", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel index 449d88c74f22..4ac45c9e1ba9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel @@ -101,7 +101,7 @@ rust_library( version = "7.2.4", deps = [ "@vendor_ts__zstd-safe-7.2.4//:build_script_build", - "@vendor_ts__zstd-sys-2.0.15-zstd.1.5.7//:zstd_sys", + "@vendor_ts__zstd-sys-2.0.16-zstd.1.5.7//:zstd_sys", ], ) @@ -146,7 +146,7 @@ cargo_build_script( ), edition = "2018", link_deps = [ - "@vendor_ts__zstd-sys-2.0.15-zstd.1.5.7//:zstd_sys", + "@vendor_ts__zstd-sys-2.0.16-zstd.1.5.7//:zstd_sys", ], pkg_name = "zstd-safe", rustc_env_files = [ diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel index 0f7e49bb7723..8f03d8a3bf74 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel @@ -97,9 +97,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.15+zstd.1.5.7", + version = "2.0.16+zstd.1.5.7", deps = [ - "@vendor_ts__zstd-sys-2.0.15-zstd.1.5.7//:build_script_build", + "@vendor_ts__zstd-sys-2.0.16-zstd.1.5.7//:build_script_build", ], ) @@ -157,10 +157,10 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "2.0.15+zstd.1.5.7", + version = "2.0.16+zstd.1.5.7", visibility = ["//visibility:private"], deps = [ - "@vendor_ts__cc-1.2.36//:cc", + "@vendor_ts__cc-1.2.37//:cc", "@vendor_ts__pkg-config-0.3.32//:pkg_config", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index a6ed91398fa3..6f5c2f2a7b20 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -303,7 +303,7 @@ _NORMAL_DEPENDENCIES = { "serde_json": Label("@vendor_ts__serde_json-1.0.143//:serde_json"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber"), - "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), + "tree-sitter": Label("@vendor_ts__tree-sitter-0.25.9//:tree_sitter"), "tree-sitter-embedded-template": Label("@vendor_ts__tree-sitter-embedded-template-0.23.2//:tree_sitter_embedded_template"), "tree-sitter-ruby": Label("@vendor_ts__tree-sitter-ruby-0.23.1//:tree_sitter_ruby"), }, @@ -371,8 +371,8 @@ _NORMAL_DEPENDENCIES = { _COMMON_CONDITION: { "chrono": Label("@vendor_ts__chrono-0.4.42//:chrono"), "encoding": Label("@vendor_ts__encoding-0.2.33//:encoding"), - "flate2": Label("@vendor_ts__flate2-1.1.0//:flate2"), - "globset": Label("@vendor_ts__globset-0.4.15//:globset"), + "flate2": Label("@vendor_ts__flate2-1.1.2//:flate2"), + "globset": Label("@vendor_ts__globset-0.4.16//:globset"), "lazy_static": Label("@vendor_ts__lazy_static-1.5.0//:lazy_static"), "num_cpus": Label("@vendor_ts__num_cpus-1.17.0//:num_cpus"), "rayon": Label("@vendor_ts__rayon-1.11.0//:rayon"), @@ -381,7 +381,7 @@ _NORMAL_DEPENDENCIES = { "serde_json": Label("@vendor_ts__serde_json-1.0.143//:serde_json"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.20//:tracing_subscriber"), - "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), + "tree-sitter": Label("@vendor_ts__tree-sitter-0.25.9//:tree_sitter"), "zstd": Label("@vendor_ts__zstd-0.13.3//:zstd"), }, }, @@ -593,10 +593,8 @@ _CONDITIONS = { "cfg(all(target_arch = \"wasm32\", target_os = \"unknown\"))": ["@rules_rust//rust/platform:wasm32-unknown-unknown"], "cfg(all(target_arch = \"wasm32\", target_os = \"wasi\", target_env = \"p2\"))": [], "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": ["@rules_rust//rust/platform:i686-unknown-linux-gnu"], - "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:i686-unknown-linux-gnu"], "cfg(all(target_arch = \"x86\", target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:i686-pc-windows-msvc"], "cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], - "cfg(all(target_arch = \"x86_64\", target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-pc-windows-msvc"], "cfg(all(target_os = \"linux\", not(target_env = \"ohos\")))": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(target_os = \"linux\", target_env = \"gnu\"))": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(target_os = \"uefi\", getrandom_backend = \"efi_rng\"))": [], @@ -622,6 +620,7 @@ _CONDITIONS = { "cfg(target_vendor = \"apple\")": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios"], "cfg(unix)": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-fuchsia", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-fuchsia", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(windows)": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc"], + "cfg(windows_raw_dylib)": [], "i686-apple-darwin": ["@rules_rust//rust/platform:i686-apple-darwin"], "i686-linux-android": ["@rules_rust//rust/platform:i686-linux-android"], "i686-pc-windows-gnullvm": [], @@ -659,12 +658,12 @@ def crate_repositories(): """ maybe( http_archive, - name = "vendor_ts__adler2-2.0.0", - sha256 = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627", + name = "vendor_ts__adler2-2.0.1", + sha256 = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa", type = "tar.gz", - urls = ["https://static.crates.io/crates/adler2/2.0.0/download"], - strip_prefix = "adler2-2.0.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.adler2-2.0.0.bazel"), + urls = ["https://static.crates.io/crates/adler2/2.0.1/download"], + strip_prefix = "adler2-2.0.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.adler2-2.0.1.bazel"), ) maybe( @@ -739,12 +738,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__anstyle-wincon-3.0.9", - sha256 = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882", + name = "vendor_ts__anstyle-wincon-3.0.10", + sha256 = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a", type = "tar.gz", - urls = ["https://static.crates.io/crates/anstyle-wincon/3.0.9/download"], - strip_prefix = "anstyle-wincon-3.0.9", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anstyle-wincon-3.0.9.bazel"), + urls = ["https://static.crates.io/crates/anstyle-wincon/3.0.10/download"], + strip_prefix = "anstyle-wincon-3.0.10", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anstyle-wincon-3.0.10.bazel"), ) maybe( @@ -779,12 +778,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__atomic-0.6.0", - sha256 = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994", + name = "vendor_ts__atomic-0.6.1", + sha256 = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340", type = "tar.gz", - urls = ["https://static.crates.io/crates/atomic/0.6.0/download"], - strip_prefix = "atomic-0.6.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.atomic-0.6.0.bazel"), + urls = ["https://static.crates.io/crates/atomic/0.6.1/download"], + strip_prefix = "atomic-0.6.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.atomic-0.6.1.bazel"), ) maybe( @@ -849,12 +848,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__bstr-1.11.3", - sha256 = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0", + name = "vendor_ts__bstr-1.12.0", + sha256 = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4", type = "tar.gz", - urls = ["https://static.crates.io/crates/bstr/1.11.3/download"], - strip_prefix = "bstr-1.11.3", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.bstr-1.11.3.bazel"), + urls = ["https://static.crates.io/crates/bstr/1.12.0/download"], + strip_prefix = "bstr-1.12.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.bstr-1.12.0.bazel"), ) maybe( @@ -869,12 +868,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__bytemuck-1.21.0", - sha256 = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3", + name = "vendor_ts__bytemuck-1.23.2", + sha256 = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677", type = "tar.gz", - urls = ["https://static.crates.io/crates/bytemuck/1.21.0/download"], - strip_prefix = "bytemuck-1.21.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.bytemuck-1.21.0.bazel"), + urls = ["https://static.crates.io/crates/bytemuck/1.23.2/download"], + strip_prefix = "bytemuck-1.23.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.bytemuck-1.23.2.bazel"), ) maybe( @@ -919,12 +918,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__cc-1.2.36", - sha256 = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54", + name = "vendor_ts__cc-1.2.37", + sha256 = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44", type = "tar.gz", - urls = ["https://static.crates.io/crates/cc/1.2.36/download"], - strip_prefix = "cc-1.2.36", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cc-1.2.36.bazel"), + urls = ["https://static.crates.io/crates/cc/1.2.37/download"], + strip_prefix = "cc-1.2.37", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cc-1.2.37.bazel"), ) maybe( @@ -1089,22 +1088,22 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__cov-mark-2.0.0", - sha256 = "0570650661aa447e7335f1d5e4f499d8e58796e617bedc9267d971e51c8b49d4", + name = "vendor_ts__cov-mark-2.1.0", + sha256 = "3f1d92727879fb4f24cec33a35e3bff74035541326cbc12ad44ba8886d1927b0", type = "tar.gz", - urls = ["https://static.crates.io/crates/cov-mark/2.0.0/download"], - strip_prefix = "cov-mark-2.0.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cov-mark-2.0.0.bazel"), + urls = ["https://static.crates.io/crates/cov-mark/2.1.0/download"], + strip_prefix = "cov-mark-2.1.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.cov-mark-2.1.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__crc32fast-1.4.2", - sha256 = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3", + name = "vendor_ts__crc32fast-1.5.0", + sha256 = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511", type = "tar.gz", - urls = ["https://static.crates.io/crates/crc32fast/1.4.2/download"], - strip_prefix = "crc32fast-1.4.2", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.crc32fast-1.4.2.bazel"), + urls = ["https://static.crates.io/crates/crc32fast/1.5.0/download"], + strip_prefix = "crc32fast-1.5.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.crc32fast-1.5.0.bazel"), ) maybe( @@ -1199,12 +1198,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__deranged-0.4.0", - sha256 = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e", + name = "vendor_ts__deranged-0.5.3", + sha256 = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc", type = "tar.gz", - urls = ["https://static.crates.io/crates/deranged/0.4.0/download"], - strip_prefix = "deranged-0.4.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.deranged-0.4.0.bazel"), + urls = ["https://static.crates.io/crates/deranged/0.5.3/download"], + strip_prefix = "deranged-0.5.3", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.deranged-0.5.3.bazel"), ) maybe( @@ -1239,12 +1238,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__dyn-clone-1.0.19", - sha256 = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005", + name = "vendor_ts__dyn-clone-1.0.20", + sha256 = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555", type = "tar.gz", - urls = ["https://static.crates.io/crates/dyn-clone/1.0.19/download"], - strip_prefix = "dyn-clone-1.0.19", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.dyn-clone-1.0.19.bazel"), + urls = ["https://static.crates.io/crates/dyn-clone/1.0.20/download"], + strip_prefix = "dyn-clone-1.0.20", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.dyn-clone-1.0.20.bazel"), ) maybe( @@ -1389,12 +1388,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__flate2-1.1.0", - sha256 = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc", + name = "vendor_ts__flate2-1.1.2", + sha256 = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d", type = "tar.gz", - urls = ["https://static.crates.io/crates/flate2/1.1.0/download"], - strip_prefix = "flate2-1.1.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.flate2-1.1.0.bazel"), + urls = ["https://static.crates.io/crates/flate2/1.1.2/download"], + strip_prefix = "flate2-1.1.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.flate2-1.1.2.bazel"), ) maybe( @@ -1479,12 +1478,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__globset-0.4.15", - sha256 = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19", + name = "vendor_ts__globset-0.4.16", + sha256 = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5", type = "tar.gz", - urls = ["https://static.crates.io/crates/globset/0.4.15/download"], - strip_prefix = "globset-0.4.15", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.globset-0.4.15.bazel"), + urls = ["https://static.crates.io/crates/globset/0.4.16/download"], + strip_prefix = "globset-0.4.16", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.globset-0.4.16.bazel"), ) maybe( @@ -1809,12 +1808,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__js-sys-0.3.77", - sha256 = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f", + name = "vendor_ts__js-sys-0.3.78", + sha256 = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738", type = "tar.gz", - urls = ["https://static.crates.io/crates/js-sys/0.3.77/download"], - strip_prefix = "js-sys-0.3.77", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.js-sys-0.3.77.bazel"), + urls = ["https://static.crates.io/crates/js-sys/0.3.78/download"], + strip_prefix = "js-sys-0.3.78", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.js-sys-0.3.78.bazel"), ) maybe( @@ -1949,12 +1948,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__miniz_oxide-0.8.5", - sha256 = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5", + name = "vendor_ts__miniz_oxide-0.8.9", + sha256 = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316", type = "tar.gz", - urls = ["https://static.crates.io/crates/miniz_oxide/0.8.5/download"], - strip_prefix = "miniz_oxide-0.8.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.miniz_oxide-0.8.5.bazel"), + urls = ["https://static.crates.io/crates/miniz_oxide/0.8.9/download"], + strip_prefix = "miniz_oxide-0.8.9", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.miniz_oxide-0.8.9.bazel"), ) maybe( @@ -1969,12 +1968,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__miow-0.6.0", - sha256 = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044", + name = "vendor_ts__miow-0.6.1", + sha256 = "536bfad37a309d62069485248eeaba1e8d9853aaf951caaeaed0585a95346f08", type = "tar.gz", - urls = ["https://static.crates.io/crates/miow/0.6.0/download"], - strip_prefix = "miow-0.6.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.miow-0.6.0.bazel"), + urls = ["https://static.crates.io/crates/miow/0.6.1/download"], + strip_prefix = "miow-0.6.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.miow-0.6.1.bazel"), ) maybe( @@ -1999,12 +1998,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__notify-8.1.0", - sha256 = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97", + name = "vendor_ts__notify-8.2.0", + sha256 = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3", type = "tar.gz", - urls = ["https://static.crates.io/crates/notify/8.1.0/download"], - strip_prefix = "notify-8.1.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.notify-8.1.0.bazel"), + urls = ["https://static.crates.io/crates/notify/8.2.0/download"], + strip_prefix = "notify-8.2.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.notify-8.2.0.bazel"), ) maybe( @@ -2099,12 +2098,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__os_str_bytes-7.0.0", - sha256 = "7ac44c994af577c799b1b4bd80dc214701e349873ad894d6cdf96f4f7526e0b9", + name = "vendor_ts__os_str_bytes-7.1.1", + sha256 = "63eceb7b5d757011a87d08eb2123db15d87fb0c281f65d101ce30a1e96c3ad5c", type = "tar.gz", - urls = ["https://static.crates.io/crates/os_str_bytes/7.0.0/download"], - strip_prefix = "os_str_bytes-7.0.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.os_str_bytes-7.0.0.bazel"), + urls = ["https://static.crates.io/crates/os_str_bytes/7.1.1/download"], + strip_prefix = "os_str_bytes-7.1.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.os_str_bytes-7.1.1.bazel"), ) maybe( @@ -2679,12 +2678,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__redox_syscall-0.5.13", - sha256 = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6", + name = "vendor_ts__redox_syscall-0.5.17", + sha256 = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77", type = "tar.gz", - urls = ["https://static.crates.io/crates/redox_syscall/0.5.13/download"], - strip_prefix = "redox_syscall-0.5.13", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.redox_syscall-0.5.13.bazel"), + urls = ["https://static.crates.io/crates/redox_syscall/0.5.17/download"], + strip_prefix = "redox_syscall-0.5.17", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.redox_syscall-0.5.17.bazel"), ) maybe( @@ -2799,12 +2798,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__rustversion-1.0.21", - sha256 = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d", + name = "vendor_ts__rustversion-1.0.22", + sha256 = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d", type = "tar.gz", - urls = ["https://static.crates.io/crates/rustversion/1.0.21/download"], - strip_prefix = "rustversion-1.0.21", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rustversion-1.0.21.bazel"), + urls = ["https://static.crates.io/crates/rustversion/1.0.22/download"], + strip_prefix = "rustversion-1.0.22", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rustversion-1.0.22.bazel"), ) maybe( @@ -3169,32 +3168,32 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__time-0.3.41", - sha256 = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40", + name = "vendor_ts__time-0.3.43", + sha256 = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031", type = "tar.gz", - urls = ["https://static.crates.io/crates/time/0.3.41/download"], - strip_prefix = "time-0.3.41", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-0.3.41.bazel"), + urls = ["https://static.crates.io/crates/time/0.3.43/download"], + strip_prefix = "time-0.3.43", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-0.3.43.bazel"), ) maybe( http_archive, - name = "vendor_ts__time-core-0.1.4", - sha256 = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c", + name = "vendor_ts__time-core-0.1.6", + sha256 = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b", type = "tar.gz", - urls = ["https://static.crates.io/crates/time-core/0.1.4/download"], - strip_prefix = "time-core-0.1.4", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-core-0.1.4.bazel"), + urls = ["https://static.crates.io/crates/time-core/0.1.6/download"], + strip_prefix = "time-core-0.1.6", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-core-0.1.6.bazel"), ) maybe( http_archive, - name = "vendor_ts__time-macros-0.2.22", - sha256 = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49", + name = "vendor_ts__time-macros-0.2.24", + sha256 = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3", type = "tar.gz", - urls = ["https://static.crates.io/crates/time-macros/0.2.22/download"], - strip_prefix = "time-macros-0.2.22", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-macros-0.2.22.bazel"), + urls = ["https://static.crates.io/crates/time-macros/0.2.24/download"], + strip_prefix = "time-macros-0.2.24", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-macros-0.2.24.bazel"), ) maybe( @@ -3349,12 +3348,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__tree-sitter-0.24.6", - sha256 = "5f2434c86ba59ed15af56039cc5bf1acf8ba76ce301e32ef08827388ef285ec5", + name = "vendor_ts__tree-sitter-0.25.9", + sha256 = "ccd2a058a86cfece0bf96f7cce1021efef9c8ed0e892ab74639173e5ed7a34fa", type = "tar.gz", - urls = ["https://static.crates.io/crates/tree-sitter/0.24.6/download"], - strip_prefix = "tree-sitter-0.24.6", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-0.24.6.bazel"), + urls = ["https://static.crates.io/crates/tree-sitter/0.25.9/download"], + strip_prefix = "tree-sitter-0.25.9", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.tree-sitter-0.25.9.bazel"), ) maybe( @@ -3569,72 +3568,82 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__wasi-0.14.2-wasi-0.2.4", - sha256 = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3", + name = "vendor_ts__wasi-0.14.5-wasi-0.2.4", + sha256 = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4", type = "tar.gz", - urls = ["https://static.crates.io/crates/wasi/0.14.2+wasi-0.2.4/download"], - strip_prefix = "wasi-0.14.2+wasi-0.2.4", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasi-0.14.2+wasi-0.2.4.bazel"), + urls = ["https://static.crates.io/crates/wasi/0.14.5+wasi-0.2.4/download"], + strip_prefix = "wasi-0.14.5+wasi-0.2.4", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasi-0.14.5+wasi-0.2.4.bazel"), ) maybe( http_archive, - name = "vendor_ts__wasm-bindgen-0.2.100", - sha256 = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5", + name = "vendor_ts__wasip2-1.0.0-wasi-0.2.4", + sha256 = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24", type = "tar.gz", - urls = ["https://static.crates.io/crates/wasm-bindgen/0.2.100/download"], - strip_prefix = "wasm-bindgen-0.2.100", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-0.2.100.bazel"), + urls = ["https://static.crates.io/crates/wasip2/1.0.0+wasi-0.2.4/download"], + strip_prefix = "wasip2-1.0.0+wasi-0.2.4", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasip2-1.0.0+wasi-0.2.4.bazel"), ) maybe( http_archive, - name = "vendor_ts__wasm-bindgen-backend-0.2.100", - sha256 = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6", + name = "vendor_ts__wasm-bindgen-0.2.101", + sha256 = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b", type = "tar.gz", - urls = ["https://static.crates.io/crates/wasm-bindgen-backend/0.2.100/download"], - strip_prefix = "wasm-bindgen-backend-0.2.100", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-backend-0.2.100.bazel"), + urls = ["https://static.crates.io/crates/wasm-bindgen/0.2.101/download"], + strip_prefix = "wasm-bindgen-0.2.101", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-0.2.101.bazel"), ) maybe( http_archive, - name = "vendor_ts__wasm-bindgen-macro-0.2.100", - sha256 = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407", + name = "vendor_ts__wasm-bindgen-backend-0.2.101", + sha256 = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb", type = "tar.gz", - urls = ["https://static.crates.io/crates/wasm-bindgen-macro/0.2.100/download"], - strip_prefix = "wasm-bindgen-macro-0.2.100", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-macro-0.2.100.bazel"), + urls = ["https://static.crates.io/crates/wasm-bindgen-backend/0.2.101/download"], + strip_prefix = "wasm-bindgen-backend-0.2.101", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-backend-0.2.101.bazel"), ) maybe( http_archive, - name = "vendor_ts__wasm-bindgen-macro-support-0.2.100", - sha256 = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de", + name = "vendor_ts__wasm-bindgen-macro-0.2.101", + sha256 = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d", type = "tar.gz", - urls = ["https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.100/download"], - strip_prefix = "wasm-bindgen-macro-support-0.2.100", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-macro-support-0.2.100.bazel"), + urls = ["https://static.crates.io/crates/wasm-bindgen-macro/0.2.101/download"], + strip_prefix = "wasm-bindgen-macro-0.2.101", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-macro-0.2.101.bazel"), ) maybe( http_archive, - name = "vendor_ts__wasm-bindgen-shared-0.2.100", - sha256 = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d", + name = "vendor_ts__wasm-bindgen-macro-support-0.2.101", + sha256 = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa", type = "tar.gz", - urls = ["https://static.crates.io/crates/wasm-bindgen-shared/0.2.100/download"], - strip_prefix = "wasm-bindgen-shared-0.2.100", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-shared-0.2.100.bazel"), + urls = ["https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.101/download"], + strip_prefix = "wasm-bindgen-macro-support-0.2.101", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-macro-support-0.2.101.bazel"), ) maybe( http_archive, - name = "vendor_ts__winapi-util-0.1.9", - sha256 = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb", + name = "vendor_ts__wasm-bindgen-shared-0.2.101", + sha256 = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1", type = "tar.gz", - urls = ["https://static.crates.io/crates/winapi-util/0.1.9/download"], - strip_prefix = "winapi-util-0.1.9", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-util-0.1.9.bazel"), + urls = ["https://static.crates.io/crates/wasm-bindgen-shared/0.2.101/download"], + strip_prefix = "wasm-bindgen-shared-0.2.101", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wasm-bindgen-shared-0.2.101.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__winapi-util-0.1.11", + sha256 = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22", + type = "tar.gz", + urls = ["https://static.crates.io/crates/winapi-util/0.1.11/download"], + strip_prefix = "winapi-util-0.1.11", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-util-0.1.11.bazel"), ) maybe( @@ -3707,16 +3716,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-strings-0.4.2.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows-sys-0.48.0", - sha256 = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows-sys/0.48.0/download"], - strip_prefix = "windows-sys-0.48.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-sys-0.48.0.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows-sys-0.52.0", @@ -3749,12 +3748,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__windows-targets-0.48.5", - sha256 = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c", + name = "vendor_ts__windows-sys-0.61.0", + sha256 = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa", type = "tar.gz", - urls = ["https://static.crates.io/crates/windows-targets/0.48.5/download"], - strip_prefix = "windows-targets-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-targets-0.48.5.bazel"), + urls = ["https://static.crates.io/crates/windows-sys/0.61.0/download"], + strip_prefix = "windows-sys-0.61.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-sys-0.61.0.bazel"), ) maybe( @@ -3769,22 +3768,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__windows-targets-0.53.2", - sha256 = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef", + name = "vendor_ts__windows-targets-0.53.3", + sha256 = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91", type = "tar.gz", - urls = ["https://static.crates.io/crates/windows-targets/0.53.2/download"], - strip_prefix = "windows-targets-0.53.2", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-targets-0.53.2.bazel"), - ) - - maybe( - http_archive, - name = "vendor_ts__windows_aarch64_gnullvm-0.48.5", - sha256 = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download"], - strip_prefix = "windows_aarch64_gnullvm-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_aarch64_gnullvm-0.48.5.bazel"), + urls = ["https://static.crates.io/crates/windows-targets/0.53.3/download"], + strip_prefix = "windows-targets-0.53.3", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-targets-0.53.3.bazel"), ) maybe( @@ -3807,16 +3796,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_aarch64_gnullvm-0.53.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows_aarch64_msvc-0.48.5", - sha256 = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download"], - strip_prefix = "windows_aarch64_msvc-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_aarch64_msvc-0.48.5.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows_aarch64_msvc-0.52.6", @@ -3837,16 +3816,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_aarch64_msvc-0.53.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows_i686_gnu-0.48.5", - sha256 = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_i686_gnu/0.48.5/download"], - strip_prefix = "windows_i686_gnu-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_i686_gnu-0.48.5.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows_i686_gnu-0.52.6", @@ -3887,16 +3856,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_i686_gnullvm-0.53.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows_i686_msvc-0.48.5", - sha256 = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_i686_msvc/0.48.5/download"], - strip_prefix = "windows_i686_msvc-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_i686_msvc-0.48.5.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows_i686_msvc-0.52.6", @@ -3917,16 +3876,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_i686_msvc-0.53.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows_x86_64_gnu-0.48.5", - sha256 = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download"], - strip_prefix = "windows_x86_64_gnu-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_x86_64_gnu-0.48.5.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows_x86_64_gnu-0.52.6", @@ -3947,16 +3896,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_x86_64_gnu-0.53.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows_x86_64_gnullvm-0.48.5", - sha256 = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download"], - strip_prefix = "windows_x86_64_gnullvm-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_x86_64_gnullvm-0.48.5.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows_x86_64_gnullvm-0.52.6", @@ -3977,16 +3916,6 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_x86_64_gnullvm-0.53.0.bazel"), ) - maybe( - http_archive, - name = "vendor_ts__windows_x86_64_msvc-0.48.5", - sha256 = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538", - type = "tar.gz", - urls = ["https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download"], - strip_prefix = "windows_x86_64_msvc-0.48.5", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_x86_64_msvc-0.48.5.bazel"), - ) - maybe( http_archive, name = "vendor_ts__windows_x86_64_msvc-0.52.6", @@ -4019,12 +3948,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__wit-bindgen-rt-0.39.0", - sha256 = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1", + name = "vendor_ts__wit-bindgen-0.45.1", + sha256 = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36", type = "tar.gz", - urls = ["https://static.crates.io/crates/wit-bindgen-rt/0.39.0/download"], - strip_prefix = "wit-bindgen-rt-0.39.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wit-bindgen-rt-0.39.0.bazel"), + urls = ["https://static.crates.io/crates/wit-bindgen/0.45.1/download"], + strip_prefix = "wit-bindgen-0.45.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.wit-bindgen-0.45.1.bazel"), ) maybe( @@ -4069,22 +3998,22 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__zerocopy-0.8.26", - sha256 = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f", + name = "vendor_ts__zerocopy-0.8.27", + sha256 = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c", type = "tar.gz", - urls = ["https://static.crates.io/crates/zerocopy/0.8.26/download"], - strip_prefix = "zerocopy-0.8.26", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zerocopy-0.8.26.bazel"), + urls = ["https://static.crates.io/crates/zerocopy/0.8.27/download"], + strip_prefix = "zerocopy-0.8.27", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zerocopy-0.8.27.bazel"), ) maybe( http_archive, - name = "vendor_ts__zerocopy-derive-0.8.26", - sha256 = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181", + name = "vendor_ts__zerocopy-derive-0.8.27", + sha256 = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831", type = "tar.gz", - urls = ["https://static.crates.io/crates/zerocopy-derive/0.8.26/download"], - strip_prefix = "zerocopy-derive-0.8.26", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zerocopy-derive-0.8.26.bazel"), + urls = ["https://static.crates.io/crates/zerocopy-derive/0.8.27/download"], + strip_prefix = "zerocopy-derive-0.8.27", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zerocopy-derive-0.8.27.bazel"), ) maybe( @@ -4159,12 +4088,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__zstd-sys-2.0.15-zstd.1.5.7", - sha256 = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237", + name = "vendor_ts__zstd-sys-2.0.16-zstd.1.5.7", + sha256 = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748", type = "tar.gz", - urls = ["https://static.crates.io/crates/zstd-sys/2.0.15+zstd.1.5.7/download"], - strip_prefix = "zstd-sys-2.0.15+zstd.1.5.7", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zstd-sys-2.0.15+zstd.1.5.7.bazel"), + urls = ["https://static.crates.io/crates/zstd-sys/2.0.16+zstd.1.5.7/download"], + strip_prefix = "zstd-sys-2.0.16+zstd.1.5.7", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel"), ) return [ @@ -4177,9 +4106,9 @@ def crate_repositories(): struct(repo = "vendor_ts__either-1.15.0", is_dev_dep = False), struct(repo = "vendor_ts__encoding-0.2.33", is_dev_dep = False), struct(repo = "vendor_ts__figment-0.10.19", is_dev_dep = False), - struct(repo = "vendor_ts__flate2-1.1.0", is_dev_dep = False), + struct(repo = "vendor_ts__flate2-1.1.2", is_dev_dep = False), struct(repo = "vendor_ts__glob-0.3.3", is_dev_dep = False), - struct(repo = "vendor_ts__globset-0.4.15", is_dev_dep = False), + struct(repo = "vendor_ts__globset-0.4.16", is_dev_dep = False), struct(repo = "vendor_ts__itertools-0.14.0", is_dev_dep = False), struct(repo = "vendor_ts__lazy_static-1.5.0", is_dev_dep = False), struct(repo = "vendor_ts__mustache-0.9.0", is_dev_dep = False), @@ -4213,7 +4142,7 @@ def crate_repositories(): struct(repo = "vendor_ts__tracing-0.1.41", is_dev_dep = False), struct(repo = "vendor_ts__tracing-flame-0.2.0", is_dev_dep = False), struct(repo = "vendor_ts__tracing-subscriber-0.3.20", is_dev_dep = False), - struct(repo = "vendor_ts__tree-sitter-0.24.6", is_dev_dep = False), + struct(repo = "vendor_ts__tree-sitter-0.25.9", is_dev_dep = False), struct(repo = "vendor_ts__tree-sitter-embedded-template-0.23.2", is_dev_dep = False), struct(repo = "vendor_ts__tree-sitter-ruby-0.23.1", is_dev_dep = False), struct(repo = "vendor_ts__triomphe-0.1.14", is_dev_dep = False), From d295acc3c33268fe10fa5aaf20fde43ef900c59d Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:22:05 -0400 Subject: [PATCH 053/219] Add initial support for Ruby Grape --- ruby/ql/lib/codeql/ruby/Frameworks.qll | 1 + ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 198 ++++++++++++++++++ .../frameworks/grape/Grape.expected | 25 +++ .../library-tests/frameworks/grape/Grape.ql | 18 ++ .../library-tests/frameworks/grape/app.rb | 54 +++++ .../security/cwe-089/ArelInjection.rb | 9 + .../security/cwe-089/SqlInjection.expected | 11 + 7 files changed, 316 insertions(+) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/Grape.qll create mode 100644 ruby/ql/test/library-tests/frameworks/grape/Grape.expected create mode 100644 ruby/ql/test/library-tests/frameworks/grape/Grape.ql create mode 100644 ruby/ql/test/library-tests/frameworks/grape/app.rb diff --git a/ruby/ql/lib/codeql/ruby/Frameworks.qll b/ruby/ql/lib/codeql/ruby/Frameworks.qll index 9bc01874710d..e8009c91b7d1 100644 --- a/ruby/ql/lib/codeql/ruby/Frameworks.qll +++ b/ruby/ql/lib/codeql/ruby/Frameworks.qll @@ -21,6 +21,7 @@ private import codeql.ruby.frameworks.Rails private import codeql.ruby.frameworks.Railties private import codeql.ruby.frameworks.Stdlib private import codeql.ruby.frameworks.Files +private import codeql.ruby.frameworks.Grape private import codeql.ruby.frameworks.HttpClients private import codeql.ruby.frameworks.XmlParsing private import codeql.ruby.frameworks.ActionDispatch diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll new file mode 100644 index 000000000000..8e9a062dc9a6 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -0,0 +1,198 @@ +/** + * Provides modeling for the `Grape` API framework. + */ + +private import codeql.ruby.AST +private import codeql.ruby.Concepts +private import codeql.ruby.controlflow.CfgNodes +private import codeql.ruby.DataFlow +private import codeql.ruby.dataflow.RemoteFlowSources +private import codeql.ruby.ApiGraphs +private import codeql.ruby.typetracking.TypeTracking +private import codeql.ruby.frameworks.Rails +private import codeql.ruby.frameworks.internal.Rails +private import codeql.ruby.dataflow.internal.DataFlowDispatch + +/** + * Provides modeling for Grape, a REST-like API framework for Ruby. + * Grape allows you to build RESTful APIs in Ruby with minimal effort. + */ +module Grape { + /** + * A Grape API class which sits at the top of the class hierarchy. + * In other words, it does not subclass any other Grape API class in source code. + */ + class RootAPI extends GrapeAPIClass { + RootAPI() { + not exists(GrapeAPIClass parent | this != parent and this = parent.getADescendent()) + } + } +} + +/** + * A class that extends `Grape::API`. + * For example, + * + * ```rb + * class FooAPI < Grape::API + * get '/users' do + * name = params[:name] + * User.where("name = #{name}") + * end + * end + * ``` + */ +class GrapeAPIClass extends DataFlow::ClassNode { + GrapeAPIClass() { + this = grapeAPIBaseClass().getADescendentModule() and + not exists(DataFlow::ModuleNode m | m = grapeAPIBaseClass().asModule() | this = m) + } + + /** + * Gets a `GrapeEndpoint` defined in this class. + */ + GrapeEndpoint getAnEndpoint() { + result.getAPIClass() = this + } + + /** + * Gets a `self` that possibly refers to an instance of this class. + */ + DataFlow::LocalSourceNode getSelf() { + result = this.getAnInstanceSelf() + or + // Include the module-level `self` to recover some cases where a block at the module level + // is invoked with an instance as the `self`. + result = this.getModuleLevelSelf() + } +} + +private DataFlow::ConstRef grapeAPIBaseClass() { + result = DataFlow::getConstant("Grape").getConstant("API") +} + +private API::Node grapeAPIInstance() { + result = any(GrapeAPIClass cls).getSelf().track() +} + +/** + * A Grape API endpoint (get, post, put, delete, etc.) call within a `Grape::API` class. + */ +class GrapeEndpoint extends DataFlow::CallNode { + private GrapeAPIClass apiClass; + + GrapeEndpoint() { + this = apiClass.getAModuleLevelCall(["get", "post", "put", "delete", "patch", "head", "options"]) + } + + /** + * Gets the HTTP method for this endpoint (e.g., "GET", "POST", etc.) + */ + string getHttpMethod() { + result = this.getMethodName().toUpperCase() + } + + /** + * Gets the API class containing this endpoint. + */ + GrapeAPIClass getAPIClass() { result = apiClass } + + /** + * Gets the block containing the endpoint logic. + */ + DataFlow::BlockNode getBody() { result = this.getBlock() } + + /** + * Gets the path pattern for this endpoint, if specified. + */ + string getPath() { + result = this.getArgument(0).getConstantValue().getString() + } +} + +/** + * A `RemoteFlowSource::Range` to represent accessing the + * Grape parameters available via the `params` method within an endpoint. + */ +class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { + GrapeParamsSource() { + this.asExpr().getExpr() instanceof GrapeParamsCall + } + + override string getSourceType() { result = "Grape::API#params" } + + override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } +} + +/** + * A call to `params` from within a Grape API endpoint. + */ +private class GrapeParamsCall extends ParamsCallImpl { + GrapeParamsCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "params" + ) + or + // Also handle cases where params is called on an instance of a Grape API class + this = grapeAPIInstance().getAMethodCall("params").asExpr().getExpr() + } +} + +/** + * A call to `headers` from within a Grape API endpoint. + * Headers can also be a source of user input. + */ +class GrapeHeadersSource extends Http::Server::RequestInputAccess::Range { + GrapeHeadersSource() { + this.asExpr().getExpr() instanceof GrapeHeadersCall + } + + override string getSourceType() { result = "Grape::API#headers" } + + override Http::Server::RequestInputKind getKind() { result = Http::Server::headerInputKind() } +} + +/** + * A call to `headers` from within a Grape API endpoint. + */ +private class GrapeHeadersCall extends MethodCall { + GrapeHeadersCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "headers" + ) + or + // Also handle cases where headers is called on an instance of a Grape API class + this = grapeAPIInstance().getAMethodCall("headers").asExpr().getExpr() + } +} + +/** + * A call to `request` from within a Grape API endpoint. + * The request object can contain user input. + */ +class GrapeRequestSource extends Http::Server::RequestInputAccess::Range { + GrapeRequestSource() { + this.asExpr().getExpr() instanceof GrapeRequestCall + } + + override string getSourceType() { result = "Grape::API#request" } + + override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } +} + +/** + * A call to `request` from within a Grape API endpoint. + */ +private class GrapeRequestCall extends MethodCall { + GrapeRequestCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "request" + ) + or + // Also handle cases where request is called on an instance of a Grape API class + this = grapeAPIInstance().getAMethodCall("request").asExpr().getExpr() + } +} \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected new file mode 100644 index 000000000000..904cb36333a4 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected @@ -0,0 +1,25 @@ +grapeAPIClasses +| app.rb:1:1:48:3 | MyAPI | +| app.rb:50:1:54:3 | AdminAPI | +grapeEndpoints +| app.rb:1:1:48:3 | MyAPI | app.rb:7:3:11:5 | call to get | GET | /hello/:name | +| app.rb:1:1:48:3 | MyAPI | app.rb:17:3:20:5 | call to post | POST | /messages | +| app.rb:1:1:48:3 | MyAPI | app.rb:23:3:27:5 | call to put | PUT | /update/:id | +| app.rb:1:1:48:3 | MyAPI | app.rb:30:3:32:5 | call to delete | DELETE | /items/:id | +| app.rb:1:1:48:3 | MyAPI | app.rb:35:3:37:5 | call to patch | PATCH | /items/:id | +| app.rb:1:1:48:3 | MyAPI | app.rb:40:3:42:5 | call to head | HEAD | /status | +| app.rb:1:1:48:3 | MyAPI | app.rb:45:3:47:5 | call to options | OPTIONS | /info | +| app.rb:50:1:54:3 | AdminAPI | app.rb:51:3:53:5 | call to get | GET | /admin | +grapeParams +| app.rb:8:12:8:17 | call to params | +| app.rb:14:3:16:5 | call to params | +| app.rb:18:11:18:16 | call to params | +| app.rb:24:10:24:15 | call to params | +| app.rb:31:5:31:10 | call to params | +| app.rb:36:5:36:10 | call to params | +| app.rb:52:5:52:10 | call to params | +grapeHeaders +| app.rb:9:18:9:24 | call to headers | +| app.rb:46:5:46:11 | call to headers | +grapeRequest +| app.rb:25:12:25:18 | call to request | \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql new file mode 100644 index 000000000000..a35c639d9ad8 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -0,0 +1,18 @@ +import ruby +import codeql.ruby.frameworks.Grape +import codeql.ruby.Concepts +import codeql.ruby.AST + +query predicate grapeAPIClasses(GrapeAPIClass api) { any() } + +query predicate grapeEndpoints(GrapeAPIClass api, GrapeEndpoint endpoint, string method, string path) { + endpoint = api.getAnEndpoint() and + method = endpoint.getHttpMethod() and + path = endpoint.getPath() +} + +query predicate grapeParams(GrapeParamsSource params) { any() } + +query predicate grapeHeaders(GrapeHeadersSource headers) { any() } + +query predicate grapeRequest(GrapeRequestSource request) { any() } \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/grape/app.rb b/ruby/ql/test/library-tests/frameworks/grape/app.rb new file mode 100644 index 000000000000..3e33caa85e91 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/grape/app.rb @@ -0,0 +1,54 @@ +class MyAPI < Grape::API + version 'v1', using: :header, vendor: 'myapi' + format :json + prefix :api + + desc 'Simple get endpoint' + get '/hello/:name' do + name = params[:name] + user_agent = headers['User-Agent'] + "Hello #{name}!" + end + + desc 'Post endpoint with params' + params do + requires :message, type: String + end + post '/messages' do + msg = params[:message] + { status: 'received', message: msg } + end + + desc 'Put endpoint accessing request' + put '/update/:id' do + id = params[:id] + body = request.body.read + { id: id, body: body } + end + + desc 'Delete endpoint' + delete '/items/:id' do + params[:id] + end + + desc 'Patch endpoint' + patch '/items/:id' do + params[:id] + end + + desc 'Head endpoint' + head '/status' do + # Just return status + end + + desc 'Options endpoint' + options '/info' do + headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' + end +end + +class AdminAPI < Grape::API + get '/admin' do + params[:token] + end +end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb index 1cd6782b2416..30832894b9e4 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb @@ -6,4 +6,13 @@ def unsafe_action sql = Arel.sql("SELECT * FROM users WHERE name = #{name}") sql = Arel::Nodes::SqlLiteral.new("SELECT * FROM users WHERE name = #{name}") end +end + +class PotatoAPI < Grape::API + get '/unsafe_endpoint' do + name = params[:user_name] + # BAD: SQL statement constructed from user input + sql = Arel.sql("SELECT * FROM users WHERE name = #{name}") + sql = Arel::Nodes::SqlLiteral.new("SELECT * FROM users WHERE name = #{name}") + end end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index 069cb34810fc..b8b1350882d8 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -81,6 +81,10 @@ edges | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | provenance | | | ArelInjection.rb:4:12:4:29 | ...[...] | ArelInjection.rb:4:5:4:8 | name | provenance | | +| ArelInjection.rb:13:5:13:8 | name | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:13:5:13:8 | name | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:13:12:13:29 | ...[...] | provenance | | +| ArelInjection.rb:13:12:13:29 | ...[...] | ArelInjection.rb:13:5:13:8 | name | provenance | | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:13:5:13:8 | qry1 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:19:5:19:8 | qry2 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:31:5:31:8 | qry3 : String | provenance | AdditionalTaintStep | @@ -209,6 +213,11 @@ nodes | ArelInjection.rb:4:12:4:29 | ...[...] | semmle.label | ...[...] | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | +| ArelInjection.rb:13:5:13:8 | name | semmle.label | name | +| ArelInjection.rb:13:12:13:17 | call to params | semmle.label | call to params | +| ArelInjection.rb:13:12:13:29 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | +| ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | | PgInjection.rb:6:5:6:8 | name | semmle.label | name | | PgInjection.rb:6:12:6:17 | call to params | semmle.label | call to params | | PgInjection.rb:6:12:6:24 | ...[...] | semmle.label | ...[...] | @@ -266,6 +275,8 @@ subpaths | ActiveRecordInjection.rb:216:38:216:53 | "role = #{...}" | ActiveRecordInjection.rb:222:29:222:34 | call to params | ActiveRecordInjection.rb:216:38:216:53 | "role = #{...}" | This SQL query depends on a $@. | ActiveRecordInjection.rb:222:29:222:34 | call to params | user-provided value | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | +| ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | +| ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:15:21:15:24 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:15:21:15:24 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:20:22:20:25 | qry2 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:20:22:20:25 | qry2 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | From 738ab6fba7ff64b97c60cf7f2593f136c5bf0f04 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:23:15 -0400 Subject: [PATCH 054/219] Refactor Grape framework code for improved readability and consistency --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 2 +- .../test/library-tests/frameworks/grape/Grape.ql | 2 +- .../test/library-tests/frameworks/grape/app.rb | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 8e9a062dc9a6..857b849f4258 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -115,7 +115,7 @@ class GrapeEndpoint extends DataFlow::CallNode { * Grape parameters available via the `params` method within an endpoint. */ class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { - GrapeParamsSource() { + GrapeParamsSource() { this.asExpr().getExpr() instanceof GrapeParamsCall } diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql index a35c639d9ad8..3dd7c488a497 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -5,7 +5,7 @@ import codeql.ruby.AST query predicate grapeAPIClasses(GrapeAPIClass api) { any() } -query predicate grapeEndpoints(GrapeAPIClass api, GrapeEndpoint endpoint, string method, string path) { +query predicate grapeEndpoints(GrapeAPIClass api, GrapeEndpoint endpoint, string method, string path) { endpoint = api.getAnEndpoint() and method = endpoint.getHttpMethod() and path = endpoint.getPath() diff --git a/ruby/ql/test/library-tests/frameworks/grape/app.rb b/ruby/ql/test/library-tests/frameworks/grape/app.rb index 3e33caa85e91..6333240debe8 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/app.rb +++ b/ruby/ql/test/library-tests/frameworks/grape/app.rb @@ -9,7 +9,7 @@ class MyAPI < Grape::API user_agent = headers['User-Agent'] "Hello #{name}!" end - + desc 'Post endpoint with params' params do requires :message, type: String @@ -18,36 +18,36 @@ class MyAPI < Grape::API msg = params[:message] { status: 'received', message: msg } end - + desc 'Put endpoint accessing request' put '/update/:id' do id = params[:id] body = request.body.read { id: id, body: body } end - - desc 'Delete endpoint' + + desc 'Delete endpoint' delete '/items/:id' do params[:id] end - + desc 'Patch endpoint' patch '/items/:id' do params[:id] end - + desc 'Head endpoint' head '/status' do # Just return status end - + desc 'Options endpoint' options '/info' do headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' end end -class AdminAPI < Grape::API +class AdminAPI < Grape::API get '/admin' do params[:token] end From 3252bd39d2e671710e94ada3adaae1cefb1deaf1 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 12 Sep 2025 22:13:21 -0400 Subject: [PATCH 055/219] Enhance Grape framework with additional data flow modeling and helper method support --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 57 +++++++++++++++---- .../frameworks/grape/Grape.expected | 2 +- .../security/cwe-089/ArelInjection.rb | 25 +++++++- .../security/cwe-089/SqlInjection.expected | 20 +++++++ 4 files changed, 92 insertions(+), 12 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 857b849f4258..a3aa2f684c79 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -12,6 +12,7 @@ private import codeql.ruby.typetracking.TypeTracking private import codeql.ruby.frameworks.Rails private import codeql.ruby.frameworks.internal.Rails private import codeql.ruby.dataflow.internal.DataFlowDispatch +private import codeql.ruby.dataflow.FlowSteps /** * Provides modeling for Grape, a REST-like API framework for Ruby. @@ -125,21 +126,17 @@ class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { } /** - * A call to `params` from within a Grape API endpoint. + * A call to `params` from within a Grape API endpoint or helper method. */ private class GrapeParamsCall extends ParamsCallImpl { GrapeParamsCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "params" + // Simplified approach: find params calls that are descendants of Grape API class methods + exists(GrapeAPIClass api | + this.getMethodName() = "params" and + this.getParent+() = api.getADeclaration() ) - or - // Also handle cases where params is called on an instance of a Grape API class - this = grapeAPIInstance().getAMethodCall("params").asExpr().getExpr() } -} - -/** +}/** * A call to `headers` from within a Grape API endpoint. * Headers can also be a source of user input. */ @@ -195,4 +192,44 @@ private class GrapeRequestCall extends MethodCall { // Also handle cases where request is called on an instance of a Grape API class this = grapeAPIInstance().getAMethodCall("request").asExpr().getExpr() } +} + +/** + * A method defined within a `helpers` block in a Grape API class. + * These methods become available in endpoint contexts through Grape's DSL. + */ +private class GrapeHelperMethod extends Method { + private GrapeAPIClass apiClass; + + GrapeHelperMethod() { + exists(DataFlow::CallNode helpersCall | + helpersCall = apiClass.getAModuleLevelCall("helpers") and + this.getParent+() = helpersCall.getBlock().asExpr().getExpr() + ) + } + + /** + * Gets the API class that contains this helper method. + */ + GrapeAPIClass getAPIClass() { result = apiClass } +} + +/** + * Additional taint step to model dataflow from method arguments to parameters + * for Grape helper methods defined in `helpers` blocks. + * This bridges the gap where standard dataflow doesn't recognize the Grape DSL semantics. + */ +private class GrapeHelperMethodTaintStep extends AdditionalTaintStep { + override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(GrapeHelperMethod helperMethod, MethodCall call, int i | + // Find calls to helper methods from within Grape endpoints + call.getMethodName() = helperMethod.getName() and + exists(GrapeEndpoint endpoint | + call.getParent+() = endpoint.getBody().asExpr().getExpr() + ) and + // Map argument to parameter + nodeFrom.asExpr().getExpr() = call.getArgument(i) and + nodeTo.asParameter() = helperMethod.getParameter(i) + ) + } } \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected index 904cb36333a4..7e792465911b 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected @@ -22,4 +22,4 @@ grapeHeaders | app.rb:9:18:9:24 | call to headers | | app.rb:46:5:46:11 | call to headers | grapeRequest -| app.rb:25:12:25:18 | call to request | \ No newline at end of file +| app.rb:25:12:25:18 | call to request | diff --git a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb index 30832894b9e4..cf0769c0acd6 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb @@ -15,4 +15,27 @@ class PotatoAPI < Grape::API sql = Arel.sql("SELECT * FROM users WHERE name = #{name}") sql = Arel::Nodes::SqlLiteral.new("SELECT * FROM users WHERE name = #{name}") end -end \ No newline at end of file +end + +class SimpleAPI < Grape::API + get '/test' do + x = params[:name] + Arel.sql("SELECT * FROM users WHERE name = #{x}") + end +end + + # Test helper method pattern in Grape helpers block + class TestAPI < Grape::API + helpers do + def vulnerable_helper(user_id) + # BAD: SQL statement constructed from user input passed as parameter + Arel.sql("SELECT * FROM users WHERE id = #{user_id}") + end + end + + get '/helper_test' do + # This should be detected as SQL injection via helper method + user_id = params[:user_id] + vulnerable_helper(user_id) + end + end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index b8b1350882d8..0b14504058ef 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -85,6 +85,14 @@ edges | ArelInjection.rb:13:5:13:8 | name | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:13:12:13:29 | ...[...] | provenance | | | ArelInjection.rb:13:12:13:29 | ...[...] | ArelInjection.rb:13:5:13:8 | name | provenance | | +| ArelInjection.rb:22:5:22:5 | x | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:22:9:22:14 | call to params | ArelInjection.rb:22:9:22:21 | ...[...] | provenance | | +| ArelInjection.rb:22:9:22:21 | ...[...] | ArelInjection.rb:22:5:22:5 | x | provenance | | +| ArelInjection.rb:30:29:30:35 | user_id | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:38:7:38:13 | user_id | ArelInjection.rb:39:25:39:31 | user_id | provenance | | +| ArelInjection.rb:38:17:38:22 | call to params | ArelInjection.rb:38:17:38:32 | ...[...] | provenance | | +| ArelInjection.rb:38:17:38:32 | ...[...] | ArelInjection.rb:38:7:38:13 | user_id | provenance | | +| ArelInjection.rb:39:25:39:31 | user_id | ArelInjection.rb:30:29:30:35 | user_id | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:13:5:13:8 | qry1 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:19:5:19:8 | qry2 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:31:5:31:8 | qry3 : String | provenance | AdditionalTaintStep | @@ -218,6 +226,16 @@ nodes | ArelInjection.rb:13:12:13:29 | ...[...] | semmle.label | ...[...] | | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | +| ArelInjection.rb:22:5:22:5 | x | semmle.label | x | +| ArelInjection.rb:22:9:22:14 | call to params | semmle.label | call to params | +| ArelInjection.rb:22:9:22:21 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | +| ArelInjection.rb:30:29:30:35 | user_id | semmle.label | user_id | +| ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | +| ArelInjection.rb:38:7:38:13 | user_id | semmle.label | user_id | +| ArelInjection.rb:38:17:38:22 | call to params | semmle.label | call to params | +| ArelInjection.rb:38:17:38:32 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:39:25:39:31 | user_id | semmle.label | user_id | | PgInjection.rb:6:5:6:8 | name | semmle.label | name | | PgInjection.rb:6:12:6:17 | call to params | semmle.label | call to params | | PgInjection.rb:6:12:6:24 | ...[...] | semmle.label | ...[...] | @@ -277,6 +295,8 @@ subpaths | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | +| ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:22:9:22:14 | call to params | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:22:9:22:14 | call to params | user-provided value | +| ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:38:17:38:22 | call to params | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:38:17:38:22 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:15:21:15:24 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:15:21:15:24 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:20:22:20:25 | qry2 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:20:22:20:25 | qry2 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | From 5cfa6e83b390aafe6783eba0e282674a8247db46 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 12 Sep 2025 22:51:47 -0400 Subject: [PATCH 056/219] Add support for route parameters(+ blocks), headers, and cookies in Grape API --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 92 ++++++++++++++++++- .../frameworks/grape/Grape.expected | 37 +++++--- .../library-tests/frameworks/grape/Grape.ql | 6 +- .../library-tests/frameworks/grape/app.rb | 42 +++++++++ .../security/cwe-089/ArelInjection.rb | 32 ++++++- .../security/cwe-089/SqlInjection.expected | 53 +++++++++-- 6 files changed, 239 insertions(+), 23 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index a3aa2f684c79..fbab28180b8b 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -137,12 +137,14 @@ private class GrapeParamsCall extends ParamsCallImpl { ) } }/** - * A call to `headers` from within a Grape API endpoint. + * A call to `headers` from within a Grape API endpoint or headers block. * Headers can also be a source of user input. */ class GrapeHeadersSource extends Http::Server::RequestInputAccess::Range { GrapeHeadersSource() { this.asExpr().getExpr() instanceof GrapeHeadersCall + or + this.asExpr().getExpr() instanceof GrapeHeadersBlockCall } override string getSourceType() { result = "Grape::API#headers" } @@ -179,6 +181,20 @@ class GrapeRequestSource extends Http::Server::RequestInputAccess::Range { override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } } +/** + * A call to `route_param` from within a Grape API endpoint. + * Route parameters are extracted from the URL path and can be a source of user input. + */ +class GrapeRouteParamSource extends Http::Server::RequestInputAccess::Range { + GrapeRouteParamSource() { + this.asExpr().getExpr() instanceof GrapeRouteParamCall + } + + override string getSourceType() { result = "Grape::API#route_param" } + + override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } +} + /** * A call to `request` from within a Grape API endpoint. */ @@ -194,6 +210,80 @@ private class GrapeRequestCall extends MethodCall { } } +/** + * A call to `route_param` from within a Grape API endpoint. + */ +private class GrapeRouteParamCall extends MethodCall { + GrapeRouteParamCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asExpr().getExpr() and + this.getMethodName() = "route_param" + ) + or + // Also handle cases where route_param is called on an instance of a Grape API class + this = grapeAPIInstance().getAMethodCall("route_param").asExpr().getExpr() + } +} + +/** + * A call to `headers` block within a Grape API class. + * This is different from the headers() method call - this is the DSL block for defining header requirements. + */ +private class GrapeHeadersBlockCall extends MethodCall { + GrapeHeadersBlockCall() { + exists(GrapeAPIClass api | + this.getParent+() = api.getADeclaration() and + this.getMethodName() = "headers" and + exists(this.getBlock()) + ) + } +} + +/** + * A call to `cookies` block within a Grape API class. + * This DSL block defines cookie requirements and those cookies are user-controlled. + */ +private class GrapeCookiesBlockCall extends MethodCall { + GrapeCookiesBlockCall() { + exists(GrapeAPIClass api | + this.getParent+() = api.getADeclaration() and + this.getMethodName() = "cookies" and + exists(this.getBlock()) + ) + } +} + +/** + * A call to `cookies` method from within a Grape API endpoint or cookies block. + * Similar to headers, cookies can be accessed as a method and are user-controlled input. + */ +class GrapeCookiesSource extends Http::Server::RequestInputAccess::Range { + GrapeCookiesSource() { + this.asExpr().getExpr() instanceof GrapeCookiesCall + or + this.asExpr().getExpr() instanceof GrapeCookiesBlockCall + } + + override string getSourceType() { result = "Grape::API#cookies" } + + override Http::Server::RequestInputKind getKind() { result = Http::Server::cookieInputKind() } +} + +/** + * A call to `cookies` method from within a Grape API endpoint. + */ +private class GrapeCookiesCall extends MethodCall { + GrapeCookiesCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "cookies" + ) + or + // Also handle cases where cookies is called on an instance of a Grape API class + this = grapeAPIInstance().getAMethodCall("cookies").asExpr().getExpr() + } +} + /** * A method defined within a `helpers` block in a Grape API class. * These methods become available in endpoint contexts through Grape's DSL. diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected index 7e792465911b..c0bee75371c2 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected @@ -1,15 +1,18 @@ grapeAPIClasses -| app.rb:1:1:48:3 | MyAPI | -| app.rb:50:1:54:3 | AdminAPI | +| app.rb:1:1:90:3 | MyAPI | +| app.rb:92:1:96:3 | AdminAPI | grapeEndpoints -| app.rb:1:1:48:3 | MyAPI | app.rb:7:3:11:5 | call to get | GET | /hello/:name | -| app.rb:1:1:48:3 | MyAPI | app.rb:17:3:20:5 | call to post | POST | /messages | -| app.rb:1:1:48:3 | MyAPI | app.rb:23:3:27:5 | call to put | PUT | /update/:id | -| app.rb:1:1:48:3 | MyAPI | app.rb:30:3:32:5 | call to delete | DELETE | /items/:id | -| app.rb:1:1:48:3 | MyAPI | app.rb:35:3:37:5 | call to patch | PATCH | /items/:id | -| app.rb:1:1:48:3 | MyAPI | app.rb:40:3:42:5 | call to head | HEAD | /status | -| app.rb:1:1:48:3 | MyAPI | app.rb:45:3:47:5 | call to options | OPTIONS | /info | -| app.rb:50:1:54:3 | AdminAPI | app.rb:51:3:53:5 | call to get | GET | /admin | +| app.rb:1:1:90:3 | MyAPI | app.rb:7:3:11:5 | call to get | GET | /hello/:name | +| app.rb:1:1:90:3 | MyAPI | app.rb:17:3:20:5 | call to post | POST | /messages | +| app.rb:1:1:90:3 | MyAPI | app.rb:23:3:27:5 | call to put | PUT | /update/:id | +| app.rb:1:1:90:3 | MyAPI | app.rb:30:3:32:5 | call to delete | DELETE | /items/:id | +| app.rb:1:1:90:3 | MyAPI | app.rb:35:3:37:5 | call to patch | PATCH | /items/:id | +| app.rb:1:1:90:3 | MyAPI | app.rb:40:3:42:5 | call to head | HEAD | /status | +| app.rb:1:1:90:3 | MyAPI | app.rb:45:3:47:5 | call to options | OPTIONS | /info | +| app.rb:1:1:90:3 | MyAPI | app.rb:50:3:54:5 | call to get | GET | /users/:user_id/posts/:post_id | +| app.rb:1:1:90:3 | MyAPI | app.rb:78:3:82:5 | call to get | GET | /cookie_test | +| app.rb:1:1:90:3 | MyAPI | app.rb:85:3:89:5 | call to get | GET | /header_test | +| app.rb:92:1:96:3 | AdminAPI | app.rb:93:3:95:5 | call to get | GET | /admin | grapeParams | app.rb:8:12:8:17 | call to params | | app.rb:14:3:16:5 | call to params | @@ -17,9 +20,21 @@ grapeParams | app.rb:24:10:24:15 | call to params | | app.rb:31:5:31:10 | call to params | | app.rb:36:5:36:10 | call to params | -| app.rb:52:5:52:10 | call to params | +| app.rb:60:12:60:17 | call to params | +| app.rb:94:5:94:10 | call to params | grapeHeaders | app.rb:9:18:9:24 | call to headers | | app.rb:46:5:46:11 | call to headers | +| app.rb:66:3:69:5 | call to headers | +| app.rb:86:12:86:18 | call to headers | +| app.rb:87:14:87:20 | call to headers | grapeRequest | app.rb:25:12:25:18 | call to request | +grapeRouteParam +| app.rb:51:15:51:35 | call to route_param | +| app.rb:52:15:52:36 | call to route_param | +| app.rb:57:3:63:5 | call to route_param | +grapeCookies +| app.rb:72:3:75:5 | call to cookies | +| app.rb:79:15:79:21 | call to cookies | +| app.rb:80:16:80:22 | call to cookies | diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql index 3dd7c488a497..63d59d0bdd7d 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -15,4 +15,8 @@ query predicate grapeParams(GrapeParamsSource params) { any() } query predicate grapeHeaders(GrapeHeadersSource headers) { any() } -query predicate grapeRequest(GrapeRequestSource request) { any() } \ No newline at end of file +query predicate grapeRequest(GrapeRequestSource request) { any() } + +query predicate grapeRouteParam(GrapeRouteParamSource routeParam) { any() } + +query predicate grapeCookies(GrapeCookiesSource cookies) { any() } \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/grape/app.rb b/ruby/ql/test/library-tests/frameworks/grape/app.rb index 6333240debe8..a034f325f7b3 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/app.rb +++ b/ruby/ql/test/library-tests/frameworks/grape/app.rb @@ -45,6 +45,48 @@ class MyAPI < Grape::API options '/info' do headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' end + + desc 'Route param endpoint' + get '/users/:user_id/posts/:post_id' do + user_id = route_param(:user_id) + post_id = route_param('post_id') + { user_id: user_id, post_id: post_id } + end + + desc 'Route param block pattern' + route_param :id do + get do + # params[:id] is user input from the path parameter + id = params[:id] + { id: id } + end + end + + # Headers block for defining expected headers + headers do + requires :Authorization, type: String + optional 'X-Custom-Header', type: String + end + + # Cookies block for defining expected cookies + cookies do + requires :session_id, type: String + optional :tracking_id, type: String + end + + desc 'Endpoint that uses cookies method' + get '/cookie_test' do + session = cookies[:session_id] + tracking = cookies['tracking_id'] + { session: session, tracking: tracking } + end + + desc 'Endpoint that uses headers method' + get '/header_test' do + auth = headers[:Authorization] + custom = headers['X-Custom-Header'] + { auth: auth, custom: custom } + end end class AdminAPI < Grape::API diff --git a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb index cf0769c0acd6..8c9c3bff4fbb 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb @@ -33,9 +33,39 @@ def vulnerable_helper(user_id) end end + # Headers and cookies blocks for DSL testing + headers do + requires :Authorization, type: String + end + + cookies do + requires :session_id, type: String + end + + get '/comprehensive_test/:user_id' do + # BAD: Comprehensive test using all Grape input sources in one SQL query + user_id = params[:user_id] # params taint source + route_id = route_param(:user_id) # route_param taint source + auth = headers[:Authorization] # headers taint source + session = cookies[:session_id] # cookies taint source + body_data = request.body.read # request taint source + + # All sources flow to SQL injection + Arel.sql("SELECT * FROM users WHERE id = #{user_id} AND route_id = #{route_id} AND auth = #{auth} AND session = #{session} AND data = #{body_data}") + end + get '/helper_test' do - # This should be detected as SQL injection via helper method + # BAD: Test helper method dataflow user_id = params[:user_id] vulnerable_helper(user_id) end + + # Test route_param block pattern + route_param :id do + get do + # BAD: params[:id] should be user input from the path + user_id = params[:id] + Arel.sql("SELECT * FROM users WHERE id = #{user_id}") + end + end end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index 0b14504058ef..34128474cb93 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -89,10 +89,24 @@ edges | ArelInjection.rb:22:9:22:14 | call to params | ArelInjection.rb:22:9:22:21 | ...[...] | provenance | | | ArelInjection.rb:22:9:22:21 | ...[...] | ArelInjection.rb:22:5:22:5 | x | provenance | | | ArelInjection.rb:30:29:30:35 | user_id | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:38:7:38:13 | user_id | ArelInjection.rb:39:25:39:31 | user_id | provenance | | -| ArelInjection.rb:38:17:38:22 | call to params | ArelInjection.rb:38:17:38:32 | ...[...] | provenance | | -| ArelInjection.rb:38:17:38:32 | ...[...] | ArelInjection.rb:38:7:38:13 | user_id | provenance | | -| ArelInjection.rb:39:25:39:31 | user_id | ArelInjection.rb:30:29:30:35 | user_id | provenance | AdditionalTaintStep | +| ArelInjection.rb:47:7:47:13 | user_id | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:47:17:47:22 | call to params | ArelInjection.rb:47:17:47:32 | ...[...] | provenance | | +| ArelInjection.rb:47:17:47:32 | ...[...] | ArelInjection.rb:47:7:47:13 | user_id | provenance | | +| ArelInjection.rb:48:7:48:14 | route_id | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:48:18:48:38 | call to route_param | ArelInjection.rb:48:7:48:14 | route_id | provenance | | +| ArelInjection.rb:49:7:49:10 | auth | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:49:14:49:20 | call to headers | ArelInjection.rb:49:14:49:36 | ...[...] | provenance | | +| ArelInjection.rb:49:14:49:36 | ...[...] | ArelInjection.rb:49:7:49:10 | auth | provenance | | +| ArelInjection.rb:50:7:50:13 | session | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:50:17:50:23 | call to cookies | ArelInjection.rb:50:17:50:36 | ...[...] | provenance | | +| ArelInjection.rb:50:17:50:36 | ...[...] | ArelInjection.rb:50:7:50:13 | session | provenance | | +| ArelInjection.rb:59:7:59:13 | user_id | ArelInjection.rb:60:25:60:31 | user_id | provenance | | +| ArelInjection.rb:59:17:59:22 | call to params | ArelInjection.rb:59:17:59:32 | ...[...] | provenance | | +| ArelInjection.rb:59:17:59:32 | ...[...] | ArelInjection.rb:59:7:59:13 | user_id | provenance | | +| ArelInjection.rb:60:25:60:31 | user_id | ArelInjection.rb:30:29:30:35 | user_id | provenance | AdditionalTaintStep | +| ArelInjection.rb:67:9:67:15 | user_id | ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | +| ArelInjection.rb:67:19:67:24 | call to params | ArelInjection.rb:67:19:67:29 | ...[...] | provenance | | +| ArelInjection.rb:67:19:67:29 | ...[...] | ArelInjection.rb:67:9:67:15 | user_id | provenance | | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:13:5:13:8 | qry1 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:19:5:19:8 | qry2 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:31:5:31:8 | qry3 : String | provenance | AdditionalTaintStep | @@ -232,10 +246,26 @@ nodes | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | | ArelInjection.rb:30:29:30:35 | user_id | semmle.label | user_id | | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | -| ArelInjection.rb:38:7:38:13 | user_id | semmle.label | user_id | -| ArelInjection.rb:38:17:38:22 | call to params | semmle.label | call to params | -| ArelInjection.rb:38:17:38:32 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:39:25:39:31 | user_id | semmle.label | user_id | +| ArelInjection.rb:47:7:47:13 | user_id | semmle.label | user_id | +| ArelInjection.rb:47:17:47:22 | call to params | semmle.label | call to params | +| ArelInjection.rb:47:17:47:32 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:48:7:48:14 | route_id | semmle.label | route_id | +| ArelInjection.rb:48:18:48:38 | call to route_param | semmle.label | call to route_param | +| ArelInjection.rb:49:7:49:10 | auth | semmle.label | auth | +| ArelInjection.rb:49:14:49:20 | call to headers | semmle.label | call to headers | +| ArelInjection.rb:49:14:49:36 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:50:7:50:13 | session | semmle.label | session | +| ArelInjection.rb:50:17:50:23 | call to cookies | semmle.label | call to cookies | +| ArelInjection.rb:50:17:50:36 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | +| ArelInjection.rb:59:7:59:13 | user_id | semmle.label | user_id | +| ArelInjection.rb:59:17:59:22 | call to params | semmle.label | call to params | +| ArelInjection.rb:59:17:59:32 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:60:25:60:31 | user_id | semmle.label | user_id | +| ArelInjection.rb:67:9:67:15 | user_id | semmle.label | user_id | +| ArelInjection.rb:67:19:67:24 | call to params | semmle.label | call to params | +| ArelInjection.rb:67:19:67:29 | ...[...] | semmle.label | ...[...] | +| ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | | PgInjection.rb:6:5:6:8 | name | semmle.label | name | | PgInjection.rb:6:12:6:17 | call to params | semmle.label | call to params | | PgInjection.rb:6:12:6:24 | ...[...] | semmle.label | ...[...] | @@ -296,7 +326,12 @@ subpaths | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:22:9:22:14 | call to params | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:22:9:22:14 | call to params | user-provided value | -| ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:38:17:38:22 | call to params | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:38:17:38:22 | call to params | user-provided value | +| ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:59:17:59:22 | call to params | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:59:17:59:22 | call to params | user-provided value | +| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:47:17:47:22 | call to params | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:47:17:47:22 | call to params | user-provided value | +| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:48:18:48:38 | call to route_param | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:48:18:48:38 | call to route_param | user-provided value | +| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:49:14:49:20 | call to headers | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:49:14:49:20 | call to headers | user-provided value | +| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:50:17:50:23 | call to cookies | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:50:17:50:23 | call to cookies | user-provided value | +| ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:67:19:67:24 | call to params | ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:67:19:67:24 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:15:21:15:24 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:15:21:15:24 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:20:22:20:25 | qry2 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:20:22:20:25 | qry2 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | From 459f00ab415e1263c0756a03516e51e9963adc52 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:25:11 +0000 Subject: [PATCH 057/219] Initial plan From e630bf86bdd0f9a678b234f04f11f4ba883b5571 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:44:05 +0000 Subject: [PATCH 058/219] Implement Rust non-HTTPS URL query (CWE-319) Co-authored-by: geoffw0 <40627776+geoffw0@users.noreply.github.com> --- .../rust-code-scanning.qls.expected | 1 + .../rust-security-and-quality.qls.expected | 1 + .../rust-security-extended.qls.expected | 1 + .../rust/security/UseOfHttpExtensions.qll | 60 + .../change-notes/2025-09-15-non-https-url.md | 4 + .../queries/security/CWE-319/UseOfHttp.qhelp | 48 + .../src/queries/security/CWE-319/UseOfHttp.ql | 42 + .../queries/security/CWE-319/UseOfHttpBad.rs | 10 + .../queries/security/CWE-319/UseOfHttpGood.rs | 10 + rust/ql/src/queries/summary/Stats.qll | 1 + .../query-tests/security/CWE-319/Cargo.lock | 1574 +++++++++++++++++ .../security/CWE-319/UseOfHttp.expected | 78 + .../security/CWE-319/UseOfHttp.qlref | 4 + .../test/query-tests/security/CWE-319/main.rs | 65 + .../query-tests/security/CWE-319/options.yml | 3 + 15 files changed, 1902 insertions(+) create mode 100644 rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll create mode 100644 rust/ql/src/change-notes/2025-09-15-non-https-url.md create mode 100644 rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp create mode 100644 rust/ql/src/queries/security/CWE-319/UseOfHttp.ql create mode 100644 rust/ql/src/queries/security/CWE-319/UseOfHttpBad.rs create mode 100644 rust/ql/src/queries/security/CWE-319/UseOfHttpGood.rs create mode 100644 rust/ql/test/query-tests/security/CWE-319/Cargo.lock create mode 100644 rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected create mode 100644 rust/ql/test/query-tests/security/CWE-319/UseOfHttp.qlref create mode 100644 rust/ql/test/query-tests/security/CWE-319/main.rs create mode 100644 rust/ql/test/query-tests/security/CWE-319/options.yml diff --git a/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected b/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected index b601905e6a30..1b8e1015a1ff 100644 --- a/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected @@ -14,6 +14,7 @@ ql/rust/ql/src/queries/security/CWE-089/SqlInjection.ql ql/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql ql/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql +ql/rust/ql/src/queries/security/CWE-319/UseOfHttp.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-770/UncontrolledAllocationSize.ql diff --git a/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected b/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected index 074cb2ec8888..a2d2e2b820c5 100644 --- a/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected @@ -15,6 +15,7 @@ ql/rust/ql/src/queries/security/CWE-117/LogInjection.ql ql/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql ql/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql +ql/rust/ql/src/queries/security/CWE-319/UseOfHttp.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql diff --git a/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected b/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected index 38846e281eb8..9000990ad841 100644 --- a/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected @@ -15,6 +15,7 @@ ql/rust/ql/src/queries/security/CWE-117/LogInjection.ql ql/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql ql/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql +ql/rust/ql/src/queries/security/CWE-319/UseOfHttp.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-770/UncontrolledAllocationSize.ql diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll new file mode 100644 index 000000000000..026880785b6c --- /dev/null +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -0,0 +1,60 @@ +/** + * Provides classes and predicates for reasoning about the use of + * non-HTTPS URLs in Rust code. + */ + +import rust +private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowSink +private import codeql.rust.elements.LiteralExprExt +private import codeql.rust.Concepts + +/** + * Provides default sources, sinks and barriers for detecting use of + * non-HTTPS URLs, as well as extension points for adding your own. + */ +module UseOfHttp { + /** + * A data flow source for use of non-HTTPS URLs. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for use of non-HTTPS URLs. + */ + abstract class Sink extends QuerySink::Range { + override string getSinkType() { result = "UseOfHttp" } + } + + /** + * A barrier for use of non-HTTPS URLs. + */ + abstract class Barrier extends DataFlow::Node { } + + /** + * A string containing an HTTP URL. + */ + class HttpStringLiteral extends StringLiteralExpr { + HttpStringLiteral() { + exists(string s | this.getTextValue() = s | + // Match HTTP URLs that are not private/local + s.regexpMatch("\"http://.*\"") and + not s.regexpMatch("\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.16\\.[0-9]+\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]).*\"") + ) + } + } + + /** + * An HTTP string literal as a source. + */ + private class HttpStringLiteralAsSource extends Source { + HttpStringLiteralAsSource() { this.asExpr().getExpr() instanceof HttpStringLiteral } + } + + /** + * A sink for use of HTTP URLs from model data. + */ + private class ModelsAsDataSink extends Sink { + ModelsAsDataSink() { sinkNode(this, "request-url") } + } +} diff --git a/rust/ql/src/change-notes/2025-09-15-non-https-url.md b/rust/ql/src/change-notes/2025-09-15-non-https-url.md new file mode 100644 index 000000000000..c4ab664f7324 --- /dev/null +++ b/rust/ql/src/change-notes/2025-09-15-non-https-url.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `rust/non-https-url`, for detecting the use of non-HTTPS URLs that can be intercepted by third parties. \ No newline at end of file diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp new file mode 100644 index 000000000000..a8ca1d9c7c7e --- /dev/null +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp @@ -0,0 +1,48 @@ + + + + +

    Constructing URLs with the HTTP protocol can lead to unsecured connections.

    + +

    Furthermore, constructing URLs with the HTTP protocol can create problems if other parts of the +code expect HTTPS URLs. A typical pattern is to use libraries that expect secure connections, +which may fail or fall back to insecure behavior when provided with HTTP URLs instead of HTTPS URLs.

    + +
    + + +

    When you construct a URL for network requests, ensure that you use an HTTPS URL rather than an HTTP URL. +Then, any connections that are made using that URL are secure SSL/TLS connections.

    + +
    + + +

    The following example shows two ways of making a network request using a URL. When the request is +made using an HTTP URL rather than an HTTPS URL, the connection is unsecured and can be intercepted +by attackers. When the request is made using an HTTPS URL, the connection is a secure SSL/TLS connection.

    + + + +

    A better approach is to use HTTPS:

    + + + +
    + + +
  • +OWASP: +Transport Layer Protection Cheat Sheet. +
  • +
  • +OWASP Top 10: +A08:2021 - Software and Data Integrity Failures. +
  • +
  • Rust reqwest documentation: +reqwest crate. +
  • + +
    +
    \ No newline at end of file diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttp.ql b/rust/ql/src/queries/security/CWE-319/UseOfHttp.ql new file mode 100644 index 000000000000..4a464d90bbe4 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttp.ql @@ -0,0 +1,42 @@ +/** + * @name Failure to use HTTPS URLs + * @description Non-HTTPS connections can be intercepted by third parties. + * @kind path-problem + * @problem.severity warning + * @security-severity 8.1 + * @precision high + * @id rust/non-https-url + * @tags security + * external/cwe/cwe-319 + * external/cwe/cwe-345 + */ + +import rust +import codeql.rust.dataflow.DataFlow +import codeql.rust.dataflow.TaintTracking +import codeql.rust.security.UseOfHttpExtensions + +/** + * A taint configuration for HTTP URL strings that flow to URL-using sinks. + */ +module UseOfHttpConfig implements DataFlow::ConfigSig { + import UseOfHttp + + predicate isSource(DataFlow::Node node) { node instanceof Source } + + predicate isSink(DataFlow::Node node) { node instanceof Sink } + + predicate isBarrier(DataFlow::Node barrier) { barrier instanceof Barrier } + + predicate observeDiffInformedIncrementalMode() { any() } +} + +module UseOfHttpFlow = TaintTracking::Global; + +import UseOfHttpFlow::PathGraph + +from UseOfHttpFlow::PathNode sourceNode, UseOfHttpFlow::PathNode sinkNode +where UseOfHttpFlow::flowPath(sourceNode, sinkNode) +select sinkNode.getNode(), sourceNode, sinkNode, + "This URL may be constructed with the HTTP protocol, from $@.", sourceNode.getNode(), + "this HTTP URL" diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttpBad.rs b/rust/ql/src/queries/security/CWE-319/UseOfHttpBad.rs new file mode 100644 index 000000000000..ada466cae5c0 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttpBad.rs @@ -0,0 +1,10 @@ +// BAD: Using HTTP URL which can be intercepted +use reqwest; + +fn main() { + let url = "http://example.com/sensitive-data"; + + // This makes an insecure HTTP request that can be intercepted + let response = reqwest::blocking::get(url).unwrap(); + println!("Response: {}", response.text().unwrap()); +} \ No newline at end of file diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttpGood.rs b/rust/ql/src/queries/security/CWE-319/UseOfHttpGood.rs new file mode 100644 index 000000000000..22b94235fa17 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttpGood.rs @@ -0,0 +1,10 @@ +// GOOD: Using HTTPS URL which provides encryption +use reqwest; + +fn main() { + let url = "https://example.com/sensitive-data"; + + // This makes a secure HTTPS request that is encrypted + let response = reqwest::blocking::get(url).unwrap(); + println!("Response: {}", response.text().unwrap()); +} \ No newline at end of file diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 7a1de4f13144..d49e1fdde5d3 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -27,6 +27,7 @@ private import codeql.rust.security.LogInjectionExtensions private import codeql.rust.security.SqlInjectionExtensions private import codeql.rust.security.TaintedPathExtensions private import codeql.rust.security.UncontrolledAllocationSizeExtensions +private import codeql.rust.security.UseOfHttpExtensions private import codeql.rust.security.WeakSensitiveDataHashingExtensions private import codeql.rust.security.HardcodedCryptographicValueExtensions diff --git a/rust/ql/test/query-tests/security/CWE-319/Cargo.lock b/rust/ql/test/query-tests/security/CWE-319/Cargo.lock new file mode 100644 index 000000000000..ad4b5cebd226 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-319/Cargo.lock @@ -0,0 +1,1574 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cc" +version = "1.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.0", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "find-msvc-tools" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.5+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.175" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "reqwest" +version = "0.12.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.0", +] + +[[package]] +name = "rustls" +version = "0.23.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.0", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.223" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a505d71960adde88e293da5cb5eda57093379f64e61cf77bf0e6a63af07a7bac" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.223" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20f57cbd357666aa7b3ac84a90b4ea328f1d4ddb6772b430caa5d9e1309bb9e9" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.223" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d428d07faf17e306e699ec1e91996e5a165ba5d6bce5b5155173e91a8a01a56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys 0.61.0", +] + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "reqwest", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.47.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +dependencies = [ + "backtrace", + "bytes", + "io-uring", + "libc", + "mio", + "pin-project-lite", + "slab", + "socket2", + "windows-sys 0.59.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.5+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link 0.2.0", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected new file mode 100644 index 000000000000..53cc8606cc82 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -0,0 +1,78 @@ +#select +| main.rs:12:22:12:43 | ...::get | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:12:45:12:68 | "http://example.com/api" | this HTTP URL | +| main.rs:13:22:13:43 | ...::get | main.rs:13:45:13:73 | "http://api.example.com/data" | main.rs:13:22:13:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:13:45:13:73 | "http://api.example.com/data" | this HTTP URL | +| main.rs:25:21:25:42 | ...::get | main.rs:22:20:22:39 | "http://example.com" | main.rs:25:21:25:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:22:20:22:39 | "http://example.com" | this HTTP URL | +| main.rs:36:30:36:51 | ...::get | main.rs:33:20:33:28 | "http://" | main.rs:36:30:36:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:33:20:33:28 | "http://" | this HTTP URL | +| main.rs:60:21:60:42 | ...::get | main.rs:59:15:59:49 | "http://example.com/sensitive-... | main.rs:60:21:60:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:59:15:59:49 | "http://example.com/sensitive-... | this HTTP URL | +edges +| main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:13:45:13:73 | "http://api.example.com/data" | main.rs:13:22:13:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:22:9:22:16 | base_url | main.rs:24:28:24:53 | MacroExpr | provenance | | +| main.rs:22:20:22:39 | "http://example.com" | main.rs:22:9:22:16 | base_url | provenance | | +| main.rs:24:9:24:16 | full_url | main.rs:25:45:25:52 | full_url | provenance | | +| main.rs:24:20:24:26 | res | main.rs:24:28:24:53 | { ... } | provenance | | +| main.rs:24:28:24:53 | ...::format(...) | main.rs:24:20:24:26 | res | provenance | | +| main.rs:24:28:24:53 | ...::must_use(...) | main.rs:24:9:24:16 | full_url | provenance | | +| main.rs:24:28:24:53 | MacroExpr | main.rs:24:28:24:53 | ...::format(...) | provenance | MaD:2 | +| main.rs:24:28:24:53 | { ... } | main.rs:24:28:24:53 | ...::must_use(...) | provenance | MaD:3 | +| main.rs:25:44:25:52 | &full_url [&ref] | main.rs:25:21:25:42 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:25:45:25:52 | full_url | main.rs:25:44:25:52 | &full_url [&ref] | provenance | | +| main.rs:33:9:33:16 | protocol | main.rs:35:32:35:53 | MacroExpr | provenance | | +| main.rs:33:20:33:28 | "http://" | main.rs:33:9:33:16 | protocol | provenance | | +| main.rs:35:9:35:20 | insecure_url | main.rs:36:54:36:65 | insecure_url | provenance | | +| main.rs:35:24:35:30 | res | main.rs:35:32:35:53 | { ... } | provenance | | +| main.rs:35:32:35:53 | ...::format(...) | main.rs:35:24:35:30 | res | provenance | | +| main.rs:35:32:35:53 | ...::must_use(...) | main.rs:35:9:35:20 | insecure_url | provenance | | +| main.rs:35:32:35:53 | MacroExpr | main.rs:35:32:35:53 | ...::format(...) | provenance | MaD:2 | +| main.rs:35:32:35:53 | { ... } | main.rs:35:32:35:53 | ...::must_use(...) | provenance | MaD:3 | +| main.rs:36:53:36:65 | &insecure_url [&ref] | main.rs:36:30:36:51 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:36:54:36:65 | insecure_url | main.rs:36:53:36:65 | &insecure_url [&ref] | provenance | | +| main.rs:59:9:59:11 | url | main.rs:60:44:60:46 | url | provenance | | +| main.rs:59:15:59:49 | "http://example.com/sensitive-... | main.rs:59:9:59:11 | url | provenance | | +| main.rs:60:44:60:46 | url | main.rs:60:21:60:42 | ...::get | provenance | MaD:1 Sink:MaD:1 | +models +| 1 | Sink: reqwest::blocking::get; Argument[0]; request-url | +| 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 3 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +nodes +| main.rs:12:22:12:43 | ...::get | semmle.label | ...::get | +| main.rs:12:45:12:68 | "http://example.com/api" | semmle.label | "http://example.com/api" | +| main.rs:13:22:13:43 | ...::get | semmle.label | ...::get | +| main.rs:13:45:13:73 | "http://api.example.com/data" | semmle.label | "http://api.example.com/data" | +| main.rs:22:9:22:16 | base_url | semmle.label | base_url | +| main.rs:22:20:22:39 | "http://example.com" | semmle.label | "http://example.com" | +| main.rs:24:9:24:16 | full_url | semmle.label | full_url | +| main.rs:24:20:24:26 | res | semmle.label | res | +| main.rs:24:28:24:53 | ...::format(...) | semmle.label | ...::format(...) | +| main.rs:24:28:24:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| main.rs:24:28:24:53 | MacroExpr | semmle.label | MacroExpr | +| main.rs:24:28:24:53 | { ... } | semmle.label | { ... } | +| main.rs:25:21:25:42 | ...::get | semmle.label | ...::get | +| main.rs:25:44:25:52 | &full_url [&ref] | semmle.label | &full_url [&ref] | +| main.rs:25:45:25:52 | full_url | semmle.label | full_url | +| main.rs:33:9:33:16 | protocol | semmle.label | protocol | +| main.rs:33:20:33:28 | "http://" | semmle.label | "http://" | +| main.rs:35:9:35:20 | insecure_url | semmle.label | insecure_url | +| main.rs:35:24:35:30 | res | semmle.label | res | +| main.rs:35:32:35:53 | ...::format(...) | semmle.label | ...::format(...) | +| main.rs:35:32:35:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| main.rs:35:32:35:53 | MacroExpr | semmle.label | MacroExpr | +| main.rs:35:32:35:53 | { ... } | semmle.label | { ... } | +| main.rs:36:30:36:51 | ...::get | semmle.label | ...::get | +| main.rs:36:53:36:65 | &insecure_url [&ref] | semmle.label | &insecure_url [&ref] | +| main.rs:36:54:36:65 | insecure_url | semmle.label | insecure_url | +| main.rs:59:9:59:11 | url | semmle.label | url | +| main.rs:59:15:59:49 | "http://example.com/sensitive-... | semmle.label | "http://example.com/sensitive-... | +| main.rs:60:21:60:42 | ...::get | semmle.label | ...::get | +| main.rs:60:44:60:46 | url | semmle.label | url | +subpaths +testFailures +| main.rs:22:20:22:39 | "http://example.com" | Unexpected result: Source | +| main.rs:22:42:22:71 | //... | Missing result: Alert[rust/non-https-url] | +| main.rs:25:21:25:42 | ...::get | Unexpected result: Alert | +| main.rs:33:20:33:28 | "http://" | Unexpected result: Source | +| main.rs:33:31:33:60 | //... | Missing result: Alert[rust/non-https-url] | +| main.rs:36:30:36:51 | ...::get | Unexpected result: Alert | +| main.rs:59:15:59:49 | "http://example.com/sensitive-... | Unexpected result: Source | +| main.rs:59:52:59:81 | //... | Missing result: Alert[rust/non-https-url] | +| main.rs:60:21:60:42 | ...::get | Unexpected result: Alert | diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.qlref b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.qlref new file mode 100644 index 000000000000..90b533300191 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.qlref @@ -0,0 +1,4 @@ +query: queries/security/CWE-319/UseOfHttp.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/rust/ql/test/query-tests/security/CWE-319/main.rs b/rust/ql/test/query-tests/security/CWE-319/main.rs new file mode 100644 index 000000000000..ae58967a49bb --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-319/main.rs @@ -0,0 +1,65 @@ +use reqwest; +use std::env; + +fn main() { + test_direct_literals(); + test_dynamic_urls(); + test_localhost_exemptions(); +} + +fn test_direct_literals() { + // BAD: Direct HTTP URLs that should be flagged + let _response1 = reqwest::blocking::get("http://example.com/api").unwrap(); // $ Alert[rust/non-https-url] + let _response2 = reqwest::blocking::get("http://api.example.com/data").unwrap(); // $ Alert[rust/non-https-url] + + // GOOD: HTTPS URLs that should not be flagged + let _response3 = reqwest::blocking::get("https://example.com/api").unwrap(); + let _response4 = reqwest::blocking::get("https://api.example.com/data").unwrap(); +} + +fn test_dynamic_urls() { + // BAD: HTTP URLs constructed dynamically + let base_url = "http://example.com"; // $ Alert[rust/non-https-url] + let endpoint = "/api/users"; + let full_url = format!("{}{}", base_url, endpoint); + let _response = reqwest::blocking::get(&full_url).unwrap(); + + // GOOD: HTTPS URLs constructed dynamically + let secure_base = "https://example.com"; + let secure_full = format!("{}{}", secure_base, endpoint); + let _secure_response = reqwest::blocking::get(&secure_full).unwrap(); + + // BAD: HTTP protocol string + let protocol = "http://"; // $ Alert[rust/non-https-url] + let host = "api.example.com"; + let insecure_url = format!("{}{}", protocol, host); + let _insecure_response = reqwest::blocking::get(&insecure_url).unwrap(); + + // GOOD: HTTPS protocol string + let secure_protocol = "https://"; + let secure_url = format!("{}{}", secure_protocol, host); + let _secure_response2 = reqwest::blocking::get(&secure_url).unwrap(); +} + +fn test_localhost_exemptions() { + // GOOD: localhost URLs should not be flagged (local development) + let _local1 = reqwest::blocking::get("http://localhost:8080/api").unwrap(); + let _local2 = reqwest::blocking::get("http://127.0.0.1:3000/test").unwrap(); + let _local3 = reqwest::blocking::get("http://192.168.1.100/internal").unwrap(); + let _local4 = reqwest::blocking::get("http://10.0.0.1/admin").unwrap(); + + // Test IPv6 localhost variants + let _local5 = reqwest::blocking::get("http://[::1]:8080/api").unwrap(); + let _local6 = reqwest::blocking::get("http://[0:0:0:0:0:0:0:1]/test").unwrap(); +} + +// Additional test cases that mirror the Bad/Good examples +fn test_examples() { + // From UseOfHttpBad.rs - BAD case + let url = "http://example.com/sensitive-data"; // $ Alert[rust/non-https-url] + let _response = reqwest::blocking::get(url).unwrap(); + + // From UseOfHttpGood.rs - GOOD case + let secure_url = "https://example.com/sensitive-data"; + let _secure_response = reqwest::blocking::get(secure_url).unwrap(); +} \ No newline at end of file diff --git a/rust/ql/test/query-tests/security/CWE-319/options.yml b/rust/ql/test/query-tests/security/CWE-319/options.yml new file mode 100644 index 000000000000..aa57719603d6 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-319/options.yml @@ -0,0 +1,3 @@ +qltest_cargo_check: true +qltest_dependencies: + - reqwest = { version = "0.12.9", features = ["blocking"] } \ No newline at end of file From 8442146a0fe0ec65aa9649a746045d8a209560d4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:40:58 +0100 Subject: [PATCH 059/219] Rust: Add a couple of simple data flow test cases. --- .../dataflow/local/DataFlowStep.expected | 2041 +++++++++-------- .../dataflow/local/inline-flow.expected | 1051 ++++----- .../test/library-tests/dataflow/local/main.rs | 12 + 3 files changed, 1573 insertions(+), 1531 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 86bd270ba935..b395948f4206 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -97,1031 +97,1050 @@ localStep | main.rs:70:5:70:5 | [SSA] i | main.rs:71:10:71:10 | i | | main.rs:70:5:70:5 | i | main.rs:70:5:70:5 | [SSA] i | | main.rs:70:9:70:17 | source(...) | main.rs:70:5:70:5 | i | -| main.rs:75:9:75:9 | [SSA] a | main.rs:76:5:76:5 | a | -| main.rs:75:9:75:9 | a | main.rs:75:9:75:9 | [SSA] a | -| main.rs:75:9:75:9 | a | main.rs:75:9:75:9 | a | -| main.rs:75:13:75:17 | { ... } | main.rs:75:9:75:9 | a | -| main.rs:75:15:75:15 | 0 | main.rs:75:13:75:17 | { ... } | -| main.rs:76:5:76:5 | a | main.rs:74:31:77:1 | { ... } | -| main.rs:79:22:79:22 | [SSA] b | main.rs:81:12:81:12 | b | -| main.rs:79:22:79:22 | b | main.rs:79:22:79:22 | [SSA] b | -| main.rs:79:22:79:22 | b | main.rs:79:22:79:22 | b | -| main.rs:79:22:79:28 | ...: bool | main.rs:79:22:79:22 | b | -| main.rs:80:9:80:9 | [SSA] a | main.rs:86:5:86:5 | a | -| main.rs:80:9:80:9 | a | main.rs:80:9:80:9 | [SSA] a | -| main.rs:80:9:80:9 | a | main.rs:80:9:80:9 | a | -| main.rs:80:13:85:5 | 'block: { ... } | main.rs:80:9:80:9 | a | -| main.rs:82:13:82:26 | break 'block 1 | main.rs:80:13:85:5 | 'block: { ... } | -| main.rs:82:26:82:26 | 1 | main.rs:82:13:82:26 | break 'block 1 | -| main.rs:84:9:84:9 | 2 | main.rs:80:13:85:5 | 'block: { ... } | -| main.rs:86:5:86:5 | a | main.rs:79:38:87:1 | { ... } | -| main.rs:89:22:89:22 | [SSA] b | main.rs:91:12:91:12 | b | -| main.rs:89:22:89:22 | b | main.rs:89:22:89:22 | [SSA] b | -| main.rs:89:22:89:22 | b | main.rs:89:22:89:22 | b | -| main.rs:89:22:89:28 | ...: bool | main.rs:89:22:89:22 | b | -| main.rs:90:9:90:9 | [SSA] a | main.rs:96:5:96:5 | a | -| main.rs:90:9:90:9 | a | main.rs:90:9:90:9 | [SSA] a | -| main.rs:90:9:90:9 | a | main.rs:90:9:90:9 | a | -| main.rs:90:13:95:5 | 'block: { ... } | main.rs:90:9:90:9 | a | -| main.rs:92:13:92:26 | break 'block 1 | main.rs:90:13:95:5 | 'block: { ... } | -| main.rs:92:26:92:26 | 1 | main.rs:92:13:92:26 | break 'block 1 | -| main.rs:94:9:94:22 | break 'block 2 | main.rs:90:13:95:5 | 'block: { ... } | -| main.rs:94:22:94:22 | 2 | main.rs:94:9:94:22 | break 'block 2 | -| main.rs:96:5:96:5 | a | main.rs:89:38:97:1 | { ... } | -| main.rs:103:9:103:9 | [SSA] i | main.rs:104:11:104:11 | i | -| main.rs:103:9:103:9 | i | main.rs:103:9:103:9 | [SSA] i | -| main.rs:103:9:103:9 | i | main.rs:103:9:103:9 | i | -| main.rs:103:13:103:31 | ...::new(...) | main.rs:103:9:103:9 | i | -| main.rs:104:11:104:11 | [post] receiver for i | main.rs:104:11:104:11 | [post] i | -| main.rs:104:11:104:11 | i | main.rs:104:11:104:11 | receiver for i | -| main.rs:111:9:111:9 | [SSA] a | main.rs:112:10:112:10 | a | -| main.rs:111:9:111:9 | a | main.rs:111:9:111:9 | [SSA] a | -| main.rs:111:9:111:9 | a | main.rs:111:9:111:9 | a | -| main.rs:111:13:111:26 | TupleExpr | main.rs:111:9:111:9 | a | -| main.rs:112:10:112:10 | [post] a | main.rs:113:10:113:10 | a | -| main.rs:112:10:112:10 | a | main.rs:113:10:113:10 | a | -| main.rs:117:9:117:9 | [SSA] a | main.rs:118:24:118:24 | a | -| main.rs:117:9:117:9 | a | main.rs:117:9:117:9 | [SSA] a | -| main.rs:117:9:117:9 | a | main.rs:117:9:117:9 | a | -| main.rs:117:13:117:30 | TupleExpr | main.rs:117:9:117:9 | a | -| main.rs:118:10:118:11 | [SSA] a0 | main.rs:119:10:119:11 | a0 | -| main.rs:118:10:118:11 | a0 | main.rs:118:10:118:11 | [SSA] a0 | -| main.rs:118:10:118:11 | a0 | main.rs:118:10:118:11 | a0 | -| main.rs:118:14:118:15 | [SSA] a1 | main.rs:120:10:120:11 | a1 | -| main.rs:118:14:118:15 | a1 | main.rs:118:14:118:15 | [SSA] a1 | -| main.rs:118:14:118:15 | a1 | main.rs:118:14:118:15 | a1 | -| main.rs:118:18:118:19 | [SSA] a2 | main.rs:121:10:121:11 | a2 | -| main.rs:118:18:118:19 | a2 | main.rs:118:18:118:19 | [SSA] a2 | -| main.rs:118:18:118:19 | a2 | main.rs:118:18:118:19 | a2 | -| main.rs:118:24:118:24 | a | main.rs:118:9:118:20 | TuplePat | -| main.rs:125:9:125:13 | mut a | main.rs:125:13:125:13 | a | -| main.rs:125:13:125:13 | [SSA] a | main.rs:126:10:126:10 | a | -| main.rs:125:13:125:13 | a | main.rs:125:13:125:13 | [SSA] a | -| main.rs:125:17:125:31 | TupleExpr | main.rs:125:9:125:13 | mut a | -| main.rs:126:10:126:10 | [post] a | main.rs:127:10:127:10 | a | -| main.rs:126:10:126:10 | a | main.rs:127:10:127:10 | a | -| main.rs:127:10:127:10 | [post] a | main.rs:128:5:128:5 | a | -| main.rs:127:10:127:10 | a | main.rs:128:5:128:5 | a | -| main.rs:128:5:128:5 | [post] a | main.rs:129:5:129:5 | a | -| main.rs:128:5:128:5 | a | main.rs:129:5:129:5 | a | -| main.rs:128:11:128:20 | source(...) | main.rs:128:5:128:7 | a.0 | -| main.rs:129:5:129:5 | [post] a | main.rs:130:10:130:10 | a | -| main.rs:129:5:129:5 | a | main.rs:130:10:130:10 | a | -| main.rs:129:11:129:11 | 2 | main.rs:129:5:129:7 | a.1 | -| main.rs:130:10:130:10 | [post] a | main.rs:131:10:131:10 | a | -| main.rs:130:10:130:10 | a | main.rs:131:10:131:10 | a | -| main.rs:135:9:135:9 | [SSA] a | main.rs:136:14:136:14 | a | -| main.rs:135:9:135:9 | a | main.rs:135:9:135:9 | [SSA] a | -| main.rs:135:9:135:9 | a | main.rs:135:9:135:9 | a | -| main.rs:135:13:135:27 | TupleExpr | main.rs:135:9:135:9 | a | -| main.rs:136:9:136:9 | [SSA] b | main.rs:137:10:137:10 | b | -| main.rs:136:9:136:9 | b | main.rs:136:9:136:9 | [SSA] b | -| main.rs:136:9:136:9 | b | main.rs:136:9:136:9 | b | -| main.rs:136:13:136:18 | TupleExpr | main.rs:136:9:136:9 | b | -| main.rs:137:10:137:10 | [post] b | main.rs:138:10:138:10 | b | -| main.rs:137:10:137:10 | b | main.rs:138:10:138:10 | b | -| main.rs:138:10:138:10 | [post] b | main.rs:139:10:139:10 | b | -| main.rs:138:10:138:10 | b | main.rs:139:10:139:10 | b | -| main.rs:151:9:151:9 | [SSA] p | main.rs:152:10:152:10 | p | -| main.rs:151:9:151:9 | p | main.rs:151:9:151:9 | [SSA] p | -| main.rs:151:9:151:9 | p | main.rs:151:9:151:9 | p | -| main.rs:151:13:151:40 | Point {...} | main.rs:151:9:151:9 | p | -| main.rs:152:10:152:10 | [post] p | main.rs:153:10:153:10 | p | -| main.rs:152:10:152:10 | p | main.rs:153:10:153:10 | p | -| main.rs:157:9:157:13 | mut p | main.rs:157:13:157:13 | p | -| main.rs:157:13:157:13 | [SSA] p | main.rs:158:10:158:10 | p | -| main.rs:157:13:157:13 | p | main.rs:157:13:157:13 | [SSA] p | -| main.rs:157:17:157:44 | Point {...} | main.rs:157:9:157:13 | mut p | -| main.rs:158:10:158:10 | [post] p | main.rs:159:5:159:5 | p | -| main.rs:158:10:158:10 | p | main.rs:159:5:159:5 | p | -| main.rs:159:5:159:5 | [post] p | main.rs:160:10:160:10 | p | -| main.rs:159:5:159:5 | p | main.rs:160:10:160:10 | p | -| main.rs:159:11:159:20 | source(...) | main.rs:159:5:159:7 | p.y | -| main.rs:164:9:164:9 | [SSA] p | main.rs:168:32:168:32 | p | -| main.rs:164:9:164:9 | p | main.rs:164:9:164:9 | [SSA] p | -| main.rs:164:9:164:9 | p | main.rs:164:9:164:9 | p | -| main.rs:164:13:167:5 | Point {...} | main.rs:164:9:164:9 | p | -| main.rs:168:20:168:20 | [SSA] a | main.rs:169:10:169:10 | a | -| main.rs:168:20:168:20 | a | main.rs:168:20:168:20 | [SSA] a | -| main.rs:168:20:168:20 | a | main.rs:168:20:168:20 | a | -| main.rs:168:26:168:26 | [SSA] b | main.rs:170:10:170:10 | b | -| main.rs:168:26:168:26 | b | main.rs:168:26:168:26 | [SSA] b | -| main.rs:168:26:168:26 | b | main.rs:168:26:168:26 | b | -| main.rs:168:32:168:32 | p | main.rs:168:9:168:28 | Point {...} | -| main.rs:179:9:179:9 | [SSA] p | main.rs:186:10:186:10 | p | -| main.rs:179:9:179:9 | p | main.rs:179:9:179:9 | [SSA] p | -| main.rs:179:9:179:9 | p | main.rs:179:9:179:9 | p | -| main.rs:179:13:185:5 | Point3D {...} | main.rs:179:9:179:9 | p | -| main.rs:186:10:186:10 | [post] p | main.rs:187:10:187:10 | p | -| main.rs:186:10:186:10 | p | main.rs:187:10:187:10 | p | -| main.rs:187:10:187:10 | [post] p | main.rs:188:10:188:10 | p | -| main.rs:187:10:187:10 | p | main.rs:188:10:188:10 | p | -| main.rs:192:9:192:9 | [SSA] y | main.rs:194:30:194:30 | y | -| main.rs:192:9:192:9 | y | main.rs:192:9:192:9 | [SSA] y | -| main.rs:192:9:192:9 | y | main.rs:192:9:192:9 | y | -| main.rs:192:13:192:22 | source(...) | main.rs:192:9:192:9 | y | -| main.rs:193:9:193:9 | [SSA] p | main.rs:197:11:197:11 | p | -| main.rs:193:9:193:9 | p | main.rs:193:9:193:9 | [SSA] p | -| main.rs:193:9:193:9 | p | main.rs:193:9:193:9 | p | -| main.rs:193:13:196:5 | Point3D {...} | main.rs:193:9:193:9 | p | -| main.rs:197:5:206:5 | match p { ... } | main.rs:191:26:207:1 | { ... } | -| main.rs:197:11:197:11 | p | main.rs:198:9:201:9 | Point3D {...} | -| main.rs:199:28:199:28 | [SSA] x | main.rs:202:18:202:18 | x | -| main.rs:199:28:199:28 | x | main.rs:199:28:199:28 | [SSA] x | -| main.rs:199:28:199:28 | x | main.rs:199:28:199:28 | x | -| main.rs:199:31:199:31 | [SSA] y | main.rs:203:18:203:18 | y | -| main.rs:199:31:199:31 | y | main.rs:199:31:199:31 | [SSA] y | -| main.rs:199:31:199:31 | y | main.rs:199:31:199:31 | y | -| main.rs:200:13:200:13 | [SSA] z | main.rs:204:18:204:18 | z | -| main.rs:200:13:200:13 | z | main.rs:200:13:200:13 | [SSA] z | -| main.rs:200:13:200:13 | z | main.rs:200:13:200:13 | z | -| main.rs:201:14:205:9 | { ... } | main.rs:197:5:206:5 | match p { ... } | -| main.rs:212:9:212:9 | [SSA] s | main.rs:213:10:213:10 | s | -| main.rs:212:9:212:9 | s | main.rs:212:9:212:9 | [SSA] s | -| main.rs:212:9:212:9 | s | main.rs:212:9:212:9 | s | -| main.rs:212:13:212:40 | MyTupleStruct(...) | main.rs:212:9:212:9 | s | -| main.rs:213:10:213:10 | [post] s | main.rs:214:10:214:10 | s | -| main.rs:213:10:213:10 | s | main.rs:214:10:214:10 | s | -| main.rs:214:10:214:10 | [post] s | main.rs:216:11:216:11 | s | -| main.rs:214:10:214:10 | s | main.rs:216:11:216:11 | s | -| main.rs:216:5:221:5 | match s { ... } | main.rs:211:19:222:1 | { ... } | -| main.rs:216:11:216:11 | s | main.rs:217:9:217:27 | MyTupleStruct(...) | -| main.rs:217:23:217:23 | [SSA] x | main.rs:218:18:218:18 | x | -| main.rs:217:23:217:23 | x | main.rs:217:23:217:23 | [SSA] x | -| main.rs:217:23:217:23 | x | main.rs:217:23:217:23 | x | -| main.rs:217:26:217:26 | [SSA] y | main.rs:219:18:219:18 | y | -| main.rs:217:26:217:26 | y | main.rs:217:26:217:26 | [SSA] y | -| main.rs:217:26:217:26 | y | main.rs:217:26:217:26 | y | -| main.rs:217:32:220:9 | { ... } | main.rs:216:5:221:5 | match s { ... } | -| main.rs:228:9:228:10 | [SSA] s1 | main.rs:230:11:230:12 | s1 | -| main.rs:228:9:228:10 | s1 | main.rs:228:9:228:10 | [SSA] s1 | -| main.rs:228:9:228:10 | s1 | main.rs:228:9:228:10 | s1 | -| main.rs:228:14:228:37 | ...::Some(...) | main.rs:228:9:228:10 | s1 | -| main.rs:229:9:229:10 | [SSA] s2 | main.rs:234:11:234:12 | s2 | -| main.rs:229:9:229:10 | s2 | main.rs:229:9:229:10 | [SSA] s2 | -| main.rs:229:9:229:10 | s2 | main.rs:229:9:229:10 | s2 | -| main.rs:229:14:229:28 | ...::Some(...) | main.rs:229:9:229:10 | s2 | -| main.rs:230:11:230:12 | s1 | main.rs:231:9:231:23 | ...::Some(...) | -| main.rs:230:11:230:12 | s1 | main.rs:232:9:232:20 | ...::None | -| main.rs:231:22:231:22 | [SSA] n | main.rs:231:33:231:33 | n | -| main.rs:231:22:231:22 | n | main.rs:231:22:231:22 | [SSA] n | -| main.rs:231:22:231:22 | n | main.rs:231:22:231:22 | n | -| main.rs:231:28:231:34 | sink(...) | main.rs:230:5:233:5 | match s1 { ... } | -| main.rs:232:25:232:31 | sink(...) | main.rs:230:5:233:5 | match s1 { ... } | -| main.rs:234:5:237:5 | match s2 { ... } | main.rs:227:37:238:1 | { ... } | -| main.rs:234:11:234:12 | s2 | main.rs:235:9:235:23 | ...::Some(...) | -| main.rs:234:11:234:12 | s2 | main.rs:236:9:236:20 | ...::None | -| main.rs:235:22:235:22 | [SSA] n | main.rs:235:33:235:33 | n | -| main.rs:235:22:235:22 | n | main.rs:235:22:235:22 | [SSA] n | -| main.rs:235:22:235:22 | n | main.rs:235:22:235:22 | n | -| main.rs:235:28:235:34 | sink(...) | main.rs:234:5:237:5 | match s2 { ... } | -| main.rs:236:25:236:31 | sink(...) | main.rs:234:5:237:5 | match s2 { ... } | -| main.rs:241:9:241:10 | [SSA] s1 | main.rs:243:11:243:12 | s1 | -| main.rs:241:9:241:10 | s1 | main.rs:241:9:241:10 | [SSA] s1 | -| main.rs:241:9:241:10 | s1 | main.rs:241:9:241:10 | s1 | -| main.rs:241:14:241:29 | Some(...) | main.rs:241:9:241:10 | s1 | -| main.rs:242:9:242:10 | [SSA] s2 | main.rs:247:11:247:12 | s2 | -| main.rs:242:9:242:10 | s2 | main.rs:242:9:242:10 | [SSA] s2 | -| main.rs:242:9:242:10 | s2 | main.rs:242:9:242:10 | s2 | -| main.rs:242:14:242:20 | Some(...) | main.rs:242:9:242:10 | s2 | -| main.rs:243:11:243:12 | s1 | main.rs:244:9:244:15 | Some(...) | -| main.rs:243:11:243:12 | s1 | main.rs:245:9:245:12 | None | -| main.rs:244:14:244:14 | [SSA] n | main.rs:244:25:244:25 | n | -| main.rs:244:14:244:14 | n | main.rs:244:14:244:14 | [SSA] n | -| main.rs:244:14:244:14 | n | main.rs:244:14:244:14 | n | -| main.rs:244:20:244:26 | sink(...) | main.rs:243:5:246:5 | match s1 { ... } | -| main.rs:245:17:245:23 | sink(...) | main.rs:243:5:246:5 | match s1 { ... } | -| main.rs:247:5:250:5 | match s2 { ... } | main.rs:240:39:251:1 | { ... } | -| main.rs:247:11:247:12 | s2 | main.rs:248:9:248:15 | Some(...) | -| main.rs:247:11:247:12 | s2 | main.rs:249:9:249:12 | None | -| main.rs:248:14:248:14 | [SSA] n | main.rs:248:25:248:25 | n | -| main.rs:248:14:248:14 | n | main.rs:248:14:248:14 | [SSA] n | -| main.rs:248:14:248:14 | n | main.rs:248:14:248:14 | n | -| main.rs:248:20:248:26 | sink(...) | main.rs:247:5:250:5 | match s2 { ... } | -| main.rs:249:17:249:23 | sink(...) | main.rs:247:5:250:5 | match s2 { ... } | -| main.rs:254:9:254:10 | [SSA] s1 | main.rs:255:22:255:23 | s1 | -| main.rs:254:9:254:10 | s1 | main.rs:254:9:254:10 | [SSA] s1 | -| main.rs:254:9:254:10 | s1 | main.rs:254:9:254:10 | s1 | -| main.rs:254:14:254:29 | Some(...) | main.rs:254:9:254:10 | s1 | -| main.rs:255:5:262:5 | if ... {...} | main.rs:253:25:263:1 | { ... } | -| main.rs:255:17:255:17 | [SSA] n | main.rs:257:18:257:18 | n | -| main.rs:255:17:255:17 | n | main.rs:255:17:255:17 | [SSA] n | -| main.rs:255:17:255:17 | n | main.rs:255:17:255:17 | n | -| main.rs:255:22:255:23 | s1 | main.rs:255:12:255:18 | Some(...) | -| main.rs:257:18:257:18 | [post] n | main.rs:261:14:261:14 | n | -| main.rs:257:18:257:18 | n | main.rs:261:14:261:14 | n | -| main.rs:258:13:258:16 | true | main.rs:256:12:259:9 | { ... } | -| main.rs:260:5:262:5 | { ... } | main.rs:255:5:262:5 | if ... {...} | -| main.rs:266:9:266:10 | [SSA] s1 | main.rs:267:10:267:11 | s1 | +| main.rs:72:5:72:5 | [SSA] i | main.rs:73:10:73:10 | i | +| main.rs:72:5:72:5 | i | main.rs:72:5:72:5 | [SSA] i | +| main.rs:72:9:72:9 | 2 | main.rs:72:5:72:5 | i | +| main.rs:75:9:75:13 | mut j | main.rs:75:13:75:13 | j | +| main.rs:75:17:75:17 | 3 | main.rs:75:9:75:13 | mut j | +| main.rs:76:9:76:9 | [SSA] k | main.rs:77:9:77:9 | k | +| main.rs:76:9:76:9 | k | main.rs:76:9:76:9 | [SSA] k | +| main.rs:76:9:76:9 | k | main.rs:76:9:76:9 | k | +| main.rs:76:13:76:21 | source(...) | main.rs:76:9:76:9 | k | +| main.rs:77:5:77:5 | [SSA] j | main.rs:78:10:78:10 | j | +| main.rs:77:5:77:5 | j | main.rs:77:5:77:5 | [SSA] j | +| main.rs:77:9:77:9 | k | main.rs:77:5:77:5 | j | +| main.rs:77:9:77:9 | k | main.rs:79:10:79:10 | k | +| main.rs:81:9:81:13 | mut l | main.rs:81:13:81:13 | l | +| main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l | +| main.rs:82:5:82:5 | [SSA] l | main.rs:82:9:82:9 | l | +| main.rs:82:5:82:5 | l | main.rs:82:5:82:5 | [SSA] l | +| main.rs:82:9:82:9 | l | main.rs:82:5:82:5 | l | +| main.rs:82:9:82:9 | l | main.rs:83:10:83:10 | l | +| main.rs:87:9:87:9 | [SSA] a | main.rs:88:5:88:5 | a | +| main.rs:87:9:87:9 | a | main.rs:87:9:87:9 | [SSA] a | +| main.rs:87:9:87:9 | a | main.rs:87:9:87:9 | a | +| main.rs:87:13:87:17 | { ... } | main.rs:87:9:87:9 | a | +| main.rs:87:15:87:15 | 0 | main.rs:87:13:87:17 | { ... } | +| main.rs:88:5:88:5 | a | main.rs:86:31:89:1 | { ... } | +| main.rs:91:22:91:22 | [SSA] b | main.rs:93:12:93:12 | b | +| main.rs:91:22:91:22 | b | main.rs:91:22:91:22 | [SSA] b | +| main.rs:91:22:91:22 | b | main.rs:91:22:91:22 | b | +| main.rs:91:22:91:28 | ...: bool | main.rs:91:22:91:22 | b | +| main.rs:92:9:92:9 | [SSA] a | main.rs:98:5:98:5 | a | +| main.rs:92:9:92:9 | a | main.rs:92:9:92:9 | [SSA] a | +| main.rs:92:9:92:9 | a | main.rs:92:9:92:9 | a | +| main.rs:92:13:97:5 | 'block: { ... } | main.rs:92:9:92:9 | a | +| main.rs:94:13:94:26 | break 'block 1 | main.rs:92:13:97:5 | 'block: { ... } | +| main.rs:94:26:94:26 | 1 | main.rs:94:13:94:26 | break 'block 1 | +| main.rs:96:9:96:9 | 2 | main.rs:92:13:97:5 | 'block: { ... } | +| main.rs:98:5:98:5 | a | main.rs:91:38:99:1 | { ... } | +| main.rs:101:22:101:22 | [SSA] b | main.rs:103:12:103:12 | b | +| main.rs:101:22:101:22 | b | main.rs:101:22:101:22 | [SSA] b | +| main.rs:101:22:101:22 | b | main.rs:101:22:101:22 | b | +| main.rs:101:22:101:28 | ...: bool | main.rs:101:22:101:22 | b | +| main.rs:102:9:102:9 | [SSA] a | main.rs:108:5:108:5 | a | +| main.rs:102:9:102:9 | a | main.rs:102:9:102:9 | [SSA] a | +| main.rs:102:9:102:9 | a | main.rs:102:9:102:9 | a | +| main.rs:102:13:107:5 | 'block: { ... } | main.rs:102:9:102:9 | a | +| main.rs:104:13:104:26 | break 'block 1 | main.rs:102:13:107:5 | 'block: { ... } | +| main.rs:104:26:104:26 | 1 | main.rs:104:13:104:26 | break 'block 1 | +| main.rs:106:9:106:22 | break 'block 2 | main.rs:102:13:107:5 | 'block: { ... } | +| main.rs:106:22:106:22 | 2 | main.rs:106:9:106:22 | break 'block 2 | +| main.rs:108:5:108:5 | a | main.rs:101:38:109:1 | { ... } | +| main.rs:115:9:115:9 | [SSA] i | main.rs:116:11:116:11 | i | +| main.rs:115:9:115:9 | i | main.rs:115:9:115:9 | [SSA] i | +| main.rs:115:9:115:9 | i | main.rs:115:9:115:9 | i | +| main.rs:115:13:115:31 | ...::new(...) | main.rs:115:9:115:9 | i | +| main.rs:116:11:116:11 | [post] receiver for i | main.rs:116:11:116:11 | [post] i | +| main.rs:116:11:116:11 | i | main.rs:116:11:116:11 | receiver for i | +| main.rs:123:9:123:9 | [SSA] a | main.rs:124:10:124:10 | a | +| main.rs:123:9:123:9 | a | main.rs:123:9:123:9 | [SSA] a | +| main.rs:123:9:123:9 | a | main.rs:123:9:123:9 | a | +| main.rs:123:13:123:26 | TupleExpr | main.rs:123:9:123:9 | a | +| main.rs:124:10:124:10 | [post] a | main.rs:125:10:125:10 | a | +| main.rs:124:10:124:10 | a | main.rs:125:10:125:10 | a | +| main.rs:129:9:129:9 | [SSA] a | main.rs:130:24:130:24 | a | +| main.rs:129:9:129:9 | a | main.rs:129:9:129:9 | [SSA] a | +| main.rs:129:9:129:9 | a | main.rs:129:9:129:9 | a | +| main.rs:129:13:129:30 | TupleExpr | main.rs:129:9:129:9 | a | +| main.rs:130:10:130:11 | [SSA] a0 | main.rs:131:10:131:11 | a0 | +| main.rs:130:10:130:11 | a0 | main.rs:130:10:130:11 | [SSA] a0 | +| main.rs:130:10:130:11 | a0 | main.rs:130:10:130:11 | a0 | +| main.rs:130:14:130:15 | [SSA] a1 | main.rs:132:10:132:11 | a1 | +| main.rs:130:14:130:15 | a1 | main.rs:130:14:130:15 | [SSA] a1 | +| main.rs:130:14:130:15 | a1 | main.rs:130:14:130:15 | a1 | +| main.rs:130:18:130:19 | [SSA] a2 | main.rs:133:10:133:11 | a2 | +| main.rs:130:18:130:19 | a2 | main.rs:130:18:130:19 | [SSA] a2 | +| main.rs:130:18:130:19 | a2 | main.rs:130:18:130:19 | a2 | +| main.rs:130:24:130:24 | a | main.rs:130:9:130:20 | TuplePat | +| main.rs:137:9:137:13 | mut a | main.rs:137:13:137:13 | a | +| main.rs:137:13:137:13 | [SSA] a | main.rs:138:10:138:10 | a | +| main.rs:137:13:137:13 | a | main.rs:137:13:137:13 | [SSA] a | +| main.rs:137:17:137:31 | TupleExpr | main.rs:137:9:137:13 | mut a | +| main.rs:138:10:138:10 | [post] a | main.rs:139:10:139:10 | a | +| main.rs:138:10:138:10 | a | main.rs:139:10:139:10 | a | +| main.rs:139:10:139:10 | [post] a | main.rs:140:5:140:5 | a | +| main.rs:139:10:139:10 | a | main.rs:140:5:140:5 | a | +| main.rs:140:5:140:5 | [post] a | main.rs:141:5:141:5 | a | +| main.rs:140:5:140:5 | a | main.rs:141:5:141:5 | a | +| main.rs:140:11:140:20 | source(...) | main.rs:140:5:140:7 | a.0 | +| main.rs:141:5:141:5 | [post] a | main.rs:142:10:142:10 | a | +| main.rs:141:5:141:5 | a | main.rs:142:10:142:10 | a | +| main.rs:141:11:141:11 | 2 | main.rs:141:5:141:7 | a.1 | +| main.rs:142:10:142:10 | [post] a | main.rs:143:10:143:10 | a | +| main.rs:142:10:142:10 | a | main.rs:143:10:143:10 | a | +| main.rs:147:9:147:9 | [SSA] a | main.rs:148:14:148:14 | a | +| main.rs:147:9:147:9 | a | main.rs:147:9:147:9 | [SSA] a | +| main.rs:147:9:147:9 | a | main.rs:147:9:147:9 | a | +| main.rs:147:13:147:27 | TupleExpr | main.rs:147:9:147:9 | a | +| main.rs:148:9:148:9 | [SSA] b | main.rs:149:10:149:10 | b | +| main.rs:148:9:148:9 | b | main.rs:148:9:148:9 | [SSA] b | +| main.rs:148:9:148:9 | b | main.rs:148:9:148:9 | b | +| main.rs:148:13:148:18 | TupleExpr | main.rs:148:9:148:9 | b | +| main.rs:149:10:149:10 | [post] b | main.rs:150:10:150:10 | b | +| main.rs:149:10:149:10 | b | main.rs:150:10:150:10 | b | +| main.rs:150:10:150:10 | [post] b | main.rs:151:10:151:10 | b | +| main.rs:150:10:150:10 | b | main.rs:151:10:151:10 | b | +| main.rs:163:9:163:9 | [SSA] p | main.rs:164:10:164:10 | p | +| main.rs:163:9:163:9 | p | main.rs:163:9:163:9 | [SSA] p | +| main.rs:163:9:163:9 | p | main.rs:163:9:163:9 | p | +| main.rs:163:13:163:40 | Point {...} | main.rs:163:9:163:9 | p | +| main.rs:164:10:164:10 | [post] p | main.rs:165:10:165:10 | p | +| main.rs:164:10:164:10 | p | main.rs:165:10:165:10 | p | +| main.rs:169:9:169:13 | mut p | main.rs:169:13:169:13 | p | +| main.rs:169:13:169:13 | [SSA] p | main.rs:170:10:170:10 | p | +| main.rs:169:13:169:13 | p | main.rs:169:13:169:13 | [SSA] p | +| main.rs:169:17:169:44 | Point {...} | main.rs:169:9:169:13 | mut p | +| main.rs:170:10:170:10 | [post] p | main.rs:171:5:171:5 | p | +| main.rs:170:10:170:10 | p | main.rs:171:5:171:5 | p | +| main.rs:171:5:171:5 | [post] p | main.rs:172:10:172:10 | p | +| main.rs:171:5:171:5 | p | main.rs:172:10:172:10 | p | +| main.rs:171:11:171:20 | source(...) | main.rs:171:5:171:7 | p.y | +| main.rs:176:9:176:9 | [SSA] p | main.rs:180:32:180:32 | p | +| main.rs:176:9:176:9 | p | main.rs:176:9:176:9 | [SSA] p | +| main.rs:176:9:176:9 | p | main.rs:176:9:176:9 | p | +| main.rs:176:13:179:5 | Point {...} | main.rs:176:9:176:9 | p | +| main.rs:180:20:180:20 | [SSA] a | main.rs:181:10:181:10 | a | +| main.rs:180:20:180:20 | a | main.rs:180:20:180:20 | [SSA] a | +| main.rs:180:20:180:20 | a | main.rs:180:20:180:20 | a | +| main.rs:180:26:180:26 | [SSA] b | main.rs:182:10:182:10 | b | +| main.rs:180:26:180:26 | b | main.rs:180:26:180:26 | [SSA] b | +| main.rs:180:26:180:26 | b | main.rs:180:26:180:26 | b | +| main.rs:180:32:180:32 | p | main.rs:180:9:180:28 | Point {...} | +| main.rs:191:9:191:9 | [SSA] p | main.rs:198:10:198:10 | p | +| main.rs:191:9:191:9 | p | main.rs:191:9:191:9 | [SSA] p | +| main.rs:191:9:191:9 | p | main.rs:191:9:191:9 | p | +| main.rs:191:13:197:5 | Point3D {...} | main.rs:191:9:191:9 | p | +| main.rs:198:10:198:10 | [post] p | main.rs:199:10:199:10 | p | +| main.rs:198:10:198:10 | p | main.rs:199:10:199:10 | p | +| main.rs:199:10:199:10 | [post] p | main.rs:200:10:200:10 | p | +| main.rs:199:10:199:10 | p | main.rs:200:10:200:10 | p | +| main.rs:204:9:204:9 | [SSA] y | main.rs:206:30:206:30 | y | +| main.rs:204:9:204:9 | y | main.rs:204:9:204:9 | [SSA] y | +| main.rs:204:9:204:9 | y | main.rs:204:9:204:9 | y | +| main.rs:204:13:204:22 | source(...) | main.rs:204:9:204:9 | y | +| main.rs:205:9:205:9 | [SSA] p | main.rs:209:11:209:11 | p | +| main.rs:205:9:205:9 | p | main.rs:205:9:205:9 | [SSA] p | +| main.rs:205:9:205:9 | p | main.rs:205:9:205:9 | p | +| main.rs:205:13:208:5 | Point3D {...} | main.rs:205:9:205:9 | p | +| main.rs:209:5:218:5 | match p { ... } | main.rs:203:26:219:1 | { ... } | +| main.rs:209:11:209:11 | p | main.rs:210:9:213:9 | Point3D {...} | +| main.rs:211:28:211:28 | [SSA] x | main.rs:214:18:214:18 | x | +| main.rs:211:28:211:28 | x | main.rs:211:28:211:28 | [SSA] x | +| main.rs:211:28:211:28 | x | main.rs:211:28:211:28 | x | +| main.rs:211:31:211:31 | [SSA] y | main.rs:215:18:215:18 | y | +| main.rs:211:31:211:31 | y | main.rs:211:31:211:31 | [SSA] y | +| main.rs:211:31:211:31 | y | main.rs:211:31:211:31 | y | +| main.rs:212:13:212:13 | [SSA] z | main.rs:216:18:216:18 | z | +| main.rs:212:13:212:13 | z | main.rs:212:13:212:13 | [SSA] z | +| main.rs:212:13:212:13 | z | main.rs:212:13:212:13 | z | +| main.rs:213:14:217:9 | { ... } | main.rs:209:5:218:5 | match p { ... } | +| main.rs:224:9:224:9 | [SSA] s | main.rs:225:10:225:10 | s | +| main.rs:224:9:224:9 | s | main.rs:224:9:224:9 | [SSA] s | +| main.rs:224:9:224:9 | s | main.rs:224:9:224:9 | s | +| main.rs:224:13:224:40 | MyTupleStruct(...) | main.rs:224:9:224:9 | s | +| main.rs:225:10:225:10 | [post] s | main.rs:226:10:226:10 | s | +| main.rs:225:10:225:10 | s | main.rs:226:10:226:10 | s | +| main.rs:226:10:226:10 | [post] s | main.rs:228:11:228:11 | s | +| main.rs:226:10:226:10 | s | main.rs:228:11:228:11 | s | +| main.rs:228:5:233:5 | match s { ... } | main.rs:223:19:234:1 | { ... } | +| main.rs:228:11:228:11 | s | main.rs:229:9:229:27 | MyTupleStruct(...) | +| main.rs:229:23:229:23 | [SSA] x | main.rs:230:18:230:18 | x | +| main.rs:229:23:229:23 | x | main.rs:229:23:229:23 | [SSA] x | +| main.rs:229:23:229:23 | x | main.rs:229:23:229:23 | x | +| main.rs:229:26:229:26 | [SSA] y | main.rs:231:18:231:18 | y | +| main.rs:229:26:229:26 | y | main.rs:229:26:229:26 | [SSA] y | +| main.rs:229:26:229:26 | y | main.rs:229:26:229:26 | y | +| main.rs:229:32:232:9 | { ... } | main.rs:228:5:233:5 | match s { ... } | +| main.rs:240:9:240:10 | [SSA] s1 | main.rs:242:11:242:12 | s1 | +| main.rs:240:9:240:10 | s1 | main.rs:240:9:240:10 | [SSA] s1 | +| main.rs:240:9:240:10 | s1 | main.rs:240:9:240:10 | s1 | +| main.rs:240:14:240:37 | ...::Some(...) | main.rs:240:9:240:10 | s1 | +| main.rs:241:9:241:10 | [SSA] s2 | main.rs:246:11:246:12 | s2 | +| main.rs:241:9:241:10 | s2 | main.rs:241:9:241:10 | [SSA] s2 | +| main.rs:241:9:241:10 | s2 | main.rs:241:9:241:10 | s2 | +| main.rs:241:14:241:28 | ...::Some(...) | main.rs:241:9:241:10 | s2 | +| main.rs:242:11:242:12 | s1 | main.rs:243:9:243:23 | ...::Some(...) | +| main.rs:242:11:242:12 | s1 | main.rs:244:9:244:20 | ...::None | +| main.rs:243:22:243:22 | [SSA] n | main.rs:243:33:243:33 | n | +| main.rs:243:22:243:22 | n | main.rs:243:22:243:22 | [SSA] n | +| main.rs:243:22:243:22 | n | main.rs:243:22:243:22 | n | +| main.rs:243:28:243:34 | sink(...) | main.rs:242:5:245:5 | match s1 { ... } | +| main.rs:244:25:244:31 | sink(...) | main.rs:242:5:245:5 | match s1 { ... } | +| main.rs:246:5:249:5 | match s2 { ... } | main.rs:239:37:250:1 | { ... } | +| main.rs:246:11:246:12 | s2 | main.rs:247:9:247:23 | ...::Some(...) | +| main.rs:246:11:246:12 | s2 | main.rs:248:9:248:20 | ...::None | +| main.rs:247:22:247:22 | [SSA] n | main.rs:247:33:247:33 | n | +| main.rs:247:22:247:22 | n | main.rs:247:22:247:22 | [SSA] n | +| main.rs:247:22:247:22 | n | main.rs:247:22:247:22 | n | +| main.rs:247:28:247:34 | sink(...) | main.rs:246:5:249:5 | match s2 { ... } | +| main.rs:248:25:248:31 | sink(...) | main.rs:246:5:249:5 | match s2 { ... } | +| main.rs:253:9:253:10 | [SSA] s1 | main.rs:255:11:255:12 | s1 | +| main.rs:253:9:253:10 | s1 | main.rs:253:9:253:10 | [SSA] s1 | +| main.rs:253:9:253:10 | s1 | main.rs:253:9:253:10 | s1 | +| main.rs:253:14:253:29 | Some(...) | main.rs:253:9:253:10 | s1 | +| main.rs:254:9:254:10 | [SSA] s2 | main.rs:259:11:259:12 | s2 | +| main.rs:254:9:254:10 | s2 | main.rs:254:9:254:10 | [SSA] s2 | +| main.rs:254:9:254:10 | s2 | main.rs:254:9:254:10 | s2 | +| main.rs:254:14:254:20 | Some(...) | main.rs:254:9:254:10 | s2 | +| main.rs:255:11:255:12 | s1 | main.rs:256:9:256:15 | Some(...) | +| main.rs:255:11:255:12 | s1 | main.rs:257:9:257:12 | None | +| main.rs:256:14:256:14 | [SSA] n | main.rs:256:25:256:25 | n | +| main.rs:256:14:256:14 | n | main.rs:256:14:256:14 | [SSA] n | +| main.rs:256:14:256:14 | n | main.rs:256:14:256:14 | n | +| main.rs:256:20:256:26 | sink(...) | main.rs:255:5:258:5 | match s1 { ... } | +| main.rs:257:17:257:23 | sink(...) | main.rs:255:5:258:5 | match s1 { ... } | +| main.rs:259:5:262:5 | match s2 { ... } | main.rs:252:39:263:1 | { ... } | +| main.rs:259:11:259:12 | s2 | main.rs:260:9:260:15 | Some(...) | +| main.rs:259:11:259:12 | s2 | main.rs:261:9:261:12 | None | +| main.rs:260:14:260:14 | [SSA] n | main.rs:260:25:260:25 | n | +| main.rs:260:14:260:14 | n | main.rs:260:14:260:14 | [SSA] n | +| main.rs:260:14:260:14 | n | main.rs:260:14:260:14 | n | +| main.rs:260:20:260:26 | sink(...) | main.rs:259:5:262:5 | match s2 { ... } | +| main.rs:261:17:261:23 | sink(...) | main.rs:259:5:262:5 | match s2 { ... } | +| main.rs:266:9:266:10 | [SSA] s1 | main.rs:267:22:267:23 | s1 | | main.rs:266:9:266:10 | s1 | main.rs:266:9:266:10 | [SSA] s1 | | main.rs:266:9:266:10 | s1 | main.rs:266:9:266:10 | s1 | | main.rs:266:14:266:29 | Some(...) | main.rs:266:9:266:10 | s1 | -| main.rs:267:10:267:11 | [post] receiver for s1 | main.rs:267:10:267:11 | [post] s1 | -| main.rs:267:10:267:11 | s1 | main.rs:267:10:267:11 | receiver for s1 | -| main.rs:271:9:271:10 | [SSA] s1 | main.rs:272:10:272:11 | s1 | -| main.rs:271:9:271:10 | s1 | main.rs:271:9:271:10 | [SSA] s1 | -| main.rs:271:9:271:10 | s1 | main.rs:271:9:271:10 | s1 | -| main.rs:271:14:271:29 | Some(...) | main.rs:271:9:271:10 | s1 | -| main.rs:272:10:272:11 | [post] receiver for s1 | main.rs:272:10:272:11 | [post] s1 | -| main.rs:272:10:272:11 | s1 | main.rs:272:10:272:11 | receiver for s1 | -| main.rs:274:9:274:10 | [SSA] s2 | main.rs:275:10:275:11 | s2 | -| main.rs:274:9:274:10 | s2 | main.rs:274:9:274:10 | [SSA] s2 | -| main.rs:274:9:274:10 | s2 | main.rs:274:9:274:10 | s2 | -| main.rs:274:14:274:20 | Some(...) | main.rs:274:9:274:10 | s2 | -| main.rs:275:10:275:11 | [post] receiver for s2 | main.rs:275:10:275:11 | [post] s2 | -| main.rs:275:10:275:11 | s2 | main.rs:275:10:275:11 | receiver for s2 | -| main.rs:279:9:279:10 | [SSA] s1 | main.rs:280:10:280:11 | s1 | -| main.rs:279:9:279:10 | s1 | main.rs:279:9:279:10 | [SSA] s1 | -| main.rs:279:9:279:10 | s1 | main.rs:279:9:279:10 | s1 | -| main.rs:279:14:279:29 | Some(...) | main.rs:279:9:279:10 | s1 | -| main.rs:280:10:280:11 | [post] receiver for s1 | main.rs:280:10:280:11 | [post] s1 | -| main.rs:280:10:280:11 | s1 | main.rs:280:10:280:11 | receiver for s1 | -| main.rs:282:9:282:10 | [SSA] s2 | main.rs:283:10:283:11 | s2 | -| main.rs:282:9:282:10 | s2 | main.rs:282:9:282:10 | [SSA] s2 | -| main.rs:282:9:282:10 | s2 | main.rs:282:9:282:10 | s2 | -| main.rs:282:14:282:17 | None | main.rs:282:9:282:10 | s2 | -| main.rs:283:10:283:11 | [post] receiver for s2 | main.rs:283:10:283:11 | [post] s2 | -| main.rs:283:10:283:11 | s2 | main.rs:283:10:283:11 | receiver for s2 | -| main.rs:287:9:287:10 | [SSA] s1 | main.rs:289:14:289:15 | s1 | -| main.rs:287:9:287:10 | s1 | main.rs:287:9:287:10 | [SSA] s1 | -| main.rs:287:9:287:10 | s1 | main.rs:287:9:287:10 | s1 | -| main.rs:287:14:287:29 | Some(...) | main.rs:287:9:287:10 | s1 | -| main.rs:288:9:288:10 | [SSA] s2 | main.rs:291:10:291:11 | s2 | -| main.rs:288:9:288:10 | s2 | main.rs:288:9:288:10 | [SSA] s2 | -| main.rs:288:9:288:10 | s2 | main.rs:288:9:288:10 | s2 | -| main.rs:288:14:288:20 | Some(...) | main.rs:288:9:288:10 | s2 | -| main.rs:289:9:289:10 | [SSA] i1 | main.rs:290:10:290:11 | i1 | -| main.rs:289:9:289:10 | i1 | main.rs:289:9:289:10 | [SSA] i1 | -| main.rs:289:9:289:10 | i1 | main.rs:289:9:289:10 | i1 | -| main.rs:289:14:289:16 | TryExpr | main.rs:289:9:289:10 | i1 | -| main.rs:292:5:292:11 | Some(...) | main.rs:286:41:293:1 | { ... } | -| main.rs:296:9:296:10 | [SSA] r1 | main.rs:297:28:297:29 | r1 | -| main.rs:296:9:296:10 | r1 | main.rs:296:9:296:10 | [SSA] r1 | -| main.rs:296:9:296:10 | r1 | main.rs:296:9:296:10 | r1 | -| main.rs:296:32:296:45 | Ok(...) | main.rs:296:9:296:10 | r1 | -| main.rs:297:9:297:11 | [SSA] o1a | main.rs:299:10:299:12 | o1a | -| main.rs:297:9:297:11 | o1a | main.rs:297:9:297:11 | [SSA] o1a | -| main.rs:297:9:297:11 | o1a | main.rs:297:9:297:11 | o1a | -| main.rs:297:28:297:29 | [post] r1 | main.rs:298:28:298:29 | r1 | -| main.rs:297:28:297:29 | [post] receiver for r1 | main.rs:297:28:297:29 | [post] r1 | -| main.rs:297:28:297:29 | r1 | main.rs:297:28:297:29 | receiver for r1 | -| main.rs:297:28:297:29 | r1 | main.rs:298:28:298:29 | r1 | -| main.rs:297:28:297:34 | r1.ok() | main.rs:297:9:297:11 | o1a | -| main.rs:298:9:298:11 | [SSA] o1b | main.rs:300:10:300:12 | o1b | -| main.rs:298:9:298:11 | o1b | main.rs:298:9:298:11 | [SSA] o1b | -| main.rs:298:9:298:11 | o1b | main.rs:298:9:298:11 | o1b | -| main.rs:298:28:298:29 | [post] receiver for r1 | main.rs:298:28:298:29 | [post] r1 | -| main.rs:298:28:298:29 | r1 | main.rs:298:28:298:29 | receiver for r1 | -| main.rs:298:28:298:35 | r1.err() | main.rs:298:9:298:11 | o1b | -| main.rs:299:10:299:12 | [post] receiver for o1a | main.rs:299:10:299:12 | [post] o1a | -| main.rs:299:10:299:12 | o1a | main.rs:299:10:299:12 | receiver for o1a | -| main.rs:300:10:300:12 | [post] receiver for o1b | main.rs:300:10:300:12 | [post] o1b | -| main.rs:300:10:300:12 | o1b | main.rs:300:10:300:12 | receiver for o1b | -| main.rs:302:9:302:10 | [SSA] r2 | main.rs:303:28:303:29 | r2 | -| main.rs:302:9:302:10 | r2 | main.rs:302:9:302:10 | [SSA] r2 | -| main.rs:302:9:302:10 | r2 | main.rs:302:9:302:10 | r2 | -| main.rs:302:32:302:46 | Err(...) | main.rs:302:9:302:10 | r2 | -| main.rs:303:9:303:11 | [SSA] o2a | main.rs:305:10:305:12 | o2a | -| main.rs:303:9:303:11 | o2a | main.rs:303:9:303:11 | [SSA] o2a | -| main.rs:303:9:303:11 | o2a | main.rs:303:9:303:11 | o2a | -| main.rs:303:28:303:29 | [post] r2 | main.rs:304:28:304:29 | r2 | -| main.rs:303:28:303:29 | [post] receiver for r2 | main.rs:303:28:303:29 | [post] r2 | -| main.rs:303:28:303:29 | r2 | main.rs:303:28:303:29 | receiver for r2 | -| main.rs:303:28:303:29 | r2 | main.rs:304:28:304:29 | r2 | -| main.rs:303:28:303:34 | r2.ok() | main.rs:303:9:303:11 | o2a | -| main.rs:304:9:304:11 | [SSA] o2b | main.rs:306:10:306:12 | o2b | -| main.rs:304:9:304:11 | o2b | main.rs:304:9:304:11 | [SSA] o2b | -| main.rs:304:9:304:11 | o2b | main.rs:304:9:304:11 | o2b | -| main.rs:304:28:304:29 | [post] receiver for r2 | main.rs:304:28:304:29 | [post] r2 | -| main.rs:304:28:304:29 | r2 | main.rs:304:28:304:29 | receiver for r2 | -| main.rs:304:28:304:35 | r2.err() | main.rs:304:9:304:11 | o2b | -| main.rs:305:10:305:12 | [post] receiver for o2a | main.rs:305:10:305:12 | [post] o2a | -| main.rs:305:10:305:12 | o2a | main.rs:305:10:305:12 | receiver for o2a | -| main.rs:306:10:306:12 | [post] receiver for o2b | main.rs:306:10:306:12 | [post] o2b | -| main.rs:306:10:306:12 | o2b | main.rs:306:10:306:12 | receiver for o2b | -| main.rs:310:9:310:10 | [SSA] s1 | main.rs:313:14:313:15 | s1 | -| main.rs:310:9:310:10 | s1 | main.rs:310:9:310:10 | [SSA] s1 | -| main.rs:310:9:310:10 | s1 | main.rs:310:9:310:10 | s1 | -| main.rs:310:32:310:45 | Ok(...) | main.rs:310:9:310:10 | s1 | -| main.rs:311:9:311:10 | [SSA] s2 | main.rs:314:14:314:15 | s2 | -| main.rs:311:9:311:10 | s2 | main.rs:311:9:311:10 | [SSA] s2 | -| main.rs:311:9:311:10 | s2 | main.rs:311:9:311:10 | s2 | -| main.rs:311:32:311:36 | Ok(...) | main.rs:311:9:311:10 | s2 | -| main.rs:312:9:312:10 | [SSA] s3 | main.rs:317:14:317:15 | s3 | -| main.rs:312:9:312:10 | s3 | main.rs:312:9:312:10 | [SSA] s3 | -| main.rs:312:9:312:10 | s3 | main.rs:312:9:312:10 | s3 | -| main.rs:312:32:312:46 | Err(...) | main.rs:312:9:312:10 | s3 | -| main.rs:313:9:313:10 | [SSA] i1 | main.rs:315:10:315:11 | i1 | -| main.rs:313:9:313:10 | i1 | main.rs:313:9:313:10 | [SSA] i1 | -| main.rs:313:9:313:10 | i1 | main.rs:313:9:313:10 | i1 | -| main.rs:313:14:313:16 | TryExpr | main.rs:313:9:313:10 | i1 | -| main.rs:314:9:314:10 | [SSA] i2 | main.rs:316:10:316:11 | i2 | -| main.rs:314:9:314:10 | i2 | main.rs:314:9:314:10 | [SSA] i2 | -| main.rs:314:9:314:10 | i2 | main.rs:314:9:314:10 | i2 | -| main.rs:314:14:314:16 | TryExpr | main.rs:314:9:314:10 | i2 | -| main.rs:317:9:317:10 | [SSA] i3 | main.rs:318:10:318:11 | i3 | -| main.rs:317:9:317:10 | i3 | main.rs:317:9:317:10 | [SSA] i3 | -| main.rs:317:9:317:10 | i3 | main.rs:317:9:317:10 | i3 | -| main.rs:317:14:317:16 | TryExpr | main.rs:317:9:317:10 | i3 | -| main.rs:319:5:319:9 | Ok(...) | main.rs:309:46:320:1 | { ... } | -| main.rs:323:9:323:10 | [SSA] s1 | main.rs:324:10:324:11 | s1 | -| main.rs:323:9:323:10 | s1 | main.rs:323:9:323:10 | [SSA] s1 | -| main.rs:323:9:323:10 | s1 | main.rs:323:9:323:10 | s1 | -| main.rs:323:32:323:45 | Ok(...) | main.rs:323:9:323:10 | s1 | -| main.rs:324:10:324:11 | [post] receiver for s1 | main.rs:324:10:324:11 | [post] s1 | -| main.rs:324:10:324:11 | [post] s1 | main.rs:325:10:325:11 | s1 | -| main.rs:324:10:324:11 | s1 | main.rs:324:10:324:11 | receiver for s1 | -| main.rs:324:10:324:11 | s1 | main.rs:325:10:325:11 | s1 | -| main.rs:325:10:325:11 | [post] receiver for s1 | main.rs:325:10:325:11 | [post] s1 | -| main.rs:325:10:325:11 | s1 | main.rs:325:10:325:11 | receiver for s1 | -| main.rs:327:9:327:10 | [SSA] s2 | main.rs:328:10:328:11 | s2 | -| main.rs:327:9:327:10 | s2 | main.rs:327:9:327:10 | [SSA] s2 | -| main.rs:327:9:327:10 | s2 | main.rs:327:9:327:10 | s2 | -| main.rs:327:32:327:46 | Err(...) | main.rs:327:9:327:10 | s2 | -| main.rs:328:10:328:11 | [post] receiver for s2 | main.rs:328:10:328:11 | [post] s2 | -| main.rs:328:10:328:11 | [post] s2 | main.rs:329:10:329:11 | s2 | -| main.rs:328:10:328:11 | s2 | main.rs:328:10:328:11 | receiver for s2 | -| main.rs:328:10:328:11 | s2 | main.rs:329:10:329:11 | s2 | -| main.rs:329:10:329:11 | [post] receiver for s2 | main.rs:329:10:329:11 | [post] s2 | -| main.rs:329:10:329:11 | s2 | main.rs:329:10:329:11 | receiver for s2 | -| main.rs:338:9:338:10 | [SSA] s1 | main.rs:340:11:340:12 | s1 | -| main.rs:338:9:338:10 | s1 | main.rs:338:9:338:10 | [SSA] s1 | -| main.rs:338:9:338:10 | s1 | main.rs:338:9:338:10 | s1 | -| main.rs:338:14:338:39 | ...::A(...) | main.rs:338:9:338:10 | s1 | -| main.rs:339:9:339:10 | [SSA] s2 | main.rs:347:11:347:12 | s2 | +| main.rs:267:5:274:5 | if ... {...} | main.rs:265:25:275:1 | { ... } | +| main.rs:267:17:267:17 | [SSA] n | main.rs:269:18:269:18 | n | +| main.rs:267:17:267:17 | n | main.rs:267:17:267:17 | [SSA] n | +| main.rs:267:17:267:17 | n | main.rs:267:17:267:17 | n | +| main.rs:267:22:267:23 | s1 | main.rs:267:12:267:18 | Some(...) | +| main.rs:269:18:269:18 | [post] n | main.rs:273:14:273:14 | n | +| main.rs:269:18:269:18 | n | main.rs:273:14:273:14 | n | +| main.rs:270:13:270:16 | true | main.rs:268:12:271:9 | { ... } | +| main.rs:272:5:274:5 | { ... } | main.rs:267:5:274:5 | if ... {...} | +| main.rs:278:9:278:10 | [SSA] s1 | main.rs:279:10:279:11 | s1 | +| main.rs:278:9:278:10 | s1 | main.rs:278:9:278:10 | [SSA] s1 | +| main.rs:278:9:278:10 | s1 | main.rs:278:9:278:10 | s1 | +| main.rs:278:14:278:29 | Some(...) | main.rs:278:9:278:10 | s1 | +| main.rs:279:10:279:11 | [post] receiver for s1 | main.rs:279:10:279:11 | [post] s1 | +| main.rs:279:10:279:11 | s1 | main.rs:279:10:279:11 | receiver for s1 | +| main.rs:283:9:283:10 | [SSA] s1 | main.rs:284:10:284:11 | s1 | +| main.rs:283:9:283:10 | s1 | main.rs:283:9:283:10 | [SSA] s1 | +| main.rs:283:9:283:10 | s1 | main.rs:283:9:283:10 | s1 | +| main.rs:283:14:283:29 | Some(...) | main.rs:283:9:283:10 | s1 | +| main.rs:284:10:284:11 | [post] receiver for s1 | main.rs:284:10:284:11 | [post] s1 | +| main.rs:284:10:284:11 | s1 | main.rs:284:10:284:11 | receiver for s1 | +| main.rs:286:9:286:10 | [SSA] s2 | main.rs:287:10:287:11 | s2 | +| main.rs:286:9:286:10 | s2 | main.rs:286:9:286:10 | [SSA] s2 | +| main.rs:286:9:286:10 | s2 | main.rs:286:9:286:10 | s2 | +| main.rs:286:14:286:20 | Some(...) | main.rs:286:9:286:10 | s2 | +| main.rs:287:10:287:11 | [post] receiver for s2 | main.rs:287:10:287:11 | [post] s2 | +| main.rs:287:10:287:11 | s2 | main.rs:287:10:287:11 | receiver for s2 | +| main.rs:291:9:291:10 | [SSA] s1 | main.rs:292:10:292:11 | s1 | +| main.rs:291:9:291:10 | s1 | main.rs:291:9:291:10 | [SSA] s1 | +| main.rs:291:9:291:10 | s1 | main.rs:291:9:291:10 | s1 | +| main.rs:291:14:291:29 | Some(...) | main.rs:291:9:291:10 | s1 | +| main.rs:292:10:292:11 | [post] receiver for s1 | main.rs:292:10:292:11 | [post] s1 | +| main.rs:292:10:292:11 | s1 | main.rs:292:10:292:11 | receiver for s1 | +| main.rs:294:9:294:10 | [SSA] s2 | main.rs:295:10:295:11 | s2 | +| main.rs:294:9:294:10 | s2 | main.rs:294:9:294:10 | [SSA] s2 | +| main.rs:294:9:294:10 | s2 | main.rs:294:9:294:10 | s2 | +| main.rs:294:14:294:17 | None | main.rs:294:9:294:10 | s2 | +| main.rs:295:10:295:11 | [post] receiver for s2 | main.rs:295:10:295:11 | [post] s2 | +| main.rs:295:10:295:11 | s2 | main.rs:295:10:295:11 | receiver for s2 | +| main.rs:299:9:299:10 | [SSA] s1 | main.rs:301:14:301:15 | s1 | +| main.rs:299:9:299:10 | s1 | main.rs:299:9:299:10 | [SSA] s1 | +| main.rs:299:9:299:10 | s1 | main.rs:299:9:299:10 | s1 | +| main.rs:299:14:299:29 | Some(...) | main.rs:299:9:299:10 | s1 | +| main.rs:300:9:300:10 | [SSA] s2 | main.rs:303:10:303:11 | s2 | +| main.rs:300:9:300:10 | s2 | main.rs:300:9:300:10 | [SSA] s2 | +| main.rs:300:9:300:10 | s2 | main.rs:300:9:300:10 | s2 | +| main.rs:300:14:300:20 | Some(...) | main.rs:300:9:300:10 | s2 | +| main.rs:301:9:301:10 | [SSA] i1 | main.rs:302:10:302:11 | i1 | +| main.rs:301:9:301:10 | i1 | main.rs:301:9:301:10 | [SSA] i1 | +| main.rs:301:9:301:10 | i1 | main.rs:301:9:301:10 | i1 | +| main.rs:301:14:301:16 | TryExpr | main.rs:301:9:301:10 | i1 | +| main.rs:304:5:304:11 | Some(...) | main.rs:298:41:305:1 | { ... } | +| main.rs:308:9:308:10 | [SSA] r1 | main.rs:309:28:309:29 | r1 | +| main.rs:308:9:308:10 | r1 | main.rs:308:9:308:10 | [SSA] r1 | +| main.rs:308:9:308:10 | r1 | main.rs:308:9:308:10 | r1 | +| main.rs:308:32:308:45 | Ok(...) | main.rs:308:9:308:10 | r1 | +| main.rs:309:9:309:11 | [SSA] o1a | main.rs:311:10:311:12 | o1a | +| main.rs:309:9:309:11 | o1a | main.rs:309:9:309:11 | [SSA] o1a | +| main.rs:309:9:309:11 | o1a | main.rs:309:9:309:11 | o1a | +| main.rs:309:28:309:29 | [post] r1 | main.rs:310:28:310:29 | r1 | +| main.rs:309:28:309:29 | [post] receiver for r1 | main.rs:309:28:309:29 | [post] r1 | +| main.rs:309:28:309:29 | r1 | main.rs:309:28:309:29 | receiver for r1 | +| main.rs:309:28:309:29 | r1 | main.rs:310:28:310:29 | r1 | +| main.rs:309:28:309:34 | r1.ok() | main.rs:309:9:309:11 | o1a | +| main.rs:310:9:310:11 | [SSA] o1b | main.rs:312:10:312:12 | o1b | +| main.rs:310:9:310:11 | o1b | main.rs:310:9:310:11 | [SSA] o1b | +| main.rs:310:9:310:11 | o1b | main.rs:310:9:310:11 | o1b | +| main.rs:310:28:310:29 | [post] receiver for r1 | main.rs:310:28:310:29 | [post] r1 | +| main.rs:310:28:310:29 | r1 | main.rs:310:28:310:29 | receiver for r1 | +| main.rs:310:28:310:35 | r1.err() | main.rs:310:9:310:11 | o1b | +| main.rs:311:10:311:12 | [post] receiver for o1a | main.rs:311:10:311:12 | [post] o1a | +| main.rs:311:10:311:12 | o1a | main.rs:311:10:311:12 | receiver for o1a | +| main.rs:312:10:312:12 | [post] receiver for o1b | main.rs:312:10:312:12 | [post] o1b | +| main.rs:312:10:312:12 | o1b | main.rs:312:10:312:12 | receiver for o1b | +| main.rs:314:9:314:10 | [SSA] r2 | main.rs:315:28:315:29 | r2 | +| main.rs:314:9:314:10 | r2 | main.rs:314:9:314:10 | [SSA] r2 | +| main.rs:314:9:314:10 | r2 | main.rs:314:9:314:10 | r2 | +| main.rs:314:32:314:46 | Err(...) | main.rs:314:9:314:10 | r2 | +| main.rs:315:9:315:11 | [SSA] o2a | main.rs:317:10:317:12 | o2a | +| main.rs:315:9:315:11 | o2a | main.rs:315:9:315:11 | [SSA] o2a | +| main.rs:315:9:315:11 | o2a | main.rs:315:9:315:11 | o2a | +| main.rs:315:28:315:29 | [post] r2 | main.rs:316:28:316:29 | r2 | +| main.rs:315:28:315:29 | [post] receiver for r2 | main.rs:315:28:315:29 | [post] r2 | +| main.rs:315:28:315:29 | r2 | main.rs:315:28:315:29 | receiver for r2 | +| main.rs:315:28:315:29 | r2 | main.rs:316:28:316:29 | r2 | +| main.rs:315:28:315:34 | r2.ok() | main.rs:315:9:315:11 | o2a | +| main.rs:316:9:316:11 | [SSA] o2b | main.rs:318:10:318:12 | o2b | +| main.rs:316:9:316:11 | o2b | main.rs:316:9:316:11 | [SSA] o2b | +| main.rs:316:9:316:11 | o2b | main.rs:316:9:316:11 | o2b | +| main.rs:316:28:316:29 | [post] receiver for r2 | main.rs:316:28:316:29 | [post] r2 | +| main.rs:316:28:316:29 | r2 | main.rs:316:28:316:29 | receiver for r2 | +| main.rs:316:28:316:35 | r2.err() | main.rs:316:9:316:11 | o2b | +| main.rs:317:10:317:12 | [post] receiver for o2a | main.rs:317:10:317:12 | [post] o2a | +| main.rs:317:10:317:12 | o2a | main.rs:317:10:317:12 | receiver for o2a | +| main.rs:318:10:318:12 | [post] receiver for o2b | main.rs:318:10:318:12 | [post] o2b | +| main.rs:318:10:318:12 | o2b | main.rs:318:10:318:12 | receiver for o2b | +| main.rs:322:9:322:10 | [SSA] s1 | main.rs:325:14:325:15 | s1 | +| main.rs:322:9:322:10 | s1 | main.rs:322:9:322:10 | [SSA] s1 | +| main.rs:322:9:322:10 | s1 | main.rs:322:9:322:10 | s1 | +| main.rs:322:32:322:45 | Ok(...) | main.rs:322:9:322:10 | s1 | +| main.rs:323:9:323:10 | [SSA] s2 | main.rs:326:14:326:15 | s2 | +| main.rs:323:9:323:10 | s2 | main.rs:323:9:323:10 | [SSA] s2 | +| main.rs:323:9:323:10 | s2 | main.rs:323:9:323:10 | s2 | +| main.rs:323:32:323:36 | Ok(...) | main.rs:323:9:323:10 | s2 | +| main.rs:324:9:324:10 | [SSA] s3 | main.rs:329:14:329:15 | s3 | +| main.rs:324:9:324:10 | s3 | main.rs:324:9:324:10 | [SSA] s3 | +| main.rs:324:9:324:10 | s3 | main.rs:324:9:324:10 | s3 | +| main.rs:324:32:324:46 | Err(...) | main.rs:324:9:324:10 | s3 | +| main.rs:325:9:325:10 | [SSA] i1 | main.rs:327:10:327:11 | i1 | +| main.rs:325:9:325:10 | i1 | main.rs:325:9:325:10 | [SSA] i1 | +| main.rs:325:9:325:10 | i1 | main.rs:325:9:325:10 | i1 | +| main.rs:325:14:325:16 | TryExpr | main.rs:325:9:325:10 | i1 | +| main.rs:326:9:326:10 | [SSA] i2 | main.rs:328:10:328:11 | i2 | +| main.rs:326:9:326:10 | i2 | main.rs:326:9:326:10 | [SSA] i2 | +| main.rs:326:9:326:10 | i2 | main.rs:326:9:326:10 | i2 | +| main.rs:326:14:326:16 | TryExpr | main.rs:326:9:326:10 | i2 | +| main.rs:329:9:329:10 | [SSA] i3 | main.rs:330:10:330:11 | i3 | +| main.rs:329:9:329:10 | i3 | main.rs:329:9:329:10 | [SSA] i3 | +| main.rs:329:9:329:10 | i3 | main.rs:329:9:329:10 | i3 | +| main.rs:329:14:329:16 | TryExpr | main.rs:329:9:329:10 | i3 | +| main.rs:331:5:331:9 | Ok(...) | main.rs:321:46:332:1 | { ... } | +| main.rs:335:9:335:10 | [SSA] s1 | main.rs:336:10:336:11 | s1 | +| main.rs:335:9:335:10 | s1 | main.rs:335:9:335:10 | [SSA] s1 | +| main.rs:335:9:335:10 | s1 | main.rs:335:9:335:10 | s1 | +| main.rs:335:32:335:45 | Ok(...) | main.rs:335:9:335:10 | s1 | +| main.rs:336:10:336:11 | [post] receiver for s1 | main.rs:336:10:336:11 | [post] s1 | +| main.rs:336:10:336:11 | [post] s1 | main.rs:337:10:337:11 | s1 | +| main.rs:336:10:336:11 | s1 | main.rs:336:10:336:11 | receiver for s1 | +| main.rs:336:10:336:11 | s1 | main.rs:337:10:337:11 | s1 | +| main.rs:337:10:337:11 | [post] receiver for s1 | main.rs:337:10:337:11 | [post] s1 | +| main.rs:337:10:337:11 | s1 | main.rs:337:10:337:11 | receiver for s1 | +| main.rs:339:9:339:10 | [SSA] s2 | main.rs:340:10:340:11 | s2 | | main.rs:339:9:339:10 | s2 | main.rs:339:9:339:10 | [SSA] s2 | | main.rs:339:9:339:10 | s2 | main.rs:339:9:339:10 | s2 | -| main.rs:339:14:339:30 | ...::B(...) | main.rs:339:9:339:10 | s2 | -| main.rs:340:11:340:12 | s1 | main.rs:341:9:341:25 | ...::A(...) | -| main.rs:340:11:340:12 | s1 | main.rs:342:9:342:25 | ...::B(...) | -| main.rs:340:11:340:12 | s1 | main.rs:344:11:344:12 | s1 | -| main.rs:341:24:341:24 | [SSA] n | main.rs:341:35:341:35 | n | -| main.rs:341:24:341:24 | n | main.rs:341:24:341:24 | [SSA] n | -| main.rs:341:24:341:24 | n | main.rs:341:24:341:24 | n | -| main.rs:341:30:341:36 | sink(...) | main.rs:340:5:343:5 | match s1 { ... } | -| main.rs:342:24:342:24 | [SSA] n | main.rs:342:35:342:35 | n | -| main.rs:342:24:342:24 | n | main.rs:342:24:342:24 | [SSA] n | -| main.rs:342:24:342:24 | n | main.rs:342:24:342:24 | n | -| main.rs:342:30:342:36 | sink(...) | main.rs:340:5:343:5 | match s1 { ... } | -| main.rs:344:11:344:12 | s1 | main.rs:345:9:345:45 | ... \| ... | -| main.rs:345:9:345:45 | ... \| ... | main.rs:345:9:345:25 | ...::A(...) | -| main.rs:345:9:345:45 | ... \| ... | main.rs:345:29:345:45 | ...::B(...) | -| main.rs:345:24:345:24 | [SSA] n | main.rs:345:55:345:55 | n | -| main.rs:345:24:345:24 | n | main.rs:345:24:345:24 | [SSA] n | -| main.rs:345:24:345:24 | n | main.rs:345:24:345:24 | n | -| main.rs:345:44:345:44 | [SSA] n | main.rs:345:55:345:55 | n | -| main.rs:345:44:345:44 | n | main.rs:345:44:345:44 | [SSA] n | -| main.rs:345:44:345:44 | n | main.rs:345:44:345:44 | n | -| main.rs:345:50:345:56 | sink(...) | main.rs:344:5:346:5 | match s1 { ... } | -| main.rs:347:5:350:5 | match s2 { ... } | main.rs:337:48:351:1 | { ... } | -| main.rs:347:11:347:12 | s2 | main.rs:348:9:348:25 | ...::A(...) | -| main.rs:347:11:347:12 | s2 | main.rs:349:9:349:25 | ...::B(...) | -| main.rs:348:24:348:24 | [SSA] n | main.rs:348:35:348:35 | n | -| main.rs:348:24:348:24 | n | main.rs:348:24:348:24 | [SSA] n | -| main.rs:348:24:348:24 | n | main.rs:348:24:348:24 | n | -| main.rs:348:30:348:36 | sink(...) | main.rs:347:5:350:5 | match s2 { ... } | -| main.rs:349:24:349:24 | [SSA] n | main.rs:349:35:349:35 | n | -| main.rs:349:24:349:24 | n | main.rs:349:24:349:24 | [SSA] n | -| main.rs:349:24:349:24 | n | main.rs:349:24:349:24 | n | -| main.rs:349:30:349:36 | sink(...) | main.rs:347:5:350:5 | match s2 { ... } | -| main.rs:356:9:356:10 | [SSA] s1 | main.rs:358:11:358:12 | s1 | -| main.rs:356:9:356:10 | s1 | main.rs:356:9:356:10 | [SSA] s1 | -| main.rs:356:9:356:10 | s1 | main.rs:356:9:356:10 | s1 | -| main.rs:356:14:356:26 | A(...) | main.rs:356:9:356:10 | s1 | -| main.rs:357:9:357:10 | [SSA] s2 | main.rs:365:11:365:12 | s2 | -| main.rs:357:9:357:10 | s2 | main.rs:357:9:357:10 | [SSA] s2 | -| main.rs:357:9:357:10 | s2 | main.rs:357:9:357:10 | s2 | -| main.rs:357:14:357:17 | B(...) | main.rs:357:9:357:10 | s2 | -| main.rs:358:11:358:12 | s1 | main.rs:359:9:359:12 | A(...) | -| main.rs:358:11:358:12 | s1 | main.rs:360:9:360:12 | B(...) | -| main.rs:358:11:358:12 | s1 | main.rs:362:11:362:12 | s1 | -| main.rs:359:11:359:11 | [SSA] n | main.rs:359:22:359:22 | n | -| main.rs:359:11:359:11 | n | main.rs:359:11:359:11 | [SSA] n | -| main.rs:359:11:359:11 | n | main.rs:359:11:359:11 | n | -| main.rs:359:17:359:23 | sink(...) | main.rs:358:5:361:5 | match s1 { ... } | -| main.rs:360:11:360:11 | [SSA] n | main.rs:360:22:360:22 | n | -| main.rs:360:11:360:11 | n | main.rs:360:11:360:11 | [SSA] n | -| main.rs:360:11:360:11 | n | main.rs:360:11:360:11 | n | -| main.rs:360:17:360:23 | sink(...) | main.rs:358:5:361:5 | match s1 { ... } | -| main.rs:362:11:362:12 | s1 | main.rs:363:9:363:19 | ... \| ... | -| main.rs:363:9:363:19 | ... \| ... | main.rs:363:9:363:12 | A(...) | -| main.rs:363:9:363:19 | ... \| ... | main.rs:363:16:363:19 | B(...) | -| main.rs:363:11:363:11 | [SSA] n | main.rs:363:29:363:29 | n | -| main.rs:363:11:363:11 | n | main.rs:363:11:363:11 | [SSA] n | -| main.rs:363:11:363:11 | n | main.rs:363:11:363:11 | n | -| main.rs:363:18:363:18 | [SSA] n | main.rs:363:29:363:29 | n | -| main.rs:363:18:363:18 | n | main.rs:363:18:363:18 | [SSA] n | -| main.rs:363:18:363:18 | n | main.rs:363:18:363:18 | n | -| main.rs:363:24:363:30 | sink(...) | main.rs:362:5:364:5 | match s1 { ... } | -| main.rs:365:5:368:5 | match s2 { ... } | main.rs:355:50:369:1 | { ... } | -| main.rs:365:11:365:12 | s2 | main.rs:366:9:366:12 | A(...) | -| main.rs:365:11:365:12 | s2 | main.rs:367:9:367:12 | B(...) | -| main.rs:366:11:366:11 | [SSA] n | main.rs:366:22:366:22 | n | -| main.rs:366:11:366:11 | n | main.rs:366:11:366:11 | [SSA] n | -| main.rs:366:11:366:11 | n | main.rs:366:11:366:11 | n | -| main.rs:366:17:366:23 | sink(...) | main.rs:365:5:368:5 | match s2 { ... } | -| main.rs:367:11:367:11 | [SSA] n | main.rs:367:22:367:22 | n | -| main.rs:367:11:367:11 | n | main.rs:367:11:367:11 | [SSA] n | -| main.rs:367:11:367:11 | n | main.rs:367:11:367:11 | n | -| main.rs:367:17:367:23 | sink(...) | main.rs:365:5:368:5 | match s2 { ... } | -| main.rs:377:9:377:10 | [SSA] s1 | main.rs:381:11:381:12 | s1 | -| main.rs:377:9:377:10 | s1 | main.rs:377:9:377:10 | [SSA] s1 | -| main.rs:377:9:377:10 | s1 | main.rs:377:9:377:10 | s1 | -| main.rs:377:14:379:5 | ...::C {...} | main.rs:377:9:377:10 | s1 | -| main.rs:380:9:380:10 | [SSA] s2 | main.rs:388:11:388:12 | s2 | -| main.rs:380:9:380:10 | s2 | main.rs:380:9:380:10 | [SSA] s2 | -| main.rs:380:9:380:10 | s2 | main.rs:380:9:380:10 | s2 | -| main.rs:380:14:380:43 | ...::D {...} | main.rs:380:9:380:10 | s2 | -| main.rs:381:11:381:12 | s1 | main.rs:382:9:382:38 | ...::C {...} | -| main.rs:381:11:381:12 | s1 | main.rs:383:9:383:38 | ...::D {...} | -| main.rs:381:11:381:12 | s1 | main.rs:385:11:385:12 | s1 | -| main.rs:382:36:382:36 | [SSA] n | main.rs:382:48:382:48 | n | -| main.rs:382:36:382:36 | n | main.rs:382:36:382:36 | [SSA] n | -| main.rs:382:36:382:36 | n | main.rs:382:36:382:36 | n | -| main.rs:382:43:382:49 | sink(...) | main.rs:381:5:384:5 | match s1 { ... } | -| main.rs:383:36:383:36 | [SSA] n | main.rs:383:48:383:48 | n | -| main.rs:383:36:383:36 | n | main.rs:383:36:383:36 | [SSA] n | -| main.rs:383:36:383:36 | n | main.rs:383:36:383:36 | n | -| main.rs:383:43:383:49 | sink(...) | main.rs:381:5:384:5 | match s1 { ... } | -| main.rs:385:11:385:12 | s1 | main.rs:386:9:386:71 | ... \| ... | -| main.rs:386:9:386:71 | ... \| ... | main.rs:386:9:386:38 | ...::C {...} | -| main.rs:386:9:386:71 | ... \| ... | main.rs:386:42:386:71 | ...::D {...} | -| main.rs:386:36:386:36 | [SSA] n | main.rs:386:81:386:81 | n | -| main.rs:386:36:386:36 | n | main.rs:386:36:386:36 | [SSA] n | -| main.rs:386:36:386:36 | n | main.rs:386:36:386:36 | n | -| main.rs:386:69:386:69 | [SSA] n | main.rs:386:81:386:81 | n | -| main.rs:386:69:386:69 | n | main.rs:386:69:386:69 | [SSA] n | -| main.rs:386:69:386:69 | n | main.rs:386:69:386:69 | n | -| main.rs:386:76:386:82 | sink(...) | main.rs:385:5:387:5 | match s1 { ... } | -| main.rs:388:5:391:5 | match s2 { ... } | main.rs:376:49:392:1 | { ... } | -| main.rs:388:11:388:12 | s2 | main.rs:389:9:389:38 | ...::C {...} | -| main.rs:388:11:388:12 | s2 | main.rs:390:9:390:38 | ...::D {...} | -| main.rs:389:36:389:36 | [SSA] n | main.rs:389:48:389:48 | n | -| main.rs:389:36:389:36 | n | main.rs:389:36:389:36 | [SSA] n | -| main.rs:389:36:389:36 | n | main.rs:389:36:389:36 | n | -| main.rs:389:43:389:49 | sink(...) | main.rs:388:5:391:5 | match s2 { ... } | -| main.rs:390:36:390:36 | [SSA] n | main.rs:390:48:390:48 | n | -| main.rs:390:36:390:36 | n | main.rs:390:36:390:36 | [SSA] n | -| main.rs:390:36:390:36 | n | main.rs:390:36:390:36 | n | -| main.rs:390:43:390:49 | sink(...) | main.rs:388:5:391:5 | match s2 { ... } | -| main.rs:397:9:397:10 | [SSA] s1 | main.rs:401:11:401:12 | s1 | -| main.rs:397:9:397:10 | s1 | main.rs:397:9:397:10 | [SSA] s1 | -| main.rs:397:9:397:10 | s1 | main.rs:397:9:397:10 | s1 | -| main.rs:397:14:399:5 | C {...} | main.rs:397:9:397:10 | s1 | -| main.rs:400:9:400:10 | [SSA] s2 | main.rs:408:11:408:12 | s2 | -| main.rs:400:9:400:10 | s2 | main.rs:400:9:400:10 | [SSA] s2 | -| main.rs:400:9:400:10 | s2 | main.rs:400:9:400:10 | s2 | -| main.rs:400:14:400:29 | D {...} | main.rs:400:9:400:10 | s2 | -| main.rs:401:11:401:12 | s1 | main.rs:402:9:402:24 | C {...} | -| main.rs:401:11:401:12 | s1 | main.rs:403:9:403:24 | D {...} | -| main.rs:401:11:401:12 | s1 | main.rs:405:11:405:12 | s1 | -| main.rs:402:22:402:22 | [SSA] n | main.rs:402:34:402:34 | n | -| main.rs:402:22:402:22 | n | main.rs:402:22:402:22 | [SSA] n | -| main.rs:402:22:402:22 | n | main.rs:402:22:402:22 | n | -| main.rs:402:29:402:35 | sink(...) | main.rs:401:5:404:5 | match s1 { ... } | -| main.rs:403:22:403:22 | [SSA] n | main.rs:403:34:403:34 | n | -| main.rs:403:22:403:22 | n | main.rs:403:22:403:22 | [SSA] n | -| main.rs:403:22:403:22 | n | main.rs:403:22:403:22 | n | -| main.rs:403:29:403:35 | sink(...) | main.rs:401:5:404:5 | match s1 { ... } | -| main.rs:405:11:405:12 | s1 | main.rs:406:9:406:43 | ... \| ... | -| main.rs:406:9:406:43 | ... \| ... | main.rs:406:9:406:24 | C {...} | -| main.rs:406:9:406:43 | ... \| ... | main.rs:406:28:406:43 | D {...} | -| main.rs:406:22:406:22 | [SSA] n | main.rs:406:53:406:53 | n | -| main.rs:406:22:406:22 | n | main.rs:406:22:406:22 | [SSA] n | -| main.rs:406:22:406:22 | n | main.rs:406:22:406:22 | n | -| main.rs:406:41:406:41 | [SSA] n | main.rs:406:53:406:53 | n | -| main.rs:406:41:406:41 | n | main.rs:406:41:406:41 | [SSA] n | -| main.rs:406:41:406:41 | n | main.rs:406:41:406:41 | n | -| main.rs:406:48:406:54 | sink(...) | main.rs:405:5:407:5 | match s1 { ... } | -| main.rs:408:5:411:5 | match s2 { ... } | main.rs:396:51:412:1 | { ... } | -| main.rs:408:11:408:12 | s2 | main.rs:409:9:409:24 | C {...} | -| main.rs:408:11:408:12 | s2 | main.rs:410:9:410:24 | D {...} | -| main.rs:409:22:409:22 | [SSA] n | main.rs:409:34:409:34 | n | -| main.rs:409:22:409:22 | n | main.rs:409:22:409:22 | [SSA] n | -| main.rs:409:22:409:22 | n | main.rs:409:22:409:22 | n | -| main.rs:409:29:409:35 | sink(...) | main.rs:408:5:411:5 | match s2 { ... } | -| main.rs:410:22:410:22 | [SSA] n | main.rs:410:34:410:34 | n | -| main.rs:410:22:410:22 | n | main.rs:410:22:410:22 | [SSA] n | -| main.rs:410:22:410:22 | n | main.rs:410:22:410:22 | n | -| main.rs:410:29:410:35 | sink(...) | main.rs:408:5:411:5 | match s2 { ... } | -| main.rs:418:9:418:12 | [SSA] arr1 | main.rs:419:14:419:17 | arr1 | -| main.rs:418:9:418:12 | arr1 | main.rs:418:9:418:12 | [SSA] arr1 | -| main.rs:418:9:418:12 | arr1 | main.rs:418:9:418:12 | arr1 | -| main.rs:418:16:418:33 | [...] | main.rs:418:9:418:12 | arr1 | -| main.rs:419:9:419:10 | [SSA] n1 | main.rs:420:10:420:11 | n1 | -| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | [SSA] n1 | -| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | -| main.rs:419:14:419:20 | arr1[2] | main.rs:419:9:419:10 | n1 | -| main.rs:422:9:422:12 | [SSA] arr2 | main.rs:423:14:423:17 | arr2 | -| main.rs:422:9:422:12 | arr2 | main.rs:422:9:422:12 | [SSA] arr2 | -| main.rs:422:9:422:12 | arr2 | main.rs:422:9:422:12 | arr2 | -| main.rs:422:16:422:31 | [...; 10] | main.rs:422:9:422:12 | arr2 | -| main.rs:423:9:423:10 | [SSA] n2 | main.rs:424:10:424:11 | n2 | -| main.rs:423:9:423:10 | n2 | main.rs:423:9:423:10 | [SSA] n2 | -| main.rs:423:9:423:10 | n2 | main.rs:423:9:423:10 | n2 | -| main.rs:423:14:423:20 | arr2[4] | main.rs:423:9:423:10 | n2 | -| main.rs:426:9:426:12 | [SSA] arr3 | main.rs:427:14:427:17 | arr3 | -| main.rs:426:9:426:12 | arr3 | main.rs:426:9:426:12 | [SSA] arr3 | -| main.rs:426:9:426:12 | arr3 | main.rs:426:9:426:12 | arr3 | -| main.rs:426:16:426:24 | [...] | main.rs:426:9:426:12 | arr3 | -| main.rs:427:9:427:10 | [SSA] n3 | main.rs:428:10:428:11 | n3 | -| main.rs:427:9:427:10 | n3 | main.rs:427:9:427:10 | [SSA] n3 | -| main.rs:427:9:427:10 | n3 | main.rs:427:9:427:10 | n3 | -| main.rs:427:14:427:20 | arr3[2] | main.rs:427:9:427:10 | n3 | -| main.rs:432:9:432:12 | [SSA] arr1 | main.rs:433:15:433:18 | arr1 | -| main.rs:432:9:432:12 | arr1 | main.rs:432:9:432:12 | [SSA] arr1 | -| main.rs:432:9:432:12 | arr1 | main.rs:432:9:432:12 | arr1 | -| main.rs:432:16:432:33 | [...] | main.rs:432:9:432:12 | arr1 | -| main.rs:433:9:433:10 | [SSA] n1 | main.rs:434:14:434:15 | n1 | -| main.rs:433:9:433:10 | n1 | main.rs:433:9:433:10 | [SSA] n1 | -| main.rs:433:9:433:10 | n1 | main.rs:433:9:433:10 | n1 | -| main.rs:437:9:437:12 | [SSA] arr2 | main.rs:438:15:438:18 | arr2 | -| main.rs:437:9:437:12 | arr2 | main.rs:437:9:437:12 | [SSA] arr2 | -| main.rs:437:9:437:12 | arr2 | main.rs:437:9:437:12 | arr2 | -| main.rs:437:16:437:24 | [...] | main.rs:437:9:437:12 | arr2 | -| main.rs:438:5:440:5 | for ... in ... { ... } | main.rs:431:21:441:1 | { ... } | -| main.rs:438:9:438:10 | [SSA] n2 | main.rs:439:14:439:15 | n2 | -| main.rs:438:9:438:10 | n2 | main.rs:438:9:438:10 | [SSA] n2 | -| main.rs:438:9:438:10 | n2 | main.rs:438:9:438:10 | n2 | -| main.rs:444:9:444:12 | [SSA] arr1 | main.rs:445:11:445:14 | arr1 | +| main.rs:339:32:339:46 | Err(...) | main.rs:339:9:339:10 | s2 | +| main.rs:340:10:340:11 | [post] receiver for s2 | main.rs:340:10:340:11 | [post] s2 | +| main.rs:340:10:340:11 | [post] s2 | main.rs:341:10:341:11 | s2 | +| main.rs:340:10:340:11 | s2 | main.rs:340:10:340:11 | receiver for s2 | +| main.rs:340:10:340:11 | s2 | main.rs:341:10:341:11 | s2 | +| main.rs:341:10:341:11 | [post] receiver for s2 | main.rs:341:10:341:11 | [post] s2 | +| main.rs:341:10:341:11 | s2 | main.rs:341:10:341:11 | receiver for s2 | +| main.rs:350:9:350:10 | [SSA] s1 | main.rs:352:11:352:12 | s1 | +| main.rs:350:9:350:10 | s1 | main.rs:350:9:350:10 | [SSA] s1 | +| main.rs:350:9:350:10 | s1 | main.rs:350:9:350:10 | s1 | +| main.rs:350:14:350:39 | ...::A(...) | main.rs:350:9:350:10 | s1 | +| main.rs:351:9:351:10 | [SSA] s2 | main.rs:359:11:359:12 | s2 | +| main.rs:351:9:351:10 | s2 | main.rs:351:9:351:10 | [SSA] s2 | +| main.rs:351:9:351:10 | s2 | main.rs:351:9:351:10 | s2 | +| main.rs:351:14:351:30 | ...::B(...) | main.rs:351:9:351:10 | s2 | +| main.rs:352:11:352:12 | s1 | main.rs:353:9:353:25 | ...::A(...) | +| main.rs:352:11:352:12 | s1 | main.rs:354:9:354:25 | ...::B(...) | +| main.rs:352:11:352:12 | s1 | main.rs:356:11:356:12 | s1 | +| main.rs:353:24:353:24 | [SSA] n | main.rs:353:35:353:35 | n | +| main.rs:353:24:353:24 | n | main.rs:353:24:353:24 | [SSA] n | +| main.rs:353:24:353:24 | n | main.rs:353:24:353:24 | n | +| main.rs:353:30:353:36 | sink(...) | main.rs:352:5:355:5 | match s1 { ... } | +| main.rs:354:24:354:24 | [SSA] n | main.rs:354:35:354:35 | n | +| main.rs:354:24:354:24 | n | main.rs:354:24:354:24 | [SSA] n | +| main.rs:354:24:354:24 | n | main.rs:354:24:354:24 | n | +| main.rs:354:30:354:36 | sink(...) | main.rs:352:5:355:5 | match s1 { ... } | +| main.rs:356:11:356:12 | s1 | main.rs:357:9:357:45 | ... \| ... | +| main.rs:357:9:357:45 | ... \| ... | main.rs:357:9:357:25 | ...::A(...) | +| main.rs:357:9:357:45 | ... \| ... | main.rs:357:29:357:45 | ...::B(...) | +| main.rs:357:24:357:24 | [SSA] n | main.rs:357:55:357:55 | n | +| main.rs:357:24:357:24 | n | main.rs:357:24:357:24 | [SSA] n | +| main.rs:357:24:357:24 | n | main.rs:357:24:357:24 | n | +| main.rs:357:44:357:44 | [SSA] n | main.rs:357:55:357:55 | n | +| main.rs:357:44:357:44 | n | main.rs:357:44:357:44 | [SSA] n | +| main.rs:357:44:357:44 | n | main.rs:357:44:357:44 | n | +| main.rs:357:50:357:56 | sink(...) | main.rs:356:5:358:5 | match s1 { ... } | +| main.rs:359:5:362:5 | match s2 { ... } | main.rs:349:48:363:1 | { ... } | +| main.rs:359:11:359:12 | s2 | main.rs:360:9:360:25 | ...::A(...) | +| main.rs:359:11:359:12 | s2 | main.rs:361:9:361:25 | ...::B(...) | +| main.rs:360:24:360:24 | [SSA] n | main.rs:360:35:360:35 | n | +| main.rs:360:24:360:24 | n | main.rs:360:24:360:24 | [SSA] n | +| main.rs:360:24:360:24 | n | main.rs:360:24:360:24 | n | +| main.rs:360:30:360:36 | sink(...) | main.rs:359:5:362:5 | match s2 { ... } | +| main.rs:361:24:361:24 | [SSA] n | main.rs:361:35:361:35 | n | +| main.rs:361:24:361:24 | n | main.rs:361:24:361:24 | [SSA] n | +| main.rs:361:24:361:24 | n | main.rs:361:24:361:24 | n | +| main.rs:361:30:361:36 | sink(...) | main.rs:359:5:362:5 | match s2 { ... } | +| main.rs:368:9:368:10 | [SSA] s1 | main.rs:370:11:370:12 | s1 | +| main.rs:368:9:368:10 | s1 | main.rs:368:9:368:10 | [SSA] s1 | +| main.rs:368:9:368:10 | s1 | main.rs:368:9:368:10 | s1 | +| main.rs:368:14:368:26 | A(...) | main.rs:368:9:368:10 | s1 | +| main.rs:369:9:369:10 | [SSA] s2 | main.rs:377:11:377:12 | s2 | +| main.rs:369:9:369:10 | s2 | main.rs:369:9:369:10 | [SSA] s2 | +| main.rs:369:9:369:10 | s2 | main.rs:369:9:369:10 | s2 | +| main.rs:369:14:369:17 | B(...) | main.rs:369:9:369:10 | s2 | +| main.rs:370:11:370:12 | s1 | main.rs:371:9:371:12 | A(...) | +| main.rs:370:11:370:12 | s1 | main.rs:372:9:372:12 | B(...) | +| main.rs:370:11:370:12 | s1 | main.rs:374:11:374:12 | s1 | +| main.rs:371:11:371:11 | [SSA] n | main.rs:371:22:371:22 | n | +| main.rs:371:11:371:11 | n | main.rs:371:11:371:11 | [SSA] n | +| main.rs:371:11:371:11 | n | main.rs:371:11:371:11 | n | +| main.rs:371:17:371:23 | sink(...) | main.rs:370:5:373:5 | match s1 { ... } | +| main.rs:372:11:372:11 | [SSA] n | main.rs:372:22:372:22 | n | +| main.rs:372:11:372:11 | n | main.rs:372:11:372:11 | [SSA] n | +| main.rs:372:11:372:11 | n | main.rs:372:11:372:11 | n | +| main.rs:372:17:372:23 | sink(...) | main.rs:370:5:373:5 | match s1 { ... } | +| main.rs:374:11:374:12 | s1 | main.rs:375:9:375:19 | ... \| ... | +| main.rs:375:9:375:19 | ... \| ... | main.rs:375:9:375:12 | A(...) | +| main.rs:375:9:375:19 | ... \| ... | main.rs:375:16:375:19 | B(...) | +| main.rs:375:11:375:11 | [SSA] n | main.rs:375:29:375:29 | n | +| main.rs:375:11:375:11 | n | main.rs:375:11:375:11 | [SSA] n | +| main.rs:375:11:375:11 | n | main.rs:375:11:375:11 | n | +| main.rs:375:18:375:18 | [SSA] n | main.rs:375:29:375:29 | n | +| main.rs:375:18:375:18 | n | main.rs:375:18:375:18 | [SSA] n | +| main.rs:375:18:375:18 | n | main.rs:375:18:375:18 | n | +| main.rs:375:24:375:30 | sink(...) | main.rs:374:5:376:5 | match s1 { ... } | +| main.rs:377:5:380:5 | match s2 { ... } | main.rs:367:50:381:1 | { ... } | +| main.rs:377:11:377:12 | s2 | main.rs:378:9:378:12 | A(...) | +| main.rs:377:11:377:12 | s2 | main.rs:379:9:379:12 | B(...) | +| main.rs:378:11:378:11 | [SSA] n | main.rs:378:22:378:22 | n | +| main.rs:378:11:378:11 | n | main.rs:378:11:378:11 | [SSA] n | +| main.rs:378:11:378:11 | n | main.rs:378:11:378:11 | n | +| main.rs:378:17:378:23 | sink(...) | main.rs:377:5:380:5 | match s2 { ... } | +| main.rs:379:11:379:11 | [SSA] n | main.rs:379:22:379:22 | n | +| main.rs:379:11:379:11 | n | main.rs:379:11:379:11 | [SSA] n | +| main.rs:379:11:379:11 | n | main.rs:379:11:379:11 | n | +| main.rs:379:17:379:23 | sink(...) | main.rs:377:5:380:5 | match s2 { ... } | +| main.rs:389:9:389:10 | [SSA] s1 | main.rs:393:11:393:12 | s1 | +| main.rs:389:9:389:10 | s1 | main.rs:389:9:389:10 | [SSA] s1 | +| main.rs:389:9:389:10 | s1 | main.rs:389:9:389:10 | s1 | +| main.rs:389:14:391:5 | ...::C {...} | main.rs:389:9:389:10 | s1 | +| main.rs:392:9:392:10 | [SSA] s2 | main.rs:400:11:400:12 | s2 | +| main.rs:392:9:392:10 | s2 | main.rs:392:9:392:10 | [SSA] s2 | +| main.rs:392:9:392:10 | s2 | main.rs:392:9:392:10 | s2 | +| main.rs:392:14:392:43 | ...::D {...} | main.rs:392:9:392:10 | s2 | +| main.rs:393:11:393:12 | s1 | main.rs:394:9:394:38 | ...::C {...} | +| main.rs:393:11:393:12 | s1 | main.rs:395:9:395:38 | ...::D {...} | +| main.rs:393:11:393:12 | s1 | main.rs:397:11:397:12 | s1 | +| main.rs:394:36:394:36 | [SSA] n | main.rs:394:48:394:48 | n | +| main.rs:394:36:394:36 | n | main.rs:394:36:394:36 | [SSA] n | +| main.rs:394:36:394:36 | n | main.rs:394:36:394:36 | n | +| main.rs:394:43:394:49 | sink(...) | main.rs:393:5:396:5 | match s1 { ... } | +| main.rs:395:36:395:36 | [SSA] n | main.rs:395:48:395:48 | n | +| main.rs:395:36:395:36 | n | main.rs:395:36:395:36 | [SSA] n | +| main.rs:395:36:395:36 | n | main.rs:395:36:395:36 | n | +| main.rs:395:43:395:49 | sink(...) | main.rs:393:5:396:5 | match s1 { ... } | +| main.rs:397:11:397:12 | s1 | main.rs:398:9:398:71 | ... \| ... | +| main.rs:398:9:398:71 | ... \| ... | main.rs:398:9:398:38 | ...::C {...} | +| main.rs:398:9:398:71 | ... \| ... | main.rs:398:42:398:71 | ...::D {...} | +| main.rs:398:36:398:36 | [SSA] n | main.rs:398:81:398:81 | n | +| main.rs:398:36:398:36 | n | main.rs:398:36:398:36 | [SSA] n | +| main.rs:398:36:398:36 | n | main.rs:398:36:398:36 | n | +| main.rs:398:69:398:69 | [SSA] n | main.rs:398:81:398:81 | n | +| main.rs:398:69:398:69 | n | main.rs:398:69:398:69 | [SSA] n | +| main.rs:398:69:398:69 | n | main.rs:398:69:398:69 | n | +| main.rs:398:76:398:82 | sink(...) | main.rs:397:5:399:5 | match s1 { ... } | +| main.rs:400:5:403:5 | match s2 { ... } | main.rs:388:49:404:1 | { ... } | +| main.rs:400:11:400:12 | s2 | main.rs:401:9:401:38 | ...::C {...} | +| main.rs:400:11:400:12 | s2 | main.rs:402:9:402:38 | ...::D {...} | +| main.rs:401:36:401:36 | [SSA] n | main.rs:401:48:401:48 | n | +| main.rs:401:36:401:36 | n | main.rs:401:36:401:36 | [SSA] n | +| main.rs:401:36:401:36 | n | main.rs:401:36:401:36 | n | +| main.rs:401:43:401:49 | sink(...) | main.rs:400:5:403:5 | match s2 { ... } | +| main.rs:402:36:402:36 | [SSA] n | main.rs:402:48:402:48 | n | +| main.rs:402:36:402:36 | n | main.rs:402:36:402:36 | [SSA] n | +| main.rs:402:36:402:36 | n | main.rs:402:36:402:36 | n | +| main.rs:402:43:402:49 | sink(...) | main.rs:400:5:403:5 | match s2 { ... } | +| main.rs:409:9:409:10 | [SSA] s1 | main.rs:413:11:413:12 | s1 | +| main.rs:409:9:409:10 | s1 | main.rs:409:9:409:10 | [SSA] s1 | +| main.rs:409:9:409:10 | s1 | main.rs:409:9:409:10 | s1 | +| main.rs:409:14:411:5 | C {...} | main.rs:409:9:409:10 | s1 | +| main.rs:412:9:412:10 | [SSA] s2 | main.rs:420:11:420:12 | s2 | +| main.rs:412:9:412:10 | s2 | main.rs:412:9:412:10 | [SSA] s2 | +| main.rs:412:9:412:10 | s2 | main.rs:412:9:412:10 | s2 | +| main.rs:412:14:412:29 | D {...} | main.rs:412:9:412:10 | s2 | +| main.rs:413:11:413:12 | s1 | main.rs:414:9:414:24 | C {...} | +| main.rs:413:11:413:12 | s1 | main.rs:415:9:415:24 | D {...} | +| main.rs:413:11:413:12 | s1 | main.rs:417:11:417:12 | s1 | +| main.rs:414:22:414:22 | [SSA] n | main.rs:414:34:414:34 | n | +| main.rs:414:22:414:22 | n | main.rs:414:22:414:22 | [SSA] n | +| main.rs:414:22:414:22 | n | main.rs:414:22:414:22 | n | +| main.rs:414:29:414:35 | sink(...) | main.rs:413:5:416:5 | match s1 { ... } | +| main.rs:415:22:415:22 | [SSA] n | main.rs:415:34:415:34 | n | +| main.rs:415:22:415:22 | n | main.rs:415:22:415:22 | [SSA] n | +| main.rs:415:22:415:22 | n | main.rs:415:22:415:22 | n | +| main.rs:415:29:415:35 | sink(...) | main.rs:413:5:416:5 | match s1 { ... } | +| main.rs:417:11:417:12 | s1 | main.rs:418:9:418:43 | ... \| ... | +| main.rs:418:9:418:43 | ... \| ... | main.rs:418:9:418:24 | C {...} | +| main.rs:418:9:418:43 | ... \| ... | main.rs:418:28:418:43 | D {...} | +| main.rs:418:22:418:22 | [SSA] n | main.rs:418:53:418:53 | n | +| main.rs:418:22:418:22 | n | main.rs:418:22:418:22 | [SSA] n | +| main.rs:418:22:418:22 | n | main.rs:418:22:418:22 | n | +| main.rs:418:41:418:41 | [SSA] n | main.rs:418:53:418:53 | n | +| main.rs:418:41:418:41 | n | main.rs:418:41:418:41 | [SSA] n | +| main.rs:418:41:418:41 | n | main.rs:418:41:418:41 | n | +| main.rs:418:48:418:54 | sink(...) | main.rs:417:5:419:5 | match s1 { ... } | +| main.rs:420:5:423:5 | match s2 { ... } | main.rs:408:51:424:1 | { ... } | +| main.rs:420:11:420:12 | s2 | main.rs:421:9:421:24 | C {...} | +| main.rs:420:11:420:12 | s2 | main.rs:422:9:422:24 | D {...} | +| main.rs:421:22:421:22 | [SSA] n | main.rs:421:34:421:34 | n | +| main.rs:421:22:421:22 | n | main.rs:421:22:421:22 | [SSA] n | +| main.rs:421:22:421:22 | n | main.rs:421:22:421:22 | n | +| main.rs:421:29:421:35 | sink(...) | main.rs:420:5:423:5 | match s2 { ... } | +| main.rs:422:22:422:22 | [SSA] n | main.rs:422:34:422:34 | n | +| main.rs:422:22:422:22 | n | main.rs:422:22:422:22 | [SSA] n | +| main.rs:422:22:422:22 | n | main.rs:422:22:422:22 | n | +| main.rs:422:29:422:35 | sink(...) | main.rs:420:5:423:5 | match s2 { ... } | +| main.rs:430:9:430:12 | [SSA] arr1 | main.rs:431:14:431:17 | arr1 | +| main.rs:430:9:430:12 | arr1 | main.rs:430:9:430:12 | [SSA] arr1 | +| main.rs:430:9:430:12 | arr1 | main.rs:430:9:430:12 | arr1 | +| main.rs:430:16:430:33 | [...] | main.rs:430:9:430:12 | arr1 | +| main.rs:431:9:431:10 | [SSA] n1 | main.rs:432:10:432:11 | n1 | +| main.rs:431:9:431:10 | n1 | main.rs:431:9:431:10 | [SSA] n1 | +| main.rs:431:9:431:10 | n1 | main.rs:431:9:431:10 | n1 | +| main.rs:431:14:431:20 | arr1[2] | main.rs:431:9:431:10 | n1 | +| main.rs:434:9:434:12 | [SSA] arr2 | main.rs:435:14:435:17 | arr2 | +| main.rs:434:9:434:12 | arr2 | main.rs:434:9:434:12 | [SSA] arr2 | +| main.rs:434:9:434:12 | arr2 | main.rs:434:9:434:12 | arr2 | +| main.rs:434:16:434:31 | [...; 10] | main.rs:434:9:434:12 | arr2 | +| main.rs:435:9:435:10 | [SSA] n2 | main.rs:436:10:436:11 | n2 | +| main.rs:435:9:435:10 | n2 | main.rs:435:9:435:10 | [SSA] n2 | +| main.rs:435:9:435:10 | n2 | main.rs:435:9:435:10 | n2 | +| main.rs:435:14:435:20 | arr2[4] | main.rs:435:9:435:10 | n2 | +| main.rs:438:9:438:12 | [SSA] arr3 | main.rs:439:14:439:17 | arr3 | +| main.rs:438:9:438:12 | arr3 | main.rs:438:9:438:12 | [SSA] arr3 | +| main.rs:438:9:438:12 | arr3 | main.rs:438:9:438:12 | arr3 | +| main.rs:438:16:438:24 | [...] | main.rs:438:9:438:12 | arr3 | +| main.rs:439:9:439:10 | [SSA] n3 | main.rs:440:10:440:11 | n3 | +| main.rs:439:9:439:10 | n3 | main.rs:439:9:439:10 | [SSA] n3 | +| main.rs:439:9:439:10 | n3 | main.rs:439:9:439:10 | n3 | +| main.rs:439:14:439:20 | arr3[2] | main.rs:439:9:439:10 | n3 | +| main.rs:444:9:444:12 | [SSA] arr1 | main.rs:445:15:445:18 | arr1 | | main.rs:444:9:444:12 | arr1 | main.rs:444:9:444:12 | [SSA] arr1 | | main.rs:444:9:444:12 | arr1 | main.rs:444:9:444:12 | arr1 | | main.rs:444:16:444:33 | [...] | main.rs:444:9:444:12 | arr1 | -| main.rs:445:5:451:5 | match arr1 { ... } | main.rs:443:26:452:1 | { ... } | -| main.rs:445:11:445:14 | arr1 | main.rs:446:9:446:17 | SlicePat | -| main.rs:446:10:446:10 | [SSA] a | main.rs:447:18:447:18 | a | -| main.rs:446:10:446:10 | a | main.rs:446:10:446:10 | [SSA] a | -| main.rs:446:10:446:10 | a | main.rs:446:10:446:10 | a | -| main.rs:446:13:446:13 | [SSA] b | main.rs:448:18:448:18 | b | -| main.rs:446:13:446:13 | b | main.rs:446:13:446:13 | [SSA] b | -| main.rs:446:13:446:13 | b | main.rs:446:13:446:13 | b | -| main.rs:446:16:446:16 | [SSA] c | main.rs:449:18:449:18 | c | -| main.rs:446:16:446:16 | c | main.rs:446:16:446:16 | [SSA] c | -| main.rs:446:16:446:16 | c | main.rs:446:16:446:16 | c | -| main.rs:446:22:450:9 | { ... } | main.rs:445:5:451:5 | match arr1 { ... } | -| main.rs:455:9:455:19 | mut mut_arr | main.rs:455:13:455:19 | mut_arr | -| main.rs:455:13:455:19 | [SSA] mut_arr | main.rs:456:10:456:16 | mut_arr | -| main.rs:455:13:455:19 | mut_arr | main.rs:455:13:455:19 | [SSA] mut_arr | -| main.rs:455:23:455:31 | [...] | main.rs:455:9:455:19 | mut mut_arr | -| main.rs:456:10:456:16 | [post] mut_arr | main.rs:458:5:458:11 | mut_arr | -| main.rs:456:10:456:16 | mut_arr | main.rs:458:5:458:11 | mut_arr | -| main.rs:458:5:458:11 | [post] mut_arr | main.rs:459:13:459:19 | mut_arr | -| main.rs:458:5:458:11 | mut_arr | main.rs:459:13:459:19 | mut_arr | -| main.rs:458:18:458:27 | source(...) | main.rs:458:5:458:14 | mut_arr[1] | -| main.rs:459:9:459:9 | [SSA] d | main.rs:460:10:460:10 | d | -| main.rs:459:9:459:9 | d | main.rs:459:9:459:9 | [SSA] d | -| main.rs:459:9:459:9 | d | main.rs:459:9:459:9 | d | -| main.rs:459:13:459:19 | [post] mut_arr | main.rs:461:10:461:16 | mut_arr | -| main.rs:459:13:459:19 | mut_arr | main.rs:461:10:461:16 | mut_arr | -| main.rs:459:13:459:22 | mut_arr[1] | main.rs:459:9:459:9 | d | -| main.rs:466:39:466:43 | [SSA] names | main.rs:468:25:468:29 | names | -| main.rs:466:39:466:43 | names | main.rs:466:39:466:43 | [SSA] names | -| main.rs:466:39:466:43 | names | main.rs:466:39:466:43 | names | -| main.rs:466:39:466:72 | ...: Vec::<...> | main.rs:466:39:466:43 | names | -| main.rs:467:9:467:20 | default_name | main.rs:467:9:467:20 | [SSA] default_name | -| main.rs:467:9:467:20 | default_name | main.rs:467:9:467:20 | default_name | -| main.rs:467:24:467:33 | [post] receiver for source(...) | main.rs:467:24:467:33 | [post] source(...) | -| main.rs:467:24:467:33 | source(...) | main.rs:467:24:467:33 | receiver for source(...) | -| main.rs:467:24:467:45 | ... .to_string() | main.rs:467:9:467:20 | default_name | -| main.rs:467:24:467:45 | ... .to_string() | main.rs:468:9:468:20 | SSA phi read(default_name) | -| main.rs:468:5:474:5 | for ... in ... { ... } | main.rs:466:75:475:1 | { ... } | -| main.rs:468:9:468:20 | SSA phi read(default_name) | main.rs:470:41:470:67 | default_name | -| main.rs:468:10:468:13 | [SSA] cond | main.rs:469:12:469:15 | cond | -| main.rs:468:10:468:13 | cond | main.rs:468:10:468:13 | [SSA] cond | -| main.rs:468:10:468:13 | cond | main.rs:468:10:468:13 | cond | -| main.rs:468:16:468:19 | [SSA] name | main.rs:470:21:470:24 | name | -| main.rs:468:16:468:19 | name | main.rs:468:16:468:19 | [SSA] name | -| main.rs:468:16:468:19 | name | main.rs:468:16:468:19 | name | -| main.rs:469:9:473:9 | if cond {...} | main.rs:468:31:474:5 | { ... } | -| main.rs:470:17:470:17 | [SSA] n | main.rs:471:18:471:18 | n | -| main.rs:470:17:470:17 | n | main.rs:470:17:470:17 | [SSA] n | -| main.rs:470:17:470:17 | n | main.rs:470:17:470:17 | n | -| main.rs:470:21:470:24 | [post] receiver for name | main.rs:470:21:470:24 | [post] name | -| main.rs:470:21:470:24 | name | main.rs:470:21:470:24 | receiver for name | -| main.rs:470:21:470:68 | name.unwrap_or_else(...) | main.rs:470:17:470:17 | n | -| main.rs:470:41:470:67 | [post] default_name | main.rs:468:9:468:20 | SSA phi read(default_name) | -| main.rs:470:41:470:67 | closure self in \|...\| ... | main.rs:470:44:470:55 | this | -| main.rs:470:41:470:67 | default_name | main.rs:468:9:468:20 | SSA phi read(default_name) | -| main.rs:470:44:470:55 | [post] receiver for default_name | main.rs:470:44:470:55 | [post] default_name | -| main.rs:470:44:470:55 | default_name | main.rs:470:44:470:55 | receiver for default_name | -| main.rs:471:18:471:18 | [post] receiver for n | main.rs:471:18:471:18 | [post] n | -| main.rs:471:18:471:18 | n | main.rs:471:18:471:18 | receiver for n | -| main.rs:484:9:484:9 | [SSA] s | main.rs:485:10:485:10 | s | -| main.rs:484:9:484:9 | s | main.rs:484:9:484:9 | [SSA] s | -| main.rs:484:9:484:9 | s | main.rs:484:9:484:9 | s | -| main.rs:484:13:484:27 | MacroExpr | main.rs:484:9:484:9 | s | -| main.rs:484:25:484:26 | source(...) | main.rs:484:13:484:27 | MacroExpr | -| main.rs:488:16:488:16 | [SSA] s | main.rs:489:20:489:20 | s | -| main.rs:488:16:488:16 | s | main.rs:488:16:488:16 | [SSA] s | -| main.rs:488:16:488:16 | s | main.rs:488:16:488:16 | s | -| main.rs:488:16:488:24 | ...: String | main.rs:488:16:488:16 | s | -| main.rs:489:14:489:20 | FormatArgsExpr | main.rs:489:14:489:20 | MacroExpr | -| main.rs:489:14:489:20 | MacroBlockExpr | main.rs:489:5:489:21 | MacroExpr | -| main.rs:489:14:489:20 | [post] MacroExpr | main.rs:489:14:489:20 | [post] FormatArgsExpr | -| main.rs:489:14:489:20 | { ... } | main.rs:489:14:489:20 | MacroBlockExpr | -| main.rs:493:9:493:9 | [SSA] a | main.rs:494:13:494:13 | a | -| main.rs:493:9:493:9 | a | main.rs:493:9:493:9 | [SSA] a | -| main.rs:493:9:493:9 | a | main.rs:493:9:493:9 | a | -| main.rs:493:13:493:22 | source(...) | main.rs:493:9:493:9 | a | -| main.rs:494:9:494:9 | [SSA] b | main.rs:495:13:495:13 | b | -| main.rs:494:9:494:9 | b | main.rs:494:9:494:9 | [SSA] b | -| main.rs:494:9:494:9 | b | main.rs:494:9:494:9 | b | -| main.rs:494:13:494:13 | [post] a | main.rs:498:10:498:10 | a | -| main.rs:494:13:494:13 | [post] receiver for a | main.rs:494:13:494:13 | [post] a | -| main.rs:494:13:494:13 | a | main.rs:494:13:494:13 | receiver for a | -| main.rs:494:13:494:13 | a | main.rs:498:10:498:10 | a | -| main.rs:494:13:494:25 | a.to_string() | main.rs:494:9:494:9 | b | -| main.rs:495:9:495:9 | [SSA] c | main.rs:500:10:500:10 | c | -| main.rs:495:9:495:9 | c | main.rs:495:9:495:9 | [SSA] c | -| main.rs:495:9:495:9 | c | main.rs:495:9:495:9 | c | -| main.rs:495:13:495:13 | [post] b | main.rs:496:18:496:18 | b | -| main.rs:495:13:495:13 | [post] receiver for b | main.rs:495:13:495:13 | [post] b | -| main.rs:495:13:495:13 | b | main.rs:495:13:495:13 | receiver for b | -| main.rs:495:13:495:13 | b | main.rs:496:18:496:18 | b | -| main.rs:495:13:495:28 | [post] receiver for b.parse() | main.rs:495:13:495:28 | [post] b.parse() | -| main.rs:495:13:495:28 | b.parse() | main.rs:495:13:495:28 | receiver for b.parse() | -| main.rs:495:13:495:37 | ... .unwrap() | main.rs:495:9:495:9 | c | -| main.rs:496:9:496:9 | [SSA] d | main.rs:501:10:501:10 | d | -| main.rs:496:9:496:9 | d | main.rs:496:9:496:9 | [SSA] d | -| main.rs:496:9:496:9 | d | main.rs:496:9:496:9 | d | -| main.rs:496:18:496:18 | [post] b | main.rs:499:17:499:17 | b | -| main.rs:496:18:496:18 | [post] receiver for b | main.rs:496:18:496:18 | [post] b | -| main.rs:496:18:496:18 | b | main.rs:496:18:496:18 | receiver for b | -| main.rs:496:18:496:18 | b | main.rs:499:17:499:17 | b | -| main.rs:496:18:496:26 | [post] receiver for b.parse() | main.rs:496:18:496:26 | [post] b.parse() | -| main.rs:496:18:496:26 | b.parse() | main.rs:496:18:496:26 | receiver for b.parse() | -| main.rs:496:18:496:35 | ... .unwrap() | main.rs:496:9:496:9 | d | -| main.rs:505:9:505:10 | [SSA] vs | main.rs:507:10:507:11 | vs | -| main.rs:505:9:505:10 | vs | main.rs:505:9:505:10 | [SSA] vs | -| main.rs:505:9:505:10 | vs | main.rs:505:9:505:10 | vs | -| main.rs:505:14:505:34 | [...] | main.rs:505:9:505:10 | vs | -| main.rs:507:10:507:11 | [post] vs | main.rs:508:11:508:12 | vs | -| main.rs:507:10:507:11 | vs | main.rs:508:11:508:12 | vs | -| main.rs:508:11:508:12 | [post] receiver for vs | main.rs:508:11:508:12 | [post] vs | -| main.rs:508:11:508:12 | [post] vs | main.rs:509:11:509:12 | vs | -| main.rs:508:11:508:12 | vs | main.rs:508:11:508:12 | receiver for vs | -| main.rs:508:11:508:12 | vs | main.rs:509:11:509:12 | vs | -| main.rs:508:11:508:19 | [post] receiver for vs.iter() | main.rs:508:11:508:19 | [post] vs.iter() | -| main.rs:508:11:508:19 | vs.iter() | main.rs:508:11:508:19 | receiver for vs.iter() | -| main.rs:508:11:508:26 | ... .next() | main.rs:508:11:508:26 | receiver for ... .next() | -| main.rs:508:11:508:26 | [post] receiver for ... .next() | main.rs:508:11:508:26 | [post] ... .next() | -| main.rs:508:11:508:35 | ... .unwrap() | main.rs:508:11:508:35 | receiver for ... .unwrap() | -| main.rs:508:11:508:35 | [post] receiver for ... .unwrap() | main.rs:508:11:508:35 | [post] ... .unwrap() | -| main.rs:509:11:509:12 | [post] receiver for vs | main.rs:509:11:509:12 | [post] vs | -| main.rs:509:11:509:12 | [post] vs | main.rs:511:14:511:15 | vs | -| main.rs:509:11:509:12 | vs | main.rs:509:11:509:12 | receiver for vs | -| main.rs:509:11:509:12 | vs | main.rs:511:14:511:15 | vs | -| main.rs:509:11:509:19 | [post] receiver for vs.iter() | main.rs:509:11:509:19 | [post] vs.iter() | -| main.rs:509:11:509:19 | vs.iter() | main.rs:509:11:509:19 | receiver for vs.iter() | -| main.rs:509:11:509:26 | ... .nth(...) | main.rs:509:11:509:26 | receiver for ... .nth(...) | -| main.rs:509:11:509:26 | [post] receiver for ... .nth(...) | main.rs:509:11:509:26 | [post] ... .nth(...) | -| main.rs:509:11:509:35 | ... .unwrap() | main.rs:509:11:509:35 | receiver for ... .unwrap() | -| main.rs:509:11:509:35 | [post] receiver for ... .unwrap() | main.rs:509:11:509:35 | [post] ... .unwrap() | -| main.rs:511:9:511:9 | [SSA] v | main.rs:512:14:512:14 | v | -| main.rs:511:9:511:9 | v | main.rs:511:9:511:9 | [SSA] v | -| main.rs:511:9:511:9 | v | main.rs:511:9:511:9 | v | -| main.rs:511:14:511:15 | vs | main.rs:514:15:514:16 | vs | -| main.rs:514:10:514:10 | [SSA] v | main.rs:515:14:515:14 | v | -| main.rs:514:10:514:10 | v | main.rs:514:10:514:10 | [SSA] v | -| main.rs:514:10:514:10 | v | main.rs:514:10:514:10 | v | -| main.rs:514:15:514:16 | [post] receiver for vs | main.rs:514:15:514:16 | [post] vs | -| main.rs:514:15:514:16 | [post] vs | main.rs:518:26:518:27 | vs | -| main.rs:514:15:514:16 | vs | main.rs:514:15:514:16 | receiver for vs | -| main.rs:514:15:514:16 | vs | main.rs:518:26:518:27 | vs | -| main.rs:518:9:518:11 | [SSA] vs2 | main.rs:519:15:519:17 | vs2 | -| main.rs:518:9:518:11 | vs2 | main.rs:518:9:518:11 | [SSA] vs2 | -| main.rs:518:9:518:11 | vs2 | main.rs:518:9:518:11 | vs2 | -| main.rs:518:26:518:27 | [post] receiver for vs | main.rs:518:26:518:27 | [post] vs | -| main.rs:518:26:518:27 | [post] vs | main.rs:523:5:523:6 | vs | -| main.rs:518:26:518:27 | vs | main.rs:518:26:518:27 | receiver for vs | -| main.rs:518:26:518:27 | vs | main.rs:523:5:523:6 | vs | -| main.rs:518:26:518:34 | [post] receiver for vs.iter() | main.rs:518:26:518:34 | [post] vs.iter() | -| main.rs:518:26:518:34 | vs.iter() | main.rs:518:26:518:34 | receiver for vs.iter() | -| main.rs:518:26:518:44 | ... .collect() | main.rs:518:9:518:11 | vs2 | -| main.rs:519:10:519:10 | [SSA] v | main.rs:520:14:520:14 | v | -| main.rs:519:10:519:10 | v | main.rs:519:10:519:10 | [SSA] v | -| main.rs:519:10:519:10 | v | main.rs:519:10:519:10 | v | -| main.rs:523:5:523:6 | [post] receiver for vs | main.rs:523:5:523:6 | [post] vs | -| main.rs:523:5:523:6 | [post] vs | main.rs:524:5:524:6 | vs | -| main.rs:523:5:523:6 | vs | main.rs:523:5:523:6 | receiver for vs | -| main.rs:523:5:523:6 | vs | main.rs:524:5:524:6 | vs | -| main.rs:523:5:523:13 | [post] receiver for vs.iter() | main.rs:523:5:523:13 | [post] vs.iter() | -| main.rs:523:5:523:13 | vs.iter() | main.rs:523:5:523:13 | receiver for vs.iter() | -| main.rs:523:20:523:20 | ... | main.rs:523:20:523:20 | x | -| main.rs:523:20:523:20 | [SSA] x | main.rs:523:29:523:29 | x | -| main.rs:523:20:523:20 | x | main.rs:523:20:523:20 | [SSA] x | -| main.rs:523:20:523:20 | x | main.rs:523:20:523:20 | x | -| main.rs:523:29:523:29 | [post] receiver for x | main.rs:523:29:523:29 | [post] x | -| main.rs:523:29:523:29 | x | main.rs:523:29:523:29 | receiver for x | -| main.rs:524:5:524:6 | [post] receiver for vs | main.rs:524:5:524:6 | [post] vs | -| main.rs:524:5:524:6 | [post] vs | main.rs:526:14:526:15 | vs | -| main.rs:524:5:524:6 | vs | main.rs:524:5:524:6 | receiver for vs | -| main.rs:524:5:524:6 | vs | main.rs:526:14:526:15 | vs | -| main.rs:524:5:524:13 | [post] receiver for vs.iter() | main.rs:524:5:524:13 | [post] vs.iter() | -| main.rs:524:5:524:13 | vs.iter() | main.rs:524:5:524:13 | receiver for vs.iter() | -| main.rs:524:25:524:25 | ... | main.rs:524:25:524:25 | x | -| main.rs:524:25:524:25 | [SSA] x | main.rs:524:34:524:34 | x | -| main.rs:524:25:524:25 | x | main.rs:524:25:524:25 | [SSA] x | -| main.rs:524:25:524:25 | x | main.rs:524:25:524:25 | x | -| main.rs:524:34:524:34 | [post] receiver for x | main.rs:524:34:524:34 | [post] x | -| main.rs:524:34:524:34 | x | main.rs:524:34:524:34 | receiver for x | -| main.rs:526:9:526:9 | [SSA] v | main.rs:527:14:527:14 | v | -| main.rs:526:9:526:9 | v | main.rs:526:9:526:9 | [SSA] v | -| main.rs:526:9:526:9 | v | main.rs:526:9:526:9 | v | -| main.rs:526:14:526:15 | [post] receiver for vs | main.rs:526:14:526:15 | [post] vs | -| main.rs:526:14:526:15 | vs | main.rs:526:14:526:15 | receiver for vs | -| main.rs:530:9:530:18 | mut vs_mut | main.rs:530:13:530:18 | vs_mut | -| main.rs:530:13:530:18 | [SSA] vs_mut | main.rs:532:10:532:15 | vs_mut | -| main.rs:530:13:530:18 | vs_mut | main.rs:530:13:530:18 | [SSA] vs_mut | -| main.rs:530:22:530:42 | [...] | main.rs:530:9:530:18 | mut vs_mut | -| main.rs:532:10:532:15 | [post] vs_mut | main.rs:533:11:533:16 | [SSA] vs_mut | -| main.rs:532:10:532:15 | [post] vs_mut | main.rs:533:11:533:16 | vs_mut | -| main.rs:532:10:532:15 | vs_mut | main.rs:533:11:533:16 | [SSA] vs_mut | -| main.rs:532:10:532:15 | vs_mut | main.rs:533:11:533:16 | vs_mut | -| main.rs:533:11:533:16 | [SSA] vs_mut | main.rs:534:11:534:16 | [SSA] vs_mut | -| main.rs:533:11:533:16 | [SSA] vs_mut | main.rs:534:11:534:16 | vs_mut | -| main.rs:533:11:533:16 | [post] receiver for vs_mut | main.rs:533:11:533:16 | [post] vs_mut | -| main.rs:533:11:533:16 | [post] vs_mut | main.rs:534:11:534:16 | [SSA] vs_mut | -| main.rs:533:11:533:16 | [post] vs_mut | main.rs:534:11:534:16 | vs_mut | -| main.rs:533:11:533:16 | vs_mut | main.rs:533:11:533:16 | receiver for vs_mut | -| main.rs:533:11:533:16 | vs_mut | main.rs:534:11:534:16 | [SSA] vs_mut | -| main.rs:533:11:533:16 | vs_mut | main.rs:534:11:534:16 | vs_mut | -| main.rs:533:11:533:23 | [post] receiver for vs_mut.iter() | main.rs:533:11:533:23 | [post] vs_mut.iter() | -| main.rs:533:11:533:23 | vs_mut.iter() | main.rs:533:11:533:23 | receiver for vs_mut.iter() | -| main.rs:533:11:533:30 | ... .next() | main.rs:533:11:533:30 | receiver for ... .next() | -| main.rs:533:11:533:30 | [post] receiver for ... .next() | main.rs:533:11:533:30 | [post] ... .next() | -| main.rs:533:11:533:39 | ... .unwrap() | main.rs:533:11:533:39 | receiver for ... .unwrap() | -| main.rs:533:11:533:39 | [post] receiver for ... .unwrap() | main.rs:533:11:533:39 | [post] ... .unwrap() | -| main.rs:534:11:534:16 | [SSA] vs_mut | main.rs:536:19:536:24 | vs_mut | -| main.rs:534:11:534:16 | [post] receiver for vs_mut | main.rs:534:11:534:16 | [post] vs_mut | -| main.rs:534:11:534:16 | [post] vs_mut | main.rs:536:19:536:24 | vs_mut | -| main.rs:534:11:534:16 | vs_mut | main.rs:534:11:534:16 | receiver for vs_mut | -| main.rs:534:11:534:16 | vs_mut | main.rs:536:19:536:24 | vs_mut | -| main.rs:534:11:534:23 | [post] receiver for vs_mut.iter() | main.rs:534:11:534:23 | [post] vs_mut.iter() | -| main.rs:534:11:534:23 | vs_mut.iter() | main.rs:534:11:534:23 | receiver for vs_mut.iter() | -| main.rs:534:11:534:30 | ... .nth(...) | main.rs:534:11:534:30 | receiver for ... .nth(...) | -| main.rs:534:11:534:30 | [post] receiver for ... .nth(...) | main.rs:534:11:534:30 | [post] ... .nth(...) | -| main.rs:534:11:534:39 | ... .unwrap() | main.rs:534:11:534:39 | receiver for ... .unwrap() | -| main.rs:534:11:534:39 | [post] receiver for ... .unwrap() | main.rs:534:11:534:39 | [post] ... .unwrap() | -| main.rs:536:5:538:5 | for ... in ... { ... } | main.rs:504:16:539:1 | { ... } | -| main.rs:536:14:536:14 | [SSA] v | main.rs:537:14:537:14 | v | -| main.rs:536:14:536:14 | v | main.rs:536:14:536:14 | [SSA] v | -| main.rs:536:14:536:14 | v | main.rs:536:14:536:14 | v | -| main.rs:536:19:536:24 | [post] receiver for vs_mut | main.rs:536:19:536:24 | [post] vs_mut | -| main.rs:536:19:536:24 | vs_mut | main.rs:536:19:536:24 | receiver for vs_mut | -| main.rs:542:9:542:9 | [SSA] a | main.rs:547:10:547:10 | a | -| main.rs:542:9:542:9 | a | main.rs:542:9:542:9 | [SSA] a | -| main.rs:542:9:542:9 | a | main.rs:542:9:542:9 | a | -| main.rs:542:13:542:22 | source(...) | main.rs:542:9:542:9 | a | -| main.rs:543:9:543:9 | [SSA] b | main.rs:548:15:548:15 | b | -| main.rs:543:9:543:9 | b | main.rs:543:9:543:9 | [SSA] b | -| main.rs:543:9:543:9 | b | main.rs:543:9:543:9 | b | -| main.rs:543:13:543:22 | source(...) | main.rs:543:9:543:9 | b | -| main.rs:544:9:544:9 | [SSA] c | main.rs:545:18:545:18 | c | -| main.rs:544:9:544:9 | c | main.rs:544:9:544:9 | [SSA] c | -| main.rs:544:9:544:9 | c | main.rs:544:9:544:9 | c | -| main.rs:544:13:544:22 | source(...) | main.rs:544:9:544:9 | c | -| main.rs:545:9:545:13 | [SSA] c_ref | main.rs:549:14:549:18 | c_ref | -| main.rs:545:9:545:13 | c_ref | main.rs:545:9:545:13 | [SSA] c_ref | -| main.rs:545:9:545:13 | c_ref | main.rs:545:9:545:13 | c_ref | -| main.rs:545:17:545:18 | &c | main.rs:545:9:545:13 | c_ref | -| main.rs:549:14:549:18 | [post] c_ref | main.rs:550:11:550:15 | c_ref | -| main.rs:549:14:549:18 | c_ref | main.rs:550:11:550:15 | c_ref | -| main.rs:550:11:550:15 | [post] receiver for c_ref | main.rs:550:11:550:15 | [post] c_ref | -| main.rs:550:11:550:15 | c_ref | main.rs:550:11:550:15 | receiver for c_ref | -| main.rs:554:9:554:9 | [SSA] a | main.rs:556:10:556:10 | a | +| main.rs:445:9:445:10 | [SSA] n1 | main.rs:446:14:446:15 | n1 | +| main.rs:445:9:445:10 | n1 | main.rs:445:9:445:10 | [SSA] n1 | +| main.rs:445:9:445:10 | n1 | main.rs:445:9:445:10 | n1 | +| main.rs:449:9:449:12 | [SSA] arr2 | main.rs:450:15:450:18 | arr2 | +| main.rs:449:9:449:12 | arr2 | main.rs:449:9:449:12 | [SSA] arr2 | +| main.rs:449:9:449:12 | arr2 | main.rs:449:9:449:12 | arr2 | +| main.rs:449:16:449:24 | [...] | main.rs:449:9:449:12 | arr2 | +| main.rs:450:5:452:5 | for ... in ... { ... } | main.rs:443:21:453:1 | { ... } | +| main.rs:450:9:450:10 | [SSA] n2 | main.rs:451:14:451:15 | n2 | +| main.rs:450:9:450:10 | n2 | main.rs:450:9:450:10 | [SSA] n2 | +| main.rs:450:9:450:10 | n2 | main.rs:450:9:450:10 | n2 | +| main.rs:456:9:456:12 | [SSA] arr1 | main.rs:457:11:457:14 | arr1 | +| main.rs:456:9:456:12 | arr1 | main.rs:456:9:456:12 | [SSA] arr1 | +| main.rs:456:9:456:12 | arr1 | main.rs:456:9:456:12 | arr1 | +| main.rs:456:16:456:33 | [...] | main.rs:456:9:456:12 | arr1 | +| main.rs:457:5:463:5 | match arr1 { ... } | main.rs:455:26:464:1 | { ... } | +| main.rs:457:11:457:14 | arr1 | main.rs:458:9:458:17 | SlicePat | +| main.rs:458:10:458:10 | [SSA] a | main.rs:459:18:459:18 | a | +| main.rs:458:10:458:10 | a | main.rs:458:10:458:10 | [SSA] a | +| main.rs:458:10:458:10 | a | main.rs:458:10:458:10 | a | +| main.rs:458:13:458:13 | [SSA] b | main.rs:460:18:460:18 | b | +| main.rs:458:13:458:13 | b | main.rs:458:13:458:13 | [SSA] b | +| main.rs:458:13:458:13 | b | main.rs:458:13:458:13 | b | +| main.rs:458:16:458:16 | [SSA] c | main.rs:461:18:461:18 | c | +| main.rs:458:16:458:16 | c | main.rs:458:16:458:16 | [SSA] c | +| main.rs:458:16:458:16 | c | main.rs:458:16:458:16 | c | +| main.rs:458:22:462:9 | { ... } | main.rs:457:5:463:5 | match arr1 { ... } | +| main.rs:467:9:467:19 | mut mut_arr | main.rs:467:13:467:19 | mut_arr | +| main.rs:467:13:467:19 | [SSA] mut_arr | main.rs:468:10:468:16 | mut_arr | +| main.rs:467:13:467:19 | mut_arr | main.rs:467:13:467:19 | [SSA] mut_arr | +| main.rs:467:23:467:31 | [...] | main.rs:467:9:467:19 | mut mut_arr | +| main.rs:468:10:468:16 | [post] mut_arr | main.rs:470:5:470:11 | mut_arr | +| main.rs:468:10:468:16 | mut_arr | main.rs:470:5:470:11 | mut_arr | +| main.rs:470:5:470:11 | [post] mut_arr | main.rs:471:13:471:19 | mut_arr | +| main.rs:470:5:470:11 | mut_arr | main.rs:471:13:471:19 | mut_arr | +| main.rs:470:18:470:27 | source(...) | main.rs:470:5:470:14 | mut_arr[1] | +| main.rs:471:9:471:9 | [SSA] d | main.rs:472:10:472:10 | d | +| main.rs:471:9:471:9 | d | main.rs:471:9:471:9 | [SSA] d | +| main.rs:471:9:471:9 | d | main.rs:471:9:471:9 | d | +| main.rs:471:13:471:19 | [post] mut_arr | main.rs:473:10:473:16 | mut_arr | +| main.rs:471:13:471:19 | mut_arr | main.rs:473:10:473:16 | mut_arr | +| main.rs:471:13:471:22 | mut_arr[1] | main.rs:471:9:471:9 | d | +| main.rs:478:39:478:43 | [SSA] names | main.rs:480:25:480:29 | names | +| main.rs:478:39:478:43 | names | main.rs:478:39:478:43 | [SSA] names | +| main.rs:478:39:478:43 | names | main.rs:478:39:478:43 | names | +| main.rs:478:39:478:72 | ...: Vec::<...> | main.rs:478:39:478:43 | names | +| main.rs:479:9:479:20 | default_name | main.rs:479:9:479:20 | [SSA] default_name | +| main.rs:479:9:479:20 | default_name | main.rs:479:9:479:20 | default_name | +| main.rs:479:24:479:33 | [post] receiver for source(...) | main.rs:479:24:479:33 | [post] source(...) | +| main.rs:479:24:479:33 | source(...) | main.rs:479:24:479:33 | receiver for source(...) | +| main.rs:479:24:479:45 | ... .to_string() | main.rs:479:9:479:20 | default_name | +| main.rs:479:24:479:45 | ... .to_string() | main.rs:480:9:480:20 | SSA phi read(default_name) | +| main.rs:480:5:486:5 | for ... in ... { ... } | main.rs:478:75:487:1 | { ... } | +| main.rs:480:9:480:20 | SSA phi read(default_name) | main.rs:482:41:482:67 | default_name | +| main.rs:480:10:480:13 | [SSA] cond | main.rs:481:12:481:15 | cond | +| main.rs:480:10:480:13 | cond | main.rs:480:10:480:13 | [SSA] cond | +| main.rs:480:10:480:13 | cond | main.rs:480:10:480:13 | cond | +| main.rs:480:16:480:19 | [SSA] name | main.rs:482:21:482:24 | name | +| main.rs:480:16:480:19 | name | main.rs:480:16:480:19 | [SSA] name | +| main.rs:480:16:480:19 | name | main.rs:480:16:480:19 | name | +| main.rs:481:9:485:9 | if cond {...} | main.rs:480:31:486:5 | { ... } | +| main.rs:482:17:482:17 | [SSA] n | main.rs:483:18:483:18 | n | +| main.rs:482:17:482:17 | n | main.rs:482:17:482:17 | [SSA] n | +| main.rs:482:17:482:17 | n | main.rs:482:17:482:17 | n | +| main.rs:482:21:482:24 | [post] receiver for name | main.rs:482:21:482:24 | [post] name | +| main.rs:482:21:482:24 | name | main.rs:482:21:482:24 | receiver for name | +| main.rs:482:21:482:68 | name.unwrap_or_else(...) | main.rs:482:17:482:17 | n | +| main.rs:482:41:482:67 | [post] default_name | main.rs:480:9:480:20 | SSA phi read(default_name) | +| main.rs:482:41:482:67 | closure self in \|...\| ... | main.rs:482:44:482:55 | this | +| main.rs:482:41:482:67 | default_name | main.rs:480:9:480:20 | SSA phi read(default_name) | +| main.rs:482:44:482:55 | [post] receiver for default_name | main.rs:482:44:482:55 | [post] default_name | +| main.rs:482:44:482:55 | default_name | main.rs:482:44:482:55 | receiver for default_name | +| main.rs:483:18:483:18 | [post] receiver for n | main.rs:483:18:483:18 | [post] n | +| main.rs:483:18:483:18 | n | main.rs:483:18:483:18 | receiver for n | +| main.rs:496:9:496:9 | [SSA] s | main.rs:497:10:497:10 | s | +| main.rs:496:9:496:9 | s | main.rs:496:9:496:9 | [SSA] s | +| main.rs:496:9:496:9 | s | main.rs:496:9:496:9 | s | +| main.rs:496:13:496:27 | MacroExpr | main.rs:496:9:496:9 | s | +| main.rs:496:25:496:26 | source(...) | main.rs:496:13:496:27 | MacroExpr | +| main.rs:500:16:500:16 | [SSA] s | main.rs:501:20:501:20 | s | +| main.rs:500:16:500:16 | s | main.rs:500:16:500:16 | [SSA] s | +| main.rs:500:16:500:16 | s | main.rs:500:16:500:16 | s | +| main.rs:500:16:500:24 | ...: String | main.rs:500:16:500:16 | s | +| main.rs:501:14:501:20 | FormatArgsExpr | main.rs:501:14:501:20 | MacroExpr | +| main.rs:501:14:501:20 | MacroBlockExpr | main.rs:501:5:501:21 | MacroExpr | +| main.rs:501:14:501:20 | [post] MacroExpr | main.rs:501:14:501:20 | [post] FormatArgsExpr | +| main.rs:501:14:501:20 | { ... } | main.rs:501:14:501:20 | MacroBlockExpr | +| main.rs:505:9:505:9 | [SSA] a | main.rs:506:13:506:13 | a | +| main.rs:505:9:505:9 | a | main.rs:505:9:505:9 | [SSA] a | +| main.rs:505:9:505:9 | a | main.rs:505:9:505:9 | a | +| main.rs:505:13:505:22 | source(...) | main.rs:505:9:505:9 | a | +| main.rs:506:9:506:9 | [SSA] b | main.rs:507:13:507:13 | b | +| main.rs:506:9:506:9 | b | main.rs:506:9:506:9 | [SSA] b | +| main.rs:506:9:506:9 | b | main.rs:506:9:506:9 | b | +| main.rs:506:13:506:13 | [post] a | main.rs:510:10:510:10 | a | +| main.rs:506:13:506:13 | [post] receiver for a | main.rs:506:13:506:13 | [post] a | +| main.rs:506:13:506:13 | a | main.rs:506:13:506:13 | receiver for a | +| main.rs:506:13:506:13 | a | main.rs:510:10:510:10 | a | +| main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b | +| main.rs:507:9:507:9 | [SSA] c | main.rs:512:10:512:10 | c | +| main.rs:507:9:507:9 | c | main.rs:507:9:507:9 | [SSA] c | +| main.rs:507:9:507:9 | c | main.rs:507:9:507:9 | c | +| main.rs:507:13:507:13 | [post] b | main.rs:508:18:508:18 | b | +| main.rs:507:13:507:13 | [post] receiver for b | main.rs:507:13:507:13 | [post] b | +| main.rs:507:13:507:13 | b | main.rs:507:13:507:13 | receiver for b | +| main.rs:507:13:507:13 | b | main.rs:508:18:508:18 | b | +| main.rs:507:13:507:28 | [post] receiver for b.parse() | main.rs:507:13:507:28 | [post] b.parse() | +| main.rs:507:13:507:28 | b.parse() | main.rs:507:13:507:28 | receiver for b.parse() | +| main.rs:507:13:507:37 | ... .unwrap() | main.rs:507:9:507:9 | c | +| main.rs:508:9:508:9 | [SSA] d | main.rs:513:10:513:10 | d | +| main.rs:508:9:508:9 | d | main.rs:508:9:508:9 | [SSA] d | +| main.rs:508:9:508:9 | d | main.rs:508:9:508:9 | d | +| main.rs:508:18:508:18 | [post] b | main.rs:511:17:511:17 | b | +| main.rs:508:18:508:18 | [post] receiver for b | main.rs:508:18:508:18 | [post] b | +| main.rs:508:18:508:18 | b | main.rs:508:18:508:18 | receiver for b | +| main.rs:508:18:508:18 | b | main.rs:511:17:511:17 | b | +| main.rs:508:18:508:26 | [post] receiver for b.parse() | main.rs:508:18:508:26 | [post] b.parse() | +| main.rs:508:18:508:26 | b.parse() | main.rs:508:18:508:26 | receiver for b.parse() | +| main.rs:508:18:508:35 | ... .unwrap() | main.rs:508:9:508:9 | d | +| main.rs:517:9:517:10 | [SSA] vs | main.rs:519:10:519:11 | vs | +| main.rs:517:9:517:10 | vs | main.rs:517:9:517:10 | [SSA] vs | +| main.rs:517:9:517:10 | vs | main.rs:517:9:517:10 | vs | +| main.rs:517:14:517:34 | [...] | main.rs:517:9:517:10 | vs | +| main.rs:519:10:519:11 | [post] vs | main.rs:520:11:520:12 | vs | +| main.rs:519:10:519:11 | vs | main.rs:520:11:520:12 | vs | +| main.rs:520:11:520:12 | [post] receiver for vs | main.rs:520:11:520:12 | [post] vs | +| main.rs:520:11:520:12 | [post] vs | main.rs:521:11:521:12 | vs | +| main.rs:520:11:520:12 | vs | main.rs:520:11:520:12 | receiver for vs | +| main.rs:520:11:520:12 | vs | main.rs:521:11:521:12 | vs | +| main.rs:520:11:520:19 | [post] receiver for vs.iter() | main.rs:520:11:520:19 | [post] vs.iter() | +| main.rs:520:11:520:19 | vs.iter() | main.rs:520:11:520:19 | receiver for vs.iter() | +| main.rs:520:11:520:26 | ... .next() | main.rs:520:11:520:26 | receiver for ... .next() | +| main.rs:520:11:520:26 | [post] receiver for ... .next() | main.rs:520:11:520:26 | [post] ... .next() | +| main.rs:520:11:520:35 | ... .unwrap() | main.rs:520:11:520:35 | receiver for ... .unwrap() | +| main.rs:520:11:520:35 | [post] receiver for ... .unwrap() | main.rs:520:11:520:35 | [post] ... .unwrap() | +| main.rs:521:11:521:12 | [post] receiver for vs | main.rs:521:11:521:12 | [post] vs | +| main.rs:521:11:521:12 | [post] vs | main.rs:523:14:523:15 | vs | +| main.rs:521:11:521:12 | vs | main.rs:521:11:521:12 | receiver for vs | +| main.rs:521:11:521:12 | vs | main.rs:523:14:523:15 | vs | +| main.rs:521:11:521:19 | [post] receiver for vs.iter() | main.rs:521:11:521:19 | [post] vs.iter() | +| main.rs:521:11:521:19 | vs.iter() | main.rs:521:11:521:19 | receiver for vs.iter() | +| main.rs:521:11:521:26 | ... .nth(...) | main.rs:521:11:521:26 | receiver for ... .nth(...) | +| main.rs:521:11:521:26 | [post] receiver for ... .nth(...) | main.rs:521:11:521:26 | [post] ... .nth(...) | +| main.rs:521:11:521:35 | ... .unwrap() | main.rs:521:11:521:35 | receiver for ... .unwrap() | +| main.rs:521:11:521:35 | [post] receiver for ... .unwrap() | main.rs:521:11:521:35 | [post] ... .unwrap() | +| main.rs:523:9:523:9 | [SSA] v | main.rs:524:14:524:14 | v | +| main.rs:523:9:523:9 | v | main.rs:523:9:523:9 | [SSA] v | +| main.rs:523:9:523:9 | v | main.rs:523:9:523:9 | v | +| main.rs:523:14:523:15 | vs | main.rs:526:15:526:16 | vs | +| main.rs:526:10:526:10 | [SSA] v | main.rs:527:14:527:14 | v | +| main.rs:526:10:526:10 | v | main.rs:526:10:526:10 | [SSA] v | +| main.rs:526:10:526:10 | v | main.rs:526:10:526:10 | v | +| main.rs:526:15:526:16 | [post] receiver for vs | main.rs:526:15:526:16 | [post] vs | +| main.rs:526:15:526:16 | [post] vs | main.rs:530:26:530:27 | vs | +| main.rs:526:15:526:16 | vs | main.rs:526:15:526:16 | receiver for vs | +| main.rs:526:15:526:16 | vs | main.rs:530:26:530:27 | vs | +| main.rs:530:9:530:11 | [SSA] vs2 | main.rs:531:15:531:17 | vs2 | +| main.rs:530:9:530:11 | vs2 | main.rs:530:9:530:11 | [SSA] vs2 | +| main.rs:530:9:530:11 | vs2 | main.rs:530:9:530:11 | vs2 | +| main.rs:530:26:530:27 | [post] receiver for vs | main.rs:530:26:530:27 | [post] vs | +| main.rs:530:26:530:27 | [post] vs | main.rs:535:5:535:6 | vs | +| main.rs:530:26:530:27 | vs | main.rs:530:26:530:27 | receiver for vs | +| main.rs:530:26:530:27 | vs | main.rs:535:5:535:6 | vs | +| main.rs:530:26:530:34 | [post] receiver for vs.iter() | main.rs:530:26:530:34 | [post] vs.iter() | +| main.rs:530:26:530:34 | vs.iter() | main.rs:530:26:530:34 | receiver for vs.iter() | +| main.rs:530:26:530:44 | ... .collect() | main.rs:530:9:530:11 | vs2 | +| main.rs:531:10:531:10 | [SSA] v | main.rs:532:14:532:14 | v | +| main.rs:531:10:531:10 | v | main.rs:531:10:531:10 | [SSA] v | +| main.rs:531:10:531:10 | v | main.rs:531:10:531:10 | v | +| main.rs:535:5:535:6 | [post] receiver for vs | main.rs:535:5:535:6 | [post] vs | +| main.rs:535:5:535:6 | [post] vs | main.rs:536:5:536:6 | vs | +| main.rs:535:5:535:6 | vs | main.rs:535:5:535:6 | receiver for vs | +| main.rs:535:5:535:6 | vs | main.rs:536:5:536:6 | vs | +| main.rs:535:5:535:13 | [post] receiver for vs.iter() | main.rs:535:5:535:13 | [post] vs.iter() | +| main.rs:535:5:535:13 | vs.iter() | main.rs:535:5:535:13 | receiver for vs.iter() | +| main.rs:535:20:535:20 | ... | main.rs:535:20:535:20 | x | +| main.rs:535:20:535:20 | [SSA] x | main.rs:535:29:535:29 | x | +| main.rs:535:20:535:20 | x | main.rs:535:20:535:20 | [SSA] x | +| main.rs:535:20:535:20 | x | main.rs:535:20:535:20 | x | +| main.rs:535:29:535:29 | [post] receiver for x | main.rs:535:29:535:29 | [post] x | +| main.rs:535:29:535:29 | x | main.rs:535:29:535:29 | receiver for x | +| main.rs:536:5:536:6 | [post] receiver for vs | main.rs:536:5:536:6 | [post] vs | +| main.rs:536:5:536:6 | [post] vs | main.rs:538:14:538:15 | vs | +| main.rs:536:5:536:6 | vs | main.rs:536:5:536:6 | receiver for vs | +| main.rs:536:5:536:6 | vs | main.rs:538:14:538:15 | vs | +| main.rs:536:5:536:13 | [post] receiver for vs.iter() | main.rs:536:5:536:13 | [post] vs.iter() | +| main.rs:536:5:536:13 | vs.iter() | main.rs:536:5:536:13 | receiver for vs.iter() | +| main.rs:536:25:536:25 | ... | main.rs:536:25:536:25 | x | +| main.rs:536:25:536:25 | [SSA] x | main.rs:536:34:536:34 | x | +| main.rs:536:25:536:25 | x | main.rs:536:25:536:25 | [SSA] x | +| main.rs:536:25:536:25 | x | main.rs:536:25:536:25 | x | +| main.rs:536:34:536:34 | [post] receiver for x | main.rs:536:34:536:34 | [post] x | +| main.rs:536:34:536:34 | x | main.rs:536:34:536:34 | receiver for x | +| main.rs:538:9:538:9 | [SSA] v | main.rs:539:14:539:14 | v | +| main.rs:538:9:538:9 | v | main.rs:538:9:538:9 | [SSA] v | +| main.rs:538:9:538:9 | v | main.rs:538:9:538:9 | v | +| main.rs:538:14:538:15 | [post] receiver for vs | main.rs:538:14:538:15 | [post] vs | +| main.rs:538:14:538:15 | vs | main.rs:538:14:538:15 | receiver for vs | +| main.rs:542:9:542:18 | mut vs_mut | main.rs:542:13:542:18 | vs_mut | +| main.rs:542:13:542:18 | [SSA] vs_mut | main.rs:544:10:544:15 | vs_mut | +| main.rs:542:13:542:18 | vs_mut | main.rs:542:13:542:18 | [SSA] vs_mut | +| main.rs:542:22:542:42 | [...] | main.rs:542:9:542:18 | mut vs_mut | +| main.rs:544:10:544:15 | [post] vs_mut | main.rs:545:11:545:16 | [SSA] vs_mut | +| main.rs:544:10:544:15 | [post] vs_mut | main.rs:545:11:545:16 | vs_mut | +| main.rs:544:10:544:15 | vs_mut | main.rs:545:11:545:16 | [SSA] vs_mut | +| main.rs:544:10:544:15 | vs_mut | main.rs:545:11:545:16 | vs_mut | +| main.rs:545:11:545:16 | [SSA] vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut | +| main.rs:545:11:545:16 | [SSA] vs_mut | main.rs:546:11:546:16 | vs_mut | +| main.rs:545:11:545:16 | [post] receiver for vs_mut | main.rs:545:11:545:16 | [post] vs_mut | +| main.rs:545:11:545:16 | [post] vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut | +| main.rs:545:11:545:16 | [post] vs_mut | main.rs:546:11:546:16 | vs_mut | +| main.rs:545:11:545:16 | vs_mut | main.rs:545:11:545:16 | receiver for vs_mut | +| main.rs:545:11:545:16 | vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut | +| main.rs:545:11:545:16 | vs_mut | main.rs:546:11:546:16 | vs_mut | +| main.rs:545:11:545:23 | [post] receiver for vs_mut.iter() | main.rs:545:11:545:23 | [post] vs_mut.iter() | +| main.rs:545:11:545:23 | vs_mut.iter() | main.rs:545:11:545:23 | receiver for vs_mut.iter() | +| main.rs:545:11:545:30 | ... .next() | main.rs:545:11:545:30 | receiver for ... .next() | +| main.rs:545:11:545:30 | [post] receiver for ... .next() | main.rs:545:11:545:30 | [post] ... .next() | +| main.rs:545:11:545:39 | ... .unwrap() | main.rs:545:11:545:39 | receiver for ... .unwrap() | +| main.rs:545:11:545:39 | [post] receiver for ... .unwrap() | main.rs:545:11:545:39 | [post] ... .unwrap() | +| main.rs:546:11:546:16 | [SSA] vs_mut | main.rs:548:19:548:24 | vs_mut | +| main.rs:546:11:546:16 | [post] receiver for vs_mut | main.rs:546:11:546:16 | [post] vs_mut | +| main.rs:546:11:546:16 | [post] vs_mut | main.rs:548:19:548:24 | vs_mut | +| main.rs:546:11:546:16 | vs_mut | main.rs:546:11:546:16 | receiver for vs_mut | +| main.rs:546:11:546:16 | vs_mut | main.rs:548:19:548:24 | vs_mut | +| main.rs:546:11:546:23 | [post] receiver for vs_mut.iter() | main.rs:546:11:546:23 | [post] vs_mut.iter() | +| main.rs:546:11:546:23 | vs_mut.iter() | main.rs:546:11:546:23 | receiver for vs_mut.iter() | +| main.rs:546:11:546:30 | ... .nth(...) | main.rs:546:11:546:30 | receiver for ... .nth(...) | +| main.rs:546:11:546:30 | [post] receiver for ... .nth(...) | main.rs:546:11:546:30 | [post] ... .nth(...) | +| main.rs:546:11:546:39 | ... .unwrap() | main.rs:546:11:546:39 | receiver for ... .unwrap() | +| main.rs:546:11:546:39 | [post] receiver for ... .unwrap() | main.rs:546:11:546:39 | [post] ... .unwrap() | +| main.rs:548:5:550:5 | for ... in ... { ... } | main.rs:516:16:551:1 | { ... } | +| main.rs:548:14:548:14 | [SSA] v | main.rs:549:14:549:14 | v | +| main.rs:548:14:548:14 | v | main.rs:548:14:548:14 | [SSA] v | +| main.rs:548:14:548:14 | v | main.rs:548:14:548:14 | v | +| main.rs:548:19:548:24 | [post] receiver for vs_mut | main.rs:548:19:548:24 | [post] vs_mut | +| main.rs:548:19:548:24 | vs_mut | main.rs:548:19:548:24 | receiver for vs_mut | +| main.rs:554:9:554:9 | [SSA] a | main.rs:559:10:559:10 | a | | main.rs:554:9:554:9 | a | main.rs:554:9:554:9 | [SSA] a | | main.rs:554:9:554:9 | a | main.rs:554:9:554:9 | a | -| main.rs:554:18:554:27 | source(...) | main.rs:554:9:554:9 | a | -| main.rs:556:10:556:10 | [post] a | main.rs:557:10:557:10 | a | -| main.rs:556:10:556:10 | a | main.rs:557:10:557:10 | a | -| main.rs:557:10:557:10 | [post] a | main.rs:558:20:558:20 | a | -| main.rs:557:10:557:10 | [post] receiver for a | main.rs:557:10:557:10 | [post] a | -| main.rs:557:10:557:10 | a | main.rs:557:10:557:10 | receiver for a | -| main.rs:557:10:557:10 | a | main.rs:558:20:558:20 | a | -| main.rs:560:9:560:9 | [SSA] b | main.rs:562:10:562:10 | b | -| main.rs:560:9:560:9 | b | main.rs:560:9:560:9 | [SSA] b | -| main.rs:560:9:560:9 | b | main.rs:560:9:560:9 | b | -| main.rs:560:18:560:34 | ... as i32 | main.rs:560:9:560:9 | b | -| main.rs:562:10:562:10 | [post] b | main.rs:563:10:563:10 | b | -| main.rs:562:10:562:10 | b | main.rs:563:10:563:10 | b | -| main.rs:563:10:563:10 | [post] b | main.rs:564:20:564:20 | b | -| main.rs:563:10:563:10 | [post] receiver for b | main.rs:563:10:563:10 | [post] b | -| main.rs:563:10:563:10 | b | main.rs:563:10:563:10 | receiver for b | -| main.rs:563:10:563:10 | b | main.rs:564:20:564:20 | b | -| main.rs:592:13:592:33 | result_questionmark(...) | main.rs:592:9:592:9 | _ | -| main.rs:604:36:604:39 | ...::new(...) | main.rs:604:36:604:41 | MacroExpr | -| main.rs:604:36:604:41 | [post] MacroExpr | main.rs:604:36:604:39 | [post] ...::new(...) | +| main.rs:554:13:554:22 | source(...) | main.rs:554:9:554:9 | a | +| main.rs:555:9:555:9 | [SSA] b | main.rs:560:15:560:15 | b | +| main.rs:555:9:555:9 | b | main.rs:555:9:555:9 | [SSA] b | +| main.rs:555:9:555:9 | b | main.rs:555:9:555:9 | b | +| main.rs:555:13:555:22 | source(...) | main.rs:555:9:555:9 | b | +| main.rs:556:9:556:9 | [SSA] c | main.rs:557:18:557:18 | c | +| main.rs:556:9:556:9 | c | main.rs:556:9:556:9 | [SSA] c | +| main.rs:556:9:556:9 | c | main.rs:556:9:556:9 | c | +| main.rs:556:13:556:22 | source(...) | main.rs:556:9:556:9 | c | +| main.rs:557:9:557:13 | [SSA] c_ref | main.rs:561:14:561:18 | c_ref | +| main.rs:557:9:557:13 | c_ref | main.rs:557:9:557:13 | [SSA] c_ref | +| main.rs:557:9:557:13 | c_ref | main.rs:557:9:557:13 | c_ref | +| main.rs:557:17:557:18 | &c | main.rs:557:9:557:13 | c_ref | +| main.rs:561:14:561:18 | [post] c_ref | main.rs:562:11:562:15 | c_ref | +| main.rs:561:14:561:18 | c_ref | main.rs:562:11:562:15 | c_ref | +| main.rs:562:11:562:15 | [post] receiver for c_ref | main.rs:562:11:562:15 | [post] c_ref | +| main.rs:562:11:562:15 | c_ref | main.rs:562:11:562:15 | receiver for c_ref | +| main.rs:566:9:566:9 | [SSA] a | main.rs:568:10:568:10 | a | +| main.rs:566:9:566:9 | a | main.rs:566:9:566:9 | [SSA] a | +| main.rs:566:9:566:9 | a | main.rs:566:9:566:9 | a | +| main.rs:566:18:566:27 | source(...) | main.rs:566:9:566:9 | a | +| main.rs:568:10:568:10 | [post] a | main.rs:569:10:569:10 | a | +| main.rs:568:10:568:10 | a | main.rs:569:10:569:10 | a | +| main.rs:569:10:569:10 | [post] a | main.rs:570:20:570:20 | a | +| main.rs:569:10:569:10 | [post] receiver for a | main.rs:569:10:569:10 | [post] a | +| main.rs:569:10:569:10 | a | main.rs:569:10:569:10 | receiver for a | +| main.rs:569:10:569:10 | a | main.rs:570:20:570:20 | a | +| main.rs:572:9:572:9 | [SSA] b | main.rs:574:10:574:10 | b | +| main.rs:572:9:572:9 | b | main.rs:572:9:572:9 | [SSA] b | +| main.rs:572:9:572:9 | b | main.rs:572:9:572:9 | b | +| main.rs:572:18:572:34 | ... as i32 | main.rs:572:9:572:9 | b | +| main.rs:574:10:574:10 | [post] b | main.rs:575:10:575:10 | b | +| main.rs:574:10:574:10 | b | main.rs:575:10:575:10 | b | +| main.rs:575:10:575:10 | [post] b | main.rs:576:20:576:20 | b | +| main.rs:575:10:575:10 | [post] receiver for b | main.rs:575:10:575:10 | [post] b | +| main.rs:575:10:575:10 | b | main.rs:575:10:575:10 | receiver for b | +| main.rs:575:10:575:10 | b | main.rs:576:20:576:20 | b | +| main.rs:604:13:604:33 | result_questionmark(...) | main.rs:604:9:604:9 | _ | +| main.rs:616:36:616:39 | ...::new(...) | main.rs:616:36:616:41 | MacroExpr | +| main.rs:616:36:616:41 | [post] MacroExpr | main.rs:616:36:616:39 | [post] ...::new(...) | readStep | main.rs:50:9:50:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:50:14:50:14 | _ | -| main.rs:104:11:104:11 | [post] receiver for i | file://:0:0:0:0 | &ref | main.rs:104:11:104:11 | [post] i | -| main.rs:104:11:104:11 | i | file://:0:0:0:0 | &ref | main.rs:104:10:104:11 | * ... | -| main.rs:112:10:112:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:112:10:112:12 | a.0 | -| main.rs:113:10:113:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:113:10:113:12 | a.1 | -| main.rs:118:9:118:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:118:10:118:11 | a0 | -| main.rs:118:9:118:20 | TuplePat | file://:0:0:0:0 | tuple.1 | main.rs:118:14:118:15 | a1 | -| main.rs:118:9:118:20 | TuplePat | file://:0:0:0:0 | tuple.2 | main.rs:118:18:118:19 | a2 | -| main.rs:126:10:126:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:126:10:126:12 | a.0 | -| main.rs:127:10:127:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:127:10:127:12 | a.1 | -| main.rs:128:5:128:5 | a | file://:0:0:0:0 | tuple.0 | main.rs:128:5:128:7 | a.0 | -| main.rs:129:5:129:5 | a | file://:0:0:0:0 | tuple.1 | main.rs:129:5:129:7 | a.1 | -| main.rs:130:10:130:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:130:10:130:12 | a.0 | -| main.rs:131:10:131:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:131:10:131:12 | a.1 | -| main.rs:137:10:137:10 | b | file://:0:0:0:0 | tuple.0 | main.rs:137:10:137:12 | b.0 | -| main.rs:137:10:137:12 | b.0 | file://:0:0:0:0 | tuple.0 | main.rs:137:10:137:15 | ... .0 | -| main.rs:138:10:138:10 | b | file://:0:0:0:0 | tuple.0 | main.rs:138:10:138:12 | b.0 | -| main.rs:138:10:138:12 | b.0 | file://:0:0:0:0 | tuple.1 | main.rs:138:10:138:15 | ... .1 | -| main.rs:139:10:139:10 | b | file://:0:0:0:0 | tuple.1 | main.rs:139:10:139:12 | b.1 | -| main.rs:152:10:152:10 | p | main.rs:146:5:146:10 | Point.x | main.rs:152:10:152:12 | p.x | -| main.rs:153:10:153:10 | p | main.rs:147:5:147:10 | Point.y | main.rs:153:10:153:12 | p.y | -| main.rs:158:10:158:10 | p | main.rs:147:5:147:10 | Point.y | main.rs:158:10:158:12 | p.y | -| main.rs:159:5:159:5 | p | main.rs:147:5:147:10 | Point.y | main.rs:159:5:159:7 | p.y | -| main.rs:160:10:160:10 | p | main.rs:147:5:147:10 | Point.y | main.rs:160:10:160:12 | p.y | -| main.rs:168:9:168:28 | Point {...} | main.rs:146:5:146:10 | Point.x | main.rs:168:20:168:20 | a | -| main.rs:168:9:168:28 | Point {...} | main.rs:147:5:147:10 | Point.y | main.rs:168:26:168:26 | b | -| main.rs:186:10:186:10 | p | main.rs:174:5:174:16 | Point3D.plane | main.rs:186:10:186:16 | p.plane | -| main.rs:186:10:186:16 | p.plane | main.rs:146:5:146:10 | Point.x | main.rs:186:10:186:18 | ... .x | -| main.rs:187:10:187:10 | p | main.rs:174:5:174:16 | Point3D.plane | main.rs:187:10:187:16 | p.plane | -| main.rs:187:10:187:16 | p.plane | main.rs:147:5:147:10 | Point.y | main.rs:187:10:187:18 | ... .y | -| main.rs:188:10:188:10 | p | main.rs:175:5:175:10 | Point3D.z | main.rs:188:10:188:12 | p.z | -| main.rs:198:9:201:9 | Point3D {...} | main.rs:174:5:174:16 | Point3D.plane | main.rs:199:20:199:33 | Point {...} | -| main.rs:198:9:201:9 | Point3D {...} | main.rs:175:5:175:10 | Point3D.z | main.rs:200:13:200:13 | z | -| main.rs:199:20:199:33 | Point {...} | main.rs:146:5:146:10 | Point.x | main.rs:199:28:199:28 | x | -| main.rs:199:20:199:33 | Point {...} | main.rs:147:5:147:10 | Point.y | main.rs:199:31:199:31 | y | -| main.rs:213:10:213:10 | s | file://:0:0:0:0 | tuple.0 | main.rs:213:10:213:12 | s.0 | -| main.rs:213:10:213:10 | s | main.rs:209:22:209:24 | MyTupleStruct(0) | main.rs:213:10:213:12 | s.0 | -| main.rs:214:10:214:10 | s | file://:0:0:0:0 | tuple.1 | main.rs:214:10:214:12 | s.1 | -| main.rs:214:10:214:10 | s | main.rs:209:27:209:29 | MyTupleStruct(1) | main.rs:214:10:214:12 | s.1 | -| main.rs:217:9:217:27 | MyTupleStruct(...) | main.rs:209:22:209:24 | MyTupleStruct(0) | main.rs:217:23:217:23 | x | -| main.rs:217:9:217:27 | MyTupleStruct(...) | main.rs:209:27:209:29 | MyTupleStruct(1) | main.rs:217:26:217:26 | y | -| main.rs:231:9:231:23 | ...::Some(...) | {EXTERNAL LOCATION} | Some | main.rs:231:22:231:22 | n | -| main.rs:235:9:235:23 | ...::Some(...) | {EXTERNAL LOCATION} | Some | main.rs:235:22:235:22 | n | -| main.rs:244:9:244:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:244:14:244:14 | n | -| main.rs:248:9:248:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:248:14:248:14 | n | -| main.rs:255:12:255:18 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:255:17:255:17 | n | -| main.rs:289:14:289:15 | s1 | {EXTERNAL LOCATION} | Some | main.rs:289:14:289:16 | TryExpr | -| main.rs:289:14:289:15 | s1 | {EXTERNAL LOCATION} | Ok | main.rs:289:14:289:16 | TryExpr | -| main.rs:291:10:291:11 | s2 | {EXTERNAL LOCATION} | Some | main.rs:291:10:291:12 | TryExpr | -| main.rs:291:10:291:11 | s2 | {EXTERNAL LOCATION} | Ok | main.rs:291:10:291:12 | TryExpr | -| main.rs:313:14:313:15 | s1 | {EXTERNAL LOCATION} | Some | main.rs:313:14:313:16 | TryExpr | -| main.rs:313:14:313:15 | s1 | {EXTERNAL LOCATION} | Ok | main.rs:313:14:313:16 | TryExpr | -| main.rs:314:14:314:15 | s2 | {EXTERNAL LOCATION} | Some | main.rs:314:14:314:16 | TryExpr | -| main.rs:314:14:314:15 | s2 | {EXTERNAL LOCATION} | Ok | main.rs:314:14:314:16 | TryExpr | -| main.rs:317:14:317:15 | s3 | {EXTERNAL LOCATION} | Some | main.rs:317:14:317:16 | TryExpr | -| main.rs:317:14:317:15 | s3 | {EXTERNAL LOCATION} | Ok | main.rs:317:14:317:16 | TryExpr | -| main.rs:341:9:341:25 | ...::A(...) | main.rs:333:7:333:9 | A | main.rs:341:24:341:24 | n | -| main.rs:342:9:342:25 | ...::B(...) | main.rs:334:7:334:9 | B | main.rs:342:24:342:24 | n | -| main.rs:345:9:345:25 | ...::A(...) | main.rs:333:7:333:9 | A | main.rs:345:24:345:24 | n | -| main.rs:345:29:345:45 | ...::B(...) | main.rs:334:7:334:9 | B | main.rs:345:44:345:44 | n | -| main.rs:348:9:348:25 | ...::A(...) | main.rs:333:7:333:9 | A | main.rs:348:24:348:24 | n | -| main.rs:349:9:349:25 | ...::B(...) | main.rs:334:7:334:9 | B | main.rs:349:24:349:24 | n | -| main.rs:359:9:359:12 | A(...) | main.rs:333:7:333:9 | A | main.rs:359:11:359:11 | n | -| main.rs:360:9:360:12 | B(...) | main.rs:334:7:334:9 | B | main.rs:360:11:360:11 | n | -| main.rs:363:9:363:12 | A(...) | main.rs:333:7:333:9 | A | main.rs:363:11:363:11 | n | -| main.rs:363:16:363:19 | B(...) | main.rs:334:7:334:9 | B | main.rs:363:18:363:18 | n | -| main.rs:366:9:366:12 | A(...) | main.rs:333:7:333:9 | A | main.rs:366:11:366:11 | n | -| main.rs:367:9:367:12 | B(...) | main.rs:334:7:334:9 | B | main.rs:367:11:367:11 | n | -| main.rs:382:9:382:38 | ...::C {...} | main.rs:372:9:372:20 | C | main.rs:382:36:382:36 | n | -| main.rs:383:9:383:38 | ...::D {...} | main.rs:373:9:373:20 | D | main.rs:383:36:383:36 | n | -| main.rs:386:9:386:38 | ...::C {...} | main.rs:372:9:372:20 | C | main.rs:386:36:386:36 | n | -| main.rs:386:42:386:71 | ...::D {...} | main.rs:373:9:373:20 | D | main.rs:386:69:386:69 | n | -| main.rs:389:9:389:38 | ...::C {...} | main.rs:372:9:372:20 | C | main.rs:389:36:389:36 | n | -| main.rs:390:9:390:38 | ...::D {...} | main.rs:373:9:373:20 | D | main.rs:390:36:390:36 | n | -| main.rs:402:9:402:24 | C {...} | main.rs:372:9:372:20 | C | main.rs:402:22:402:22 | n | -| main.rs:403:9:403:24 | D {...} | main.rs:373:9:373:20 | D | main.rs:403:22:403:22 | n | -| main.rs:406:9:406:24 | C {...} | main.rs:372:9:372:20 | C | main.rs:406:22:406:22 | n | -| main.rs:406:28:406:43 | D {...} | main.rs:373:9:373:20 | D | main.rs:406:41:406:41 | n | -| main.rs:409:9:409:24 | C {...} | main.rs:372:9:372:20 | C | main.rs:409:22:409:22 | n | -| main.rs:410:9:410:24 | D {...} | main.rs:373:9:373:20 | D | main.rs:410:22:410:22 | n | -| main.rs:419:14:419:17 | arr1 | file://:0:0:0:0 | element | main.rs:419:14:419:20 | arr1[2] | -| main.rs:423:14:423:17 | arr2 | file://:0:0:0:0 | element | main.rs:423:14:423:20 | arr2[4] | -| main.rs:427:14:427:17 | arr3 | file://:0:0:0:0 | element | main.rs:427:14:427:20 | arr3[2] | -| main.rs:433:15:433:18 | arr1 | file://:0:0:0:0 | element | main.rs:433:9:433:10 | n1 | -| main.rs:438:15:438:18 | arr2 | file://:0:0:0:0 | element | main.rs:438:9:438:10 | n2 | -| main.rs:446:9:446:17 | SlicePat | file://:0:0:0:0 | element | main.rs:446:10:446:10 | a | -| main.rs:446:9:446:17 | SlicePat | file://:0:0:0:0 | element | main.rs:446:13:446:13 | b | -| main.rs:446:9:446:17 | SlicePat | file://:0:0:0:0 | element | main.rs:446:16:446:16 | c | -| main.rs:456:10:456:16 | mut_arr | file://:0:0:0:0 | element | main.rs:456:10:456:19 | mut_arr[1] | -| main.rs:458:5:458:11 | mut_arr | file://:0:0:0:0 | element | main.rs:458:5:458:14 | mut_arr[1] | -| main.rs:459:13:459:19 | mut_arr | file://:0:0:0:0 | element | main.rs:459:13:459:22 | mut_arr[1] | -| main.rs:461:10:461:16 | mut_arr | file://:0:0:0:0 | element | main.rs:461:10:461:19 | mut_arr[0] | -| main.rs:468:9:468:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:468:10:468:13 | cond | -| main.rs:468:9:468:20 | TuplePat | file://:0:0:0:0 | tuple.1 | main.rs:468:16:468:19 | name | -| main.rs:468:25:468:29 | names | file://:0:0:0:0 | element | main.rs:468:9:468:20 | TuplePat | -| main.rs:470:41:470:67 | [post] \|...\| ... | main.rs:467:9:467:20 | captured default_name | main.rs:470:41:470:67 | [post] default_name | -| main.rs:470:44:470:55 | this | main.rs:467:9:467:20 | captured default_name | main.rs:470:44:470:55 | default_name | -| main.rs:471:18:471:18 | [post] receiver for n | file://:0:0:0:0 | &ref | main.rs:471:18:471:18 | [post] n | -| main.rs:495:13:495:13 | [post] receiver for b | file://:0:0:0:0 | &ref | main.rs:495:13:495:13 | [post] b | -| main.rs:496:18:496:18 | [post] receiver for b | file://:0:0:0:0 | &ref | main.rs:496:18:496:18 | [post] b | -| main.rs:507:10:507:11 | vs | file://:0:0:0:0 | element | main.rs:507:10:507:14 | vs[0] | -| main.rs:508:11:508:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:508:10:508:35 | * ... | -| main.rs:509:11:509:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:509:10:509:35 | * ... | -| main.rs:511:14:511:15 | vs | file://:0:0:0:0 | element | main.rs:511:9:511:9 | v | -| main.rs:514:9:514:10 | &... | file://:0:0:0:0 | &ref | main.rs:514:10:514:10 | v | -| main.rs:514:15:514:23 | vs.iter() | file://:0:0:0:0 | element | main.rs:514:9:514:10 | &... | -| main.rs:519:9:519:10 | &... | file://:0:0:0:0 | &ref | main.rs:519:10:519:10 | v | -| main.rs:519:15:519:17 | vs2 | file://:0:0:0:0 | element | main.rs:519:9:519:10 | &... | -| main.rs:523:29:523:29 | x | file://:0:0:0:0 | &ref | main.rs:523:28:523:29 | * ... | -| main.rs:524:34:524:34 | x | file://:0:0:0:0 | &ref | main.rs:524:33:524:34 | * ... | -| main.rs:526:14:526:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:526:9:526:9 | v | -| main.rs:532:10:532:15 | vs_mut | file://:0:0:0:0 | element | main.rs:532:10:532:18 | vs_mut[0] | -| main.rs:533:11:533:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:533:10:533:39 | * ... | -| main.rs:534:11:534:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:534:10:534:39 | * ... | -| main.rs:536:9:536:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:536:14:536:14 | v | -| main.rs:536:19:536:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:536:9:536:14 | &mut ... | -| main.rs:550:11:550:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:550:10:550:15 | * ... | +| main.rs:116:11:116:11 | [post] receiver for i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | [post] i | +| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... | +| main.rs:124:10:124:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:124:10:124:12 | a.0 | +| main.rs:125:10:125:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:125:10:125:12 | a.1 | +| main.rs:130:9:130:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:130:10:130:11 | a0 | +| main.rs:130:9:130:20 | TuplePat | file://:0:0:0:0 | tuple.1 | main.rs:130:14:130:15 | a1 | +| main.rs:130:9:130:20 | TuplePat | file://:0:0:0:0 | tuple.2 | main.rs:130:18:130:19 | a2 | +| main.rs:138:10:138:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:138:10:138:12 | a.0 | +| main.rs:139:10:139:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:139:10:139:12 | a.1 | +| main.rs:140:5:140:5 | a | file://:0:0:0:0 | tuple.0 | main.rs:140:5:140:7 | a.0 | +| main.rs:141:5:141:5 | a | file://:0:0:0:0 | tuple.1 | main.rs:141:5:141:7 | a.1 | +| main.rs:142:10:142:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:142:10:142:12 | a.0 | +| main.rs:143:10:143:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:143:10:143:12 | a.1 | +| main.rs:149:10:149:10 | b | file://:0:0:0:0 | tuple.0 | main.rs:149:10:149:12 | b.0 | +| main.rs:149:10:149:12 | b.0 | file://:0:0:0:0 | tuple.0 | main.rs:149:10:149:15 | ... .0 | +| main.rs:150:10:150:10 | b | file://:0:0:0:0 | tuple.0 | main.rs:150:10:150:12 | b.0 | +| main.rs:150:10:150:12 | b.0 | file://:0:0:0:0 | tuple.1 | main.rs:150:10:150:15 | ... .1 | +| main.rs:151:10:151:10 | b | file://:0:0:0:0 | tuple.1 | main.rs:151:10:151:12 | b.1 | +| main.rs:164:10:164:10 | p | main.rs:158:5:158:10 | Point.x | main.rs:164:10:164:12 | p.x | +| main.rs:165:10:165:10 | p | main.rs:159:5:159:10 | Point.y | main.rs:165:10:165:12 | p.y | +| main.rs:170:10:170:10 | p | main.rs:159:5:159:10 | Point.y | main.rs:170:10:170:12 | p.y | +| main.rs:171:5:171:5 | p | main.rs:159:5:159:10 | Point.y | main.rs:171:5:171:7 | p.y | +| main.rs:172:10:172:10 | p | main.rs:159:5:159:10 | Point.y | main.rs:172:10:172:12 | p.y | +| main.rs:180:9:180:28 | Point {...} | main.rs:158:5:158:10 | Point.x | main.rs:180:20:180:20 | a | +| main.rs:180:9:180:28 | Point {...} | main.rs:159:5:159:10 | Point.y | main.rs:180:26:180:26 | b | +| main.rs:198:10:198:10 | p | main.rs:186:5:186:16 | Point3D.plane | main.rs:198:10:198:16 | p.plane | +| main.rs:198:10:198:16 | p.plane | main.rs:158:5:158:10 | Point.x | main.rs:198:10:198:18 | ... .x | +| main.rs:199:10:199:10 | p | main.rs:186:5:186:16 | Point3D.plane | main.rs:199:10:199:16 | p.plane | +| main.rs:199:10:199:16 | p.plane | main.rs:159:5:159:10 | Point.y | main.rs:199:10:199:18 | ... .y | +| main.rs:200:10:200:10 | p | main.rs:187:5:187:10 | Point3D.z | main.rs:200:10:200:12 | p.z | +| main.rs:210:9:213:9 | Point3D {...} | main.rs:186:5:186:16 | Point3D.plane | main.rs:211:20:211:33 | Point {...} | +| main.rs:210:9:213:9 | Point3D {...} | main.rs:187:5:187:10 | Point3D.z | main.rs:212:13:212:13 | z | +| main.rs:211:20:211:33 | Point {...} | main.rs:158:5:158:10 | Point.x | main.rs:211:28:211:28 | x | +| main.rs:211:20:211:33 | Point {...} | main.rs:159:5:159:10 | Point.y | main.rs:211:31:211:31 | y | +| main.rs:225:10:225:10 | s | file://:0:0:0:0 | tuple.0 | main.rs:225:10:225:12 | s.0 | +| main.rs:225:10:225:10 | s | main.rs:221:22:221:24 | MyTupleStruct(0) | main.rs:225:10:225:12 | s.0 | +| main.rs:226:10:226:10 | s | file://:0:0:0:0 | tuple.1 | main.rs:226:10:226:12 | s.1 | +| main.rs:226:10:226:10 | s | main.rs:221:27:221:29 | MyTupleStruct(1) | main.rs:226:10:226:12 | s.1 | +| main.rs:229:9:229:27 | MyTupleStruct(...) | main.rs:221:22:221:24 | MyTupleStruct(0) | main.rs:229:23:229:23 | x | +| main.rs:229:9:229:27 | MyTupleStruct(...) | main.rs:221:27:221:29 | MyTupleStruct(1) | main.rs:229:26:229:26 | y | +| main.rs:243:9:243:23 | ...::Some(...) | {EXTERNAL LOCATION} | Some | main.rs:243:22:243:22 | n | +| main.rs:247:9:247:23 | ...::Some(...) | {EXTERNAL LOCATION} | Some | main.rs:247:22:247:22 | n | +| main.rs:256:9:256:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:256:14:256:14 | n | +| main.rs:260:9:260:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:260:14:260:14 | n | +| main.rs:267:12:267:18 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:267:17:267:17 | n | +| main.rs:301:14:301:15 | s1 | {EXTERNAL LOCATION} | Some | main.rs:301:14:301:16 | TryExpr | +| main.rs:301:14:301:15 | s1 | {EXTERNAL LOCATION} | Ok | main.rs:301:14:301:16 | TryExpr | +| main.rs:303:10:303:11 | s2 | {EXTERNAL LOCATION} | Some | main.rs:303:10:303:12 | TryExpr | +| main.rs:303:10:303:11 | s2 | {EXTERNAL LOCATION} | Ok | main.rs:303:10:303:12 | TryExpr | +| main.rs:325:14:325:15 | s1 | {EXTERNAL LOCATION} | Some | main.rs:325:14:325:16 | TryExpr | +| main.rs:325:14:325:15 | s1 | {EXTERNAL LOCATION} | Ok | main.rs:325:14:325:16 | TryExpr | +| main.rs:326:14:326:15 | s2 | {EXTERNAL LOCATION} | Some | main.rs:326:14:326:16 | TryExpr | +| main.rs:326:14:326:15 | s2 | {EXTERNAL LOCATION} | Ok | main.rs:326:14:326:16 | TryExpr | +| main.rs:329:14:329:15 | s3 | {EXTERNAL LOCATION} | Some | main.rs:329:14:329:16 | TryExpr | +| main.rs:329:14:329:15 | s3 | {EXTERNAL LOCATION} | Ok | main.rs:329:14:329:16 | TryExpr | +| main.rs:353:9:353:25 | ...::A(...) | main.rs:345:7:345:9 | A | main.rs:353:24:353:24 | n | +| main.rs:354:9:354:25 | ...::B(...) | main.rs:346:7:346:9 | B | main.rs:354:24:354:24 | n | +| main.rs:357:9:357:25 | ...::A(...) | main.rs:345:7:345:9 | A | main.rs:357:24:357:24 | n | +| main.rs:357:29:357:45 | ...::B(...) | main.rs:346:7:346:9 | B | main.rs:357:44:357:44 | n | +| main.rs:360:9:360:25 | ...::A(...) | main.rs:345:7:345:9 | A | main.rs:360:24:360:24 | n | +| main.rs:361:9:361:25 | ...::B(...) | main.rs:346:7:346:9 | B | main.rs:361:24:361:24 | n | +| main.rs:371:9:371:12 | A(...) | main.rs:345:7:345:9 | A | main.rs:371:11:371:11 | n | +| main.rs:372:9:372:12 | B(...) | main.rs:346:7:346:9 | B | main.rs:372:11:372:11 | n | +| main.rs:375:9:375:12 | A(...) | main.rs:345:7:345:9 | A | main.rs:375:11:375:11 | n | +| main.rs:375:16:375:19 | B(...) | main.rs:346:7:346:9 | B | main.rs:375:18:375:18 | n | +| main.rs:378:9:378:12 | A(...) | main.rs:345:7:345:9 | A | main.rs:378:11:378:11 | n | +| main.rs:379:9:379:12 | B(...) | main.rs:346:7:346:9 | B | main.rs:379:11:379:11 | n | +| main.rs:394:9:394:38 | ...::C {...} | main.rs:384:9:384:20 | C | main.rs:394:36:394:36 | n | +| main.rs:395:9:395:38 | ...::D {...} | main.rs:385:9:385:20 | D | main.rs:395:36:395:36 | n | +| main.rs:398:9:398:38 | ...::C {...} | main.rs:384:9:384:20 | C | main.rs:398:36:398:36 | n | +| main.rs:398:42:398:71 | ...::D {...} | main.rs:385:9:385:20 | D | main.rs:398:69:398:69 | n | +| main.rs:401:9:401:38 | ...::C {...} | main.rs:384:9:384:20 | C | main.rs:401:36:401:36 | n | +| main.rs:402:9:402:38 | ...::D {...} | main.rs:385:9:385:20 | D | main.rs:402:36:402:36 | n | +| main.rs:414:9:414:24 | C {...} | main.rs:384:9:384:20 | C | main.rs:414:22:414:22 | n | +| main.rs:415:9:415:24 | D {...} | main.rs:385:9:385:20 | D | main.rs:415:22:415:22 | n | +| main.rs:418:9:418:24 | C {...} | main.rs:384:9:384:20 | C | main.rs:418:22:418:22 | n | +| main.rs:418:28:418:43 | D {...} | main.rs:385:9:385:20 | D | main.rs:418:41:418:41 | n | +| main.rs:421:9:421:24 | C {...} | main.rs:384:9:384:20 | C | main.rs:421:22:421:22 | n | +| main.rs:422:9:422:24 | D {...} | main.rs:385:9:385:20 | D | main.rs:422:22:422:22 | n | +| main.rs:431:14:431:17 | arr1 | file://:0:0:0:0 | element | main.rs:431:14:431:20 | arr1[2] | +| main.rs:435:14:435:17 | arr2 | file://:0:0:0:0 | element | main.rs:435:14:435:20 | arr2[4] | +| main.rs:439:14:439:17 | arr3 | file://:0:0:0:0 | element | main.rs:439:14:439:20 | arr3[2] | +| main.rs:445:15:445:18 | arr1 | file://:0:0:0:0 | element | main.rs:445:9:445:10 | n1 | +| main.rs:450:15:450:18 | arr2 | file://:0:0:0:0 | element | main.rs:450:9:450:10 | n2 | +| main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:10:458:10 | a | +| main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:13:458:13 | b | +| main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:16:458:16 | c | +| main.rs:468:10:468:16 | mut_arr | file://:0:0:0:0 | element | main.rs:468:10:468:19 | mut_arr[1] | +| main.rs:470:5:470:11 | mut_arr | file://:0:0:0:0 | element | main.rs:470:5:470:14 | mut_arr[1] | +| main.rs:471:13:471:19 | mut_arr | file://:0:0:0:0 | element | main.rs:471:13:471:22 | mut_arr[1] | +| main.rs:473:10:473:16 | mut_arr | file://:0:0:0:0 | element | main.rs:473:10:473:19 | mut_arr[0] | +| main.rs:480:9:480:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:480:10:480:13 | cond | +| main.rs:480:9:480:20 | TuplePat | file://:0:0:0:0 | tuple.1 | main.rs:480:16:480:19 | name | +| main.rs:480:25:480:29 | names | file://:0:0:0:0 | element | main.rs:480:9:480:20 | TuplePat | +| main.rs:482:41:482:67 | [post] \|...\| ... | main.rs:479:9:479:20 | captured default_name | main.rs:482:41:482:67 | [post] default_name | +| main.rs:482:44:482:55 | this | main.rs:479:9:479:20 | captured default_name | main.rs:482:44:482:55 | default_name | +| main.rs:483:18:483:18 | [post] receiver for n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | [post] n | +| main.rs:507:13:507:13 | [post] receiver for b | file://:0:0:0:0 | &ref | main.rs:507:13:507:13 | [post] b | +| main.rs:508:18:508:18 | [post] receiver for b | file://:0:0:0:0 | &ref | main.rs:508:18:508:18 | [post] b | +| main.rs:519:10:519:11 | vs | file://:0:0:0:0 | element | main.rs:519:10:519:14 | vs[0] | +| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... | +| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... | +| main.rs:523:14:523:15 | vs | file://:0:0:0:0 | element | main.rs:523:9:523:9 | v | +| main.rs:526:9:526:10 | &... | file://:0:0:0:0 | &ref | main.rs:526:10:526:10 | v | +| main.rs:526:15:526:23 | vs.iter() | file://:0:0:0:0 | element | main.rs:526:9:526:10 | &... | +| main.rs:531:9:531:10 | &... | file://:0:0:0:0 | &ref | main.rs:531:10:531:10 | v | +| main.rs:531:15:531:17 | vs2 | file://:0:0:0:0 | element | main.rs:531:9:531:10 | &... | +| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... | +| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... | +| main.rs:538:14:538:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:538:9:538:9 | v | +| main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | element | main.rs:544:10:544:18 | vs_mut[0] | +| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... | +| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... | +| main.rs:548:9:548:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:548:14:548:14 | v | +| main.rs:548:19:548:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:548:9:548:14 | &mut ... | +| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... | storeStep -| main.rs:104:11:104:11 | i | file://:0:0:0:0 | &ref | main.rs:104:11:104:11 | receiver for i | -| main.rs:111:14:111:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:111:13:111:26 | TupleExpr | -| main.rs:111:25:111:25 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:111:13:111:26 | TupleExpr | -| main.rs:117:14:117:14 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:117:13:117:30 | TupleExpr | -| main.rs:117:17:117:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:117:13:117:30 | TupleExpr | -| main.rs:117:29:117:29 | 2 | file://:0:0:0:0 | tuple.2 | main.rs:117:13:117:30 | TupleExpr | -| main.rs:125:18:125:18 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:125:17:125:31 | TupleExpr | -| main.rs:125:21:125:30 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:125:17:125:31 | TupleExpr | -| main.rs:128:11:128:20 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:128:5:128:5 | [post] a | -| main.rs:129:11:129:11 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:129:5:129:5 | [post] a | -| main.rs:135:14:135:14 | 3 | file://:0:0:0:0 | tuple.0 | main.rs:135:13:135:27 | TupleExpr | -| main.rs:135:17:135:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:135:13:135:27 | TupleExpr | -| main.rs:136:14:136:14 | a | file://:0:0:0:0 | tuple.0 | main.rs:136:13:136:18 | TupleExpr | -| main.rs:136:17:136:17 | 3 | file://:0:0:0:0 | tuple.1 | main.rs:136:13:136:18 | TupleExpr | -| main.rs:151:24:151:32 | source(...) | main.rs:146:5:146:10 | Point.x | main.rs:151:13:151:40 | Point {...} | -| main.rs:151:38:151:38 | 2 | main.rs:147:5:147:10 | Point.y | main.rs:151:13:151:40 | Point {...} | -| main.rs:157:28:157:36 | source(...) | main.rs:146:5:146:10 | Point.x | main.rs:157:17:157:44 | Point {...} | -| main.rs:157:42:157:42 | 2 | main.rs:147:5:147:10 | Point.y | main.rs:157:17:157:44 | Point {...} | -| main.rs:159:11:159:20 | source(...) | main.rs:147:5:147:10 | Point.y | main.rs:159:5:159:5 | [post] p | -| main.rs:165:12:165:21 | source(...) | main.rs:146:5:146:10 | Point.x | main.rs:164:13:167:5 | Point {...} | -| main.rs:166:12:166:12 | 2 | main.rs:147:5:147:10 | Point.y | main.rs:164:13:167:5 | Point {...} | -| main.rs:180:16:183:9 | Point {...} | main.rs:174:5:174:16 | Point3D.plane | main.rs:179:13:185:5 | Point3D {...} | -| main.rs:181:16:181:16 | 2 | main.rs:146:5:146:10 | Point.x | main.rs:180:16:183:9 | Point {...} | -| main.rs:182:16:182:25 | source(...) | main.rs:147:5:147:10 | Point.y | main.rs:180:16:183:9 | Point {...} | -| main.rs:184:12:184:12 | 4 | main.rs:175:5:175:10 | Point3D.z | main.rs:179:13:185:5 | Point3D {...} | -| main.rs:194:16:194:32 | Point {...} | main.rs:174:5:174:16 | Point3D.plane | main.rs:193:13:196:5 | Point3D {...} | -| main.rs:194:27:194:27 | 2 | main.rs:146:5:146:10 | Point.x | main.rs:194:16:194:32 | Point {...} | -| main.rs:194:30:194:30 | y | main.rs:147:5:147:10 | Point.y | main.rs:194:16:194:32 | Point {...} | -| main.rs:195:12:195:12 | 4 | main.rs:175:5:175:10 | Point3D.z | main.rs:193:13:196:5 | Point3D {...} | -| main.rs:212:27:212:36 | source(...) | main.rs:209:22:209:24 | MyTupleStruct(0) | main.rs:212:13:212:40 | MyTupleStruct(...) | -| main.rs:212:39:212:39 | 2 | main.rs:209:27:209:29 | MyTupleStruct(1) | main.rs:212:13:212:40 | MyTupleStruct(...) | -| main.rs:228:27:228:36 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:228:14:228:37 | ...::Some(...) | -| main.rs:229:27:229:27 | 2 | {EXTERNAL LOCATION} | Some | main.rs:229:14:229:28 | ...::Some(...) | -| main.rs:241:19:241:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:241:14:241:29 | Some(...) | -| main.rs:242:19:242:19 | 2 | {EXTERNAL LOCATION} | Some | main.rs:242:14:242:20 | Some(...) | -| main.rs:254:19:254:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:254:14:254:29 | Some(...) | +| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | receiver for i | +| main.rs:123:14:123:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:123:13:123:26 | TupleExpr | +| main.rs:123:25:123:25 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:123:13:123:26 | TupleExpr | +| main.rs:129:14:129:14 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:129:13:129:30 | TupleExpr | +| main.rs:129:17:129:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:129:13:129:30 | TupleExpr | +| main.rs:129:29:129:29 | 2 | file://:0:0:0:0 | tuple.2 | main.rs:129:13:129:30 | TupleExpr | +| main.rs:137:18:137:18 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:137:17:137:31 | TupleExpr | +| main.rs:137:21:137:30 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:137:17:137:31 | TupleExpr | +| main.rs:140:11:140:20 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:140:5:140:5 | [post] a | +| main.rs:141:11:141:11 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:141:5:141:5 | [post] a | +| main.rs:147:14:147:14 | 3 | file://:0:0:0:0 | tuple.0 | main.rs:147:13:147:27 | TupleExpr | +| main.rs:147:17:147:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:147:13:147:27 | TupleExpr | +| main.rs:148:14:148:14 | a | file://:0:0:0:0 | tuple.0 | main.rs:148:13:148:18 | TupleExpr | +| main.rs:148:17:148:17 | 3 | file://:0:0:0:0 | tuple.1 | main.rs:148:13:148:18 | TupleExpr | +| main.rs:163:24:163:32 | source(...) | main.rs:158:5:158:10 | Point.x | main.rs:163:13:163:40 | Point {...} | +| main.rs:163:38:163:38 | 2 | main.rs:159:5:159:10 | Point.y | main.rs:163:13:163:40 | Point {...} | +| main.rs:169:28:169:36 | source(...) | main.rs:158:5:158:10 | Point.x | main.rs:169:17:169:44 | Point {...} | +| main.rs:169:42:169:42 | 2 | main.rs:159:5:159:10 | Point.y | main.rs:169:17:169:44 | Point {...} | +| main.rs:171:11:171:20 | source(...) | main.rs:159:5:159:10 | Point.y | main.rs:171:5:171:5 | [post] p | +| main.rs:177:12:177:21 | source(...) | main.rs:158:5:158:10 | Point.x | main.rs:176:13:179:5 | Point {...} | +| main.rs:178:12:178:12 | 2 | main.rs:159:5:159:10 | Point.y | main.rs:176:13:179:5 | Point {...} | +| main.rs:192:16:195:9 | Point {...} | main.rs:186:5:186:16 | Point3D.plane | main.rs:191:13:197:5 | Point3D {...} | +| main.rs:193:16:193:16 | 2 | main.rs:158:5:158:10 | Point.x | main.rs:192:16:195:9 | Point {...} | +| main.rs:194:16:194:25 | source(...) | main.rs:159:5:159:10 | Point.y | main.rs:192:16:195:9 | Point {...} | +| main.rs:196:12:196:12 | 4 | main.rs:187:5:187:10 | Point3D.z | main.rs:191:13:197:5 | Point3D {...} | +| main.rs:206:16:206:32 | Point {...} | main.rs:186:5:186:16 | Point3D.plane | main.rs:205:13:208:5 | Point3D {...} | +| main.rs:206:27:206:27 | 2 | main.rs:158:5:158:10 | Point.x | main.rs:206:16:206:32 | Point {...} | +| main.rs:206:30:206:30 | y | main.rs:159:5:159:10 | Point.y | main.rs:206:16:206:32 | Point {...} | +| main.rs:207:12:207:12 | 4 | main.rs:187:5:187:10 | Point3D.z | main.rs:205:13:208:5 | Point3D {...} | +| main.rs:224:27:224:36 | source(...) | main.rs:221:22:221:24 | MyTupleStruct(0) | main.rs:224:13:224:40 | MyTupleStruct(...) | +| main.rs:224:39:224:39 | 2 | main.rs:221:27:221:29 | MyTupleStruct(1) | main.rs:224:13:224:40 | MyTupleStruct(...) | +| main.rs:240:27:240:36 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:240:14:240:37 | ...::Some(...) | +| main.rs:241:27:241:27 | 2 | {EXTERNAL LOCATION} | Some | main.rs:241:14:241:28 | ...::Some(...) | +| main.rs:253:19:253:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:253:14:253:29 | Some(...) | +| main.rs:254:19:254:19 | 2 | {EXTERNAL LOCATION} | Some | main.rs:254:14:254:20 | Some(...) | | main.rs:266:19:266:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:266:14:266:29 | Some(...) | -| main.rs:271:19:271:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:271:14:271:29 | Some(...) | -| main.rs:274:19:274:19 | 0 | {EXTERNAL LOCATION} | Some | main.rs:274:14:274:20 | Some(...) | -| main.rs:279:19:279:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:279:14:279:29 | Some(...) | -| main.rs:287:19:287:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:287:14:287:29 | Some(...) | -| main.rs:288:19:288:19 | 2 | {EXTERNAL LOCATION} | Some | main.rs:288:14:288:20 | Some(...) | -| main.rs:292:10:292:10 | 0 | {EXTERNAL LOCATION} | Some | main.rs:292:5:292:11 | Some(...) | -| main.rs:296:35:296:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:296:32:296:45 | Ok(...) | -| main.rs:302:36:302:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:302:32:302:46 | Err(...) | -| main.rs:310:35:310:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:310:32:310:45 | Ok(...) | -| main.rs:311:35:311:35 | 2 | {EXTERNAL LOCATION} | Ok | main.rs:311:32:311:36 | Ok(...) | -| main.rs:312:36:312:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:312:32:312:46 | Err(...) | -| main.rs:319:8:319:8 | 0 | {EXTERNAL LOCATION} | Ok | main.rs:319:5:319:9 | Ok(...) | -| main.rs:323:35:323:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:323:32:323:45 | Ok(...) | -| main.rs:327:36:327:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:327:32:327:46 | Err(...) | -| main.rs:338:29:338:38 | source(...) | main.rs:333:7:333:9 | A | main.rs:338:14:338:39 | ...::A(...) | -| main.rs:339:29:339:29 | 2 | main.rs:334:7:334:9 | B | main.rs:339:14:339:30 | ...::B(...) | -| main.rs:356:16:356:25 | source(...) | main.rs:333:7:333:9 | A | main.rs:356:14:356:26 | A(...) | -| main.rs:357:16:357:16 | 2 | main.rs:334:7:334:9 | B | main.rs:357:14:357:17 | B(...) | -| main.rs:378:18:378:27 | source(...) | main.rs:372:9:372:20 | C | main.rs:377:14:379:5 | ...::C {...} | -| main.rs:380:41:380:41 | 2 | main.rs:373:9:373:20 | D | main.rs:380:14:380:43 | ...::D {...} | -| main.rs:398:18:398:27 | source(...) | main.rs:372:9:372:20 | C | main.rs:397:14:399:5 | C {...} | -| main.rs:400:27:400:27 | 2 | main.rs:373:9:373:20 | D | main.rs:400:14:400:29 | D {...} | -| main.rs:418:17:418:17 | 1 | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | -| main.rs:418:20:418:20 | 2 | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | -| main.rs:418:23:418:32 | source(...) | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | -| main.rs:422:17:422:26 | source(...) | file://:0:0:0:0 | element | main.rs:422:16:422:31 | [...; 10] | -| main.rs:426:17:426:17 | 1 | file://:0:0:0:0 | element | main.rs:426:16:426:24 | [...] | -| main.rs:426:20:426:20 | 2 | file://:0:0:0:0 | element | main.rs:426:16:426:24 | [...] | -| main.rs:426:23:426:23 | 3 | file://:0:0:0:0 | element | main.rs:426:16:426:24 | [...] | -| main.rs:432:17:432:17 | 1 | file://:0:0:0:0 | element | main.rs:432:16:432:33 | [...] | -| main.rs:432:20:432:20 | 2 | file://:0:0:0:0 | element | main.rs:432:16:432:33 | [...] | -| main.rs:432:23:432:32 | source(...) | file://:0:0:0:0 | element | main.rs:432:16:432:33 | [...] | -| main.rs:437:17:437:17 | 1 | file://:0:0:0:0 | element | main.rs:437:16:437:24 | [...] | -| main.rs:437:20:437:20 | 2 | file://:0:0:0:0 | element | main.rs:437:16:437:24 | [...] | -| main.rs:437:23:437:23 | 3 | file://:0:0:0:0 | element | main.rs:437:16:437:24 | [...] | +| main.rs:278:19:278:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:278:14:278:29 | Some(...) | +| main.rs:283:19:283:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:283:14:283:29 | Some(...) | +| main.rs:286:19:286:19 | 0 | {EXTERNAL LOCATION} | Some | main.rs:286:14:286:20 | Some(...) | +| main.rs:291:19:291:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:291:14:291:29 | Some(...) | +| main.rs:299:19:299:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:299:14:299:29 | Some(...) | +| main.rs:300:19:300:19 | 2 | {EXTERNAL LOCATION} | Some | main.rs:300:14:300:20 | Some(...) | +| main.rs:304:10:304:10 | 0 | {EXTERNAL LOCATION} | Some | main.rs:304:5:304:11 | Some(...) | +| main.rs:308:35:308:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:308:32:308:45 | Ok(...) | +| main.rs:314:36:314:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:314:32:314:46 | Err(...) | +| main.rs:322:35:322:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:322:32:322:45 | Ok(...) | +| main.rs:323:35:323:35 | 2 | {EXTERNAL LOCATION} | Ok | main.rs:323:32:323:36 | Ok(...) | +| main.rs:324:36:324:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:324:32:324:46 | Err(...) | +| main.rs:331:8:331:8 | 0 | {EXTERNAL LOCATION} | Ok | main.rs:331:5:331:9 | Ok(...) | +| main.rs:335:35:335:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:335:32:335:45 | Ok(...) | +| main.rs:339:36:339:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:339:32:339:46 | Err(...) | +| main.rs:350:29:350:38 | source(...) | main.rs:345:7:345:9 | A | main.rs:350:14:350:39 | ...::A(...) | +| main.rs:351:29:351:29 | 2 | main.rs:346:7:346:9 | B | main.rs:351:14:351:30 | ...::B(...) | +| main.rs:368:16:368:25 | source(...) | main.rs:345:7:345:9 | A | main.rs:368:14:368:26 | A(...) | +| main.rs:369:16:369:16 | 2 | main.rs:346:7:346:9 | B | main.rs:369:14:369:17 | B(...) | +| main.rs:390:18:390:27 | source(...) | main.rs:384:9:384:20 | C | main.rs:389:14:391:5 | ...::C {...} | +| main.rs:392:41:392:41 | 2 | main.rs:385:9:385:20 | D | main.rs:392:14:392:43 | ...::D {...} | +| main.rs:410:18:410:27 | source(...) | main.rs:384:9:384:20 | C | main.rs:409:14:411:5 | C {...} | +| main.rs:412:27:412:27 | 2 | main.rs:385:9:385:20 | D | main.rs:412:14:412:29 | D {...} | +| main.rs:430:17:430:17 | 1 | file://:0:0:0:0 | element | main.rs:430:16:430:33 | [...] | +| main.rs:430:20:430:20 | 2 | file://:0:0:0:0 | element | main.rs:430:16:430:33 | [...] | +| main.rs:430:23:430:32 | source(...) | file://:0:0:0:0 | element | main.rs:430:16:430:33 | [...] | +| main.rs:434:17:434:26 | source(...) | file://:0:0:0:0 | element | main.rs:434:16:434:31 | [...; 10] | +| main.rs:438:17:438:17 | 1 | file://:0:0:0:0 | element | main.rs:438:16:438:24 | [...] | +| main.rs:438:20:438:20 | 2 | file://:0:0:0:0 | element | main.rs:438:16:438:24 | [...] | +| main.rs:438:23:438:23 | 3 | file://:0:0:0:0 | element | main.rs:438:16:438:24 | [...] | | main.rs:444:17:444:17 | 1 | file://:0:0:0:0 | element | main.rs:444:16:444:33 | [...] | | main.rs:444:20:444:20 | 2 | file://:0:0:0:0 | element | main.rs:444:16:444:33 | [...] | | main.rs:444:23:444:32 | source(...) | file://:0:0:0:0 | element | main.rs:444:16:444:33 | [...] | -| main.rs:455:24:455:24 | 1 | file://:0:0:0:0 | element | main.rs:455:23:455:31 | [...] | -| main.rs:455:27:455:27 | 2 | file://:0:0:0:0 | element | main.rs:455:23:455:31 | [...] | -| main.rs:455:30:455:30 | 3 | file://:0:0:0:0 | element | main.rs:455:23:455:31 | [...] | -| main.rs:458:18:458:27 | source(...) | file://:0:0:0:0 | element | main.rs:458:5:458:11 | [post] mut_arr | -| main.rs:470:41:470:67 | default_name | main.rs:467:9:467:20 | captured default_name | main.rs:470:41:470:67 | \|...\| ... | -| main.rs:471:18:471:18 | n | file://:0:0:0:0 | &ref | main.rs:471:18:471:18 | receiver for n | -| main.rs:495:13:495:13 | b | file://:0:0:0:0 | &ref | main.rs:495:13:495:13 | receiver for b | -| main.rs:496:18:496:18 | b | file://:0:0:0:0 | &ref | main.rs:496:18:496:18 | receiver for b | -| main.rs:505:15:505:24 | source(...) | file://:0:0:0:0 | element | main.rs:505:14:505:34 | [...] | -| main.rs:505:27:505:27 | 2 | file://:0:0:0:0 | element | main.rs:505:14:505:34 | [...] | -| main.rs:505:30:505:30 | 3 | file://:0:0:0:0 | element | main.rs:505:14:505:34 | [...] | -| main.rs:505:33:505:33 | 4 | file://:0:0:0:0 | element | main.rs:505:14:505:34 | [...] | -| main.rs:530:23:530:32 | source(...) | file://:0:0:0:0 | element | main.rs:530:22:530:42 | [...] | -| main.rs:530:35:530:35 | 2 | file://:0:0:0:0 | element | main.rs:530:22:530:42 | [...] | -| main.rs:530:38:530:38 | 3 | file://:0:0:0:0 | element | main.rs:530:22:530:42 | [...] | -| main.rs:530:41:530:41 | 4 | file://:0:0:0:0 | element | main.rs:530:22:530:42 | [...] | -| main.rs:545:18:545:18 | c | file://:0:0:0:0 | &ref | main.rs:545:17:545:18 | &c | -| main.rs:548:15:548:15 | b | file://:0:0:0:0 | &ref | main.rs:548:14:548:15 | &b | -| main.rs:571:27:571:27 | 0 | {EXTERNAL LOCATION} | Some | main.rs:571:22:571:28 | Some(...) | +| main.rs:449:17:449:17 | 1 | file://:0:0:0:0 | element | main.rs:449:16:449:24 | [...] | +| main.rs:449:20:449:20 | 2 | file://:0:0:0:0 | element | main.rs:449:16:449:24 | [...] | +| main.rs:449:23:449:23 | 3 | file://:0:0:0:0 | element | main.rs:449:16:449:24 | [...] | +| main.rs:456:17:456:17 | 1 | file://:0:0:0:0 | element | main.rs:456:16:456:33 | [...] | +| main.rs:456:20:456:20 | 2 | file://:0:0:0:0 | element | main.rs:456:16:456:33 | [...] | +| main.rs:456:23:456:32 | source(...) | file://:0:0:0:0 | element | main.rs:456:16:456:33 | [...] | +| main.rs:467:24:467:24 | 1 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | +| main.rs:467:27:467:27 | 2 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | +| main.rs:467:30:467:30 | 3 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | +| main.rs:470:18:470:27 | source(...) | file://:0:0:0:0 | element | main.rs:470:5:470:11 | [post] mut_arr | +| main.rs:482:41:482:67 | default_name | main.rs:479:9:479:20 | captured default_name | main.rs:482:41:482:67 | \|...\| ... | +| main.rs:483:18:483:18 | n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | receiver for n | +| main.rs:507:13:507:13 | b | file://:0:0:0:0 | &ref | main.rs:507:13:507:13 | receiver for b | +| main.rs:508:18:508:18 | b | file://:0:0:0:0 | &ref | main.rs:508:18:508:18 | receiver for b | +| main.rs:517:15:517:24 | source(...) | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | +| main.rs:517:27:517:27 | 2 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | +| main.rs:517:30:517:30 | 3 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | +| main.rs:517:33:517:33 | 4 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | +| main.rs:542:23:542:32 | source(...) | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | +| main.rs:542:35:542:35 | 2 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | +| main.rs:542:38:542:38 | 3 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | +| main.rs:542:41:542:41 | 4 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | +| main.rs:557:18:557:18 | c | file://:0:0:0:0 | &ref | main.rs:557:17:557:18 | &c | +| main.rs:560:15:560:15 | b | file://:0:0:0:0 | &ref | main.rs:560:14:560:15 | &b | +| main.rs:583:27:583:27 | 0 | {EXTERNAL LOCATION} | Some | main.rs:583:22:583:28 | Some(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 707a63342ba4..eafe3a7452eb 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -27,225 +27,229 @@ edges | main.rs:62:15:62:23 | source(...) | main.rs:61:9:61:9 | b | provenance | | | main.rs:70:5:70:5 | i | main.rs:71:10:71:10 | i | provenance | | | main.rs:70:9:70:17 | source(...) | main.rs:70:5:70:5 | i | provenance | | -| main.rs:103:9:103:9 | i [&ref] | main.rs:104:11:104:11 | i [&ref] | provenance | | -| main.rs:103:13:103:31 | ...::new(...) [&ref] | main.rs:103:9:103:9 | i [&ref] | provenance | | -| main.rs:103:22:103:30 | source(...) | main.rs:103:13:103:31 | ...::new(...) [&ref] | provenance | MaD:1 | -| main.rs:104:11:104:11 | i [&ref] | main.rs:104:10:104:11 | * ... | provenance | | -| main.rs:111:9:111:9 | a [tuple.0] | main.rs:112:10:112:10 | a [tuple.0] | provenance | | -| main.rs:111:13:111:26 | TupleExpr [tuple.0] | main.rs:111:9:111:9 | a [tuple.0] | provenance | | -| main.rs:111:14:111:22 | source(...) | main.rs:111:13:111:26 | TupleExpr [tuple.0] | provenance | | -| main.rs:112:10:112:10 | a [tuple.0] | main.rs:112:10:112:12 | a.0 | provenance | | -| main.rs:117:9:117:9 | a [tuple.1] | main.rs:118:9:118:20 | TuplePat [tuple.1] | provenance | | -| main.rs:117:13:117:30 | TupleExpr [tuple.1] | main.rs:117:9:117:9 | a [tuple.1] | provenance | | -| main.rs:117:17:117:26 | source(...) | main.rs:117:13:117:30 | TupleExpr [tuple.1] | provenance | | -| main.rs:118:9:118:20 | TuplePat [tuple.1] | main.rs:118:14:118:15 | a1 | provenance | | -| main.rs:118:14:118:15 | a1 | main.rs:120:10:120:11 | a1 | provenance | | -| main.rs:125:9:125:13 | mut a [tuple.1] | main.rs:127:10:127:10 | a [tuple.1] | provenance | | -| main.rs:125:17:125:31 | TupleExpr [tuple.1] | main.rs:125:9:125:13 | mut a [tuple.1] | provenance | | -| main.rs:125:21:125:30 | source(...) | main.rs:125:17:125:31 | TupleExpr [tuple.1] | provenance | | -| main.rs:127:10:127:10 | a [tuple.1] | main.rs:127:10:127:12 | a.1 | provenance | | -| main.rs:128:5:128:5 | [post] a [tuple.0] | main.rs:129:5:129:5 | a [tuple.0] | provenance | | -| main.rs:128:11:128:20 | source(...) | main.rs:128:5:128:5 | [post] a [tuple.0] | provenance | | -| main.rs:129:5:129:5 | a [tuple.0] | main.rs:130:10:130:10 | a [tuple.0] | provenance | | -| main.rs:130:10:130:10 | a [tuple.0] | main.rs:130:10:130:12 | a.0 | provenance | | -| main.rs:135:9:135:9 | a [tuple.1] | main.rs:136:14:136:14 | a [tuple.1] | provenance | | -| main.rs:135:13:135:27 | TupleExpr [tuple.1] | main.rs:135:9:135:9 | a [tuple.1] | provenance | | -| main.rs:135:17:135:26 | source(...) | main.rs:135:13:135:27 | TupleExpr [tuple.1] | provenance | | -| main.rs:136:9:136:9 | b [tuple.0, tuple.1] | main.rs:138:10:138:10 | b [tuple.0, tuple.1] | provenance | | -| main.rs:136:13:136:18 | TupleExpr [tuple.0, tuple.1] | main.rs:136:9:136:9 | b [tuple.0, tuple.1] | provenance | | -| main.rs:136:14:136:14 | a [tuple.1] | main.rs:136:13:136:18 | TupleExpr [tuple.0, tuple.1] | provenance | | -| main.rs:138:10:138:10 | b [tuple.0, tuple.1] | main.rs:138:10:138:12 | b.0 [tuple.1] | provenance | | -| main.rs:138:10:138:12 | b.0 [tuple.1] | main.rs:138:10:138:15 | ... .1 | provenance | | -| main.rs:151:9:151:9 | p [Point.x] | main.rs:152:10:152:10 | p [Point.x] | provenance | | -| main.rs:151:13:151:40 | Point {...} [Point.x] | main.rs:151:9:151:9 | p [Point.x] | provenance | | -| main.rs:151:24:151:32 | source(...) | main.rs:151:13:151:40 | Point {...} [Point.x] | provenance | | -| main.rs:152:10:152:10 | p [Point.x] | main.rs:152:10:152:12 | p.x | provenance | | -| main.rs:159:5:159:5 | [post] p [Point.y] | main.rs:160:10:160:10 | p [Point.y] | provenance | | -| main.rs:159:11:159:20 | source(...) | main.rs:159:5:159:5 | [post] p [Point.y] | provenance | | -| main.rs:160:10:160:10 | p [Point.y] | main.rs:160:10:160:12 | p.y | provenance | | -| main.rs:164:9:164:9 | p [Point.x] | main.rs:168:9:168:28 | Point {...} [Point.x] | provenance | | -| main.rs:164:13:167:5 | Point {...} [Point.x] | main.rs:164:9:164:9 | p [Point.x] | provenance | | -| main.rs:165:12:165:21 | source(...) | main.rs:164:13:167:5 | Point {...} [Point.x] | provenance | | -| main.rs:168:9:168:28 | Point {...} [Point.x] | main.rs:168:20:168:20 | a | provenance | | -| main.rs:168:20:168:20 | a | main.rs:169:10:169:10 | a | provenance | | -| main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | main.rs:187:10:187:10 | p [Point3D.plane, Point.y] | provenance | | -| main.rs:179:13:185:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | provenance | | -| main.rs:180:16:183:9 | Point {...} [Point.y] | main.rs:179:13:185:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | | -| main.rs:182:16:182:25 | source(...) | main.rs:180:16:183:9 | Point {...} [Point.y] | provenance | | -| main.rs:187:10:187:10 | p [Point3D.plane, Point.y] | main.rs:187:10:187:16 | p.plane [Point.y] | provenance | | -| main.rs:187:10:187:16 | p.plane [Point.y] | main.rs:187:10:187:18 | ... .y | provenance | | -| main.rs:192:9:192:9 | y | main.rs:194:30:194:30 | y | provenance | | -| main.rs:192:13:192:22 | source(...) | main.rs:192:9:192:9 | y | provenance | | -| main.rs:193:9:193:9 | p [Point3D.plane, Point.y] | main.rs:197:11:197:11 | p [Point3D.plane, Point.y] | provenance | | -| main.rs:193:13:196:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:193:9:193:9 | p [Point3D.plane, Point.y] | provenance | | -| main.rs:194:16:194:32 | Point {...} [Point.y] | main.rs:193:13:196:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | | -| main.rs:194:30:194:30 | y | main.rs:194:16:194:32 | Point {...} [Point.y] | provenance | | -| main.rs:197:11:197:11 | p [Point3D.plane, Point.y] | main.rs:198:9:201:9 | Point3D {...} [Point3D.plane, Point.y] | provenance | | -| main.rs:198:9:201:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:199:20:199:33 | Point {...} [Point.y] | provenance | | -| main.rs:199:20:199:33 | Point {...} [Point.y] | main.rs:199:31:199:31 | y | provenance | | -| main.rs:199:31:199:31 | y | main.rs:203:18:203:18 | y | provenance | | -| main.rs:212:9:212:9 | s [MyTupleStruct(0)] | main.rs:213:10:213:10 | s [MyTupleStruct(0)] | provenance | | -| main.rs:212:9:212:9 | s [MyTupleStruct(0)] | main.rs:216:11:216:11 | s [MyTupleStruct(0)] | provenance | | -| main.rs:212:13:212:40 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:212:9:212:9 | s [MyTupleStruct(0)] | provenance | | -| main.rs:212:27:212:36 | source(...) | main.rs:212:13:212:40 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | | -| main.rs:213:10:213:10 | s [MyTupleStruct(0)] | main.rs:213:10:213:12 | s.0 | provenance | | -| main.rs:216:11:216:11 | s [MyTupleStruct(0)] | main.rs:217:9:217:27 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | | -| main.rs:217:9:217:27 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:217:23:217:23 | x | provenance | | -| main.rs:217:23:217:23 | x | main.rs:218:18:218:18 | x | provenance | | -| main.rs:228:9:228:10 | s1 [Some] | main.rs:230:11:230:12 | s1 [Some] | provenance | | -| main.rs:228:14:228:37 | ...::Some(...) [Some] | main.rs:228:9:228:10 | s1 [Some] | provenance | | -| main.rs:228:27:228:36 | source(...) | main.rs:228:14:228:37 | ...::Some(...) [Some] | provenance | | -| main.rs:230:11:230:12 | s1 [Some] | main.rs:231:9:231:23 | ...::Some(...) [Some] | provenance | | -| main.rs:231:9:231:23 | ...::Some(...) [Some] | main.rs:231:22:231:22 | n | provenance | | -| main.rs:231:22:231:22 | n | main.rs:231:33:231:33 | n | provenance | | -| main.rs:241:9:241:10 | s1 [Some] | main.rs:243:11:243:12 | s1 [Some] | provenance | | -| main.rs:241:14:241:29 | Some(...) [Some] | main.rs:241:9:241:10 | s1 [Some] | provenance | | -| main.rs:241:19:241:28 | source(...) | main.rs:241:14:241:29 | Some(...) [Some] | provenance | | -| main.rs:243:11:243:12 | s1 [Some] | main.rs:244:9:244:15 | Some(...) [Some] | provenance | | -| main.rs:244:9:244:15 | Some(...) [Some] | main.rs:244:14:244:14 | n | provenance | | -| main.rs:244:14:244:14 | n | main.rs:244:25:244:25 | n | provenance | | -| main.rs:254:9:254:10 | s1 [Some] | main.rs:255:12:255:18 | Some(...) [Some] | provenance | | -| main.rs:254:14:254:29 | Some(...) [Some] | main.rs:254:9:254:10 | s1 [Some] | provenance | | -| main.rs:254:19:254:28 | source(...) | main.rs:254:14:254:29 | Some(...) [Some] | provenance | | -| main.rs:255:12:255:18 | Some(...) [Some] | main.rs:255:17:255:17 | n | provenance | | -| main.rs:255:17:255:17 | n | main.rs:257:18:257:18 | n | provenance | | -| main.rs:255:17:255:17 | n | main.rs:261:14:261:14 | n | provenance | | -| main.rs:266:9:266:10 | s1 [Some] | main.rs:267:10:267:20 | s1.unwrap() | provenance | MaD:2 | +| main.rs:76:9:76:9 | k | main.rs:77:5:77:5 | j | provenance | | +| main.rs:76:9:76:9 | k | main.rs:79:10:79:10 | k | provenance | | +| main.rs:76:13:76:21 | source(...) | main.rs:76:9:76:9 | k | provenance | | +| main.rs:77:5:77:5 | j | main.rs:78:10:78:10 | j | provenance | | +| main.rs:115:9:115:9 | i [&ref] | main.rs:116:11:116:11 | i [&ref] | provenance | | +| main.rs:115:13:115:31 | ...::new(...) [&ref] | main.rs:115:9:115:9 | i [&ref] | provenance | | +| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [&ref] | provenance | MaD:1 | +| main.rs:116:11:116:11 | i [&ref] | main.rs:116:10:116:11 | * ... | provenance | | +| main.rs:123:9:123:9 | a [tuple.0] | main.rs:124:10:124:10 | a [tuple.0] | provenance | | +| main.rs:123:13:123:26 | TupleExpr [tuple.0] | main.rs:123:9:123:9 | a [tuple.0] | provenance | | +| main.rs:123:14:123:22 | source(...) | main.rs:123:13:123:26 | TupleExpr [tuple.0] | provenance | | +| main.rs:124:10:124:10 | a [tuple.0] | main.rs:124:10:124:12 | a.0 | provenance | | +| main.rs:129:9:129:9 | a [tuple.1] | main.rs:130:9:130:20 | TuplePat [tuple.1] | provenance | | +| main.rs:129:13:129:30 | TupleExpr [tuple.1] | main.rs:129:9:129:9 | a [tuple.1] | provenance | | +| main.rs:129:17:129:26 | source(...) | main.rs:129:13:129:30 | TupleExpr [tuple.1] | provenance | | +| main.rs:130:9:130:20 | TuplePat [tuple.1] | main.rs:130:14:130:15 | a1 | provenance | | +| main.rs:130:14:130:15 | a1 | main.rs:132:10:132:11 | a1 | provenance | | +| main.rs:137:9:137:13 | mut a [tuple.1] | main.rs:139:10:139:10 | a [tuple.1] | provenance | | +| main.rs:137:17:137:31 | TupleExpr [tuple.1] | main.rs:137:9:137:13 | mut a [tuple.1] | provenance | | +| main.rs:137:21:137:30 | source(...) | main.rs:137:17:137:31 | TupleExpr [tuple.1] | provenance | | +| main.rs:139:10:139:10 | a [tuple.1] | main.rs:139:10:139:12 | a.1 | provenance | | +| main.rs:140:5:140:5 | [post] a [tuple.0] | main.rs:141:5:141:5 | a [tuple.0] | provenance | | +| main.rs:140:11:140:20 | source(...) | main.rs:140:5:140:5 | [post] a [tuple.0] | provenance | | +| main.rs:141:5:141:5 | a [tuple.0] | main.rs:142:10:142:10 | a [tuple.0] | provenance | | +| main.rs:142:10:142:10 | a [tuple.0] | main.rs:142:10:142:12 | a.0 | provenance | | +| main.rs:147:9:147:9 | a [tuple.1] | main.rs:148:14:148:14 | a [tuple.1] | provenance | | +| main.rs:147:13:147:27 | TupleExpr [tuple.1] | main.rs:147:9:147:9 | a [tuple.1] | provenance | | +| main.rs:147:17:147:26 | source(...) | main.rs:147:13:147:27 | TupleExpr [tuple.1] | provenance | | +| main.rs:148:9:148:9 | b [tuple.0, tuple.1] | main.rs:150:10:150:10 | b [tuple.0, tuple.1] | provenance | | +| main.rs:148:13:148:18 | TupleExpr [tuple.0, tuple.1] | main.rs:148:9:148:9 | b [tuple.0, tuple.1] | provenance | | +| main.rs:148:14:148:14 | a [tuple.1] | main.rs:148:13:148:18 | TupleExpr [tuple.0, tuple.1] | provenance | | +| main.rs:150:10:150:10 | b [tuple.0, tuple.1] | main.rs:150:10:150:12 | b.0 [tuple.1] | provenance | | +| main.rs:150:10:150:12 | b.0 [tuple.1] | main.rs:150:10:150:15 | ... .1 | provenance | | +| main.rs:163:9:163:9 | p [Point.x] | main.rs:164:10:164:10 | p [Point.x] | provenance | | +| main.rs:163:13:163:40 | Point {...} [Point.x] | main.rs:163:9:163:9 | p [Point.x] | provenance | | +| main.rs:163:24:163:32 | source(...) | main.rs:163:13:163:40 | Point {...} [Point.x] | provenance | | +| main.rs:164:10:164:10 | p [Point.x] | main.rs:164:10:164:12 | p.x | provenance | | +| main.rs:171:5:171:5 | [post] p [Point.y] | main.rs:172:10:172:10 | p [Point.y] | provenance | | +| main.rs:171:11:171:20 | source(...) | main.rs:171:5:171:5 | [post] p [Point.y] | provenance | | +| main.rs:172:10:172:10 | p [Point.y] | main.rs:172:10:172:12 | p.y | provenance | | +| main.rs:176:9:176:9 | p [Point.x] | main.rs:180:9:180:28 | Point {...} [Point.x] | provenance | | +| main.rs:176:13:179:5 | Point {...} [Point.x] | main.rs:176:9:176:9 | p [Point.x] | provenance | | +| main.rs:177:12:177:21 | source(...) | main.rs:176:13:179:5 | Point {...} [Point.x] | provenance | | +| main.rs:180:9:180:28 | Point {...} [Point.x] | main.rs:180:20:180:20 | a | provenance | | +| main.rs:180:20:180:20 | a | main.rs:181:10:181:10 | a | provenance | | +| main.rs:191:9:191:9 | p [Point3D.plane, Point.y] | main.rs:199:10:199:10 | p [Point3D.plane, Point.y] | provenance | | +| main.rs:191:13:197:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:191:9:191:9 | p [Point3D.plane, Point.y] | provenance | | +| main.rs:192:16:195:9 | Point {...} [Point.y] | main.rs:191:13:197:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | | +| main.rs:194:16:194:25 | source(...) | main.rs:192:16:195:9 | Point {...} [Point.y] | provenance | | +| main.rs:199:10:199:10 | p [Point3D.plane, Point.y] | main.rs:199:10:199:16 | p.plane [Point.y] | provenance | | +| main.rs:199:10:199:16 | p.plane [Point.y] | main.rs:199:10:199:18 | ... .y | provenance | | +| main.rs:204:9:204:9 | y | main.rs:206:30:206:30 | y | provenance | | +| main.rs:204:13:204:22 | source(...) | main.rs:204:9:204:9 | y | provenance | | +| main.rs:205:9:205:9 | p [Point3D.plane, Point.y] | main.rs:209:11:209:11 | p [Point3D.plane, Point.y] | provenance | | +| main.rs:205:13:208:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:205:9:205:9 | p [Point3D.plane, Point.y] | provenance | | +| main.rs:206:16:206:32 | Point {...} [Point.y] | main.rs:205:13:208:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | | +| main.rs:206:30:206:30 | y | main.rs:206:16:206:32 | Point {...} [Point.y] | provenance | | +| main.rs:209:11:209:11 | p [Point3D.plane, Point.y] | main.rs:210:9:213:9 | Point3D {...} [Point3D.plane, Point.y] | provenance | | +| main.rs:210:9:213:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:211:20:211:33 | Point {...} [Point.y] | provenance | | +| main.rs:211:20:211:33 | Point {...} [Point.y] | main.rs:211:31:211:31 | y | provenance | | +| main.rs:211:31:211:31 | y | main.rs:215:18:215:18 | y | provenance | | +| main.rs:224:9:224:9 | s [MyTupleStruct(0)] | main.rs:225:10:225:10 | s [MyTupleStruct(0)] | provenance | | +| main.rs:224:9:224:9 | s [MyTupleStruct(0)] | main.rs:228:11:228:11 | s [MyTupleStruct(0)] | provenance | | +| main.rs:224:13:224:40 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:224:9:224:9 | s [MyTupleStruct(0)] | provenance | | +| main.rs:224:27:224:36 | source(...) | main.rs:224:13:224:40 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | | +| main.rs:225:10:225:10 | s [MyTupleStruct(0)] | main.rs:225:10:225:12 | s.0 | provenance | | +| main.rs:228:11:228:11 | s [MyTupleStruct(0)] | main.rs:229:9:229:27 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | | +| main.rs:229:9:229:27 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:229:23:229:23 | x | provenance | | +| main.rs:229:23:229:23 | x | main.rs:230:18:230:18 | x | provenance | | +| main.rs:240:9:240:10 | s1 [Some] | main.rs:242:11:242:12 | s1 [Some] | provenance | | +| main.rs:240:14:240:37 | ...::Some(...) [Some] | main.rs:240:9:240:10 | s1 [Some] | provenance | | +| main.rs:240:27:240:36 | source(...) | main.rs:240:14:240:37 | ...::Some(...) [Some] | provenance | | +| main.rs:242:11:242:12 | s1 [Some] | main.rs:243:9:243:23 | ...::Some(...) [Some] | provenance | | +| main.rs:243:9:243:23 | ...::Some(...) [Some] | main.rs:243:22:243:22 | n | provenance | | +| main.rs:243:22:243:22 | n | main.rs:243:33:243:33 | n | provenance | | +| main.rs:253:9:253:10 | s1 [Some] | main.rs:255:11:255:12 | s1 [Some] | provenance | | +| main.rs:253:14:253:29 | Some(...) [Some] | main.rs:253:9:253:10 | s1 [Some] | provenance | | +| main.rs:253:19:253:28 | source(...) | main.rs:253:14:253:29 | Some(...) [Some] | provenance | | +| main.rs:255:11:255:12 | s1 [Some] | main.rs:256:9:256:15 | Some(...) [Some] | provenance | | +| main.rs:256:9:256:15 | Some(...) [Some] | main.rs:256:14:256:14 | n | provenance | | +| main.rs:256:14:256:14 | n | main.rs:256:25:256:25 | n | provenance | | +| main.rs:266:9:266:10 | s1 [Some] | main.rs:267:12:267:18 | Some(...) [Some] | provenance | | | main.rs:266:14:266:29 | Some(...) [Some] | main.rs:266:9:266:10 | s1 [Some] | provenance | | | main.rs:266:19:266:28 | source(...) | main.rs:266:14:266:29 | Some(...) [Some] | provenance | | -| main.rs:271:9:271:10 | s1 [Some] | main.rs:272:10:272:24 | s1.unwrap_or(...) | provenance | MaD:4 | -| main.rs:271:14:271:29 | Some(...) [Some] | main.rs:271:9:271:10 | s1 [Some] | provenance | | -| main.rs:271:19:271:28 | source(...) | main.rs:271:14:271:29 | Some(...) [Some] | provenance | | -| main.rs:275:23:275:32 | source(...) | main.rs:275:10:275:33 | s2.unwrap_or(...) | provenance | MaD:3 | -| main.rs:279:9:279:10 | s1 [Some] | main.rs:280:10:280:32 | s1.unwrap_or_else(...) | provenance | MaD:6 | -| main.rs:279:14:279:29 | Some(...) [Some] | main.rs:279:9:279:10 | s1 [Some] | provenance | | -| main.rs:279:19:279:28 | source(...) | main.rs:279:14:279:29 | Some(...) [Some] | provenance | | -| main.rs:283:31:283:40 | source(...) | main.rs:283:10:283:41 | s2.unwrap_or_else(...) | provenance | MaD:5 | -| main.rs:287:9:287:10 | s1 [Some] | main.rs:289:14:289:15 | s1 [Some] | provenance | | -| main.rs:287:14:287:29 | Some(...) [Some] | main.rs:287:9:287:10 | s1 [Some] | provenance | | -| main.rs:287:19:287:28 | source(...) | main.rs:287:14:287:29 | Some(...) [Some] | provenance | | -| main.rs:289:9:289:10 | i1 | main.rs:290:10:290:11 | i1 | provenance | | -| main.rs:289:14:289:15 | s1 [Some] | main.rs:289:14:289:16 | TryExpr | provenance | | -| main.rs:289:14:289:16 | TryExpr | main.rs:289:9:289:10 | i1 | provenance | | -| main.rs:296:9:296:10 | r1 [Ok] | main.rs:297:28:297:34 | r1.ok() [Some] | provenance | MaD:10 | -| main.rs:296:32:296:45 | Ok(...) [Ok] | main.rs:296:9:296:10 | r1 [Ok] | provenance | | -| main.rs:296:35:296:44 | source(...) | main.rs:296:32:296:45 | Ok(...) [Ok] | provenance | | -| main.rs:297:9:297:11 | o1a [Some] | main.rs:299:10:299:21 | o1a.unwrap() | provenance | MaD:2 | -| main.rs:297:28:297:34 | r1.ok() [Some] | main.rs:297:9:297:11 | o1a [Some] | provenance | | -| main.rs:302:9:302:10 | r2 [Err] | main.rs:304:28:304:35 | r2.err() [Some] | provenance | MaD:7 | -| main.rs:302:32:302:46 | Err(...) [Err] | main.rs:302:9:302:10 | r2 [Err] | provenance | | -| main.rs:302:36:302:45 | source(...) | main.rs:302:32:302:46 | Err(...) [Err] | provenance | | -| main.rs:304:9:304:11 | o2b [Some] | main.rs:306:10:306:21 | o2b.unwrap() | provenance | MaD:2 | -| main.rs:304:28:304:35 | r2.err() [Some] | main.rs:304:9:304:11 | o2b [Some] | provenance | | -| main.rs:310:9:310:10 | s1 [Ok] | main.rs:313:14:313:15 | s1 [Ok] | provenance | | -| main.rs:310:32:310:45 | Ok(...) [Ok] | main.rs:310:9:310:10 | s1 [Ok] | provenance | | -| main.rs:310:35:310:44 | source(...) | main.rs:310:32:310:45 | Ok(...) [Ok] | provenance | | -| main.rs:313:9:313:10 | i1 | main.rs:315:10:315:11 | i1 | provenance | | -| main.rs:313:14:313:15 | s1 [Ok] | main.rs:313:14:313:16 | TryExpr | provenance | | -| main.rs:313:14:313:16 | TryExpr | main.rs:313:9:313:10 | i1 | provenance | | -| main.rs:323:9:323:10 | s1 [Ok] | main.rs:324:10:324:22 | s1.expect(...) | provenance | MaD:8 | -| main.rs:323:32:323:45 | Ok(...) [Ok] | main.rs:323:9:323:10 | s1 [Ok] | provenance | | -| main.rs:323:35:323:44 | source(...) | main.rs:323:32:323:45 | Ok(...) [Ok] | provenance | | -| main.rs:327:9:327:10 | s2 [Err] | main.rs:329:10:329:26 | s2.expect_err(...) | provenance | MaD:9 | -| main.rs:327:32:327:46 | Err(...) [Err] | main.rs:327:9:327:10 | s2 [Err] | provenance | | -| main.rs:327:36:327:45 | source(...) | main.rs:327:32:327:46 | Err(...) [Err] | provenance | | -| main.rs:338:9:338:10 | s1 [A] | main.rs:340:11:340:12 | s1 [A] | provenance | | -| main.rs:338:14:338:39 | ...::A(...) [A] | main.rs:338:9:338:10 | s1 [A] | provenance | | -| main.rs:338:29:338:38 | source(...) | main.rs:338:14:338:39 | ...::A(...) [A] | provenance | | -| main.rs:340:11:340:12 | s1 [A] | main.rs:341:9:341:25 | ...::A(...) [A] | provenance | | -| main.rs:340:11:340:12 | s1 [A] | main.rs:344:11:344:12 | s1 [A] | provenance | | -| main.rs:341:9:341:25 | ...::A(...) [A] | main.rs:341:24:341:24 | n | provenance | | -| main.rs:341:24:341:24 | n | main.rs:341:35:341:35 | n | provenance | | -| main.rs:344:11:344:12 | s1 [A] | main.rs:345:9:345:25 | ...::A(...) [A] | provenance | | -| main.rs:345:9:345:25 | ...::A(...) [A] | main.rs:345:24:345:24 | n | provenance | | -| main.rs:345:24:345:24 | n | main.rs:345:55:345:55 | n | provenance | | -| main.rs:356:9:356:10 | s1 [A] | main.rs:358:11:358:12 | s1 [A] | provenance | | -| main.rs:356:14:356:26 | A(...) [A] | main.rs:356:9:356:10 | s1 [A] | provenance | | -| main.rs:356:16:356:25 | source(...) | main.rs:356:14:356:26 | A(...) [A] | provenance | | -| main.rs:358:11:358:12 | s1 [A] | main.rs:359:9:359:12 | A(...) [A] | provenance | | -| main.rs:358:11:358:12 | s1 [A] | main.rs:362:11:362:12 | s1 [A] | provenance | | -| main.rs:359:9:359:12 | A(...) [A] | main.rs:359:11:359:11 | n | provenance | | -| main.rs:359:11:359:11 | n | main.rs:359:22:359:22 | n | provenance | | -| main.rs:362:11:362:12 | s1 [A] | main.rs:363:9:363:12 | A(...) [A] | provenance | | -| main.rs:363:9:363:12 | A(...) [A] | main.rs:363:11:363:11 | n | provenance | | -| main.rs:363:11:363:11 | n | main.rs:363:29:363:29 | n | provenance | | -| main.rs:377:9:377:10 | s1 [C] | main.rs:381:11:381:12 | s1 [C] | provenance | | -| main.rs:377:14:379:5 | ...::C {...} [C] | main.rs:377:9:377:10 | s1 [C] | provenance | | -| main.rs:378:18:378:27 | source(...) | main.rs:377:14:379:5 | ...::C {...} [C] | provenance | | -| main.rs:381:11:381:12 | s1 [C] | main.rs:382:9:382:38 | ...::C {...} [C] | provenance | | -| main.rs:381:11:381:12 | s1 [C] | main.rs:385:11:385:12 | s1 [C] | provenance | | -| main.rs:382:9:382:38 | ...::C {...} [C] | main.rs:382:36:382:36 | n | provenance | | -| main.rs:382:36:382:36 | n | main.rs:382:48:382:48 | n | provenance | | -| main.rs:385:11:385:12 | s1 [C] | main.rs:386:9:386:38 | ...::C {...} [C] | provenance | | -| main.rs:386:9:386:38 | ...::C {...} [C] | main.rs:386:36:386:36 | n | provenance | | -| main.rs:386:36:386:36 | n | main.rs:386:81:386:81 | n | provenance | | -| main.rs:397:9:397:10 | s1 [C] | main.rs:401:11:401:12 | s1 [C] | provenance | | -| main.rs:397:14:399:5 | C {...} [C] | main.rs:397:9:397:10 | s1 [C] | provenance | | -| main.rs:398:18:398:27 | source(...) | main.rs:397:14:399:5 | C {...} [C] | provenance | | -| main.rs:401:11:401:12 | s1 [C] | main.rs:402:9:402:24 | C {...} [C] | provenance | | -| main.rs:401:11:401:12 | s1 [C] | main.rs:405:11:405:12 | s1 [C] | provenance | | -| main.rs:402:9:402:24 | C {...} [C] | main.rs:402:22:402:22 | n | provenance | | -| main.rs:402:22:402:22 | n | main.rs:402:34:402:34 | n | provenance | | -| main.rs:405:11:405:12 | s1 [C] | main.rs:406:9:406:24 | C {...} [C] | provenance | | -| main.rs:406:9:406:24 | C {...} [C] | main.rs:406:22:406:22 | n | provenance | | -| main.rs:406:22:406:22 | n | main.rs:406:53:406:53 | n | provenance | | -| main.rs:418:9:418:12 | arr1 [element] | main.rs:419:14:419:17 | arr1 [element] | provenance | | -| main.rs:418:16:418:33 | [...] [element] | main.rs:418:9:418:12 | arr1 [element] | provenance | | -| main.rs:418:23:418:32 | source(...) | main.rs:418:16:418:33 | [...] [element] | provenance | | -| main.rs:419:9:419:10 | n1 | main.rs:420:10:420:11 | n1 | provenance | | -| main.rs:419:14:419:17 | arr1 [element] | main.rs:419:14:419:20 | arr1[2] | provenance | | -| main.rs:419:14:419:20 | arr1[2] | main.rs:419:9:419:10 | n1 | provenance | | -| main.rs:422:9:422:12 | arr2 [element] | main.rs:423:14:423:17 | arr2 [element] | provenance | | -| main.rs:422:16:422:31 | [...; 10] [element] | main.rs:422:9:422:12 | arr2 [element] | provenance | | -| main.rs:422:17:422:26 | source(...) | main.rs:422:16:422:31 | [...; 10] [element] | provenance | | -| main.rs:423:9:423:10 | n2 | main.rs:424:10:424:11 | n2 | provenance | | -| main.rs:423:14:423:17 | arr2 [element] | main.rs:423:14:423:20 | arr2[4] | provenance | | -| main.rs:423:14:423:20 | arr2[4] | main.rs:423:9:423:10 | n2 | provenance | | -| main.rs:432:9:432:12 | arr1 [element] | main.rs:433:15:433:18 | arr1 [element] | provenance | | -| main.rs:432:16:432:33 | [...] [element] | main.rs:432:9:432:12 | arr1 [element] | provenance | | -| main.rs:432:23:432:32 | source(...) | main.rs:432:16:432:33 | [...] [element] | provenance | | -| main.rs:433:9:433:10 | n1 | main.rs:434:14:434:15 | n1 | provenance | | -| main.rs:433:15:433:18 | arr1 [element] | main.rs:433:9:433:10 | n1 | provenance | | -| main.rs:444:9:444:12 | arr1 [element] | main.rs:445:11:445:14 | arr1 [element] | provenance | | +| main.rs:267:12:267:18 | Some(...) [Some] | main.rs:267:17:267:17 | n | provenance | | +| main.rs:267:17:267:17 | n | main.rs:269:18:269:18 | n | provenance | | +| main.rs:267:17:267:17 | n | main.rs:273:14:273:14 | n | provenance | | +| main.rs:278:9:278:10 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:2 | +| main.rs:278:14:278:29 | Some(...) [Some] | main.rs:278:9:278:10 | s1 [Some] | provenance | | +| main.rs:278:19:278:28 | source(...) | main.rs:278:14:278:29 | Some(...) [Some] | provenance | | +| main.rs:283:9:283:10 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:4 | +| main.rs:283:14:283:29 | Some(...) [Some] | main.rs:283:9:283:10 | s1 [Some] | provenance | | +| main.rs:283:19:283:28 | source(...) | main.rs:283:14:283:29 | Some(...) [Some] | provenance | | +| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:3 | +| main.rs:291:9:291:10 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:6 | +| main.rs:291:14:291:29 | Some(...) [Some] | main.rs:291:9:291:10 | s1 [Some] | provenance | | +| main.rs:291:19:291:28 | source(...) | main.rs:291:14:291:29 | Some(...) [Some] | provenance | | +| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:5 | +| main.rs:299:9:299:10 | s1 [Some] | main.rs:301:14:301:15 | s1 [Some] | provenance | | +| main.rs:299:14:299:29 | Some(...) [Some] | main.rs:299:9:299:10 | s1 [Some] | provenance | | +| main.rs:299:19:299:28 | source(...) | main.rs:299:14:299:29 | Some(...) [Some] | provenance | | +| main.rs:301:9:301:10 | i1 | main.rs:302:10:302:11 | i1 | provenance | | +| main.rs:301:14:301:15 | s1 [Some] | main.rs:301:14:301:16 | TryExpr | provenance | | +| main.rs:301:14:301:16 | TryExpr | main.rs:301:9:301:10 | i1 | provenance | | +| main.rs:308:9:308:10 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:10 | +| main.rs:308:32:308:45 | Ok(...) [Ok] | main.rs:308:9:308:10 | r1 [Ok] | provenance | | +| main.rs:308:35:308:44 | source(...) | main.rs:308:32:308:45 | Ok(...) [Ok] | provenance | | +| main.rs:309:9:309:11 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:2 | +| main.rs:309:28:309:34 | r1.ok() [Some] | main.rs:309:9:309:11 | o1a [Some] | provenance | | +| main.rs:314:9:314:10 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:7 | +| main.rs:314:32:314:46 | Err(...) [Err] | main.rs:314:9:314:10 | r2 [Err] | provenance | | +| main.rs:314:36:314:45 | source(...) | main.rs:314:32:314:46 | Err(...) [Err] | provenance | | +| main.rs:316:9:316:11 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:2 | +| main.rs:316:28:316:35 | r2.err() [Some] | main.rs:316:9:316:11 | o2b [Some] | provenance | | +| main.rs:322:9:322:10 | s1 [Ok] | main.rs:325:14:325:15 | s1 [Ok] | provenance | | +| main.rs:322:32:322:45 | Ok(...) [Ok] | main.rs:322:9:322:10 | s1 [Ok] | provenance | | +| main.rs:322:35:322:44 | source(...) | main.rs:322:32:322:45 | Ok(...) [Ok] | provenance | | +| main.rs:325:9:325:10 | i1 | main.rs:327:10:327:11 | i1 | provenance | | +| main.rs:325:14:325:15 | s1 [Ok] | main.rs:325:14:325:16 | TryExpr | provenance | | +| main.rs:325:14:325:16 | TryExpr | main.rs:325:9:325:10 | i1 | provenance | | +| main.rs:335:9:335:10 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:8 | +| main.rs:335:32:335:45 | Ok(...) [Ok] | main.rs:335:9:335:10 | s1 [Ok] | provenance | | +| main.rs:335:35:335:44 | source(...) | main.rs:335:32:335:45 | Ok(...) [Ok] | provenance | | +| main.rs:339:9:339:10 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:9 | +| main.rs:339:32:339:46 | Err(...) [Err] | main.rs:339:9:339:10 | s2 [Err] | provenance | | +| main.rs:339:36:339:45 | source(...) | main.rs:339:32:339:46 | Err(...) [Err] | provenance | | +| main.rs:350:9:350:10 | s1 [A] | main.rs:352:11:352:12 | s1 [A] | provenance | | +| main.rs:350:14:350:39 | ...::A(...) [A] | main.rs:350:9:350:10 | s1 [A] | provenance | | +| main.rs:350:29:350:38 | source(...) | main.rs:350:14:350:39 | ...::A(...) [A] | provenance | | +| main.rs:352:11:352:12 | s1 [A] | main.rs:353:9:353:25 | ...::A(...) [A] | provenance | | +| main.rs:352:11:352:12 | s1 [A] | main.rs:356:11:356:12 | s1 [A] | provenance | | +| main.rs:353:9:353:25 | ...::A(...) [A] | main.rs:353:24:353:24 | n | provenance | | +| main.rs:353:24:353:24 | n | main.rs:353:35:353:35 | n | provenance | | +| main.rs:356:11:356:12 | s1 [A] | main.rs:357:9:357:25 | ...::A(...) [A] | provenance | | +| main.rs:357:9:357:25 | ...::A(...) [A] | main.rs:357:24:357:24 | n | provenance | | +| main.rs:357:24:357:24 | n | main.rs:357:55:357:55 | n | provenance | | +| main.rs:368:9:368:10 | s1 [A] | main.rs:370:11:370:12 | s1 [A] | provenance | | +| main.rs:368:14:368:26 | A(...) [A] | main.rs:368:9:368:10 | s1 [A] | provenance | | +| main.rs:368:16:368:25 | source(...) | main.rs:368:14:368:26 | A(...) [A] | provenance | | +| main.rs:370:11:370:12 | s1 [A] | main.rs:371:9:371:12 | A(...) [A] | provenance | | +| main.rs:370:11:370:12 | s1 [A] | main.rs:374:11:374:12 | s1 [A] | provenance | | +| main.rs:371:9:371:12 | A(...) [A] | main.rs:371:11:371:11 | n | provenance | | +| main.rs:371:11:371:11 | n | main.rs:371:22:371:22 | n | provenance | | +| main.rs:374:11:374:12 | s1 [A] | main.rs:375:9:375:12 | A(...) [A] | provenance | | +| main.rs:375:9:375:12 | A(...) [A] | main.rs:375:11:375:11 | n | provenance | | +| main.rs:375:11:375:11 | n | main.rs:375:29:375:29 | n | provenance | | +| main.rs:389:9:389:10 | s1 [C] | main.rs:393:11:393:12 | s1 [C] | provenance | | +| main.rs:389:14:391:5 | ...::C {...} [C] | main.rs:389:9:389:10 | s1 [C] | provenance | | +| main.rs:390:18:390:27 | source(...) | main.rs:389:14:391:5 | ...::C {...} [C] | provenance | | +| main.rs:393:11:393:12 | s1 [C] | main.rs:394:9:394:38 | ...::C {...} [C] | provenance | | +| main.rs:393:11:393:12 | s1 [C] | main.rs:397:11:397:12 | s1 [C] | provenance | | +| main.rs:394:9:394:38 | ...::C {...} [C] | main.rs:394:36:394:36 | n | provenance | | +| main.rs:394:36:394:36 | n | main.rs:394:48:394:48 | n | provenance | | +| main.rs:397:11:397:12 | s1 [C] | main.rs:398:9:398:38 | ...::C {...} [C] | provenance | | +| main.rs:398:9:398:38 | ...::C {...} [C] | main.rs:398:36:398:36 | n | provenance | | +| main.rs:398:36:398:36 | n | main.rs:398:81:398:81 | n | provenance | | +| main.rs:409:9:409:10 | s1 [C] | main.rs:413:11:413:12 | s1 [C] | provenance | | +| main.rs:409:14:411:5 | C {...} [C] | main.rs:409:9:409:10 | s1 [C] | provenance | | +| main.rs:410:18:410:27 | source(...) | main.rs:409:14:411:5 | C {...} [C] | provenance | | +| main.rs:413:11:413:12 | s1 [C] | main.rs:414:9:414:24 | C {...} [C] | provenance | | +| main.rs:413:11:413:12 | s1 [C] | main.rs:417:11:417:12 | s1 [C] | provenance | | +| main.rs:414:9:414:24 | C {...} [C] | main.rs:414:22:414:22 | n | provenance | | +| main.rs:414:22:414:22 | n | main.rs:414:34:414:34 | n | provenance | | +| main.rs:417:11:417:12 | s1 [C] | main.rs:418:9:418:24 | C {...} [C] | provenance | | +| main.rs:418:9:418:24 | C {...} [C] | main.rs:418:22:418:22 | n | provenance | | +| main.rs:418:22:418:22 | n | main.rs:418:53:418:53 | n | provenance | | +| main.rs:430:9:430:12 | arr1 [element] | main.rs:431:14:431:17 | arr1 [element] | provenance | | +| main.rs:430:16:430:33 | [...] [element] | main.rs:430:9:430:12 | arr1 [element] | provenance | | +| main.rs:430:23:430:32 | source(...) | main.rs:430:16:430:33 | [...] [element] | provenance | | +| main.rs:431:9:431:10 | n1 | main.rs:432:10:432:11 | n1 | provenance | | +| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | | +| main.rs:431:14:431:20 | arr1[2] | main.rs:431:9:431:10 | n1 | provenance | | +| main.rs:434:9:434:12 | arr2 [element] | main.rs:435:14:435:17 | arr2 [element] | provenance | | +| main.rs:434:16:434:31 | [...; 10] [element] | main.rs:434:9:434:12 | arr2 [element] | provenance | | +| main.rs:434:17:434:26 | source(...) | main.rs:434:16:434:31 | [...; 10] [element] | provenance | | +| main.rs:435:9:435:10 | n2 | main.rs:436:10:436:11 | n2 | provenance | | +| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | | +| main.rs:435:14:435:20 | arr2[4] | main.rs:435:9:435:10 | n2 | provenance | | +| main.rs:444:9:444:12 | arr1 [element] | main.rs:445:15:445:18 | arr1 [element] | provenance | | | main.rs:444:16:444:33 | [...] [element] | main.rs:444:9:444:12 | arr1 [element] | provenance | | | main.rs:444:23:444:32 | source(...) | main.rs:444:16:444:33 | [...] [element] | provenance | | -| main.rs:445:11:445:14 | arr1 [element] | main.rs:446:9:446:17 | SlicePat [element] | provenance | | -| main.rs:446:9:446:17 | SlicePat [element] | main.rs:446:10:446:10 | a | provenance | | -| main.rs:446:9:446:17 | SlicePat [element] | main.rs:446:13:446:13 | b | provenance | | -| main.rs:446:9:446:17 | SlicePat [element] | main.rs:446:16:446:16 | c | provenance | | -| main.rs:446:10:446:10 | a | main.rs:447:18:447:18 | a | provenance | | -| main.rs:446:13:446:13 | b | main.rs:448:18:448:18 | b | provenance | | -| main.rs:446:16:446:16 | c | main.rs:449:18:449:18 | c | provenance | | -| main.rs:458:5:458:11 | [post] mut_arr [element] | main.rs:459:13:459:19 | mut_arr [element] | provenance | | -| main.rs:458:5:458:11 | [post] mut_arr [element] | main.rs:461:10:461:16 | mut_arr [element] | provenance | | -| main.rs:458:18:458:27 | source(...) | main.rs:458:5:458:11 | [post] mut_arr [element] | provenance | | -| main.rs:459:9:459:9 | d | main.rs:460:10:460:10 | d | provenance | | -| main.rs:459:13:459:19 | mut_arr [element] | main.rs:459:13:459:22 | mut_arr[1] | provenance | | -| main.rs:459:13:459:22 | mut_arr[1] | main.rs:459:9:459:9 | d | provenance | | -| main.rs:461:10:461:16 | mut_arr [element] | main.rs:461:10:461:19 | mut_arr[0] | provenance | | -| main.rs:484:9:484:9 | s | main.rs:485:10:485:10 | s | provenance | | -| main.rs:484:25:484:26 | source(...) | main.rs:484:9:484:9 | s | provenance | | -| main.rs:493:9:493:9 | a | main.rs:498:10:498:10 | a | provenance | | -| main.rs:493:13:493:22 | source(...) | main.rs:493:9:493:9 | a | provenance | | -| main.rs:505:9:505:10 | vs [element] | main.rs:507:10:507:11 | vs [element] | provenance | | -| main.rs:505:9:505:10 | vs [element] | main.rs:511:14:511:15 | vs [element] | provenance | | -| main.rs:505:14:505:34 | [...] [element] | main.rs:505:9:505:10 | vs [element] | provenance | | -| main.rs:505:15:505:24 | source(...) | main.rs:505:14:505:34 | [...] [element] | provenance | | -| main.rs:507:10:507:11 | vs [element] | main.rs:507:10:507:14 | vs[0] | provenance | | -| main.rs:511:9:511:9 | v | main.rs:512:14:512:14 | v | provenance | | -| main.rs:511:14:511:15 | vs [element] | main.rs:511:9:511:9 | v | provenance | | -| main.rs:530:9:530:18 | mut vs_mut [element] | main.rs:532:10:532:15 | vs_mut [element] | provenance | | -| main.rs:530:22:530:42 | [...] [element] | main.rs:530:9:530:18 | mut vs_mut [element] | provenance | | -| main.rs:530:23:530:32 | source(...) | main.rs:530:22:530:42 | [...] [element] | provenance | | -| main.rs:532:10:532:15 | vs_mut [element] | main.rs:532:10:532:18 | vs_mut[0] | provenance | | -| main.rs:542:9:542:9 | a | main.rs:547:10:547:10 | a | provenance | | -| main.rs:542:13:542:22 | source(...) | main.rs:542:9:542:9 | a | provenance | | -| main.rs:544:9:544:9 | c | main.rs:545:18:545:18 | c | provenance | | -| main.rs:544:13:544:22 | source(...) | main.rs:544:9:544:9 | c | provenance | | -| main.rs:545:9:545:13 | c_ref [&ref] | main.rs:550:11:550:15 | c_ref [&ref] | provenance | | -| main.rs:545:17:545:18 | &c [&ref] | main.rs:545:9:545:13 | c_ref [&ref] | provenance | | -| main.rs:545:18:545:18 | c | main.rs:545:17:545:18 | &c [&ref] | provenance | | -| main.rs:550:11:550:15 | c_ref [&ref] | main.rs:550:10:550:15 | * ... | provenance | | +| main.rs:445:9:445:10 | n1 | main.rs:446:14:446:15 | n1 | provenance | | +| main.rs:445:15:445:18 | arr1 [element] | main.rs:445:9:445:10 | n1 | provenance | | +| main.rs:456:9:456:12 | arr1 [element] | main.rs:457:11:457:14 | arr1 [element] | provenance | | +| main.rs:456:16:456:33 | [...] [element] | main.rs:456:9:456:12 | arr1 [element] | provenance | | +| main.rs:456:23:456:32 | source(...) | main.rs:456:16:456:33 | [...] [element] | provenance | | +| main.rs:457:11:457:14 | arr1 [element] | main.rs:458:9:458:17 | SlicePat [element] | provenance | | +| main.rs:458:9:458:17 | SlicePat [element] | main.rs:458:10:458:10 | a | provenance | | +| main.rs:458:9:458:17 | SlicePat [element] | main.rs:458:13:458:13 | b | provenance | | +| main.rs:458:9:458:17 | SlicePat [element] | main.rs:458:16:458:16 | c | provenance | | +| main.rs:458:10:458:10 | a | main.rs:459:18:459:18 | a | provenance | | +| main.rs:458:13:458:13 | b | main.rs:460:18:460:18 | b | provenance | | +| main.rs:458:16:458:16 | c | main.rs:461:18:461:18 | c | provenance | | +| main.rs:470:5:470:11 | [post] mut_arr [element] | main.rs:471:13:471:19 | mut_arr [element] | provenance | | +| main.rs:470:5:470:11 | [post] mut_arr [element] | main.rs:473:10:473:16 | mut_arr [element] | provenance | | +| main.rs:470:18:470:27 | source(...) | main.rs:470:5:470:11 | [post] mut_arr [element] | provenance | | +| main.rs:471:9:471:9 | d | main.rs:472:10:472:10 | d | provenance | | +| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | | +| main.rs:471:13:471:22 | mut_arr[1] | main.rs:471:9:471:9 | d | provenance | | +| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | | +| main.rs:496:9:496:9 | s | main.rs:497:10:497:10 | s | provenance | | +| main.rs:496:25:496:26 | source(...) | main.rs:496:9:496:9 | s | provenance | | +| main.rs:505:9:505:9 | a | main.rs:510:10:510:10 | a | provenance | | +| main.rs:505:13:505:22 | source(...) | main.rs:505:9:505:9 | a | provenance | | +| main.rs:517:9:517:10 | vs [element] | main.rs:519:10:519:11 | vs [element] | provenance | | +| main.rs:517:9:517:10 | vs [element] | main.rs:523:14:523:15 | vs [element] | provenance | | +| main.rs:517:14:517:34 | [...] [element] | main.rs:517:9:517:10 | vs [element] | provenance | | +| main.rs:517:15:517:24 | source(...) | main.rs:517:14:517:34 | [...] [element] | provenance | | +| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | | +| main.rs:523:9:523:9 | v | main.rs:524:14:524:14 | v | provenance | | +| main.rs:523:14:523:15 | vs [element] | main.rs:523:9:523:9 | v | provenance | | +| main.rs:542:9:542:18 | mut vs_mut [element] | main.rs:544:10:544:15 | vs_mut [element] | provenance | | +| main.rs:542:22:542:42 | [...] [element] | main.rs:542:9:542:18 | mut vs_mut [element] | provenance | | +| main.rs:542:23:542:32 | source(...) | main.rs:542:22:542:42 | [...] [element] | provenance | | +| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | | +| main.rs:554:9:554:9 | a | main.rs:559:10:559:10 | a | provenance | | +| main.rs:554:13:554:22 | source(...) | main.rs:554:9:554:9 | a | provenance | | +| main.rs:556:9:556:9 | c | main.rs:557:18:557:18 | c | provenance | | +| main.rs:556:13:556:22 | source(...) | main.rs:556:9:556:9 | c | provenance | | +| main.rs:557:9:557:13 | c_ref [&ref] | main.rs:562:11:562:15 | c_ref [&ref] | provenance | | +| main.rs:557:17:557:18 | &c [&ref] | main.rs:557:9:557:13 | c_ref [&ref] | provenance | | +| main.rs:557:18:557:18 | c | main.rs:557:17:557:18 | &c [&ref] | provenance | | +| main.rs:562:11:562:15 | c_ref [&ref] | main.rs:562:10:562:15 | * ... | provenance | | nodes | main.rs:19:10:19:18 | source(...) | semmle.label | source(...) | | main.rs:23:9:23:9 | s | semmle.label | s | @@ -270,266 +274,271 @@ nodes | main.rs:70:5:70:5 | i | semmle.label | i | | main.rs:70:9:70:17 | source(...) | semmle.label | source(...) | | main.rs:71:10:71:10 | i | semmle.label | i | -| main.rs:103:9:103:9 | i [&ref] | semmle.label | i [&ref] | -| main.rs:103:13:103:31 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| main.rs:103:22:103:30 | source(...) | semmle.label | source(...) | -| main.rs:104:10:104:11 | * ... | semmle.label | * ... | -| main.rs:104:11:104:11 | i [&ref] | semmle.label | i [&ref] | -| main.rs:111:9:111:9 | a [tuple.0] | semmle.label | a [tuple.0] | -| main.rs:111:13:111:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:111:14:111:22 | source(...) | semmle.label | source(...) | -| main.rs:112:10:112:10 | a [tuple.0] | semmle.label | a [tuple.0] | -| main.rs:112:10:112:12 | a.0 | semmle.label | a.0 | -| main.rs:117:9:117:9 | a [tuple.1] | semmle.label | a [tuple.1] | -| main.rs:117:13:117:30 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| main.rs:117:17:117:26 | source(...) | semmle.label | source(...) | -| main.rs:118:9:118:20 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | -| main.rs:118:14:118:15 | a1 | semmle.label | a1 | -| main.rs:120:10:120:11 | a1 | semmle.label | a1 | -| main.rs:125:9:125:13 | mut a [tuple.1] | semmle.label | mut a [tuple.1] | -| main.rs:125:17:125:31 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| main.rs:125:21:125:30 | source(...) | semmle.label | source(...) | -| main.rs:127:10:127:10 | a [tuple.1] | semmle.label | a [tuple.1] | -| main.rs:127:10:127:12 | a.1 | semmle.label | a.1 | -| main.rs:128:5:128:5 | [post] a [tuple.0] | semmle.label | [post] a [tuple.0] | -| main.rs:128:11:128:20 | source(...) | semmle.label | source(...) | -| main.rs:129:5:129:5 | a [tuple.0] | semmle.label | a [tuple.0] | -| main.rs:130:10:130:10 | a [tuple.0] | semmle.label | a [tuple.0] | -| main.rs:130:10:130:12 | a.0 | semmle.label | a.0 | -| main.rs:135:9:135:9 | a [tuple.1] | semmle.label | a [tuple.1] | -| main.rs:135:13:135:27 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| main.rs:135:17:135:26 | source(...) | semmle.label | source(...) | -| main.rs:136:9:136:9 | b [tuple.0, tuple.1] | semmle.label | b [tuple.0, tuple.1] | -| main.rs:136:13:136:18 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] | -| main.rs:136:14:136:14 | a [tuple.1] | semmle.label | a [tuple.1] | -| main.rs:138:10:138:10 | b [tuple.0, tuple.1] | semmle.label | b [tuple.0, tuple.1] | -| main.rs:138:10:138:12 | b.0 [tuple.1] | semmle.label | b.0 [tuple.1] | -| main.rs:138:10:138:15 | ... .1 | semmle.label | ... .1 | -| main.rs:151:9:151:9 | p [Point.x] | semmle.label | p [Point.x] | -| main.rs:151:13:151:40 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] | -| main.rs:151:24:151:32 | source(...) | semmle.label | source(...) | -| main.rs:152:10:152:10 | p [Point.x] | semmle.label | p [Point.x] | -| main.rs:152:10:152:12 | p.x | semmle.label | p.x | -| main.rs:159:5:159:5 | [post] p [Point.y] | semmle.label | [post] p [Point.y] | -| main.rs:159:11:159:20 | source(...) | semmle.label | source(...) | -| main.rs:160:10:160:10 | p [Point.y] | semmle.label | p [Point.y] | -| main.rs:160:10:160:12 | p.y | semmle.label | p.y | -| main.rs:164:9:164:9 | p [Point.x] | semmle.label | p [Point.x] | -| main.rs:164:13:167:5 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] | -| main.rs:165:12:165:21 | source(...) | semmle.label | source(...) | -| main.rs:168:9:168:28 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] | -| main.rs:168:20:168:20 | a | semmle.label | a | -| main.rs:169:10:169:10 | a | semmle.label | a | -| main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | -| main.rs:179:13:185:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] | -| main.rs:180:16:183:9 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] | -| main.rs:182:16:182:25 | source(...) | semmle.label | source(...) | -| main.rs:187:10:187:10 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | -| main.rs:187:10:187:16 | p.plane [Point.y] | semmle.label | p.plane [Point.y] | -| main.rs:187:10:187:18 | ... .y | semmle.label | ... .y | -| main.rs:192:9:192:9 | y | semmle.label | y | -| main.rs:192:13:192:22 | source(...) | semmle.label | source(...) | -| main.rs:193:9:193:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | -| main.rs:193:13:196:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] | -| main.rs:194:16:194:32 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] | -| main.rs:194:30:194:30 | y | semmle.label | y | -| main.rs:197:11:197:11 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | -| main.rs:198:9:201:9 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] | -| main.rs:199:20:199:33 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] | -| main.rs:199:31:199:31 | y | semmle.label | y | -| main.rs:203:18:203:18 | y | semmle.label | y | -| main.rs:212:9:212:9 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] | -| main.rs:212:13:212:40 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] | -| main.rs:212:27:212:36 | source(...) | semmle.label | source(...) | -| main.rs:213:10:213:10 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] | -| main.rs:213:10:213:12 | s.0 | semmle.label | s.0 | -| main.rs:216:11:216:11 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] | -| main.rs:217:9:217:27 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] | -| main.rs:217:23:217:23 | x | semmle.label | x | -| main.rs:218:18:218:18 | x | semmle.label | x | -| main.rs:228:9:228:10 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:228:14:228:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| main.rs:228:27:228:36 | source(...) | semmle.label | source(...) | -| main.rs:230:11:230:12 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:231:9:231:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| main.rs:231:22:231:22 | n | semmle.label | n | -| main.rs:231:33:231:33 | n | semmle.label | n | -| main.rs:241:9:241:10 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:241:14:241:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:241:19:241:28 | source(...) | semmle.label | source(...) | -| main.rs:243:11:243:12 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:244:9:244:15 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:244:14:244:14 | n | semmle.label | n | -| main.rs:244:25:244:25 | n | semmle.label | n | -| main.rs:254:9:254:10 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:254:14:254:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:254:19:254:28 | source(...) | semmle.label | source(...) | -| main.rs:255:12:255:18 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:255:17:255:17 | n | semmle.label | n | -| main.rs:257:18:257:18 | n | semmle.label | n | -| main.rs:261:14:261:14 | n | semmle.label | n | +| main.rs:76:9:76:9 | k | semmle.label | k | +| main.rs:76:13:76:21 | source(...) | semmle.label | source(...) | +| main.rs:77:5:77:5 | j | semmle.label | j | +| main.rs:78:10:78:10 | j | semmle.label | j | +| main.rs:79:10:79:10 | k | semmle.label | k | +| main.rs:115:9:115:9 | i [&ref] | semmle.label | i [&ref] | +| main.rs:115:13:115:31 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| main.rs:115:22:115:30 | source(...) | semmle.label | source(...) | +| main.rs:116:10:116:11 | * ... | semmle.label | * ... | +| main.rs:116:11:116:11 | i [&ref] | semmle.label | i [&ref] | +| main.rs:123:9:123:9 | a [tuple.0] | semmle.label | a [tuple.0] | +| main.rs:123:13:123:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:123:14:123:22 | source(...) | semmle.label | source(...) | +| main.rs:124:10:124:10 | a [tuple.0] | semmle.label | a [tuple.0] | +| main.rs:124:10:124:12 | a.0 | semmle.label | a.0 | +| main.rs:129:9:129:9 | a [tuple.1] | semmle.label | a [tuple.1] | +| main.rs:129:13:129:30 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| main.rs:129:17:129:26 | source(...) | semmle.label | source(...) | +| main.rs:130:9:130:20 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | +| main.rs:130:14:130:15 | a1 | semmle.label | a1 | +| main.rs:132:10:132:11 | a1 | semmle.label | a1 | +| main.rs:137:9:137:13 | mut a [tuple.1] | semmle.label | mut a [tuple.1] | +| main.rs:137:17:137:31 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| main.rs:137:21:137:30 | source(...) | semmle.label | source(...) | +| main.rs:139:10:139:10 | a [tuple.1] | semmle.label | a [tuple.1] | +| main.rs:139:10:139:12 | a.1 | semmle.label | a.1 | +| main.rs:140:5:140:5 | [post] a [tuple.0] | semmle.label | [post] a [tuple.0] | +| main.rs:140:11:140:20 | source(...) | semmle.label | source(...) | +| main.rs:141:5:141:5 | a [tuple.0] | semmle.label | a [tuple.0] | +| main.rs:142:10:142:10 | a [tuple.0] | semmle.label | a [tuple.0] | +| main.rs:142:10:142:12 | a.0 | semmle.label | a.0 | +| main.rs:147:9:147:9 | a [tuple.1] | semmle.label | a [tuple.1] | +| main.rs:147:13:147:27 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| main.rs:147:17:147:26 | source(...) | semmle.label | source(...) | +| main.rs:148:9:148:9 | b [tuple.0, tuple.1] | semmle.label | b [tuple.0, tuple.1] | +| main.rs:148:13:148:18 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] | +| main.rs:148:14:148:14 | a [tuple.1] | semmle.label | a [tuple.1] | +| main.rs:150:10:150:10 | b [tuple.0, tuple.1] | semmle.label | b [tuple.0, tuple.1] | +| main.rs:150:10:150:12 | b.0 [tuple.1] | semmle.label | b.0 [tuple.1] | +| main.rs:150:10:150:15 | ... .1 | semmle.label | ... .1 | +| main.rs:163:9:163:9 | p [Point.x] | semmle.label | p [Point.x] | +| main.rs:163:13:163:40 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] | +| main.rs:163:24:163:32 | source(...) | semmle.label | source(...) | +| main.rs:164:10:164:10 | p [Point.x] | semmle.label | p [Point.x] | +| main.rs:164:10:164:12 | p.x | semmle.label | p.x | +| main.rs:171:5:171:5 | [post] p [Point.y] | semmle.label | [post] p [Point.y] | +| main.rs:171:11:171:20 | source(...) | semmle.label | source(...) | +| main.rs:172:10:172:10 | p [Point.y] | semmle.label | p [Point.y] | +| main.rs:172:10:172:12 | p.y | semmle.label | p.y | +| main.rs:176:9:176:9 | p [Point.x] | semmle.label | p [Point.x] | +| main.rs:176:13:179:5 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] | +| main.rs:177:12:177:21 | source(...) | semmle.label | source(...) | +| main.rs:180:9:180:28 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] | +| main.rs:180:20:180:20 | a | semmle.label | a | +| main.rs:181:10:181:10 | a | semmle.label | a | +| main.rs:191:9:191:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | +| main.rs:191:13:197:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] | +| main.rs:192:16:195:9 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] | +| main.rs:194:16:194:25 | source(...) | semmle.label | source(...) | +| main.rs:199:10:199:10 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | +| main.rs:199:10:199:16 | p.plane [Point.y] | semmle.label | p.plane [Point.y] | +| main.rs:199:10:199:18 | ... .y | semmle.label | ... .y | +| main.rs:204:9:204:9 | y | semmle.label | y | +| main.rs:204:13:204:22 | source(...) | semmle.label | source(...) | +| main.rs:205:9:205:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | +| main.rs:205:13:208:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] | +| main.rs:206:16:206:32 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] | +| main.rs:206:30:206:30 | y | semmle.label | y | +| main.rs:209:11:209:11 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] | +| main.rs:210:9:213:9 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] | +| main.rs:211:20:211:33 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] | +| main.rs:211:31:211:31 | y | semmle.label | y | +| main.rs:215:18:215:18 | y | semmle.label | y | +| main.rs:224:9:224:9 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] | +| main.rs:224:13:224:40 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] | +| main.rs:224:27:224:36 | source(...) | semmle.label | source(...) | +| main.rs:225:10:225:10 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] | +| main.rs:225:10:225:12 | s.0 | semmle.label | s.0 | +| main.rs:228:11:228:11 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] | +| main.rs:229:9:229:27 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] | +| main.rs:229:23:229:23 | x | semmle.label | x | +| main.rs:230:18:230:18 | x | semmle.label | x | +| main.rs:240:9:240:10 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:240:14:240:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| main.rs:240:27:240:36 | source(...) | semmle.label | source(...) | +| main.rs:242:11:242:12 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:243:9:243:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| main.rs:243:22:243:22 | n | semmle.label | n | +| main.rs:243:33:243:33 | n | semmle.label | n | +| main.rs:253:9:253:10 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:253:14:253:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:253:19:253:28 | source(...) | semmle.label | source(...) | +| main.rs:255:11:255:12 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:256:9:256:15 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:256:14:256:14 | n | semmle.label | n | +| main.rs:256:25:256:25 | n | semmle.label | n | | main.rs:266:9:266:10 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:266:14:266:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:266:19:266:28 | source(...) | semmle.label | source(...) | -| main.rs:267:10:267:20 | s1.unwrap() | semmle.label | s1.unwrap() | -| main.rs:271:9:271:10 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:271:14:271:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:271:19:271:28 | source(...) | semmle.label | source(...) | -| main.rs:272:10:272:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) | -| main.rs:275:10:275:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) | -| main.rs:275:23:275:32 | source(...) | semmle.label | source(...) | -| main.rs:279:9:279:10 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:279:14:279:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:279:19:279:28 | source(...) | semmle.label | source(...) | -| main.rs:280:10:280:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) | -| main.rs:283:10:283:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) | -| main.rs:283:31:283:40 | source(...) | semmle.label | source(...) | -| main.rs:287:9:287:10 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:287:14:287:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| main.rs:287:19:287:28 | source(...) | semmle.label | source(...) | -| main.rs:289:9:289:10 | i1 | semmle.label | i1 | -| main.rs:289:14:289:15 | s1 [Some] | semmle.label | s1 [Some] | -| main.rs:289:14:289:16 | TryExpr | semmle.label | TryExpr | -| main.rs:290:10:290:11 | i1 | semmle.label | i1 | -| main.rs:296:9:296:10 | r1 [Ok] | semmle.label | r1 [Ok] | -| main.rs:296:32:296:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| main.rs:296:35:296:44 | source(...) | semmle.label | source(...) | -| main.rs:297:9:297:11 | o1a [Some] | semmle.label | o1a [Some] | -| main.rs:297:28:297:34 | r1.ok() [Some] | semmle.label | r1.ok() [Some] | -| main.rs:299:10:299:21 | o1a.unwrap() | semmle.label | o1a.unwrap() | -| main.rs:302:9:302:10 | r2 [Err] | semmle.label | r2 [Err] | -| main.rs:302:32:302:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| main.rs:302:36:302:45 | source(...) | semmle.label | source(...) | -| main.rs:304:9:304:11 | o2b [Some] | semmle.label | o2b [Some] | -| main.rs:304:28:304:35 | r2.err() [Some] | semmle.label | r2.err() [Some] | -| main.rs:306:10:306:21 | o2b.unwrap() | semmle.label | o2b.unwrap() | -| main.rs:310:9:310:10 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:310:32:310:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| main.rs:310:35:310:44 | source(...) | semmle.label | source(...) | -| main.rs:313:9:313:10 | i1 | semmle.label | i1 | -| main.rs:313:14:313:15 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:313:14:313:16 | TryExpr | semmle.label | TryExpr | -| main.rs:315:10:315:11 | i1 | semmle.label | i1 | -| main.rs:323:9:323:10 | s1 [Ok] | semmle.label | s1 [Ok] | -| main.rs:323:32:323:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| main.rs:323:35:323:44 | source(...) | semmle.label | source(...) | -| main.rs:324:10:324:22 | s1.expect(...) | semmle.label | s1.expect(...) | -| main.rs:327:9:327:10 | s2 [Err] | semmle.label | s2 [Err] | -| main.rs:327:32:327:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| main.rs:327:36:327:45 | source(...) | semmle.label | source(...) | -| main.rs:329:10:329:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) | -| main.rs:338:9:338:10 | s1 [A] | semmle.label | s1 [A] | -| main.rs:338:14:338:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:338:29:338:38 | source(...) | semmle.label | source(...) | -| main.rs:340:11:340:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:341:9:341:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:341:24:341:24 | n | semmle.label | n | -| main.rs:341:35:341:35 | n | semmle.label | n | -| main.rs:344:11:344:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:345:9:345:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | -| main.rs:345:24:345:24 | n | semmle.label | n | -| main.rs:345:55:345:55 | n | semmle.label | n | -| main.rs:356:9:356:10 | s1 [A] | semmle.label | s1 [A] | -| main.rs:356:14:356:26 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:356:16:356:25 | source(...) | semmle.label | source(...) | -| main.rs:358:11:358:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:359:9:359:12 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:359:11:359:11 | n | semmle.label | n | -| main.rs:359:22:359:22 | n | semmle.label | n | -| main.rs:362:11:362:12 | s1 [A] | semmle.label | s1 [A] | -| main.rs:363:9:363:12 | A(...) [A] | semmle.label | A(...) [A] | -| main.rs:363:11:363:11 | n | semmle.label | n | -| main.rs:363:29:363:29 | n | semmle.label | n | -| main.rs:377:9:377:10 | s1 [C] | semmle.label | s1 [C] | -| main.rs:377:14:379:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:378:18:378:27 | source(...) | semmle.label | source(...) | -| main.rs:381:11:381:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:382:9:382:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:382:36:382:36 | n | semmle.label | n | -| main.rs:382:48:382:48 | n | semmle.label | n | -| main.rs:385:11:385:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:386:9:386:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:386:36:386:36 | n | semmle.label | n | -| main.rs:386:81:386:81 | n | semmle.label | n | -| main.rs:397:9:397:10 | s1 [C] | semmle.label | s1 [C] | -| main.rs:397:14:399:5 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:398:18:398:27 | source(...) | semmle.label | source(...) | -| main.rs:401:11:401:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:402:9:402:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:402:22:402:22 | n | semmle.label | n | -| main.rs:402:34:402:34 | n | semmle.label | n | -| main.rs:405:11:405:12 | s1 [C] | semmle.label | s1 [C] | -| main.rs:406:9:406:24 | C {...} [C] | semmle.label | C {...} [C] | -| main.rs:406:22:406:22 | n | semmle.label | n | -| main.rs:406:53:406:53 | n | semmle.label | n | -| main.rs:418:9:418:12 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:418:16:418:33 | [...] [element] | semmle.label | [...] [element] | -| main.rs:418:23:418:32 | source(...) | semmle.label | source(...) | -| main.rs:419:9:419:10 | n1 | semmle.label | n1 | -| main.rs:419:14:419:17 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:419:14:419:20 | arr1[2] | semmle.label | arr1[2] | -| main.rs:420:10:420:11 | n1 | semmle.label | n1 | -| main.rs:422:9:422:12 | arr2 [element] | semmle.label | arr2 [element] | -| main.rs:422:16:422:31 | [...; 10] [element] | semmle.label | [...; 10] [element] | -| main.rs:422:17:422:26 | source(...) | semmle.label | source(...) | -| main.rs:423:9:423:10 | n2 | semmle.label | n2 | -| main.rs:423:14:423:17 | arr2 [element] | semmle.label | arr2 [element] | -| main.rs:423:14:423:20 | arr2[4] | semmle.label | arr2[4] | -| main.rs:424:10:424:11 | n2 | semmle.label | n2 | -| main.rs:432:9:432:12 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:432:16:432:33 | [...] [element] | semmle.label | [...] [element] | -| main.rs:432:23:432:32 | source(...) | semmle.label | source(...) | -| main.rs:433:9:433:10 | n1 | semmle.label | n1 | -| main.rs:433:15:433:18 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:434:14:434:15 | n1 | semmle.label | n1 | +| main.rs:267:12:267:18 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:267:17:267:17 | n | semmle.label | n | +| main.rs:269:18:269:18 | n | semmle.label | n | +| main.rs:273:14:273:14 | n | semmle.label | n | +| main.rs:278:9:278:10 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:278:14:278:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:278:19:278:28 | source(...) | semmle.label | source(...) | +| main.rs:279:10:279:20 | s1.unwrap() | semmle.label | s1.unwrap() | +| main.rs:283:9:283:10 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:283:14:283:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:283:19:283:28 | source(...) | semmle.label | source(...) | +| main.rs:284:10:284:24 | s1.unwrap_or(...) | semmle.label | s1.unwrap_or(...) | +| main.rs:287:10:287:33 | s2.unwrap_or(...) | semmle.label | s2.unwrap_or(...) | +| main.rs:287:23:287:32 | source(...) | semmle.label | source(...) | +| main.rs:291:9:291:10 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:291:14:291:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:291:19:291:28 | source(...) | semmle.label | source(...) | +| main.rs:292:10:292:32 | s1.unwrap_or_else(...) | semmle.label | s1.unwrap_or_else(...) | +| main.rs:295:10:295:41 | s2.unwrap_or_else(...) | semmle.label | s2.unwrap_or_else(...) | +| main.rs:295:31:295:40 | source(...) | semmle.label | source(...) | +| main.rs:299:9:299:10 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:299:14:299:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:299:19:299:28 | source(...) | semmle.label | source(...) | +| main.rs:301:9:301:10 | i1 | semmle.label | i1 | +| main.rs:301:14:301:15 | s1 [Some] | semmle.label | s1 [Some] | +| main.rs:301:14:301:16 | TryExpr | semmle.label | TryExpr | +| main.rs:302:10:302:11 | i1 | semmle.label | i1 | +| main.rs:308:9:308:10 | r1 [Ok] | semmle.label | r1 [Ok] | +| main.rs:308:32:308:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:308:35:308:44 | source(...) | semmle.label | source(...) | +| main.rs:309:9:309:11 | o1a [Some] | semmle.label | o1a [Some] | +| main.rs:309:28:309:34 | r1.ok() [Some] | semmle.label | r1.ok() [Some] | +| main.rs:311:10:311:21 | o1a.unwrap() | semmle.label | o1a.unwrap() | +| main.rs:314:9:314:10 | r2 [Err] | semmle.label | r2 [Err] | +| main.rs:314:32:314:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| main.rs:314:36:314:45 | source(...) | semmle.label | source(...) | +| main.rs:316:9:316:11 | o2b [Some] | semmle.label | o2b [Some] | +| main.rs:316:28:316:35 | r2.err() [Some] | semmle.label | r2.err() [Some] | +| main.rs:318:10:318:21 | o2b.unwrap() | semmle.label | o2b.unwrap() | +| main.rs:322:9:322:10 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:322:32:322:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:322:35:322:44 | source(...) | semmle.label | source(...) | +| main.rs:325:9:325:10 | i1 | semmle.label | i1 | +| main.rs:325:14:325:15 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:325:14:325:16 | TryExpr | semmle.label | TryExpr | +| main.rs:327:10:327:11 | i1 | semmle.label | i1 | +| main.rs:335:9:335:10 | s1 [Ok] | semmle.label | s1 [Ok] | +| main.rs:335:32:335:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| main.rs:335:35:335:44 | source(...) | semmle.label | source(...) | +| main.rs:336:10:336:22 | s1.expect(...) | semmle.label | s1.expect(...) | +| main.rs:339:9:339:10 | s2 [Err] | semmle.label | s2 [Err] | +| main.rs:339:32:339:46 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| main.rs:339:36:339:45 | source(...) | semmle.label | source(...) | +| main.rs:341:10:341:26 | s2.expect_err(...) | semmle.label | s2.expect_err(...) | +| main.rs:350:9:350:10 | s1 [A] | semmle.label | s1 [A] | +| main.rs:350:14:350:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:350:29:350:38 | source(...) | semmle.label | source(...) | +| main.rs:352:11:352:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:353:9:353:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:353:24:353:24 | n | semmle.label | n | +| main.rs:353:35:353:35 | n | semmle.label | n | +| main.rs:356:11:356:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:357:9:357:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:357:24:357:24 | n | semmle.label | n | +| main.rs:357:55:357:55 | n | semmle.label | n | +| main.rs:368:9:368:10 | s1 [A] | semmle.label | s1 [A] | +| main.rs:368:14:368:26 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:368:16:368:25 | source(...) | semmle.label | source(...) | +| main.rs:370:11:370:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:371:9:371:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:371:11:371:11 | n | semmle.label | n | +| main.rs:371:22:371:22 | n | semmle.label | n | +| main.rs:374:11:374:12 | s1 [A] | semmle.label | s1 [A] | +| main.rs:375:9:375:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:375:11:375:11 | n | semmle.label | n | +| main.rs:375:29:375:29 | n | semmle.label | n | +| main.rs:389:9:389:10 | s1 [C] | semmle.label | s1 [C] | +| main.rs:389:14:391:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:390:18:390:27 | source(...) | semmle.label | source(...) | +| main.rs:393:11:393:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:394:9:394:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:394:36:394:36 | n | semmle.label | n | +| main.rs:394:48:394:48 | n | semmle.label | n | +| main.rs:397:11:397:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:398:9:398:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:398:36:398:36 | n | semmle.label | n | +| main.rs:398:81:398:81 | n | semmle.label | n | +| main.rs:409:9:409:10 | s1 [C] | semmle.label | s1 [C] | +| main.rs:409:14:411:5 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:410:18:410:27 | source(...) | semmle.label | source(...) | +| main.rs:413:11:413:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:414:9:414:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:414:22:414:22 | n | semmle.label | n | +| main.rs:414:34:414:34 | n | semmle.label | n | +| main.rs:417:11:417:12 | s1 [C] | semmle.label | s1 [C] | +| main.rs:418:9:418:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:418:22:418:22 | n | semmle.label | n | +| main.rs:418:53:418:53 | n | semmle.label | n | +| main.rs:430:9:430:12 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:430:16:430:33 | [...] [element] | semmle.label | [...] [element] | +| main.rs:430:23:430:32 | source(...) | semmle.label | source(...) | +| main.rs:431:9:431:10 | n1 | semmle.label | n1 | +| main.rs:431:14:431:17 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:431:14:431:20 | arr1[2] | semmle.label | arr1[2] | +| main.rs:432:10:432:11 | n1 | semmle.label | n1 | +| main.rs:434:9:434:12 | arr2 [element] | semmle.label | arr2 [element] | +| main.rs:434:16:434:31 | [...; 10] [element] | semmle.label | [...; 10] [element] | +| main.rs:434:17:434:26 | source(...) | semmle.label | source(...) | +| main.rs:435:9:435:10 | n2 | semmle.label | n2 | +| main.rs:435:14:435:17 | arr2 [element] | semmle.label | arr2 [element] | +| main.rs:435:14:435:20 | arr2[4] | semmle.label | arr2[4] | +| main.rs:436:10:436:11 | n2 | semmle.label | n2 | | main.rs:444:9:444:12 | arr1 [element] | semmle.label | arr1 [element] | | main.rs:444:16:444:33 | [...] [element] | semmle.label | [...] [element] | | main.rs:444:23:444:32 | source(...) | semmle.label | source(...) | -| main.rs:445:11:445:14 | arr1 [element] | semmle.label | arr1 [element] | -| main.rs:446:9:446:17 | SlicePat [element] | semmle.label | SlicePat [element] | -| main.rs:446:10:446:10 | a | semmle.label | a | -| main.rs:446:13:446:13 | b | semmle.label | b | -| main.rs:446:16:446:16 | c | semmle.label | c | -| main.rs:447:18:447:18 | a | semmle.label | a | -| main.rs:448:18:448:18 | b | semmle.label | b | -| main.rs:449:18:449:18 | c | semmle.label | c | -| main.rs:458:5:458:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] | -| main.rs:458:18:458:27 | source(...) | semmle.label | source(...) | -| main.rs:459:9:459:9 | d | semmle.label | d | -| main.rs:459:13:459:19 | mut_arr [element] | semmle.label | mut_arr [element] | -| main.rs:459:13:459:22 | mut_arr[1] | semmle.label | mut_arr[1] | -| main.rs:460:10:460:10 | d | semmle.label | d | -| main.rs:461:10:461:16 | mut_arr [element] | semmle.label | mut_arr [element] | -| main.rs:461:10:461:19 | mut_arr[0] | semmle.label | mut_arr[0] | -| main.rs:484:9:484:9 | s | semmle.label | s | -| main.rs:484:25:484:26 | source(...) | semmle.label | source(...) | -| main.rs:485:10:485:10 | s | semmle.label | s | -| main.rs:493:9:493:9 | a | semmle.label | a | -| main.rs:493:13:493:22 | source(...) | semmle.label | source(...) | -| main.rs:498:10:498:10 | a | semmle.label | a | -| main.rs:505:9:505:10 | vs [element] | semmle.label | vs [element] | -| main.rs:505:14:505:34 | [...] [element] | semmle.label | [...] [element] | -| main.rs:505:15:505:24 | source(...) | semmle.label | source(...) | -| main.rs:507:10:507:11 | vs [element] | semmle.label | vs [element] | -| main.rs:507:10:507:14 | vs[0] | semmle.label | vs[0] | -| main.rs:511:9:511:9 | v | semmle.label | v | -| main.rs:511:14:511:15 | vs [element] | semmle.label | vs [element] | -| main.rs:512:14:512:14 | v | semmle.label | v | -| main.rs:530:9:530:18 | mut vs_mut [element] | semmle.label | mut vs_mut [element] | -| main.rs:530:22:530:42 | [...] [element] | semmle.label | [...] [element] | -| main.rs:530:23:530:32 | source(...) | semmle.label | source(...) | -| main.rs:532:10:532:15 | vs_mut [element] | semmle.label | vs_mut [element] | -| main.rs:532:10:532:18 | vs_mut[0] | semmle.label | vs_mut[0] | -| main.rs:542:9:542:9 | a | semmle.label | a | -| main.rs:542:13:542:22 | source(...) | semmle.label | source(...) | -| main.rs:544:9:544:9 | c | semmle.label | c | -| main.rs:544:13:544:22 | source(...) | semmle.label | source(...) | -| main.rs:545:9:545:13 | c_ref [&ref] | semmle.label | c_ref [&ref] | -| main.rs:545:17:545:18 | &c [&ref] | semmle.label | &c [&ref] | -| main.rs:545:18:545:18 | c | semmle.label | c | -| main.rs:547:10:547:10 | a | semmle.label | a | -| main.rs:550:10:550:15 | * ... | semmle.label | * ... | -| main.rs:550:11:550:15 | c_ref [&ref] | semmle.label | c_ref [&ref] | +| main.rs:445:9:445:10 | n1 | semmle.label | n1 | +| main.rs:445:15:445:18 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:446:14:446:15 | n1 | semmle.label | n1 | +| main.rs:456:9:456:12 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:456:16:456:33 | [...] [element] | semmle.label | [...] [element] | +| main.rs:456:23:456:32 | source(...) | semmle.label | source(...) | +| main.rs:457:11:457:14 | arr1 [element] | semmle.label | arr1 [element] | +| main.rs:458:9:458:17 | SlicePat [element] | semmle.label | SlicePat [element] | +| main.rs:458:10:458:10 | a | semmle.label | a | +| main.rs:458:13:458:13 | b | semmle.label | b | +| main.rs:458:16:458:16 | c | semmle.label | c | +| main.rs:459:18:459:18 | a | semmle.label | a | +| main.rs:460:18:460:18 | b | semmle.label | b | +| main.rs:461:18:461:18 | c | semmle.label | c | +| main.rs:470:5:470:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] | +| main.rs:470:18:470:27 | source(...) | semmle.label | source(...) | +| main.rs:471:9:471:9 | d | semmle.label | d | +| main.rs:471:13:471:19 | mut_arr [element] | semmle.label | mut_arr [element] | +| main.rs:471:13:471:22 | mut_arr[1] | semmle.label | mut_arr[1] | +| main.rs:472:10:472:10 | d | semmle.label | d | +| main.rs:473:10:473:16 | mut_arr [element] | semmle.label | mut_arr [element] | +| main.rs:473:10:473:19 | mut_arr[0] | semmle.label | mut_arr[0] | +| main.rs:496:9:496:9 | s | semmle.label | s | +| main.rs:496:25:496:26 | source(...) | semmle.label | source(...) | +| main.rs:497:10:497:10 | s | semmle.label | s | +| main.rs:505:9:505:9 | a | semmle.label | a | +| main.rs:505:13:505:22 | source(...) | semmle.label | source(...) | +| main.rs:510:10:510:10 | a | semmle.label | a | +| main.rs:517:9:517:10 | vs [element] | semmle.label | vs [element] | +| main.rs:517:14:517:34 | [...] [element] | semmle.label | [...] [element] | +| main.rs:517:15:517:24 | source(...) | semmle.label | source(...) | +| main.rs:519:10:519:11 | vs [element] | semmle.label | vs [element] | +| main.rs:519:10:519:14 | vs[0] | semmle.label | vs[0] | +| main.rs:523:9:523:9 | v | semmle.label | v | +| main.rs:523:14:523:15 | vs [element] | semmle.label | vs [element] | +| main.rs:524:14:524:14 | v | semmle.label | v | +| main.rs:542:9:542:18 | mut vs_mut [element] | semmle.label | mut vs_mut [element] | +| main.rs:542:22:542:42 | [...] [element] | semmle.label | [...] [element] | +| main.rs:542:23:542:32 | source(...) | semmle.label | source(...) | +| main.rs:544:10:544:15 | vs_mut [element] | semmle.label | vs_mut [element] | +| main.rs:544:10:544:18 | vs_mut[0] | semmle.label | vs_mut[0] | +| main.rs:554:9:554:9 | a | semmle.label | a | +| main.rs:554:13:554:22 | source(...) | semmle.label | source(...) | +| main.rs:556:9:556:9 | c | semmle.label | c | +| main.rs:556:13:556:22 | source(...) | semmle.label | source(...) | +| main.rs:557:9:557:13 | c_ref [&ref] | semmle.label | c_ref [&ref] | +| main.rs:557:17:557:18 | &c [&ref] | semmle.label | &c [&ref] | +| main.rs:557:18:557:18 | c | semmle.label | c | +| main.rs:559:10:559:10 | a | semmle.label | a | +| main.rs:562:10:562:15 | * ... | semmle.label | * ... | +| main.rs:562:11:562:15 | c_ref [&ref] | semmle.label | c_ref [&ref] | subpaths testFailures #select @@ -542,54 +551,56 @@ testFailures | main.rs:53:10:53:10 | b | main.rs:48:13:48:21 | source(...) | main.rs:53:10:53:10 | b | $@ | main.rs:48:13:48:21 | source(...) | source(...) | | main.rs:64:10:64:10 | b | main.rs:62:15:62:23 | source(...) | main.rs:64:10:64:10 | b | $@ | main.rs:62:15:62:23 | source(...) | source(...) | | main.rs:71:10:71:10 | i | main.rs:70:9:70:17 | source(...) | main.rs:71:10:71:10 | i | $@ | main.rs:70:9:70:17 | source(...) | source(...) | -| main.rs:104:10:104:11 | * ... | main.rs:103:22:103:30 | source(...) | main.rs:104:10:104:11 | * ... | $@ | main.rs:103:22:103:30 | source(...) | source(...) | -| main.rs:112:10:112:12 | a.0 | main.rs:111:14:111:22 | source(...) | main.rs:112:10:112:12 | a.0 | $@ | main.rs:111:14:111:22 | source(...) | source(...) | -| main.rs:120:10:120:11 | a1 | main.rs:117:17:117:26 | source(...) | main.rs:120:10:120:11 | a1 | $@ | main.rs:117:17:117:26 | source(...) | source(...) | -| main.rs:127:10:127:12 | a.1 | main.rs:125:21:125:30 | source(...) | main.rs:127:10:127:12 | a.1 | $@ | main.rs:125:21:125:30 | source(...) | source(...) | -| main.rs:130:10:130:12 | a.0 | main.rs:128:11:128:20 | source(...) | main.rs:130:10:130:12 | a.0 | $@ | main.rs:128:11:128:20 | source(...) | source(...) | -| main.rs:138:10:138:15 | ... .1 | main.rs:135:17:135:26 | source(...) | main.rs:138:10:138:15 | ... .1 | $@ | main.rs:135:17:135:26 | source(...) | source(...) | -| main.rs:152:10:152:12 | p.x | main.rs:151:24:151:32 | source(...) | main.rs:152:10:152:12 | p.x | $@ | main.rs:151:24:151:32 | source(...) | source(...) | -| main.rs:160:10:160:12 | p.y | main.rs:159:11:159:20 | source(...) | main.rs:160:10:160:12 | p.y | $@ | main.rs:159:11:159:20 | source(...) | source(...) | -| main.rs:169:10:169:10 | a | main.rs:165:12:165:21 | source(...) | main.rs:169:10:169:10 | a | $@ | main.rs:165:12:165:21 | source(...) | source(...) | -| main.rs:187:10:187:18 | ... .y | main.rs:182:16:182:25 | source(...) | main.rs:187:10:187:18 | ... .y | $@ | main.rs:182:16:182:25 | source(...) | source(...) | -| main.rs:203:18:203:18 | y | main.rs:192:13:192:22 | source(...) | main.rs:203:18:203:18 | y | $@ | main.rs:192:13:192:22 | source(...) | source(...) | -| main.rs:213:10:213:12 | s.0 | main.rs:212:27:212:36 | source(...) | main.rs:213:10:213:12 | s.0 | $@ | main.rs:212:27:212:36 | source(...) | source(...) | -| main.rs:218:18:218:18 | x | main.rs:212:27:212:36 | source(...) | main.rs:218:18:218:18 | x | $@ | main.rs:212:27:212:36 | source(...) | source(...) | -| main.rs:231:33:231:33 | n | main.rs:228:27:228:36 | source(...) | main.rs:231:33:231:33 | n | $@ | main.rs:228:27:228:36 | source(...) | source(...) | -| main.rs:244:25:244:25 | n | main.rs:241:19:241:28 | source(...) | main.rs:244:25:244:25 | n | $@ | main.rs:241:19:241:28 | source(...) | source(...) | -| main.rs:257:18:257:18 | n | main.rs:254:19:254:28 | source(...) | main.rs:257:18:257:18 | n | $@ | main.rs:254:19:254:28 | source(...) | source(...) | -| main.rs:261:14:261:14 | n | main.rs:254:19:254:28 | source(...) | main.rs:261:14:261:14 | n | $@ | main.rs:254:19:254:28 | source(...) | source(...) | -| main.rs:267:10:267:20 | s1.unwrap() | main.rs:266:19:266:28 | source(...) | main.rs:267:10:267:20 | s1.unwrap() | $@ | main.rs:266:19:266:28 | source(...) | source(...) | -| main.rs:272:10:272:24 | s1.unwrap_or(...) | main.rs:271:19:271:28 | source(...) | main.rs:272:10:272:24 | s1.unwrap_or(...) | $@ | main.rs:271:19:271:28 | source(...) | source(...) | -| main.rs:275:10:275:33 | s2.unwrap_or(...) | main.rs:275:23:275:32 | source(...) | main.rs:275:10:275:33 | s2.unwrap_or(...) | $@ | main.rs:275:23:275:32 | source(...) | source(...) | -| main.rs:280:10:280:32 | s1.unwrap_or_else(...) | main.rs:279:19:279:28 | source(...) | main.rs:280:10:280:32 | s1.unwrap_or_else(...) | $@ | main.rs:279:19:279:28 | source(...) | source(...) | -| main.rs:283:10:283:41 | s2.unwrap_or_else(...) | main.rs:283:31:283:40 | source(...) | main.rs:283:10:283:41 | s2.unwrap_or_else(...) | $@ | main.rs:283:31:283:40 | source(...) | source(...) | -| main.rs:290:10:290:11 | i1 | main.rs:287:19:287:28 | source(...) | main.rs:290:10:290:11 | i1 | $@ | main.rs:287:19:287:28 | source(...) | source(...) | -| main.rs:299:10:299:21 | o1a.unwrap() | main.rs:296:35:296:44 | source(...) | main.rs:299:10:299:21 | o1a.unwrap() | $@ | main.rs:296:35:296:44 | source(...) | source(...) | -| main.rs:306:10:306:21 | o2b.unwrap() | main.rs:302:36:302:45 | source(...) | main.rs:306:10:306:21 | o2b.unwrap() | $@ | main.rs:302:36:302:45 | source(...) | source(...) | -| main.rs:315:10:315:11 | i1 | main.rs:310:35:310:44 | source(...) | main.rs:315:10:315:11 | i1 | $@ | main.rs:310:35:310:44 | source(...) | source(...) | -| main.rs:324:10:324:22 | s1.expect(...) | main.rs:323:35:323:44 | source(...) | main.rs:324:10:324:22 | s1.expect(...) | $@ | main.rs:323:35:323:44 | source(...) | source(...) | -| main.rs:329:10:329:26 | s2.expect_err(...) | main.rs:327:36:327:45 | source(...) | main.rs:329:10:329:26 | s2.expect_err(...) | $@ | main.rs:327:36:327:45 | source(...) | source(...) | -| main.rs:341:35:341:35 | n | main.rs:338:29:338:38 | source(...) | main.rs:341:35:341:35 | n | $@ | main.rs:338:29:338:38 | source(...) | source(...) | -| main.rs:345:55:345:55 | n | main.rs:338:29:338:38 | source(...) | main.rs:345:55:345:55 | n | $@ | main.rs:338:29:338:38 | source(...) | source(...) | -| main.rs:359:22:359:22 | n | main.rs:356:16:356:25 | source(...) | main.rs:359:22:359:22 | n | $@ | main.rs:356:16:356:25 | source(...) | source(...) | -| main.rs:363:29:363:29 | n | main.rs:356:16:356:25 | source(...) | main.rs:363:29:363:29 | n | $@ | main.rs:356:16:356:25 | source(...) | source(...) | -| main.rs:382:48:382:48 | n | main.rs:378:18:378:27 | source(...) | main.rs:382:48:382:48 | n | $@ | main.rs:378:18:378:27 | source(...) | source(...) | -| main.rs:386:81:386:81 | n | main.rs:378:18:378:27 | source(...) | main.rs:386:81:386:81 | n | $@ | main.rs:378:18:378:27 | source(...) | source(...) | -| main.rs:402:34:402:34 | n | main.rs:398:18:398:27 | source(...) | main.rs:402:34:402:34 | n | $@ | main.rs:398:18:398:27 | source(...) | source(...) | -| main.rs:406:53:406:53 | n | main.rs:398:18:398:27 | source(...) | main.rs:406:53:406:53 | n | $@ | main.rs:398:18:398:27 | source(...) | source(...) | -| main.rs:420:10:420:11 | n1 | main.rs:418:23:418:32 | source(...) | main.rs:420:10:420:11 | n1 | $@ | main.rs:418:23:418:32 | source(...) | source(...) | -| main.rs:424:10:424:11 | n2 | main.rs:422:17:422:26 | source(...) | main.rs:424:10:424:11 | n2 | $@ | main.rs:422:17:422:26 | source(...) | source(...) | -| main.rs:434:14:434:15 | n1 | main.rs:432:23:432:32 | source(...) | main.rs:434:14:434:15 | n1 | $@ | main.rs:432:23:432:32 | source(...) | source(...) | -| main.rs:447:18:447:18 | a | main.rs:444:23:444:32 | source(...) | main.rs:447:18:447:18 | a | $@ | main.rs:444:23:444:32 | source(...) | source(...) | -| main.rs:448:18:448:18 | b | main.rs:444:23:444:32 | source(...) | main.rs:448:18:448:18 | b | $@ | main.rs:444:23:444:32 | source(...) | source(...) | -| main.rs:449:18:449:18 | c | main.rs:444:23:444:32 | source(...) | main.rs:449:18:449:18 | c | $@ | main.rs:444:23:444:32 | source(...) | source(...) | -| main.rs:460:10:460:10 | d | main.rs:458:18:458:27 | source(...) | main.rs:460:10:460:10 | d | $@ | main.rs:458:18:458:27 | source(...) | source(...) | -| main.rs:461:10:461:19 | mut_arr[0] | main.rs:458:18:458:27 | source(...) | main.rs:461:10:461:19 | mut_arr[0] | $@ | main.rs:458:18:458:27 | source(...) | source(...) | -| main.rs:485:10:485:10 | s | main.rs:484:25:484:26 | source(...) | main.rs:485:10:485:10 | s | $@ | main.rs:484:25:484:26 | source(...) | source(...) | -| main.rs:498:10:498:10 | a | main.rs:493:13:493:22 | source(...) | main.rs:498:10:498:10 | a | $@ | main.rs:493:13:493:22 | source(...) | source(...) | -| main.rs:507:10:507:14 | vs[0] | main.rs:505:15:505:24 | source(...) | main.rs:507:10:507:14 | vs[0] | $@ | main.rs:505:15:505:24 | source(...) | source(...) | -| main.rs:512:14:512:14 | v | main.rs:505:15:505:24 | source(...) | main.rs:512:14:512:14 | v | $@ | main.rs:505:15:505:24 | source(...) | source(...) | -| main.rs:532:10:532:18 | vs_mut[0] | main.rs:530:23:530:32 | source(...) | main.rs:532:10:532:18 | vs_mut[0] | $@ | main.rs:530:23:530:32 | source(...) | source(...) | -| main.rs:547:10:547:10 | a | main.rs:542:13:542:22 | source(...) | main.rs:547:10:547:10 | a | $@ | main.rs:542:13:542:22 | source(...) | source(...) | -| main.rs:550:10:550:15 | * ... | main.rs:544:13:544:22 | source(...) | main.rs:550:10:550:15 | * ... | $@ | main.rs:544:13:544:22 | source(...) | source(...) | +| main.rs:78:10:78:10 | j | main.rs:76:13:76:21 | source(...) | main.rs:78:10:78:10 | j | $@ | main.rs:76:13:76:21 | source(...) | source(...) | +| main.rs:79:10:79:10 | k | main.rs:76:13:76:21 | source(...) | main.rs:79:10:79:10 | k | $@ | main.rs:76:13:76:21 | source(...) | source(...) | +| main.rs:116:10:116:11 | * ... | main.rs:115:22:115:30 | source(...) | main.rs:116:10:116:11 | * ... | $@ | main.rs:115:22:115:30 | source(...) | source(...) | +| main.rs:124:10:124:12 | a.0 | main.rs:123:14:123:22 | source(...) | main.rs:124:10:124:12 | a.0 | $@ | main.rs:123:14:123:22 | source(...) | source(...) | +| main.rs:132:10:132:11 | a1 | main.rs:129:17:129:26 | source(...) | main.rs:132:10:132:11 | a1 | $@ | main.rs:129:17:129:26 | source(...) | source(...) | +| main.rs:139:10:139:12 | a.1 | main.rs:137:21:137:30 | source(...) | main.rs:139:10:139:12 | a.1 | $@ | main.rs:137:21:137:30 | source(...) | source(...) | +| main.rs:142:10:142:12 | a.0 | main.rs:140:11:140:20 | source(...) | main.rs:142:10:142:12 | a.0 | $@ | main.rs:140:11:140:20 | source(...) | source(...) | +| main.rs:150:10:150:15 | ... .1 | main.rs:147:17:147:26 | source(...) | main.rs:150:10:150:15 | ... .1 | $@ | main.rs:147:17:147:26 | source(...) | source(...) | +| main.rs:164:10:164:12 | p.x | main.rs:163:24:163:32 | source(...) | main.rs:164:10:164:12 | p.x | $@ | main.rs:163:24:163:32 | source(...) | source(...) | +| main.rs:172:10:172:12 | p.y | main.rs:171:11:171:20 | source(...) | main.rs:172:10:172:12 | p.y | $@ | main.rs:171:11:171:20 | source(...) | source(...) | +| main.rs:181:10:181:10 | a | main.rs:177:12:177:21 | source(...) | main.rs:181:10:181:10 | a | $@ | main.rs:177:12:177:21 | source(...) | source(...) | +| main.rs:199:10:199:18 | ... .y | main.rs:194:16:194:25 | source(...) | main.rs:199:10:199:18 | ... .y | $@ | main.rs:194:16:194:25 | source(...) | source(...) | +| main.rs:215:18:215:18 | y | main.rs:204:13:204:22 | source(...) | main.rs:215:18:215:18 | y | $@ | main.rs:204:13:204:22 | source(...) | source(...) | +| main.rs:225:10:225:12 | s.0 | main.rs:224:27:224:36 | source(...) | main.rs:225:10:225:12 | s.0 | $@ | main.rs:224:27:224:36 | source(...) | source(...) | +| main.rs:230:18:230:18 | x | main.rs:224:27:224:36 | source(...) | main.rs:230:18:230:18 | x | $@ | main.rs:224:27:224:36 | source(...) | source(...) | +| main.rs:243:33:243:33 | n | main.rs:240:27:240:36 | source(...) | main.rs:243:33:243:33 | n | $@ | main.rs:240:27:240:36 | source(...) | source(...) | +| main.rs:256:25:256:25 | n | main.rs:253:19:253:28 | source(...) | main.rs:256:25:256:25 | n | $@ | main.rs:253:19:253:28 | source(...) | source(...) | +| main.rs:269:18:269:18 | n | main.rs:266:19:266:28 | source(...) | main.rs:269:18:269:18 | n | $@ | main.rs:266:19:266:28 | source(...) | source(...) | +| main.rs:273:14:273:14 | n | main.rs:266:19:266:28 | source(...) | main.rs:273:14:273:14 | n | $@ | main.rs:266:19:266:28 | source(...) | source(...) | +| main.rs:279:10:279:20 | s1.unwrap() | main.rs:278:19:278:28 | source(...) | main.rs:279:10:279:20 | s1.unwrap() | $@ | main.rs:278:19:278:28 | source(...) | source(...) | +| main.rs:284:10:284:24 | s1.unwrap_or(...) | main.rs:283:19:283:28 | source(...) | main.rs:284:10:284:24 | s1.unwrap_or(...) | $@ | main.rs:283:19:283:28 | source(...) | source(...) | +| main.rs:287:10:287:33 | s2.unwrap_or(...) | main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | $@ | main.rs:287:23:287:32 | source(...) | source(...) | +| main.rs:292:10:292:32 | s1.unwrap_or_else(...) | main.rs:291:19:291:28 | source(...) | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | $@ | main.rs:291:19:291:28 | source(...) | source(...) | +| main.rs:295:10:295:41 | s2.unwrap_or_else(...) | main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | $@ | main.rs:295:31:295:40 | source(...) | source(...) | +| main.rs:302:10:302:11 | i1 | main.rs:299:19:299:28 | source(...) | main.rs:302:10:302:11 | i1 | $@ | main.rs:299:19:299:28 | source(...) | source(...) | +| main.rs:311:10:311:21 | o1a.unwrap() | main.rs:308:35:308:44 | source(...) | main.rs:311:10:311:21 | o1a.unwrap() | $@ | main.rs:308:35:308:44 | source(...) | source(...) | +| main.rs:318:10:318:21 | o2b.unwrap() | main.rs:314:36:314:45 | source(...) | main.rs:318:10:318:21 | o2b.unwrap() | $@ | main.rs:314:36:314:45 | source(...) | source(...) | +| main.rs:327:10:327:11 | i1 | main.rs:322:35:322:44 | source(...) | main.rs:327:10:327:11 | i1 | $@ | main.rs:322:35:322:44 | source(...) | source(...) | +| main.rs:336:10:336:22 | s1.expect(...) | main.rs:335:35:335:44 | source(...) | main.rs:336:10:336:22 | s1.expect(...) | $@ | main.rs:335:35:335:44 | source(...) | source(...) | +| main.rs:341:10:341:26 | s2.expect_err(...) | main.rs:339:36:339:45 | source(...) | main.rs:341:10:341:26 | s2.expect_err(...) | $@ | main.rs:339:36:339:45 | source(...) | source(...) | +| main.rs:353:35:353:35 | n | main.rs:350:29:350:38 | source(...) | main.rs:353:35:353:35 | n | $@ | main.rs:350:29:350:38 | source(...) | source(...) | +| main.rs:357:55:357:55 | n | main.rs:350:29:350:38 | source(...) | main.rs:357:55:357:55 | n | $@ | main.rs:350:29:350:38 | source(...) | source(...) | +| main.rs:371:22:371:22 | n | main.rs:368:16:368:25 | source(...) | main.rs:371:22:371:22 | n | $@ | main.rs:368:16:368:25 | source(...) | source(...) | +| main.rs:375:29:375:29 | n | main.rs:368:16:368:25 | source(...) | main.rs:375:29:375:29 | n | $@ | main.rs:368:16:368:25 | source(...) | source(...) | +| main.rs:394:48:394:48 | n | main.rs:390:18:390:27 | source(...) | main.rs:394:48:394:48 | n | $@ | main.rs:390:18:390:27 | source(...) | source(...) | +| main.rs:398:81:398:81 | n | main.rs:390:18:390:27 | source(...) | main.rs:398:81:398:81 | n | $@ | main.rs:390:18:390:27 | source(...) | source(...) | +| main.rs:414:34:414:34 | n | main.rs:410:18:410:27 | source(...) | main.rs:414:34:414:34 | n | $@ | main.rs:410:18:410:27 | source(...) | source(...) | +| main.rs:418:53:418:53 | n | main.rs:410:18:410:27 | source(...) | main.rs:418:53:418:53 | n | $@ | main.rs:410:18:410:27 | source(...) | source(...) | +| main.rs:432:10:432:11 | n1 | main.rs:430:23:430:32 | source(...) | main.rs:432:10:432:11 | n1 | $@ | main.rs:430:23:430:32 | source(...) | source(...) | +| main.rs:436:10:436:11 | n2 | main.rs:434:17:434:26 | source(...) | main.rs:436:10:436:11 | n2 | $@ | main.rs:434:17:434:26 | source(...) | source(...) | +| main.rs:446:14:446:15 | n1 | main.rs:444:23:444:32 | source(...) | main.rs:446:14:446:15 | n1 | $@ | main.rs:444:23:444:32 | source(...) | source(...) | +| main.rs:459:18:459:18 | a | main.rs:456:23:456:32 | source(...) | main.rs:459:18:459:18 | a | $@ | main.rs:456:23:456:32 | source(...) | source(...) | +| main.rs:460:18:460:18 | b | main.rs:456:23:456:32 | source(...) | main.rs:460:18:460:18 | b | $@ | main.rs:456:23:456:32 | source(...) | source(...) | +| main.rs:461:18:461:18 | c | main.rs:456:23:456:32 | source(...) | main.rs:461:18:461:18 | c | $@ | main.rs:456:23:456:32 | source(...) | source(...) | +| main.rs:472:10:472:10 | d | main.rs:470:18:470:27 | source(...) | main.rs:472:10:472:10 | d | $@ | main.rs:470:18:470:27 | source(...) | source(...) | +| main.rs:473:10:473:19 | mut_arr[0] | main.rs:470:18:470:27 | source(...) | main.rs:473:10:473:19 | mut_arr[0] | $@ | main.rs:470:18:470:27 | source(...) | source(...) | +| main.rs:497:10:497:10 | s | main.rs:496:25:496:26 | source(...) | main.rs:497:10:497:10 | s | $@ | main.rs:496:25:496:26 | source(...) | source(...) | +| main.rs:510:10:510:10 | a | main.rs:505:13:505:22 | source(...) | main.rs:510:10:510:10 | a | $@ | main.rs:505:13:505:22 | source(...) | source(...) | +| main.rs:519:10:519:14 | vs[0] | main.rs:517:15:517:24 | source(...) | main.rs:519:10:519:14 | vs[0] | $@ | main.rs:517:15:517:24 | source(...) | source(...) | +| main.rs:524:14:524:14 | v | main.rs:517:15:517:24 | source(...) | main.rs:524:14:524:14 | v | $@ | main.rs:517:15:517:24 | source(...) | source(...) | +| main.rs:544:10:544:18 | vs_mut[0] | main.rs:542:23:542:32 | source(...) | main.rs:544:10:544:18 | vs_mut[0] | $@ | main.rs:542:23:542:32 | source(...) | source(...) | +| main.rs:559:10:559:10 | a | main.rs:554:13:554:22 | source(...) | main.rs:559:10:559:10 | a | $@ | main.rs:554:13:554:22 | source(...) | source(...) | +| main.rs:562:10:562:15 | * ... | main.rs:556:13:556:22 | source(...) | main.rs:562:10:562:15 | * ... | $@ | main.rs:556:13:556:22 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs index 598aed6777fb..d352eb0cbf19 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -69,6 +69,18 @@ fn assignment() { sink(i); i = source(6); sink(i); // $ hasValueFlow=6 + i = 2; + sink(i); + + let mut j = 3; + let k = source(7); + j = k; + sink(j); // $ hasValueFlow=7 + sink(k); // $ hasValueFlow=7 + + let mut l = source(8); + l = l; + sink(l); // $ MISSING: hasValueFlow=8 } fn block_expression1() -> i64 { From a8d4d6b5630f7bd4804c51aefd8b0f84ef00ffe1 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:02:03 -0400 Subject: [PATCH 060/219] Apply naming standards + changenote --- .../2025-09-15-grape-framework-support.md | 4 ++ ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 44 +++++++++---------- .../frameworks/grape/Grape.expected | 2 +- .../library-tests/frameworks/grape/Grape.ql | 4 +- 4 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md diff --git a/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md b/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md new file mode 100644 index 000000000000..258da40d36c5 --- /dev/null +++ b/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Initial modeling for the Ruby Grape framework in `Grape.qll` have been added to detect API endpoints, parameters, and headers within Grape API classes. \ No newline at end of file diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index fbab28180b8b..72dd1e13b9bc 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -23,9 +23,9 @@ module Grape { * A Grape API class which sits at the top of the class hierarchy. * In other words, it does not subclass any other Grape API class in source code. */ - class RootAPI extends GrapeAPIClass { - RootAPI() { - not exists(GrapeAPIClass parent | this != parent and this = parent.getADescendent()) + class RootApi extends GrapeApiClass { + RootApi() { + not exists(GrapeApiClass parent | this != parent and this = parent.getADescendent()) } } } @@ -43,17 +43,17 @@ module Grape { * end * ``` */ -class GrapeAPIClass extends DataFlow::ClassNode { - GrapeAPIClass() { - this = grapeAPIBaseClass().getADescendentModule() and - not exists(DataFlow::ModuleNode m | m = grapeAPIBaseClass().asModule() | this = m) +class GrapeApiClass extends DataFlow::ClassNode { + GrapeApiClass() { + this = grapeApiBaseClass().getADescendentModule() and + not exists(DataFlow::ModuleNode m | m = grapeApiBaseClass().asModule() | this = m) } /** * Gets a `GrapeEndpoint` defined in this class. */ GrapeEndpoint getAnEndpoint() { - result.getAPIClass() = this + result.getApiClass() = this } /** @@ -68,19 +68,19 @@ class GrapeAPIClass extends DataFlow::ClassNode { } } -private DataFlow::ConstRef grapeAPIBaseClass() { +private DataFlow::ConstRef grapeApiBaseClass() { result = DataFlow::getConstant("Grape").getConstant("API") } -private API::Node grapeAPIInstance() { - result = any(GrapeAPIClass cls).getSelf().track() +private API::Node grapeApiInstance() { + result = any(GrapeApiClass cls).getSelf().track() } /** * A Grape API endpoint (get, post, put, delete, etc.) call within a `Grape::API` class. */ class GrapeEndpoint extends DataFlow::CallNode { - private GrapeAPIClass apiClass; + private GrapeApiClass apiClass; GrapeEndpoint() { this = apiClass.getAModuleLevelCall(["get", "post", "put", "delete", "patch", "head", "options"]) @@ -96,7 +96,7 @@ class GrapeEndpoint extends DataFlow::CallNode { /** * Gets the API class containing this endpoint. */ - GrapeAPIClass getAPIClass() { result = apiClass } + GrapeApiClass getApiClass() { result = apiClass } /** * Gets the block containing the endpoint logic. @@ -131,7 +131,7 @@ class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { private class GrapeParamsCall extends ParamsCallImpl { GrapeParamsCall() { // Simplified approach: find params calls that are descendants of Grape API class methods - exists(GrapeAPIClass api | + exists(GrapeApiClass api | this.getMethodName() = "params" and this.getParent+() = api.getADeclaration() ) @@ -163,7 +163,7 @@ private class GrapeHeadersCall extends MethodCall { ) or // Also handle cases where headers is called on an instance of a Grape API class - this = grapeAPIInstance().getAMethodCall("headers").asExpr().getExpr() + this = grapeApiInstance().getAMethodCall("headers").asExpr().getExpr() } } @@ -206,7 +206,7 @@ private class GrapeRequestCall extends MethodCall { ) or // Also handle cases where request is called on an instance of a Grape API class - this = grapeAPIInstance().getAMethodCall("request").asExpr().getExpr() + this = grapeApiInstance().getAMethodCall("request").asExpr().getExpr() } } @@ -221,7 +221,7 @@ private class GrapeRouteParamCall extends MethodCall { ) or // Also handle cases where route_param is called on an instance of a Grape API class - this = grapeAPIInstance().getAMethodCall("route_param").asExpr().getExpr() + this = grapeApiInstance().getAMethodCall("route_param").asExpr().getExpr() } } @@ -231,7 +231,7 @@ private class GrapeRouteParamCall extends MethodCall { */ private class GrapeHeadersBlockCall extends MethodCall { GrapeHeadersBlockCall() { - exists(GrapeAPIClass api | + exists(GrapeApiClass api | this.getParent+() = api.getADeclaration() and this.getMethodName() = "headers" and exists(this.getBlock()) @@ -245,7 +245,7 @@ private class GrapeHeadersBlockCall extends MethodCall { */ private class GrapeCookiesBlockCall extends MethodCall { GrapeCookiesBlockCall() { - exists(GrapeAPIClass api | + exists(GrapeApiClass api | this.getParent+() = api.getADeclaration() and this.getMethodName() = "cookies" and exists(this.getBlock()) @@ -280,7 +280,7 @@ private class GrapeCookiesCall extends MethodCall { ) or // Also handle cases where cookies is called on an instance of a Grape API class - this = grapeAPIInstance().getAMethodCall("cookies").asExpr().getExpr() + this = grapeApiInstance().getAMethodCall("cookies").asExpr().getExpr() } } @@ -289,7 +289,7 @@ private class GrapeCookiesCall extends MethodCall { * These methods become available in endpoint contexts through Grape's DSL. */ private class GrapeHelperMethod extends Method { - private GrapeAPIClass apiClass; + private GrapeApiClass apiClass; GrapeHelperMethod() { exists(DataFlow::CallNode helpersCall | @@ -301,7 +301,7 @@ private class GrapeHelperMethod extends Method { /** * Gets the API class that contains this helper method. */ - GrapeAPIClass getAPIClass() { result = apiClass } + GrapeApiClass getAPIClass() { result = apiClass } } /** diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected index c0bee75371c2..af4d936e88d1 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected @@ -1,4 +1,4 @@ -grapeAPIClasses +grapeApiClasses | app.rb:1:1:90:3 | MyAPI | | app.rb:92:1:96:3 | AdminAPI | grapeEndpoints diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql index 63d59d0bdd7d..ebfb304dbe7a 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -3,9 +3,9 @@ import codeql.ruby.frameworks.Grape import codeql.ruby.Concepts import codeql.ruby.AST -query predicate grapeAPIClasses(GrapeAPIClass api) { any() } +query predicate grapeApiClasses(GrapeApiClass api) { any() } -query predicate grapeEndpoints(GrapeAPIClass api, GrapeEndpoint endpoint, string method, string path) { +query predicate grapeEndpoints(GrapeApiClass api, GrapeEndpoint endpoint, string method, string path) { endpoint = api.getAnEndpoint() and method = endpoint.getHttpMethod() and path = endpoint.getPath() From 19cb1874368723b7441b01bb07d6aaf16f8c009d Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:03:27 -0400 Subject: [PATCH 061/219] Update ruby/ql/lib/codeql/ruby/frameworks/Grape.qll Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 72dd1e13b9bc..417d4ee4da4a 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -136,7 +136,9 @@ private class GrapeParamsCall extends ParamsCallImpl { this.getParent+() = api.getADeclaration() ) } -}/** +} + +/** * A call to `headers` from within a Grape API endpoint or headers block. * Headers can also be a source of user input. */ From fc98cd8d08e9f1d258611757094f73b00095963e Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:11:33 -0400 Subject: [PATCH 062/219] Fix naming standards --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 72dd1e13b9bc..7b963c92ee13 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -301,7 +301,7 @@ private class GrapeHelperMethod extends Method { /** * Gets the API class that contains this helper method. */ - GrapeApiClass getAPIClass() { result = apiClass } + GrapeApiClass getApiClass() { result = apiClass } } /** From 49de716f10ab1d9e0ec7155363edc5e9e23405f5 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 10:50:28 +0100 Subject: [PATCH 063/219] Rust: Accept consistency check changes. --- .../local/CONSISTENCY/PathResolutionConsistency.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected index f5f63c61593a..cbf6523d21c1 100644 --- a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ multipleCallTargets -| main.rs:471:18:471:24 | n.len() | +| main.rs:483:18:483:24 | n.len() | From 4e77b1b9b8ab06ddb976ac51e8194211db857a10 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 16 Sep 2025 09:56:26 +0200 Subject: [PATCH 064/219] Rust: Add self-assignment variable test --- .../test/library-tests/variables/Cfg.expected | 3556 +++++++++-------- .../test/library-tests/variables/Ssa.expected | 1446 +++---- rust/ql/test/library-tests/variables/main.rs | 2 + .../variables/variables.expected | 1238 +++--- 4 files changed, 3132 insertions(+), 3110 deletions(-) diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 0097a12e398d..6b3f0e0e93df 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -58,9 +58,9 @@ edges | main.rs:21:5:21:17 | print_str(...) | main.rs:19:25:22:1 | { ... } | | | main.rs:21:5:21:18 | ExprStmt | main.rs:21:5:21:13 | print_str | | | main.rs:21:15:21:16 | x1 | main.rs:21:5:21:17 | print_str(...) | | -| main.rs:24:1:29:1 | enter fn mutable_variable | main.rs:25:5:25:19 | let ... = 4 | | -| main.rs:24:1:29:1 | exit fn mutable_variable (normal) | main.rs:24:1:29:1 | exit fn mutable_variable | | -| main.rs:24:23:29:1 | { ... } | main.rs:24:1:29:1 | exit fn mutable_variable (normal) | | +| main.rs:24:1:31:1 | enter fn mutable_variable | main.rs:25:5:25:19 | let ... = 4 | | +| main.rs:24:1:31:1 | exit fn mutable_variable (normal) | main.rs:24:1:31:1 | exit fn mutable_variable | | +| main.rs:24:23:31:1 | { ... } | main.rs:24:1:31:1 | exit fn mutable_variable (normal) | | | main.rs:25:5:25:19 | let ... = 4 | main.rs:25:18:25:18 | 4 | | | main.rs:25:9:25:14 | mut x2 | main.rs:26:5:26:18 | ExprStmt | match | | main.rs:25:13:25:14 | x2 | main.rs:25:9:25:14 | mut x2 | | @@ -74,1807 +74,1815 @@ edges | main.rs:27:5:27:11 | ExprStmt | main.rs:27:5:27:6 | x2 | | | main.rs:27:10:27:10 | 5 | main.rs:27:5:27:10 | ... = ... | | | main.rs:28:5:28:13 | print_i64 | main.rs:28:15:28:16 | x2 | | -| main.rs:28:5:28:17 | print_i64(...) | main.rs:24:23:29:1 | { ... } | | +| main.rs:28:5:28:17 | print_i64(...) | main.rs:29:5:29:12 | ExprStmt | | | main.rs:28:5:28:18 | ExprStmt | main.rs:28:5:28:13 | print_i64 | | | main.rs:28:15:28:16 | x2 | main.rs:28:5:28:17 | print_i64(...) | | -| main.rs:31:1:36:1 | enter fn mutable_variable_immutable_borrow | main.rs:32:5:32:18 | let ... = 1 | | -| main.rs:31:1:36:1 | exit fn mutable_variable_immutable_borrow (normal) | main.rs:31:1:36:1 | exit fn mutable_variable_immutable_borrow | | -| main.rs:31:40:36:1 | { ... } | main.rs:31:1:36:1 | exit fn mutable_variable_immutable_borrow (normal) | | -| main.rs:32:5:32:18 | let ... = 1 | main.rs:32:17:32:17 | 1 | | -| main.rs:32:9:32:13 | mut x | main.rs:33:5:33:22 | ExprStmt | match | -| main.rs:32:13:32:13 | x | main.rs:32:9:32:13 | mut x | | -| main.rs:32:17:32:17 | 1 | main.rs:32:13:32:13 | x | | -| main.rs:33:5:33:17 | print_i64_ref | main.rs:33:20:33:20 | x | | -| main.rs:33:5:33:21 | print_i64_ref(...) | main.rs:34:5:34:10 | ExprStmt | | -| main.rs:33:5:33:22 | ExprStmt | main.rs:33:5:33:17 | print_i64_ref | | -| main.rs:33:19:33:20 | &x | main.rs:33:5:33:21 | print_i64_ref(...) | | -| main.rs:33:20:33:20 | x | main.rs:33:19:33:20 | &x | | -| main.rs:34:5:34:5 | x | main.rs:34:9:34:9 | 2 | | -| main.rs:34:5:34:9 | ... = ... | main.rs:35:5:35:22 | ExprStmt | | -| main.rs:34:5:34:10 | ExprStmt | main.rs:34:5:34:5 | x | | -| main.rs:34:9:34:9 | 2 | main.rs:34:5:34:9 | ... = ... | | +| main.rs:29:5:29:6 | x2 | main.rs:29:10:29:11 | x2 | | +| main.rs:29:5:29:11 | ... = ... | main.rs:30:5:30:18 | ExprStmt | | +| main.rs:29:5:29:12 | ExprStmt | main.rs:29:5:29:6 | x2 | | +| main.rs:29:10:29:11 | x2 | main.rs:29:5:29:11 | ... = ... | | +| main.rs:30:5:30:13 | print_i64 | main.rs:30:15:30:16 | x2 | | +| main.rs:30:5:30:17 | print_i64(...) | main.rs:24:23:31:1 | { ... } | | +| main.rs:30:5:30:18 | ExprStmt | main.rs:30:5:30:13 | print_i64 | | +| main.rs:30:15:30:16 | x2 | main.rs:30:5:30:17 | print_i64(...) | | +| main.rs:33:1:38:1 | enter fn mutable_variable_immutable_borrow | main.rs:34:5:34:18 | let ... = 1 | | +| main.rs:33:1:38:1 | exit fn mutable_variable_immutable_borrow (normal) | main.rs:33:1:38:1 | exit fn mutable_variable_immutable_borrow | | +| main.rs:33:40:38:1 | { ... } | main.rs:33:1:38:1 | exit fn mutable_variable_immutable_borrow (normal) | | +| main.rs:34:5:34:18 | let ... = 1 | main.rs:34:17:34:17 | 1 | | +| main.rs:34:9:34:13 | mut x | main.rs:35:5:35:22 | ExprStmt | match | +| main.rs:34:13:34:13 | x | main.rs:34:9:34:13 | mut x | | +| main.rs:34:17:34:17 | 1 | main.rs:34:13:34:13 | x | | | main.rs:35:5:35:17 | print_i64_ref | main.rs:35:20:35:20 | x | | -| main.rs:35:5:35:21 | print_i64_ref(...) | main.rs:31:40:36:1 | { ... } | | +| main.rs:35:5:35:21 | print_i64_ref(...) | main.rs:36:5:36:10 | ExprStmt | | | main.rs:35:5:35:22 | ExprStmt | main.rs:35:5:35:17 | print_i64_ref | | | main.rs:35:19:35:20 | &x | main.rs:35:5:35:21 | print_i64_ref(...) | | | main.rs:35:20:35:20 | x | main.rs:35:19:35:20 | &x | | -| main.rs:38:1:44:1 | enter fn variable_shadow1 | main.rs:39:5:39:15 | let ... = 1 | | -| main.rs:38:1:44:1 | exit fn variable_shadow1 (normal) | main.rs:38:1:44:1 | exit fn variable_shadow1 | | -| main.rs:38:23:44:1 | { ... } | main.rs:38:1:44:1 | exit fn variable_shadow1 (normal) | | -| main.rs:39:5:39:15 | let ... = 1 | main.rs:39:14:39:14 | 1 | | -| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | | -| main.rs:39:9:39:10 | x3 | main.rs:40:5:40:18 | ExprStmt | match | -| main.rs:39:14:39:14 | 1 | main.rs:39:9:39:10 | x3 | | -| main.rs:40:5:40:13 | print_i64 | main.rs:40:15:40:16 | x3 | | -| main.rs:40:5:40:17 | print_i64(...) | main.rs:41:5:42:15 | let ... = ... | | -| main.rs:40:5:40:18 | ExprStmt | main.rs:40:5:40:13 | print_i64 | | -| main.rs:40:15:40:16 | x3 | main.rs:40:5:40:17 | print_i64(...) | | -| main.rs:41:5:42:15 | let ... = ... | main.rs:42:9:42:10 | x3 | | +| main.rs:36:5:36:5 | x | main.rs:36:9:36:9 | 2 | | +| main.rs:36:5:36:9 | ... = ... | main.rs:37:5:37:22 | ExprStmt | | +| main.rs:36:5:36:10 | ExprStmt | main.rs:36:5:36:5 | x | | +| main.rs:36:9:36:9 | 2 | main.rs:36:5:36:9 | ... = ... | | +| main.rs:37:5:37:17 | print_i64_ref | main.rs:37:20:37:20 | x | | +| main.rs:37:5:37:21 | print_i64_ref(...) | main.rs:33:40:38:1 | { ... } | | +| main.rs:37:5:37:22 | ExprStmt | main.rs:37:5:37:17 | print_i64_ref | | +| main.rs:37:19:37:20 | &x | main.rs:37:5:37:21 | print_i64_ref(...) | | +| main.rs:37:20:37:20 | x | main.rs:37:19:37:20 | &x | | +| main.rs:40:1:46:1 | enter fn variable_shadow1 | main.rs:41:5:41:15 | let ... = 1 | | +| main.rs:40:1:46:1 | exit fn variable_shadow1 (normal) | main.rs:40:1:46:1 | exit fn variable_shadow1 | | +| main.rs:40:23:46:1 | { ... } | main.rs:40:1:46:1 | exit fn variable_shadow1 (normal) | | +| main.rs:41:5:41:15 | let ... = 1 | main.rs:41:14:41:14 | 1 | | | main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | | -| main.rs:41:9:41:10 | x3 | main.rs:43:5:43:18 | ExprStmt | match | -| main.rs:42:9:42:10 | x3 | main.rs:42:14:42:14 | 1 | | -| main.rs:42:9:42:14 | ... + ... | main.rs:41:9:41:10 | x3 | | -| main.rs:42:14:42:14 | 1 | main.rs:42:9:42:14 | ... + ... | | -| main.rs:43:5:43:13 | print_i64 | main.rs:43:15:43:16 | x3 | | -| main.rs:43:5:43:17 | print_i64(...) | main.rs:38:23:44:1 | { ... } | | -| main.rs:43:5:43:18 | ExprStmt | main.rs:43:5:43:13 | print_i64 | | -| main.rs:43:15:43:16 | x3 | main.rs:43:5:43:17 | print_i64(...) | | -| main.rs:46:1:54:1 | enter fn variable_shadow2 | main.rs:47:5:47:17 | let ... = "a" | | -| main.rs:46:1:54:1 | exit fn variable_shadow2 (normal) | main.rs:46:1:54:1 | exit fn variable_shadow2 | | -| main.rs:46:23:54:1 | { ... } | main.rs:46:1:54:1 | exit fn variable_shadow2 (normal) | | -| main.rs:47:5:47:17 | let ... = "a" | main.rs:47:14:47:16 | "a" | | -| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | | -| main.rs:47:9:47:10 | x4 | main.rs:48:5:48:18 | ExprStmt | match | -| main.rs:47:14:47:16 | "a" | main.rs:47:9:47:10 | x4 | | -| main.rs:48:5:48:13 | print_str | main.rs:48:15:48:16 | x4 | | -| main.rs:48:5:48:17 | print_str(...) | main.rs:49:5:52:5 | ExprStmt | | -| main.rs:48:5:48:18 | ExprStmt | main.rs:48:5:48:13 | print_str | | -| main.rs:48:15:48:16 | x4 | main.rs:48:5:48:17 | print_str(...) | | -| main.rs:49:5:52:5 | ExprStmt | main.rs:50:9:50:21 | let ... = "b" | | -| main.rs:49:5:52:5 | { ... } | main.rs:53:5:53:18 | ExprStmt | | -| main.rs:50:9:50:21 | let ... = "b" | main.rs:50:18:50:20 | "b" | | -| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | | -| main.rs:50:13:50:14 | x4 | main.rs:51:9:51:22 | ExprStmt | match | -| main.rs:50:18:50:20 | "b" | main.rs:50:13:50:14 | x4 | | -| main.rs:51:9:51:17 | print_str | main.rs:51:19:51:20 | x4 | | -| main.rs:51:9:51:21 | print_str(...) | main.rs:49:5:52:5 | { ... } | | -| main.rs:51:9:51:22 | ExprStmt | main.rs:51:9:51:17 | print_str | | -| main.rs:51:19:51:20 | x4 | main.rs:51:9:51:21 | print_str(...) | | -| main.rs:53:5:53:13 | print_str | main.rs:53:15:53:16 | x4 | | -| main.rs:53:5:53:17 | print_str(...) | main.rs:46:23:54:1 | { ... } | | -| main.rs:53:5:53:18 | ExprStmt | main.rs:53:5:53:13 | print_str | | -| main.rs:53:15:53:16 | x4 | main.rs:53:5:53:17 | print_str(...) | | -| main.rs:61:1:76:1 | enter fn let_pattern1 | main.rs:62:5:71:47 | let ... = ... | | -| main.rs:61:1:76:1 | exit fn let_pattern1 (normal) | main.rs:61:1:76:1 | exit fn let_pattern1 | | -| main.rs:61:19:76:1 | { ... } | main.rs:61:1:76:1 | exit fn let_pattern1 (normal) | | -| main.rs:62:5:71:47 | let ... = ... | main.rs:71:11:71:13 | "a" | | -| main.rs:62:9:71:5 | TuplePat | main.rs:63:9:66:9 | TuplePat | match | -| main.rs:63:9:66:9 | TuplePat | main.rs:64:13:64:14 | a1 | match | -| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | | -| main.rs:64:13:64:14 | a1 | main.rs:65:13:65:14 | b1 | match | -| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | | -| main.rs:65:13:65:14 | b1 | main.rs:67:9:70:9 | Point {...} | match | -| main.rs:67:9:70:9 | Point {...} | main.rs:68:13:68:13 | x | match | -| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | | -| main.rs:68:13:68:13 | x | main.rs:69:13:69:13 | y | match | -| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | | -| main.rs:69:13:69:13 | y | main.rs:72:5:72:18 | ExprStmt | match | -| main.rs:71:9:71:46 | TupleExpr | main.rs:62:9:71:5 | TuplePat | | -| main.rs:71:10:71:19 | TupleExpr | main.rs:71:33:71:35 | "x" | | -| main.rs:71:11:71:13 | "a" | main.rs:71:16:71:18 | "b" | | -| main.rs:71:16:71:18 | "b" | main.rs:71:10:71:19 | TupleExpr | | -| main.rs:71:22:71:45 | Point {...} | main.rs:71:9:71:46 | TupleExpr | | -| main.rs:71:33:71:35 | "x" | main.rs:71:41:71:43 | "y" | | -| main.rs:71:41:71:43 | "y" | main.rs:71:22:71:45 | Point {...} | | -| main.rs:72:5:72:13 | print_str | main.rs:72:15:72:16 | a1 | | -| main.rs:72:5:72:17 | print_str(...) | main.rs:73:5:73:18 | ExprStmt | | -| main.rs:72:5:72:18 | ExprStmt | main.rs:72:5:72:13 | print_str | | -| main.rs:72:15:72:16 | a1 | main.rs:72:5:72:17 | print_str(...) | | -| main.rs:73:5:73:13 | print_str | main.rs:73:15:73:16 | b1 | | -| main.rs:73:5:73:17 | print_str(...) | main.rs:74:5:74:17 | ExprStmt | | -| main.rs:73:5:73:18 | ExprStmt | main.rs:73:5:73:13 | print_str | | -| main.rs:73:15:73:16 | b1 | main.rs:73:5:73:17 | print_str(...) | | -| main.rs:74:5:74:13 | print_str | main.rs:74:15:74:15 | x | | -| main.rs:74:5:74:16 | print_str(...) | main.rs:75:5:75:17 | ExprStmt | | -| main.rs:74:5:74:17 | ExprStmt | main.rs:74:5:74:13 | print_str | | -| main.rs:74:15:74:15 | x | main.rs:74:5:74:16 | print_str(...) | | -| main.rs:75:5:75:13 | print_str | main.rs:75:15:75:15 | y | | -| main.rs:75:5:75:16 | print_str(...) | main.rs:61:19:76:1 | { ... } | | -| main.rs:75:5:75:17 | ExprStmt | main.rs:75:5:75:13 | print_str | | -| main.rs:75:15:75:15 | y | main.rs:75:5:75:16 | print_str(...) | | -| main.rs:78:1:86:1 | enter fn let_pattern2 | main.rs:79:5:79:38 | let ... = ... | | -| main.rs:78:1:86:1 | exit fn let_pattern2 (normal) | main.rs:78:1:86:1 | exit fn let_pattern2 | | -| main.rs:78:19:86:1 | { ... } | main.rs:78:1:86:1 | exit fn let_pattern2 (normal) | | -| main.rs:79:5:79:38 | let ... = ... | main.rs:79:25:79:27 | "a" | | -| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | | -| main.rs:79:9:79:10 | p1 | main.rs:80:5:83:11 | let ... = p1 | match | -| main.rs:79:14:79:37 | Point {...} | main.rs:79:9:79:10 | p1 | | -| main.rs:79:25:79:27 | "a" | main.rs:79:33:79:35 | "b" | | -| main.rs:79:33:79:35 | "b" | main.rs:79:14:79:37 | Point {...} | | -| main.rs:80:5:83:11 | let ... = p1 | main.rs:83:9:83:10 | p1 | | -| main.rs:80:9:83:5 | Point {...} | main.rs:81:12:81:13 | a2 | match | -| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | | -| main.rs:81:12:81:13 | a2 | main.rs:82:12:82:13 | b2 | match | -| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | | -| main.rs:82:12:82:13 | b2 | main.rs:84:5:84:18 | ExprStmt | match | -| main.rs:83:9:83:10 | p1 | main.rs:80:9:83:5 | Point {...} | | -| main.rs:84:5:84:13 | print_str | main.rs:84:15:84:16 | a2 | | -| main.rs:84:5:84:17 | print_str(...) | main.rs:85:5:85:18 | ExprStmt | | -| main.rs:84:5:84:18 | ExprStmt | main.rs:84:5:84:13 | print_str | | -| main.rs:84:15:84:16 | a2 | main.rs:84:5:84:17 | print_str(...) | | -| main.rs:85:5:85:13 | print_str | main.rs:85:15:85:16 | b2 | | -| main.rs:85:5:85:17 | print_str(...) | main.rs:78:19:86:1 | { ... } | | -| main.rs:85:5:85:18 | ExprStmt | main.rs:85:5:85:13 | print_str | | -| main.rs:85:15:85:16 | b2 | main.rs:85:5:85:17 | print_str(...) | | -| main.rs:88:1:95:1 | enter fn let_pattern3 | main.rs:89:5:89:42 | let ... = ... | | -| main.rs:88:1:95:1 | exit fn let_pattern3 (normal) | main.rs:88:1:95:1 | exit fn let_pattern3 | | -| main.rs:88:19:95:1 | { ... } | main.rs:88:1:95:1 | exit fn let_pattern3 (normal) | | -| main.rs:89:5:89:42 | let ... = ... | main.rs:89:14:89:17 | Some | | -| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | | -| main.rs:89:9:89:10 | s1 | main.rs:92:11:92:12 | s1 | match | -| main.rs:89:14:89:17 | Some | main.rs:89:19:89:30 | ...::from | | -| main.rs:89:14:89:41 | Some(...) | main.rs:89:9:89:10 | s1 | | -| main.rs:89:19:89:30 | ...::from | main.rs:89:32:89:39 | "Hello!" | | -| main.rs:89:19:89:40 | ...::from(...) | main.rs:89:14:89:41 | Some(...) | | -| main.rs:89:32:89:39 | "Hello!" | main.rs:89:19:89:40 | ...::from(...) | | -| main.rs:91:5:94:5 | if ... {...} | main.rs:88:19:95:1 | { ... } | | -| main.rs:91:8:92:12 | [boolean(false)] let ... = s1 | main.rs:91:5:94:5 | if ... {...} | false | -| main.rs:91:8:92:12 | [boolean(true)] let ... = s1 | main.rs:93:9:93:22 | ExprStmt | true | -| main.rs:91:12:91:23 | Some(...) | main.rs:91:8:92:12 | [boolean(false)] let ... = s1 | no-match | -| main.rs:91:12:91:23 | Some(...) | main.rs:91:21:91:22 | s2 | match | -| main.rs:91:17:91:22 | ref s2 | main.rs:91:8:92:12 | [boolean(true)] let ... = s1 | match | -| main.rs:91:21:91:22 | s2 | main.rs:91:17:91:22 | ref s2 | | -| main.rs:92:11:92:12 | s1 | main.rs:91:12:91:23 | Some(...) | | -| main.rs:92:14:94:5 | { ... } | main.rs:91:5:94:5 | if ... {...} | | -| main.rs:93:9:93:17 | print_str | main.rs:93:19:93:20 | s2 | | -| main.rs:93:9:93:21 | print_str(...) | main.rs:92:14:94:5 | { ... } | | -| main.rs:93:9:93:22 | ExprStmt | main.rs:93:9:93:17 | print_str | | -| main.rs:93:19:93:20 | s2 | main.rs:93:9:93:21 | print_str(...) | | -| main.rs:97:1:108:1 | enter fn let_pattern4 | main.rs:98:5:98:23 | let ... = ... | | -| main.rs:97:1:108:1 | exit fn let_pattern4 (normal) | main.rs:97:1:108:1 | exit fn let_pattern4 | | -| main.rs:97:19:108:1 | { ... } | main.rs:97:1:108:1 | exit fn let_pattern4 (normal) | | -| main.rs:98:5:98:23 | let ... = ... | main.rs:98:13:98:16 | Some | | -| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | | -| main.rs:98:9:98:9 | x | main.rs:99:5:106:6 | let ... = x else {...} | match | -| main.rs:98:13:98:16 | Some | main.rs:98:18:98:21 | "x5" | | -| main.rs:98:13:98:22 | Some(...) | main.rs:98:9:98:9 | x | | -| main.rs:98:18:98:21 | "x5" | main.rs:98:13:98:22 | Some(...) | | -| main.rs:99:5:106:6 | let ... = x else {...} | main.rs:100:7:100:7 | x | | -| main.rs:99:9:99:15 | Some(...) | main.rs:99:14:99:14 | x | match | -| main.rs:99:9:99:15 | Some(...) | main.rs:102:9:103:14 | let ... = x | no-match | -| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | | -| main.rs:99:14:99:14 | x | main.rs:107:5:107:17 | ExprStmt | match | -| main.rs:100:7:100:7 | x | main.rs:99:9:99:15 | Some(...) | | -| main.rs:102:9:103:14 | let ... = x | main.rs:103:13:103:13 | x | | -| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | | -| main.rs:102:13:102:13 | x | main.rs:104:9:104:30 | ExprStmt | match | -| main.rs:103:13:103:13 | x | main.rs:102:13:102:13 | x | | -| main.rs:104:9:104:17 | print_str | main.rs:104:19:104:19 | x | | -| main.rs:104:9:104:29 | print_str(...) | main.rs:105:9:105:13 | ...::panic | | -| main.rs:104:9:104:30 | ExprStmt | main.rs:104:9:104:17 | print_str | | -| main.rs:104:19:104:19 | x | main.rs:104:19:104:28 | x.unwrap() | | -| main.rs:104:19:104:28 | x.unwrap() | main.rs:104:9:104:29 | print_str(...) | | -| main.rs:105:9:105:13 | "not yet implemented" | main.rs:105:9:105:13 | ...::panic(...) | | -| main.rs:105:9:105:13 | ...::panic | main.rs:105:9:105:13 | "not yet implemented" | | -| main.rs:105:9:105:13 | ...::panic(...) | main.rs:105:9:105:13 | MacroBlockExpr | | -| main.rs:105:9:105:13 | MacroBlockExpr | main.rs:105:9:105:15 | todo!... | | -| main.rs:105:9:105:15 | MacroExpr | main.rs:101:10:106:5 | { ... } | | -| main.rs:105:9:105:15 | todo!... | main.rs:105:9:105:15 | MacroExpr | | -| main.rs:107:5:107:13 | print_str | main.rs:107:15:107:15 | x | | -| main.rs:107:5:107:16 | print_str(...) | main.rs:97:19:108:1 | { ... } | | -| main.rs:107:5:107:17 | ExprStmt | main.rs:107:5:107:13 | print_str | | -| main.rs:107:15:107:15 | x | main.rs:107:5:107:16 | print_str(...) | | -| main.rs:110:1:117:1 | enter fn let_pattern5 | main.rs:111:5:111:42 | let ... = ... | | -| main.rs:110:1:117:1 | exit fn let_pattern5 (normal) | main.rs:110:1:117:1 | exit fn let_pattern5 | | -| main.rs:110:19:117:1 | { ... } | main.rs:110:1:117:1 | exit fn let_pattern5 (normal) | | -| main.rs:111:5:111:42 | let ... = ... | main.rs:111:14:111:17 | Some | | -| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | | -| main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | match | -| main.rs:111:14:111:17 | Some | main.rs:111:19:111:30 | ...::from | | -| main.rs:111:14:111:41 | Some(...) | main.rs:111:9:111:10 | s1 | | -| main.rs:111:19:111:30 | ...::from | main.rs:111:32:111:39 | "Hello!" | | -| main.rs:111:19:111:40 | ...::from(...) | main.rs:111:14:111:41 | Some(...) | | -| main.rs:111:32:111:39 | "Hello!" | main.rs:111:19:111:40 | ...::from(...) | | -| main.rs:113:5:116:5 | while ... { ... } | main.rs:110:19:117:1 | { ... } | | -| main.rs:113:11:114:12 | [boolean(false)] let ... = s1 | main.rs:113:5:116:5 | while ... { ... } | false | -| main.rs:113:11:114:12 | [boolean(true)] let ... = s1 | main.rs:115:9:115:22 | ExprStmt | true | -| main.rs:113:15:113:26 | Some(...) | main.rs:113:11:114:12 | [boolean(false)] let ... = s1 | no-match | -| main.rs:113:15:113:26 | Some(...) | main.rs:113:24:113:25 | s2 | match | -| main.rs:113:20:113:25 | ref s2 | main.rs:113:11:114:12 | [boolean(true)] let ... = s1 | match | -| main.rs:113:24:113:25 | s2 | main.rs:113:20:113:25 | ref s2 | | -| main.rs:114:11:114:12 | s1 | main.rs:113:15:113:26 | Some(...) | | -| main.rs:114:14:116:5 | { ... } | main.rs:114:11:114:12 | s1 | | -| main.rs:115:9:115:17 | print_str | main.rs:115:19:115:20 | s2 | | -| main.rs:115:9:115:21 | print_str(...) | main.rs:114:14:116:5 | { ... } | | -| main.rs:115:9:115:22 | ExprStmt | main.rs:115:9:115:17 | print_str | | -| main.rs:115:19:115:20 | s2 | main.rs:115:9:115:21 | print_str(...) | | -| main.rs:119:1:134:1 | enter fn match_pattern1 | main.rs:120:5:120:21 | let ... = ... | | -| main.rs:119:1:134:1 | exit fn match_pattern1 (normal) | main.rs:119:1:134:1 | exit fn match_pattern1 | | -| main.rs:119:21:134:1 | { ... } | main.rs:119:1:134:1 | exit fn match_pattern1 (normal) | | -| main.rs:120:5:120:21 | let ... = ... | main.rs:120:14:120:17 | Some | | -| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | | -| main.rs:120:9:120:10 | x6 | main.rs:121:5:121:16 | let ... = 10 | match | -| main.rs:120:14:120:17 | Some | main.rs:120:19:120:19 | 5 | | -| main.rs:120:14:120:20 | Some(...) | main.rs:120:9:120:10 | x6 | | -| main.rs:120:19:120:19 | 5 | main.rs:120:14:120:20 | Some(...) | | -| main.rs:121:5:121:16 | let ... = 10 | main.rs:121:14:121:15 | 10 | | -| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | | -| main.rs:121:9:121:10 | y1 | main.rs:123:5:131:5 | ExprStmt | match | -| main.rs:121:14:121:15 | 10 | main.rs:121:9:121:10 | y1 | | -| main.rs:123:5:131:5 | ExprStmt | main.rs:123:11:123:12 | x6 | | -| main.rs:123:5:131:5 | match x6 { ... } | main.rs:133:5:133:18 | ExprStmt | | -| main.rs:123:11:123:12 | x6 | main.rs:124:9:124:16 | Some(...) | | -| main.rs:124:9:124:16 | Some(...) | main.rs:124:14:124:15 | 50 | match | -| main.rs:124:9:124:16 | Some(...) | main.rs:125:9:125:16 | Some(...) | no-match | -| main.rs:124:14:124:15 | 50 | main.rs:124:14:124:15 | 50 | | -| main.rs:124:14:124:15 | 50 | main.rs:124:21:124:29 | print_str | match | -| main.rs:124:14:124:15 | 50 | main.rs:125:9:125:16 | Some(...) | no-match | -| main.rs:124:21:124:29 | print_str | main.rs:124:31:124:38 | "Got 50" | | -| main.rs:124:21:124:39 | print_str(...) | main.rs:123:5:131:5 | match x6 { ... } | | -| main.rs:124:31:124:38 | "Got 50" | main.rs:124:21:124:39 | print_str(...) | | -| main.rs:125:9:125:16 | Some(...) | main.rs:125:14:125:15 | y1 | match | -| main.rs:125:9:125:16 | Some(...) | main.rs:130:9:130:12 | None | no-match | -| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | | -| main.rs:125:14:125:15 | y1 | main.rs:128:13:128:21 | print_i64 | match | -| main.rs:127:9:129:9 | { ... } | main.rs:123:5:131:5 | match x6 { ... } | | -| main.rs:128:13:128:21 | print_i64 | main.rs:128:23:128:24 | y1 | | -| main.rs:128:13:128:25 | print_i64(...) | main.rs:127:9:129:9 | { ... } | | -| main.rs:128:23:128:24 | y1 | main.rs:128:13:128:25 | print_i64(...) | | -| main.rs:130:9:130:12 | None | main.rs:130:9:130:12 | None | | -| main.rs:130:9:130:12 | None | main.rs:130:17:130:25 | print_str | match | -| main.rs:130:17:130:25 | print_str | main.rs:130:27:130:32 | "NONE" | | -| main.rs:130:17:130:33 | print_str(...) | main.rs:123:5:131:5 | match x6 { ... } | | -| main.rs:130:27:130:32 | "NONE" | main.rs:130:17:130:33 | print_str(...) | | -| main.rs:133:5:133:13 | print_i64 | main.rs:133:15:133:16 | y1 | | -| main.rs:133:5:133:17 | print_i64(...) | main.rs:119:21:134:1 | { ... } | | -| main.rs:133:5:133:18 | ExprStmt | main.rs:133:5:133:13 | print_i64 | | -| main.rs:133:15:133:16 | y1 | main.rs:133:5:133:17 | print_i64(...) | | -| main.rs:136:1:165:1 | enter fn match_pattern2 | main.rs:137:5:137:36 | let ... = ... | | -| main.rs:136:1:165:1 | exit fn match_pattern2 (normal) | main.rs:136:1:165:1 | exit fn match_pattern2 | | -| main.rs:136:21:165:1 | { ... } | main.rs:136:1:165:1 | exit fn match_pattern2 (normal) | | -| main.rs:137:5:137:36 | let ... = ... | main.rs:137:20:137:20 | 2 | | -| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | | -| main.rs:137:9:137:15 | numbers | main.rs:139:5:152:5 | ExprStmt | match | -| main.rs:137:19:137:35 | TupleExpr | main.rs:137:9:137:15 | numbers | | -| main.rs:137:20:137:20 | 2 | main.rs:137:23:137:23 | 4 | | -| main.rs:137:23:137:23 | 4 | main.rs:137:26:137:26 | 8 | | -| main.rs:137:26:137:26 | 8 | main.rs:137:29:137:30 | 16 | | -| main.rs:137:29:137:30 | 16 | main.rs:137:33:137:34 | 32 | | -| main.rs:137:33:137:34 | 32 | main.rs:137:19:137:35 | TupleExpr | | -| main.rs:139:5:152:5 | ExprStmt | main.rs:139:11:139:17 | numbers | | -| main.rs:139:5:152:5 | match numbers { ... } | main.rs:154:11:154:17 | numbers | | -| main.rs:139:11:139:17 | numbers | main.rs:141:9:147:9 | TuplePat | | -| main.rs:141:9:147:9 | TuplePat | main.rs:142:13:142:17 | first | match | -| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | | -| main.rs:142:13:142:17 | first | main.rs:143:13:143:13 | _ | match | -| main.rs:143:13:143:13 | _ | main.rs:144:13:144:17 | third | match | -| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | | -| main.rs:144:13:144:17 | third | main.rs:145:13:145:13 | _ | match | -| main.rs:145:13:145:13 | _ | main.rs:146:13:146:17 | fifth | match | -| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | | -| main.rs:146:13:146:17 | fifth | main.rs:148:13:148:29 | ExprStmt | match | -| main.rs:147:14:151:9 | { ... } | main.rs:139:5:152:5 | match numbers { ... } | | -| main.rs:148:13:148:21 | print_i64 | main.rs:148:23:148:27 | first | | -| main.rs:148:13:148:28 | print_i64(...) | main.rs:149:13:149:29 | ExprStmt | | -| main.rs:148:13:148:29 | ExprStmt | main.rs:148:13:148:21 | print_i64 | | -| main.rs:148:23:148:27 | first | main.rs:148:13:148:28 | print_i64(...) | | -| main.rs:149:13:149:21 | print_i64 | main.rs:149:23:149:27 | third | | -| main.rs:149:13:149:28 | print_i64(...) | main.rs:150:13:150:29 | ExprStmt | | -| main.rs:149:13:149:29 | ExprStmt | main.rs:149:13:149:21 | print_i64 | | -| main.rs:149:23:149:27 | third | main.rs:149:13:149:28 | print_i64(...) | | -| main.rs:150:13:150:21 | print_i64 | main.rs:150:23:150:27 | fifth | | -| main.rs:150:13:150:28 | print_i64(...) | main.rs:147:14:151:9 | { ... } | | +| main.rs:41:9:41:10 | x3 | main.rs:42:5:42:18 | ExprStmt | match | +| main.rs:41:14:41:14 | 1 | main.rs:41:9:41:10 | x3 | | +| main.rs:42:5:42:13 | print_i64 | main.rs:42:15:42:16 | x3 | | +| main.rs:42:5:42:17 | print_i64(...) | main.rs:43:5:44:15 | let ... = ... | | +| main.rs:42:5:42:18 | ExprStmt | main.rs:42:5:42:13 | print_i64 | | +| main.rs:42:15:42:16 | x3 | main.rs:42:5:42:17 | print_i64(...) | | +| main.rs:43:5:44:15 | let ... = ... | main.rs:44:9:44:10 | x3 | | +| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | | +| main.rs:43:9:43:10 | x3 | main.rs:45:5:45:18 | ExprStmt | match | +| main.rs:44:9:44:10 | x3 | main.rs:44:14:44:14 | 1 | | +| main.rs:44:9:44:14 | ... + ... | main.rs:43:9:43:10 | x3 | | +| main.rs:44:14:44:14 | 1 | main.rs:44:9:44:14 | ... + ... | | +| main.rs:45:5:45:13 | print_i64 | main.rs:45:15:45:16 | x3 | | +| main.rs:45:5:45:17 | print_i64(...) | main.rs:40:23:46:1 | { ... } | | +| main.rs:45:5:45:18 | ExprStmt | main.rs:45:5:45:13 | print_i64 | | +| main.rs:45:15:45:16 | x3 | main.rs:45:5:45:17 | print_i64(...) | | +| main.rs:48:1:56:1 | enter fn variable_shadow2 | main.rs:49:5:49:17 | let ... = "a" | | +| main.rs:48:1:56:1 | exit fn variable_shadow2 (normal) | main.rs:48:1:56:1 | exit fn variable_shadow2 | | +| main.rs:48:23:56:1 | { ... } | main.rs:48:1:56:1 | exit fn variable_shadow2 (normal) | | +| main.rs:49:5:49:17 | let ... = "a" | main.rs:49:14:49:16 | "a" | | +| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | | +| main.rs:49:9:49:10 | x4 | main.rs:50:5:50:18 | ExprStmt | match | +| main.rs:49:14:49:16 | "a" | main.rs:49:9:49:10 | x4 | | +| main.rs:50:5:50:13 | print_str | main.rs:50:15:50:16 | x4 | | +| main.rs:50:5:50:17 | print_str(...) | main.rs:51:5:54:5 | ExprStmt | | +| main.rs:50:5:50:18 | ExprStmt | main.rs:50:5:50:13 | print_str | | +| main.rs:50:15:50:16 | x4 | main.rs:50:5:50:17 | print_str(...) | | +| main.rs:51:5:54:5 | ExprStmt | main.rs:52:9:52:21 | let ... = "b" | | +| main.rs:51:5:54:5 | { ... } | main.rs:55:5:55:18 | ExprStmt | | +| main.rs:52:9:52:21 | let ... = "b" | main.rs:52:18:52:20 | "b" | | +| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | | +| main.rs:52:13:52:14 | x4 | main.rs:53:9:53:22 | ExprStmt | match | +| main.rs:52:18:52:20 | "b" | main.rs:52:13:52:14 | x4 | | +| main.rs:53:9:53:17 | print_str | main.rs:53:19:53:20 | x4 | | +| main.rs:53:9:53:21 | print_str(...) | main.rs:51:5:54:5 | { ... } | | +| main.rs:53:9:53:22 | ExprStmt | main.rs:53:9:53:17 | print_str | | +| main.rs:53:19:53:20 | x4 | main.rs:53:9:53:21 | print_str(...) | | +| main.rs:55:5:55:13 | print_str | main.rs:55:15:55:16 | x4 | | +| main.rs:55:5:55:17 | print_str(...) | main.rs:48:23:56:1 | { ... } | | +| main.rs:55:5:55:18 | ExprStmt | main.rs:55:5:55:13 | print_str | | +| main.rs:55:15:55:16 | x4 | main.rs:55:5:55:17 | print_str(...) | | +| main.rs:63:1:78:1 | enter fn let_pattern1 | main.rs:64:5:73:47 | let ... = ... | | +| main.rs:63:1:78:1 | exit fn let_pattern1 (normal) | main.rs:63:1:78:1 | exit fn let_pattern1 | | +| main.rs:63:19:78:1 | { ... } | main.rs:63:1:78:1 | exit fn let_pattern1 (normal) | | +| main.rs:64:5:73:47 | let ... = ... | main.rs:73:11:73:13 | "a" | | +| main.rs:64:9:73:5 | TuplePat | main.rs:65:9:68:9 | TuplePat | match | +| main.rs:65:9:68:9 | TuplePat | main.rs:66:13:66:14 | a1 | match | +| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | | +| main.rs:66:13:66:14 | a1 | main.rs:67:13:67:14 | b1 | match | +| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | | +| main.rs:67:13:67:14 | b1 | main.rs:69:9:72:9 | Point {...} | match | +| main.rs:69:9:72:9 | Point {...} | main.rs:70:13:70:13 | x | match | +| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | | +| main.rs:70:13:70:13 | x | main.rs:71:13:71:13 | y | match | +| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | | +| main.rs:71:13:71:13 | y | main.rs:74:5:74:18 | ExprStmt | match | +| main.rs:73:9:73:46 | TupleExpr | main.rs:64:9:73:5 | TuplePat | | +| main.rs:73:10:73:19 | TupleExpr | main.rs:73:33:73:35 | "x" | | +| main.rs:73:11:73:13 | "a" | main.rs:73:16:73:18 | "b" | | +| main.rs:73:16:73:18 | "b" | main.rs:73:10:73:19 | TupleExpr | | +| main.rs:73:22:73:45 | Point {...} | main.rs:73:9:73:46 | TupleExpr | | +| main.rs:73:33:73:35 | "x" | main.rs:73:41:73:43 | "y" | | +| main.rs:73:41:73:43 | "y" | main.rs:73:22:73:45 | Point {...} | | +| main.rs:74:5:74:13 | print_str | main.rs:74:15:74:16 | a1 | | +| main.rs:74:5:74:17 | print_str(...) | main.rs:75:5:75:18 | ExprStmt | | +| main.rs:74:5:74:18 | ExprStmt | main.rs:74:5:74:13 | print_str | | +| main.rs:74:15:74:16 | a1 | main.rs:74:5:74:17 | print_str(...) | | +| main.rs:75:5:75:13 | print_str | main.rs:75:15:75:16 | b1 | | +| main.rs:75:5:75:17 | print_str(...) | main.rs:76:5:76:17 | ExprStmt | | +| main.rs:75:5:75:18 | ExprStmt | main.rs:75:5:75:13 | print_str | | +| main.rs:75:15:75:16 | b1 | main.rs:75:5:75:17 | print_str(...) | | +| main.rs:76:5:76:13 | print_str | main.rs:76:15:76:15 | x | | +| main.rs:76:5:76:16 | print_str(...) | main.rs:77:5:77:17 | ExprStmt | | +| main.rs:76:5:76:17 | ExprStmt | main.rs:76:5:76:13 | print_str | | +| main.rs:76:15:76:15 | x | main.rs:76:5:76:16 | print_str(...) | | +| main.rs:77:5:77:13 | print_str | main.rs:77:15:77:15 | y | | +| main.rs:77:5:77:16 | print_str(...) | main.rs:63:19:78:1 | { ... } | | +| main.rs:77:5:77:17 | ExprStmt | main.rs:77:5:77:13 | print_str | | +| main.rs:77:15:77:15 | y | main.rs:77:5:77:16 | print_str(...) | | +| main.rs:80:1:88:1 | enter fn let_pattern2 | main.rs:81:5:81:38 | let ... = ... | | +| main.rs:80:1:88:1 | exit fn let_pattern2 (normal) | main.rs:80:1:88:1 | exit fn let_pattern2 | | +| main.rs:80:19:88:1 | { ... } | main.rs:80:1:88:1 | exit fn let_pattern2 (normal) | | +| main.rs:81:5:81:38 | let ... = ... | main.rs:81:25:81:27 | "a" | | +| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | | +| main.rs:81:9:81:10 | p1 | main.rs:82:5:85:11 | let ... = p1 | match | +| main.rs:81:14:81:37 | Point {...} | main.rs:81:9:81:10 | p1 | | +| main.rs:81:25:81:27 | "a" | main.rs:81:33:81:35 | "b" | | +| main.rs:81:33:81:35 | "b" | main.rs:81:14:81:37 | Point {...} | | +| main.rs:82:5:85:11 | let ... = p1 | main.rs:85:9:85:10 | p1 | | +| main.rs:82:9:85:5 | Point {...} | main.rs:83:12:83:13 | a2 | match | +| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | | +| main.rs:83:12:83:13 | a2 | main.rs:84:12:84:13 | b2 | match | +| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | | +| main.rs:84:12:84:13 | b2 | main.rs:86:5:86:18 | ExprStmt | match | +| main.rs:85:9:85:10 | p1 | main.rs:82:9:85:5 | Point {...} | | +| main.rs:86:5:86:13 | print_str | main.rs:86:15:86:16 | a2 | | +| main.rs:86:5:86:17 | print_str(...) | main.rs:87:5:87:18 | ExprStmt | | +| main.rs:86:5:86:18 | ExprStmt | main.rs:86:5:86:13 | print_str | | +| main.rs:86:15:86:16 | a2 | main.rs:86:5:86:17 | print_str(...) | | +| main.rs:87:5:87:13 | print_str | main.rs:87:15:87:16 | b2 | | +| main.rs:87:5:87:17 | print_str(...) | main.rs:80:19:88:1 | { ... } | | +| main.rs:87:5:87:18 | ExprStmt | main.rs:87:5:87:13 | print_str | | +| main.rs:87:15:87:16 | b2 | main.rs:87:5:87:17 | print_str(...) | | +| main.rs:90:1:97:1 | enter fn let_pattern3 | main.rs:91:5:91:42 | let ... = ... | | +| main.rs:90:1:97:1 | exit fn let_pattern3 (normal) | main.rs:90:1:97:1 | exit fn let_pattern3 | | +| main.rs:90:19:97:1 | { ... } | main.rs:90:1:97:1 | exit fn let_pattern3 (normal) | | +| main.rs:91:5:91:42 | let ... = ... | main.rs:91:14:91:17 | Some | | +| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | | +| main.rs:91:9:91:10 | s1 | main.rs:94:11:94:12 | s1 | match | +| main.rs:91:14:91:17 | Some | main.rs:91:19:91:30 | ...::from | | +| main.rs:91:14:91:41 | Some(...) | main.rs:91:9:91:10 | s1 | | +| main.rs:91:19:91:30 | ...::from | main.rs:91:32:91:39 | "Hello!" | | +| main.rs:91:19:91:40 | ...::from(...) | main.rs:91:14:91:41 | Some(...) | | +| main.rs:91:32:91:39 | "Hello!" | main.rs:91:19:91:40 | ...::from(...) | | +| main.rs:93:5:96:5 | if ... {...} | main.rs:90:19:97:1 | { ... } | | +| main.rs:93:8:94:12 | [boolean(false)] let ... = s1 | main.rs:93:5:96:5 | if ... {...} | false | +| main.rs:93:8:94:12 | [boolean(true)] let ... = s1 | main.rs:95:9:95:22 | ExprStmt | true | +| main.rs:93:12:93:23 | Some(...) | main.rs:93:8:94:12 | [boolean(false)] let ... = s1 | no-match | +| main.rs:93:12:93:23 | Some(...) | main.rs:93:21:93:22 | s2 | match | +| main.rs:93:17:93:22 | ref s2 | main.rs:93:8:94:12 | [boolean(true)] let ... = s1 | match | +| main.rs:93:21:93:22 | s2 | main.rs:93:17:93:22 | ref s2 | | +| main.rs:94:11:94:12 | s1 | main.rs:93:12:93:23 | Some(...) | | +| main.rs:94:14:96:5 | { ... } | main.rs:93:5:96:5 | if ... {...} | | +| main.rs:95:9:95:17 | print_str | main.rs:95:19:95:20 | s2 | | +| main.rs:95:9:95:21 | print_str(...) | main.rs:94:14:96:5 | { ... } | | +| main.rs:95:9:95:22 | ExprStmt | main.rs:95:9:95:17 | print_str | | +| main.rs:95:19:95:20 | s2 | main.rs:95:9:95:21 | print_str(...) | | +| main.rs:99:1:110:1 | enter fn let_pattern4 | main.rs:100:5:100:23 | let ... = ... | | +| main.rs:99:1:110:1 | exit fn let_pattern4 (normal) | main.rs:99:1:110:1 | exit fn let_pattern4 | | +| main.rs:99:19:110:1 | { ... } | main.rs:99:1:110:1 | exit fn let_pattern4 (normal) | | +| main.rs:100:5:100:23 | let ... = ... | main.rs:100:13:100:16 | Some | | +| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | | +| main.rs:100:9:100:9 | x | main.rs:101:5:108:6 | let ... = x else {...} | match | +| main.rs:100:13:100:16 | Some | main.rs:100:18:100:21 | "x5" | | +| main.rs:100:13:100:22 | Some(...) | main.rs:100:9:100:9 | x | | +| main.rs:100:18:100:21 | "x5" | main.rs:100:13:100:22 | Some(...) | | +| main.rs:101:5:108:6 | let ... = x else {...} | main.rs:102:7:102:7 | x | | +| main.rs:101:9:101:15 | Some(...) | main.rs:101:14:101:14 | x | match | +| main.rs:101:9:101:15 | Some(...) | main.rs:104:9:105:14 | let ... = x | no-match | +| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | | +| main.rs:101:14:101:14 | x | main.rs:109:5:109:17 | ExprStmt | match | +| main.rs:102:7:102:7 | x | main.rs:101:9:101:15 | Some(...) | | +| main.rs:104:9:105:14 | let ... = x | main.rs:105:13:105:13 | x | | +| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | | +| main.rs:104:13:104:13 | x | main.rs:106:9:106:30 | ExprStmt | match | +| main.rs:105:13:105:13 | x | main.rs:104:13:104:13 | x | | +| main.rs:106:9:106:17 | print_str | main.rs:106:19:106:19 | x | | +| main.rs:106:9:106:29 | print_str(...) | main.rs:107:9:107:13 | ...::panic | | +| main.rs:106:9:106:30 | ExprStmt | main.rs:106:9:106:17 | print_str | | +| main.rs:106:19:106:19 | x | main.rs:106:19:106:28 | x.unwrap() | | +| main.rs:106:19:106:28 | x.unwrap() | main.rs:106:9:106:29 | print_str(...) | | +| main.rs:107:9:107:13 | "not yet implemented" | main.rs:107:9:107:13 | ...::panic(...) | | +| main.rs:107:9:107:13 | ...::panic | main.rs:107:9:107:13 | "not yet implemented" | | +| main.rs:107:9:107:13 | ...::panic(...) | main.rs:107:9:107:13 | MacroBlockExpr | | +| main.rs:107:9:107:13 | MacroBlockExpr | main.rs:107:9:107:15 | todo!... | | +| main.rs:107:9:107:15 | MacroExpr | main.rs:103:10:108:5 | { ... } | | +| main.rs:107:9:107:15 | todo!... | main.rs:107:9:107:15 | MacroExpr | | +| main.rs:109:5:109:13 | print_str | main.rs:109:15:109:15 | x | | +| main.rs:109:5:109:16 | print_str(...) | main.rs:99:19:110:1 | { ... } | | +| main.rs:109:5:109:17 | ExprStmt | main.rs:109:5:109:13 | print_str | | +| main.rs:109:15:109:15 | x | main.rs:109:5:109:16 | print_str(...) | | +| main.rs:112:1:119:1 | enter fn let_pattern5 | main.rs:113:5:113:42 | let ... = ... | | +| main.rs:112:1:119:1 | exit fn let_pattern5 (normal) | main.rs:112:1:119:1 | exit fn let_pattern5 | | +| main.rs:112:19:119:1 | { ... } | main.rs:112:1:119:1 | exit fn let_pattern5 (normal) | | +| main.rs:113:5:113:42 | let ... = ... | main.rs:113:14:113:17 | Some | | +| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | | +| main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | match | +| main.rs:113:14:113:17 | Some | main.rs:113:19:113:30 | ...::from | | +| main.rs:113:14:113:41 | Some(...) | main.rs:113:9:113:10 | s1 | | +| main.rs:113:19:113:30 | ...::from | main.rs:113:32:113:39 | "Hello!" | | +| main.rs:113:19:113:40 | ...::from(...) | main.rs:113:14:113:41 | Some(...) | | +| main.rs:113:32:113:39 | "Hello!" | main.rs:113:19:113:40 | ...::from(...) | | +| main.rs:115:5:118:5 | while ... { ... } | main.rs:112:19:119:1 | { ... } | | +| main.rs:115:11:116:12 | [boolean(false)] let ... = s1 | main.rs:115:5:118:5 | while ... { ... } | false | +| main.rs:115:11:116:12 | [boolean(true)] let ... = s1 | main.rs:117:9:117:22 | ExprStmt | true | +| main.rs:115:15:115:26 | Some(...) | main.rs:115:11:116:12 | [boolean(false)] let ... = s1 | no-match | +| main.rs:115:15:115:26 | Some(...) | main.rs:115:24:115:25 | s2 | match | +| main.rs:115:20:115:25 | ref s2 | main.rs:115:11:116:12 | [boolean(true)] let ... = s1 | match | +| main.rs:115:24:115:25 | s2 | main.rs:115:20:115:25 | ref s2 | | +| main.rs:116:11:116:12 | s1 | main.rs:115:15:115:26 | Some(...) | | +| main.rs:116:14:118:5 | { ... } | main.rs:116:11:116:12 | s1 | | +| main.rs:117:9:117:17 | print_str | main.rs:117:19:117:20 | s2 | | +| main.rs:117:9:117:21 | print_str(...) | main.rs:116:14:118:5 | { ... } | | +| main.rs:117:9:117:22 | ExprStmt | main.rs:117:9:117:17 | print_str | | +| main.rs:117:19:117:20 | s2 | main.rs:117:9:117:21 | print_str(...) | | +| main.rs:121:1:136:1 | enter fn match_pattern1 | main.rs:122:5:122:21 | let ... = ... | | +| main.rs:121:1:136:1 | exit fn match_pattern1 (normal) | main.rs:121:1:136:1 | exit fn match_pattern1 | | +| main.rs:121:21:136:1 | { ... } | main.rs:121:1:136:1 | exit fn match_pattern1 (normal) | | +| main.rs:122:5:122:21 | let ... = ... | main.rs:122:14:122:17 | Some | | +| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | | +| main.rs:122:9:122:10 | x6 | main.rs:123:5:123:16 | let ... = 10 | match | +| main.rs:122:14:122:17 | Some | main.rs:122:19:122:19 | 5 | | +| main.rs:122:14:122:20 | Some(...) | main.rs:122:9:122:10 | x6 | | +| main.rs:122:19:122:19 | 5 | main.rs:122:14:122:20 | Some(...) | | +| main.rs:123:5:123:16 | let ... = 10 | main.rs:123:14:123:15 | 10 | | +| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | | +| main.rs:123:9:123:10 | y1 | main.rs:125:5:133:5 | ExprStmt | match | +| main.rs:123:14:123:15 | 10 | main.rs:123:9:123:10 | y1 | | +| main.rs:125:5:133:5 | ExprStmt | main.rs:125:11:125:12 | x6 | | +| main.rs:125:5:133:5 | match x6 { ... } | main.rs:135:5:135:18 | ExprStmt | | +| main.rs:125:11:125:12 | x6 | main.rs:126:9:126:16 | Some(...) | | +| main.rs:126:9:126:16 | Some(...) | main.rs:126:14:126:15 | 50 | match | +| main.rs:126:9:126:16 | Some(...) | main.rs:127:9:127:16 | Some(...) | no-match | +| main.rs:126:14:126:15 | 50 | main.rs:126:14:126:15 | 50 | | +| main.rs:126:14:126:15 | 50 | main.rs:126:21:126:29 | print_str | match | +| main.rs:126:14:126:15 | 50 | main.rs:127:9:127:16 | Some(...) | no-match | +| main.rs:126:21:126:29 | print_str | main.rs:126:31:126:38 | "Got 50" | | +| main.rs:126:21:126:39 | print_str(...) | main.rs:125:5:133:5 | match x6 { ... } | | +| main.rs:126:31:126:38 | "Got 50" | main.rs:126:21:126:39 | print_str(...) | | +| main.rs:127:9:127:16 | Some(...) | main.rs:127:14:127:15 | y1 | match | +| main.rs:127:9:127:16 | Some(...) | main.rs:132:9:132:12 | None | no-match | +| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | | +| main.rs:127:14:127:15 | y1 | main.rs:130:13:130:21 | print_i64 | match | +| main.rs:129:9:131:9 | { ... } | main.rs:125:5:133:5 | match x6 { ... } | | +| main.rs:130:13:130:21 | print_i64 | main.rs:130:23:130:24 | y1 | | +| main.rs:130:13:130:25 | print_i64(...) | main.rs:129:9:131:9 | { ... } | | +| main.rs:130:23:130:24 | y1 | main.rs:130:13:130:25 | print_i64(...) | | +| main.rs:132:9:132:12 | None | main.rs:132:9:132:12 | None | | +| main.rs:132:9:132:12 | None | main.rs:132:17:132:25 | print_str | match | +| main.rs:132:17:132:25 | print_str | main.rs:132:27:132:32 | "NONE" | | +| main.rs:132:17:132:33 | print_str(...) | main.rs:125:5:133:5 | match x6 { ... } | | +| main.rs:132:27:132:32 | "NONE" | main.rs:132:17:132:33 | print_str(...) | | +| main.rs:135:5:135:13 | print_i64 | main.rs:135:15:135:16 | y1 | | +| main.rs:135:5:135:17 | print_i64(...) | main.rs:121:21:136:1 | { ... } | | +| main.rs:135:5:135:18 | ExprStmt | main.rs:135:5:135:13 | print_i64 | | +| main.rs:135:15:135:16 | y1 | main.rs:135:5:135:17 | print_i64(...) | | +| main.rs:138:1:167:1 | enter fn match_pattern2 | main.rs:139:5:139:36 | let ... = ... | | +| main.rs:138:1:167:1 | exit fn match_pattern2 (normal) | main.rs:138:1:167:1 | exit fn match_pattern2 | | +| main.rs:138:21:167:1 | { ... } | main.rs:138:1:167:1 | exit fn match_pattern2 (normal) | | +| main.rs:139:5:139:36 | let ... = ... | main.rs:139:20:139:20 | 2 | | +| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | | +| main.rs:139:9:139:15 | numbers | main.rs:141:5:154:5 | ExprStmt | match | +| main.rs:139:19:139:35 | TupleExpr | main.rs:139:9:139:15 | numbers | | +| main.rs:139:20:139:20 | 2 | main.rs:139:23:139:23 | 4 | | +| main.rs:139:23:139:23 | 4 | main.rs:139:26:139:26 | 8 | | +| main.rs:139:26:139:26 | 8 | main.rs:139:29:139:30 | 16 | | +| main.rs:139:29:139:30 | 16 | main.rs:139:33:139:34 | 32 | | +| main.rs:139:33:139:34 | 32 | main.rs:139:19:139:35 | TupleExpr | | +| main.rs:141:5:154:5 | ExprStmt | main.rs:141:11:141:17 | numbers | | +| main.rs:141:5:154:5 | match numbers { ... } | main.rs:156:11:156:17 | numbers | | +| main.rs:141:11:141:17 | numbers | main.rs:143:9:149:9 | TuplePat | | +| main.rs:143:9:149:9 | TuplePat | main.rs:144:13:144:17 | first | match | +| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | | +| main.rs:144:13:144:17 | first | main.rs:145:13:145:13 | _ | match | +| main.rs:145:13:145:13 | _ | main.rs:146:13:146:17 | third | match | +| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | | +| main.rs:146:13:146:17 | third | main.rs:147:13:147:13 | _ | match | +| main.rs:147:13:147:13 | _ | main.rs:148:13:148:17 | fifth | match | +| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | | +| main.rs:148:13:148:17 | fifth | main.rs:150:13:150:29 | ExprStmt | match | +| main.rs:149:14:153:9 | { ... } | main.rs:141:5:154:5 | match numbers { ... } | | +| main.rs:150:13:150:21 | print_i64 | main.rs:150:23:150:27 | first | | +| main.rs:150:13:150:28 | print_i64(...) | main.rs:151:13:151:29 | ExprStmt | | | main.rs:150:13:150:29 | ExprStmt | main.rs:150:13:150:21 | print_i64 | | -| main.rs:150:23:150:27 | fifth | main.rs:150:13:150:28 | print_i64(...) | | -| main.rs:154:5:164:5 | match numbers { ... } | main.rs:136:21:165:1 | { ... } | | -| main.rs:154:11:154:17 | numbers | main.rs:156:9:160:9 | TuplePat | | -| main.rs:156:9:160:9 | TuplePat | main.rs:157:13:157:17 | first | match | -| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | | -| main.rs:157:13:157:17 | first | main.rs:158:13:158:14 | .. | match | -| main.rs:158:13:158:14 | .. | main.rs:159:13:159:16 | last | match | -| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | | -| main.rs:159:13:159:16 | last | main.rs:161:13:161:29 | ExprStmt | match | -| main.rs:160:14:163:9 | { ... } | main.rs:154:5:164:5 | match numbers { ... } | | -| main.rs:161:13:161:21 | print_i64 | main.rs:161:23:161:27 | first | | -| main.rs:161:13:161:28 | print_i64(...) | main.rs:162:13:162:28 | ExprStmt | | -| main.rs:161:13:161:29 | ExprStmt | main.rs:161:13:161:21 | print_i64 | | -| main.rs:161:23:161:27 | first | main.rs:161:13:161:28 | print_i64(...) | | -| main.rs:162:13:162:21 | print_i64 | main.rs:162:23:162:26 | last | | -| main.rs:162:13:162:27 | print_i64(...) | main.rs:160:14:163:9 | { ... } | | -| main.rs:162:13:162:28 | ExprStmt | main.rs:162:13:162:21 | print_i64 | | -| main.rs:162:23:162:26 | last | main.rs:162:13:162:27 | print_i64(...) | | -| main.rs:167:1:175:1 | enter fn match_pattern3 | main.rs:168:5:168:38 | let ... = ... | | -| main.rs:167:1:175:1 | exit fn match_pattern3 (normal) | main.rs:167:1:175:1 | exit fn match_pattern3 | | -| main.rs:167:21:175:1 | { ... } | main.rs:167:1:175:1 | exit fn match_pattern3 (normal) | | -| main.rs:168:5:168:38 | let ... = ... | main.rs:168:25:168:27 | "x" | | -| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | | -| main.rs:168:9:168:10 | p2 | main.rs:170:11:170:12 | p2 | match | -| main.rs:168:14:168:37 | Point {...} | main.rs:168:9:168:10 | p2 | | -| main.rs:168:25:168:27 | "x" | main.rs:168:33:168:35 | "y" | | -| main.rs:168:33:168:35 | "y" | main.rs:168:14:168:37 | Point {...} | | -| main.rs:170:5:174:5 | match p2 { ... } | main.rs:167:21:175:1 | { ... } | | -| main.rs:170:11:170:12 | p2 | main.rs:171:9:173:9 | Point {...} | | -| main.rs:171:9:173:9 | Point {...} | main.rs:172:16:172:17 | x7 | match | -| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | | -| main.rs:172:16:172:17 | x7 | main.rs:172:20:172:21 | .. | match | -| main.rs:172:20:172:21 | .. | main.rs:173:14:173:22 | print_str | match | -| main.rs:173:14:173:22 | print_str | main.rs:173:24:173:25 | x7 | | -| main.rs:173:14:173:26 | print_str(...) | main.rs:170:5:174:5 | match p2 { ... } | | -| main.rs:173:24:173:25 | x7 | main.rs:173:14:173:26 | print_str(...) | | -| main.rs:181:1:198:1 | enter fn match_pattern4 | main.rs:182:5:182:39 | let ... = ... | | -| main.rs:181:1:198:1 | exit fn match_pattern4 (normal) | main.rs:181:1:198:1 | exit fn match_pattern4 | | -| main.rs:181:21:198:1 | { ... } | main.rs:181:1:198:1 | exit fn match_pattern4 (normal) | | -| main.rs:182:5:182:39 | let ... = ... | main.rs:182:36:182:36 | 0 | | -| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | | -| main.rs:182:9:182:11 | msg | main.rs:184:11:184:13 | msg | match | -| main.rs:182:15:182:38 | ...::Hello {...} | main.rs:182:9:182:11 | msg | | -| main.rs:182:36:182:36 | 0 | main.rs:182:15:182:38 | ...::Hello {...} | | -| main.rs:184:5:197:5 | match msg { ... } | main.rs:181:21:198:1 | { ... } | | -| main.rs:184:11:184:13 | msg | main.rs:186:9:188:9 | ...::Hello {...} | | -| main.rs:186:9:188:9 | ...::Hello {...} | main.rs:187:31:187:35 | RangePat | match | -| main.rs:186:9:188:9 | ...::Hello {...} | main.rs:189:9:189:38 | ...::Hello {...} | no-match | -| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:35 | id_variable @ ... | | -| main.rs:187:17:187:35 | id_variable @ ... | main.rs:188:14:188:22 | print_i64 | match | -| main.rs:187:31:187:31 | 3 | main.rs:187:31:187:31 | 3 | | -| main.rs:187:31:187:31 | 3 | main.rs:187:35:187:35 | 7 | match | -| main.rs:187:31:187:31 | 3 | main.rs:189:9:189:38 | ...::Hello {...} | no-match | -| main.rs:187:31:187:35 | RangePat | main.rs:187:31:187:31 | 3 | match | -| main.rs:187:35:187:35 | 7 | main.rs:187:17:187:27 | id_variable | match | -| main.rs:187:35:187:35 | 7 | main.rs:187:35:187:35 | 7 | | -| main.rs:187:35:187:35 | 7 | main.rs:189:9:189:38 | ...::Hello {...} | no-match | -| main.rs:188:14:188:22 | print_i64 | main.rs:188:24:188:34 | id_variable | | -| main.rs:188:14:188:35 | print_i64(...) | main.rs:184:5:197:5 | match msg { ... } | | -| main.rs:188:24:188:34 | id_variable | main.rs:188:14:188:35 | print_i64(...) | | -| main.rs:189:9:189:38 | ...::Hello {...} | main.rs:189:30:189:36 | RangePat | match | -| main.rs:189:9:189:38 | ...::Hello {...} | main.rs:192:9:192:29 | ...::Hello {...} | no-match | -| main.rs:189:30:189:31 | 10 | main.rs:189:30:189:31 | 10 | | -| main.rs:189:30:189:31 | 10 | main.rs:189:35:189:36 | 12 | match | -| main.rs:189:30:189:31 | 10 | main.rs:192:9:192:29 | ...::Hello {...} | no-match | -| main.rs:189:30:189:36 | RangePat | main.rs:189:30:189:31 | 10 | match | -| main.rs:189:35:189:36 | 12 | main.rs:189:35:189:36 | 12 | | -| main.rs:189:35:189:36 | 12 | main.rs:190:22:190:51 | ExprStmt | match | -| main.rs:189:35:189:36 | 12 | main.rs:192:9:192:29 | ...::Hello {...} | no-match | -| main.rs:189:43:191:9 | { ... } | main.rs:184:5:197:5 | match msg { ... } | | -| main.rs:190:13:190:20 | ...::_print | main.rs:190:22:190:51 | "Found an id in another range\\... | | -| main.rs:190:13:190:52 | MacroExpr | main.rs:189:43:191:9 | { ... } | | -| main.rs:190:13:190:52 | println!... | main.rs:190:13:190:52 | MacroExpr | | -| main.rs:190:22:190:51 | "Found an id in another range\\... | main.rs:190:22:190:51 | FormatArgsExpr | | -| main.rs:190:22:190:51 | ...::_print(...) | main.rs:190:22:190:51 | { ... } | | -| main.rs:190:22:190:51 | ...::format_args_nl!... | main.rs:190:22:190:51 | MacroExpr | | -| main.rs:190:22:190:51 | ExprStmt | main.rs:190:13:190:20 | ...::_print | | -| main.rs:190:22:190:51 | FormatArgsExpr | main.rs:190:22:190:51 | ...::format_args_nl!... | | -| main.rs:190:22:190:51 | MacroBlockExpr | main.rs:190:13:190:52 | println!... | | -| main.rs:190:22:190:51 | MacroExpr | main.rs:190:22:190:51 | ...::_print(...) | | -| main.rs:190:22:190:51 | { ... } | main.rs:190:22:190:51 | MacroBlockExpr | | -| main.rs:192:9:192:29 | ...::Hello {...} | main.rs:192:26:192:27 | id | match | -| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | | -| main.rs:192:26:192:27 | id | main.rs:195:13:195:21 | print_i64 | match | -| main.rs:194:9:196:9 | { ... } | main.rs:184:5:197:5 | match msg { ... } | | -| main.rs:195:13:195:21 | print_i64 | main.rs:195:23:195:24 | id | | -| main.rs:195:13:195:25 | print_i64(...) | main.rs:194:9:196:9 | { ... } | | -| main.rs:195:23:195:24 | id | main.rs:195:13:195:25 | print_i64(...) | | -| main.rs:205:1:211:1 | enter fn match_pattern5 | main.rs:206:5:206:34 | let ... = ... | | -| main.rs:205:1:211:1 | exit fn match_pattern5 (normal) | main.rs:205:1:211:1 | exit fn match_pattern5 | | -| main.rs:205:21:211:1 | { ... } | main.rs:205:1:211:1 | exit fn match_pattern5 (normal) | | -| main.rs:206:5:206:34 | let ... = ... | main.rs:206:18:206:29 | ...::Left | | -| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | | -| main.rs:206:9:206:14 | either | main.rs:207:11:207:16 | either | match | -| main.rs:206:18:206:29 | ...::Left | main.rs:206:31:206:32 | 32 | | -| main.rs:206:18:206:33 | ...::Left(...) | main.rs:206:9:206:14 | either | | -| main.rs:206:31:206:32 | 32 | main.rs:206:18:206:33 | ...::Left(...) | | -| main.rs:207:5:210:5 | match either { ... } | main.rs:205:21:211:1 | { ... } | | -| main.rs:207:11:207:16 | either | main.rs:208:9:208:24 | ...::Left(...) | | -| main.rs:208:9:208:24 | ...::Left(...) | main.rs:208:22:208:23 | a3 | match | -| main.rs:208:9:208:24 | ...::Left(...) | main.rs:208:28:208:44 | ...::Right(...) | no-match | -| main.rs:208:9:208:44 | ... \| ... | main.rs:209:16:209:24 | print_i64 | match | -| main.rs:208:22:208:23 | a3 | main.rs:208:9:208:44 | ... \| ... | match | -| main.rs:208:22:208:23 | a3 | main.rs:208:22:208:23 | a3 | | -| main.rs:208:28:208:44 | ...::Right(...) | main.rs:208:42:208:43 | a3 | match | -| main.rs:208:42:208:43 | a3 | main.rs:208:9:208:44 | ... \| ... | match | -| main.rs:208:42:208:43 | a3 | main.rs:208:42:208:43 | a3 | | -| main.rs:209:16:209:24 | print_i64 | main.rs:209:26:209:27 | a3 | | -| main.rs:209:16:209:28 | print_i64(...) | main.rs:207:5:210:5 | match either { ... } | | -| main.rs:209:26:209:27 | a3 | main.rs:209:16:209:28 | print_i64(...) | | -| main.rs:219:1:233:1 | enter fn match_pattern6 | main.rs:220:5:220:37 | let ... = ... | | -| main.rs:219:1:233:1 | exit fn match_pattern6 (normal) | main.rs:219:1:233:1 | exit fn match_pattern6 | | -| main.rs:219:21:233:1 | { ... } | main.rs:219:1:233:1 | exit fn match_pattern6 (normal) | | -| main.rs:220:5:220:37 | let ... = ... | main.rs:220:14:220:32 | ...::Second | | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | | -| main.rs:220:9:220:10 | tv | main.rs:221:5:224:5 | ExprStmt | match | -| main.rs:220:14:220:32 | ...::Second | main.rs:220:34:220:35 | 62 | | -| main.rs:220:14:220:36 | ...::Second(...) | main.rs:220:9:220:10 | tv | | -| main.rs:220:34:220:35 | 62 | main.rs:220:14:220:36 | ...::Second(...) | | -| main.rs:221:5:224:5 | ExprStmt | main.rs:221:11:221:12 | tv | | -| main.rs:221:5:224:5 | match tv { ... } | main.rs:225:5:228:5 | ExprStmt | | -| main.rs:221:11:221:12 | tv | main.rs:222:9:222:30 | ...::First(...) | | -| main.rs:222:9:222:30 | ...::First(...) | main.rs:222:28:222:29 | a4 | match | -| main.rs:222:9:222:30 | ...::First(...) | main.rs:222:34:222:56 | ...::Second(...) | no-match | -| main.rs:222:9:222:81 | ... \| ... \| ... | main.rs:223:16:223:24 | print_i64 | match | -| main.rs:222:28:222:29 | a4 | main.rs:222:9:222:81 | ... \| ... \| ... | match | -| main.rs:222:28:222:29 | a4 | main.rs:222:28:222:29 | a4 | | -| main.rs:222:34:222:56 | ...::Second(...) | main.rs:222:54:222:55 | a4 | match | -| main.rs:222:34:222:56 | ...::Second(...) | main.rs:222:60:222:81 | ...::Third(...) | no-match | -| main.rs:222:54:222:55 | a4 | main.rs:222:9:222:81 | ... \| ... \| ... | match | -| main.rs:222:54:222:55 | a4 | main.rs:222:54:222:55 | a4 | | -| main.rs:222:60:222:81 | ...::Third(...) | main.rs:222:79:222:80 | a4 | match | -| main.rs:222:79:222:80 | a4 | main.rs:222:9:222:81 | ... \| ... \| ... | match | -| main.rs:222:79:222:80 | a4 | main.rs:222:79:222:80 | a4 | | -| main.rs:223:16:223:24 | print_i64 | main.rs:223:26:223:27 | a4 | | -| main.rs:223:16:223:28 | print_i64(...) | main.rs:221:5:224:5 | match tv { ... } | | -| main.rs:223:26:223:27 | a4 | main.rs:223:16:223:28 | print_i64(...) | | -| main.rs:225:5:228:5 | ExprStmt | main.rs:225:11:225:12 | tv | | -| main.rs:225:5:228:5 | match tv { ... } | main.rs:229:11:229:12 | tv | | -| main.rs:225:11:225:12 | tv | main.rs:226:10:226:31 | ...::First(...) | | -| main.rs:226:9:226:83 | ... \| ... | main.rs:227:16:227:24 | print_i64 | match | -| main.rs:226:10:226:31 | ...::First(...) | main.rs:226:29:226:30 | a5 | match | -| main.rs:226:10:226:31 | ...::First(...) | main.rs:226:35:226:57 | ...::Second(...) | no-match | -| main.rs:226:10:226:57 | [match(false)] ... \| ... | main.rs:226:62:226:83 | ...::Third(...) | no-match | -| main.rs:226:10:226:57 | [match(true)] ... \| ... | main.rs:226:9:226:83 | ... \| ... | match | -| main.rs:226:29:226:30 | a5 | main.rs:226:10:226:57 | [match(true)] ... \| ... | match | -| main.rs:226:29:226:30 | a5 | main.rs:226:29:226:30 | a5 | | -| main.rs:226:35:226:57 | ...::Second(...) | main.rs:226:10:226:57 | [match(false)] ... \| ... | no-match | -| main.rs:226:35:226:57 | ...::Second(...) | main.rs:226:55:226:56 | a5 | match | -| main.rs:226:55:226:56 | a5 | main.rs:226:10:226:57 | [match(true)] ... \| ... | match | -| main.rs:226:55:226:56 | a5 | main.rs:226:55:226:56 | a5 | | -| main.rs:226:62:226:83 | ...::Third(...) | main.rs:226:81:226:82 | a5 | match | -| main.rs:226:81:226:82 | a5 | main.rs:226:9:226:83 | ... \| ... | match | -| main.rs:226:81:226:82 | a5 | main.rs:226:81:226:82 | a5 | | -| main.rs:227:16:227:24 | print_i64 | main.rs:227:26:227:27 | a5 | | -| main.rs:227:16:227:28 | print_i64(...) | main.rs:225:5:228:5 | match tv { ... } | | -| main.rs:227:26:227:27 | a5 | main.rs:227:16:227:28 | print_i64(...) | | -| main.rs:229:5:232:5 | match tv { ... } | main.rs:219:21:233:1 | { ... } | | -| main.rs:229:11:229:12 | tv | main.rs:230:9:230:30 | ...::First(...) | | -| main.rs:230:9:230:30 | ...::First(...) | main.rs:230:28:230:29 | a6 | match | -| main.rs:230:9:230:30 | ...::First(...) | main.rs:230:35:230:57 | ...::Second(...) | no-match | -| main.rs:230:9:230:83 | ... \| ... | main.rs:231:16:231:24 | print_i64 | match | -| main.rs:230:28:230:29 | a6 | main.rs:230:9:230:83 | ... \| ... | match | -| main.rs:230:28:230:29 | a6 | main.rs:230:28:230:29 | a6 | | -| main.rs:230:35:230:57 | ...::Second(...) | main.rs:230:55:230:56 | a6 | match | -| main.rs:230:35:230:57 | ...::Second(...) | main.rs:230:61:230:82 | ...::Third(...) | no-match | -| main.rs:230:35:230:82 | ... \| ... | main.rs:230:9:230:83 | ... \| ... | match | -| main.rs:230:55:230:56 | a6 | main.rs:230:35:230:82 | ... \| ... | match | -| main.rs:230:55:230:56 | a6 | main.rs:230:55:230:56 | a6 | | -| main.rs:230:61:230:82 | ...::Third(...) | main.rs:230:80:230:81 | a6 | match | -| main.rs:230:80:230:81 | a6 | main.rs:230:35:230:82 | ... \| ... | match | -| main.rs:230:80:230:81 | a6 | main.rs:230:80:230:81 | a6 | | -| main.rs:231:16:231:24 | print_i64 | main.rs:231:26:231:27 | a6 | | -| main.rs:231:16:231:28 | print_i64(...) | main.rs:229:5:232:5 | match tv { ... } | | -| main.rs:231:26:231:27 | a6 | main.rs:231:16:231:28 | print_i64(...) | | -| main.rs:235:1:243:1 | enter fn match_pattern7 | main.rs:236:5:236:34 | let ... = ... | | -| main.rs:235:1:243:1 | exit fn match_pattern7 (normal) | main.rs:235:1:243:1 | exit fn match_pattern7 | | -| main.rs:235:21:243:1 | { ... } | main.rs:235:1:243:1 | exit fn match_pattern7 (normal) | | -| main.rs:236:5:236:34 | let ... = ... | main.rs:236:18:236:29 | ...::Left | | -| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | | -| main.rs:236:9:236:14 | either | main.rs:237:11:237:16 | either | match | -| main.rs:236:18:236:29 | ...::Left | main.rs:236:31:236:32 | 32 | | -| main.rs:236:18:236:33 | ...::Left(...) | main.rs:236:9:236:14 | either | | -| main.rs:236:31:236:32 | 32 | main.rs:236:18:236:33 | ...::Left(...) | | -| main.rs:237:5:242:5 | match either { ... } | main.rs:235:21:243:1 | { ... } | | -| main.rs:237:11:237:16 | either | main.rs:238:9:238:24 | ...::Left(...) | | -| main.rs:238:9:238:24 | ...::Left(...) | main.rs:238:22:238:23 | a7 | match | -| main.rs:238:9:238:24 | ...::Left(...) | main.rs:238:28:238:44 | ...::Right(...) | no-match | -| main.rs:238:9:238:44 | [match(false)] ... \| ... | main.rs:241:9:241:9 | _ | no-match | -| main.rs:238:9:238:44 | [match(true)] ... \| ... | main.rs:239:16:239:17 | a7 | match | -| main.rs:238:22:238:23 | a7 | main.rs:238:9:238:44 | [match(true)] ... \| ... | match | -| main.rs:238:22:238:23 | a7 | main.rs:238:22:238:23 | a7 | | -| main.rs:238:28:238:44 | ...::Right(...) | main.rs:238:9:238:44 | [match(false)] ... \| ... | no-match | -| main.rs:238:28:238:44 | ...::Right(...) | main.rs:238:42:238:43 | a7 | match | -| main.rs:238:42:238:43 | a7 | main.rs:238:9:238:44 | [match(true)] ... \| ... | match | -| main.rs:238:42:238:43 | a7 | main.rs:238:42:238:43 | a7 | | -| main.rs:239:16:239:17 | a7 | main.rs:239:21:239:21 | 0 | | -| main.rs:239:16:239:21 | ... > ... | main.rs:240:16:240:24 | print_i64 | true | -| main.rs:239:16:239:21 | ... > ... | main.rs:241:9:241:9 | _ | false | -| main.rs:239:21:239:21 | 0 | main.rs:239:16:239:21 | ... > ... | | -| main.rs:240:16:240:24 | print_i64 | main.rs:240:26:240:27 | a7 | | -| main.rs:240:16:240:28 | print_i64(...) | main.rs:237:5:242:5 | match either { ... } | | -| main.rs:240:26:240:27 | a7 | main.rs:240:16:240:28 | print_i64(...) | | -| main.rs:241:9:241:9 | _ | main.rs:241:14:241:15 | TupleExpr | match | -| main.rs:241:14:241:15 | TupleExpr | main.rs:237:5:242:5 | match either { ... } | | -| main.rs:245:1:260:1 | enter fn match_pattern8 | main.rs:246:5:246:34 | let ... = ... | | -| main.rs:245:1:260:1 | exit fn match_pattern8 (normal) | main.rs:245:1:260:1 | exit fn match_pattern8 | | -| main.rs:245:21:260:1 | { ... } | main.rs:245:1:260:1 | exit fn match_pattern8 (normal) | | -| main.rs:246:5:246:34 | let ... = ... | main.rs:246:18:246:29 | ...::Left | | -| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | | -| main.rs:246:9:246:14 | either | main.rs:248:11:248:16 | either | match | -| main.rs:246:18:246:29 | ...::Left | main.rs:246:31:246:32 | 32 | | -| main.rs:246:18:246:33 | ...::Left(...) | main.rs:246:9:246:14 | either | | -| main.rs:246:31:246:32 | 32 | main.rs:246:18:246:33 | ...::Left(...) | | -| main.rs:248:5:259:5 | match either { ... } | main.rs:245:21:260:1 | { ... } | | -| main.rs:248:11:248:16 | either | main.rs:250:14:250:30 | ...::Left(...) | | -| main.rs:249:9:250:52 | ref e @ ... | main.rs:252:13:252:27 | ExprStmt | match | -| main.rs:249:13:249:13 | e | main.rs:249:9:250:52 | ref e @ ... | | -| main.rs:250:14:250:30 | ...::Left(...) | main.rs:250:27:250:29 | a11 | match | -| main.rs:250:14:250:30 | ...::Left(...) | main.rs:250:34:250:51 | ...::Right(...) | no-match | -| main.rs:250:14:250:51 | [match(false)] ... \| ... | main.rs:258:9:258:9 | _ | no-match | -| main.rs:250:14:250:51 | [match(true)] ... \| ... | main.rs:249:13:249:13 | e | match | -| main.rs:250:27:250:29 | a11 | main.rs:250:14:250:51 | [match(true)] ... \| ... | match | -| main.rs:250:27:250:29 | a11 | main.rs:250:27:250:29 | a11 | | -| main.rs:250:34:250:51 | ...::Right(...) | main.rs:250:14:250:51 | [match(false)] ... \| ... | no-match | -| main.rs:250:34:250:51 | ...::Right(...) | main.rs:250:48:250:50 | a11 | match | -| main.rs:250:48:250:50 | a11 | main.rs:250:14:250:51 | [match(true)] ... \| ... | match | -| main.rs:250:48:250:50 | a11 | main.rs:250:48:250:50 | a11 | | -| main.rs:251:12:257:9 | { ... } | main.rs:248:5:259:5 | match either { ... } | | -| main.rs:252:13:252:21 | print_i64 | main.rs:252:23:252:25 | a11 | | -| main.rs:252:13:252:26 | print_i64(...) | main.rs:254:15:254:15 | e | | -| main.rs:252:13:252:27 | ExprStmt | main.rs:252:13:252:21 | print_i64 | | -| main.rs:252:23:252:25 | a11 | main.rs:252:13:252:26 | print_i64(...) | | -| main.rs:253:13:256:13 | if ... {...} | main.rs:251:12:257:9 | { ... } | | -| main.rs:253:16:254:15 | [boolean(false)] let ... = e | main.rs:253:13:256:13 | if ... {...} | false | -| main.rs:253:16:254:15 | [boolean(true)] let ... = e | main.rs:255:17:255:32 | ExprStmt | true | -| main.rs:253:20:253:36 | ...::Left(...) | main.rs:253:16:254:15 | [boolean(false)] let ... = e | no-match | -| main.rs:253:20:253:36 | ...::Left(...) | main.rs:253:33:253:35 | a12 | match | -| main.rs:253:33:253:35 | a12 | main.rs:253:16:254:15 | [boolean(true)] let ... = e | match | -| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | | -| main.rs:254:15:254:15 | e | main.rs:253:20:253:36 | ...::Left(...) | | -| main.rs:254:17:256:13 | { ... } | main.rs:253:13:256:13 | if ... {...} | | -| main.rs:255:17:255:25 | print_i64 | main.rs:255:28:255:30 | a12 | | -| main.rs:255:17:255:31 | print_i64(...) | main.rs:254:17:256:13 | { ... } | | -| main.rs:255:17:255:32 | ExprStmt | main.rs:255:17:255:25 | print_i64 | | -| main.rs:255:27:255:30 | * ... | main.rs:255:17:255:31 | print_i64(...) | | -| main.rs:255:28:255:30 | a12 | main.rs:255:27:255:30 | * ... | | -| main.rs:258:9:258:9 | _ | main.rs:258:14:258:15 | TupleExpr | match | -| main.rs:258:14:258:15 | TupleExpr | main.rs:248:5:259:5 | match either { ... } | | -| main.rs:269:1:275:1 | enter fn match_pattern9 | main.rs:270:5:270:36 | let ... = ... | | -| main.rs:269:1:275:1 | exit fn match_pattern9 (normal) | main.rs:269:1:275:1 | exit fn match_pattern9 | | -| main.rs:269:21:275:1 | { ... } | main.rs:269:1:275:1 | exit fn match_pattern9 (normal) | | -| main.rs:270:5:270:36 | let ... = ... | main.rs:270:14:270:31 | ...::Second | | -| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | | -| main.rs:270:9:270:10 | fv | main.rs:271:11:271:12 | fv | match | -| main.rs:270:14:270:31 | ...::Second | main.rs:270:33:270:34 | 62 | | -| main.rs:270:14:270:35 | ...::Second(...) | main.rs:270:9:270:10 | fv | | -| main.rs:270:33:270:34 | 62 | main.rs:270:14:270:35 | ...::Second(...) | | -| main.rs:271:5:274:5 | match fv { ... } | main.rs:269:21:275:1 | { ... } | | -| main.rs:271:11:271:12 | fv | main.rs:272:9:272:30 | ...::First(...) | | -| main.rs:272:9:272:30 | ...::First(...) | main.rs:272:27:272:29 | a13 | match | -| main.rs:272:9:272:30 | ...::First(...) | main.rs:272:35:272:57 | ...::Second(...) | no-match | -| main.rs:272:9:272:109 | ... \| ... \| ... | main.rs:273:16:273:24 | print_i64 | match | -| main.rs:272:27:272:29 | a13 | main.rs:272:9:272:109 | ... \| ... \| ... | match | -| main.rs:272:27:272:29 | a13 | main.rs:272:27:272:29 | a13 | | -| main.rs:272:35:272:57 | ...::Second(...) | main.rs:272:54:272:56 | a13 | match | -| main.rs:272:35:272:57 | ...::Second(...) | main.rs:272:61:272:82 | ...::Third(...) | no-match | -| main.rs:272:35:272:82 | [match(false)] ... \| ... | main.rs:272:87:272:109 | ...::Fourth(...) | no-match | -| main.rs:272:35:272:82 | [match(true)] ... \| ... | main.rs:272:9:272:109 | ... \| ... \| ... | match | -| main.rs:272:54:272:56 | a13 | main.rs:272:35:272:82 | [match(true)] ... \| ... | match | -| main.rs:272:54:272:56 | a13 | main.rs:272:54:272:56 | a13 | | -| main.rs:272:61:272:82 | ...::Third(...) | main.rs:272:35:272:82 | [match(false)] ... \| ... | no-match | -| main.rs:272:61:272:82 | ...::Third(...) | main.rs:272:79:272:81 | a13 | match | -| main.rs:272:79:272:81 | a13 | main.rs:272:35:272:82 | [match(true)] ... \| ... | match | -| main.rs:272:79:272:81 | a13 | main.rs:272:79:272:81 | a13 | | -| main.rs:272:87:272:109 | ...::Fourth(...) | main.rs:272:106:272:108 | a13 | match | -| main.rs:272:106:272:108 | a13 | main.rs:272:9:272:109 | ... \| ... \| ... | match | -| main.rs:272:106:272:108 | a13 | main.rs:272:106:272:108 | a13 | | -| main.rs:273:16:273:24 | print_i64 | main.rs:273:26:273:28 | a13 | | -| main.rs:273:16:273:29 | print_i64(...) | main.rs:271:5:274:5 | match fv { ... } | | -| main.rs:273:26:273:28 | a13 | main.rs:273:16:273:29 | print_i64(...) | | -| main.rs:277:1:291:1 | enter fn match_pattern10 | main.rs:279:5:279:20 | let ... = ... | | -| main.rs:277:1:291:1 | exit fn match_pattern10 (normal) | main.rs:277:1:291:1 | exit fn match_pattern10 | | -| main.rs:278:22:291:1 | { ... } | main.rs:277:1:291:1 | exit fn match_pattern10 (normal) | | -| main.rs:279:5:279:20 | let ... = ... | main.rs:279:12:279:15 | Some | | -| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | | -| main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x | match | -| main.rs:279:12:279:15 | Some | main.rs:279:17:279:18 | 42 | | -| main.rs:279:12:279:19 | Some(...) | main.rs:279:9:279:9 | x | | -| main.rs:279:17:279:18 | 42 | main.rs:279:12:279:19 | Some(...) | | -| main.rs:280:5:290:5 | if ... {...} else {...} | main.rs:278:22:291:1 | { ... } | | -| main.rs:280:8:281:7 | [boolean(false)] let ... = x | main.rs:280:8:283:9 | [boolean(false)] ... && ... | false | -| main.rs:280:8:281:7 | [boolean(true)] let ... = x | main.rs:283:5:283:5 | x | true | -| main.rs:280:8:283:9 | [boolean(false)] ... && ... | main.rs:287:9:288:14 | let ... = x | false | -| main.rs:280:8:283:9 | [boolean(true)] ... && ... | main.rs:285:9:285:21 | ExprStmt | true | -| main.rs:280:12:280:18 | Some(...) | main.rs:280:8:281:7 | [boolean(false)] let ... = x | no-match | -| main.rs:280:12:280:18 | Some(...) | main.rs:280:17:280:17 | x | match | -| main.rs:280:17:280:17 | x | main.rs:280:8:281:7 | [boolean(true)] let ... = x | match | -| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | | -| main.rs:281:7:281:7 | x | main.rs:280:12:280:18 | Some(...) | | -| main.rs:283:5:283:5 | x | main.rs:283:9:283:9 | 0 | | -| main.rs:283:5:283:9 | ... > ... | main.rs:280:8:283:9 | [boolean(false)] ... && ... | false | -| main.rs:283:5:283:9 | ... > ... | main.rs:280:8:283:9 | [boolean(true)] ... && ... | true | -| main.rs:283:9:283:9 | 0 | main.rs:283:5:283:9 | ... > ... | | -| main.rs:284:5:286:5 | { ... } | main.rs:280:5:290:5 | if ... {...} else {...} | | -| main.rs:285:9:285:17 | print_i64 | main.rs:285:19:285:19 | x | | -| main.rs:285:9:285:20 | print_i64(...) | main.rs:284:5:286:5 | { ... } | | -| main.rs:285:9:285:21 | ExprStmt | main.rs:285:9:285:17 | print_i64 | | -| main.rs:285:19:285:19 | x | main.rs:285:9:285:20 | print_i64(...) | | -| main.rs:286:12:290:5 | { ... } | main.rs:280:5:290:5 | if ... {...} else {...} | | -| main.rs:287:9:288:14 | let ... = x | main.rs:288:13:288:13 | x | | -| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | | -| main.rs:287:13:287:13 | x | main.rs:289:9:289:30 | ExprStmt | match | -| main.rs:288:13:288:13 | x | main.rs:287:13:287:13 | x | | -| main.rs:289:9:289:17 | print_i64 | main.rs:289:19:289:19 | x | | -| main.rs:289:9:289:29 | print_i64(...) | main.rs:286:12:290:5 | { ... } | | -| main.rs:289:9:289:30 | ExprStmt | main.rs:289:9:289:17 | print_i64 | | -| main.rs:289:19:289:19 | x | main.rs:289:19:289:28 | x.unwrap() | | -| main.rs:289:19:289:28 | x.unwrap() | main.rs:289:9:289:29 | print_i64(...) | | -| main.rs:293:1:310:1 | enter fn match_pattern11 | main.rs:295:5:295:21 | let ... = ... | | -| main.rs:293:1:310:1 | exit fn match_pattern11 (normal) | main.rs:293:1:310:1 | exit fn match_pattern11 | | -| main.rs:294:22:310:1 | { ... } | main.rs:293:1:310:1 | exit fn match_pattern11 (normal) | | -| main.rs:295:5:295:21 | let ... = ... | main.rs:295:13:295:16 | Some | | -| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | | -| main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x | match | -| main.rs:295:13:295:16 | Some | main.rs:295:18:295:19 | 42 | | -| main.rs:295:13:295:20 | Some(...) | main.rs:295:9:295:9 | x | | -| main.rs:295:18:295:19 | 42 | main.rs:295:13:295:20 | Some(...) | | -| main.rs:296:5:309:5 | if ... {...} else {...} | main.rs:294:22:310:1 | { ... } | | -| main.rs:296:8:297:7 | [boolean(false)] let ... = x | main.rs:296:8:300:13 | [boolean(false)] ... && ... | false | -| main.rs:296:8:297:7 | [boolean(true)] let ... = x | main.rs:300:7:300:10 | Some | true | -| main.rs:296:8:300:13 | [boolean(false)] ... && ... | main.rs:296:8:302:9 | [boolean(false)] ... && ... | false | -| main.rs:296:8:300:13 | [boolean(true)] ... && ... | main.rs:302:5:302:5 | x | true | -| main.rs:296:8:302:9 | [boolean(false)] ... && ... | main.rs:306:9:307:14 | let ... = x | false | -| main.rs:296:8:302:9 | [boolean(true)] ... && ... | main.rs:304:9:304:21 | ExprStmt | true | -| main.rs:296:12:296:18 | Some(...) | main.rs:296:8:297:7 | [boolean(false)] let ... = x | no-match | -| main.rs:296:12:296:18 | Some(...) | main.rs:296:17:296:17 | x | match | -| main.rs:296:17:296:17 | x | main.rs:296:8:297:7 | [boolean(true)] let ... = x | match | -| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | | -| main.rs:297:7:297:7 | x | main.rs:296:12:296:18 | Some(...) | | -| main.rs:299:5:300:13 | [boolean(false)] let ... = ... | main.rs:296:8:300:13 | [boolean(false)] ... && ... | false | -| main.rs:299:5:300:13 | [boolean(true)] let ... = ... | main.rs:296:8:300:13 | [boolean(true)] ... && ... | true | -| main.rs:299:9:299:15 | Some(...) | main.rs:299:5:300:13 | [boolean(false)] let ... = ... | no-match | -| main.rs:299:9:299:15 | Some(...) | main.rs:299:14:299:14 | x | match | -| main.rs:299:14:299:14 | x | main.rs:299:5:300:13 | [boolean(true)] let ... = ... | match | -| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | | -| main.rs:300:7:300:10 | Some | main.rs:300:12:300:12 | x | | -| main.rs:300:7:300:13 | Some(...) | main.rs:299:9:299:15 | Some(...) | | -| main.rs:300:12:300:12 | x | main.rs:300:7:300:13 | Some(...) | | -| main.rs:302:5:302:5 | x | main.rs:302:9:302:9 | 0 | | -| main.rs:302:5:302:9 | ... > ... | main.rs:296:8:302:9 | [boolean(false)] ... && ... | false | -| main.rs:302:5:302:9 | ... > ... | main.rs:296:8:302:9 | [boolean(true)] ... && ... | true | -| main.rs:302:9:302:9 | 0 | main.rs:302:5:302:9 | ... > ... | | -| main.rs:303:5:305:5 | { ... } | main.rs:296:5:309:5 | if ... {...} else {...} | | -| main.rs:304:9:304:17 | print_i64 | main.rs:304:19:304:19 | x | | -| main.rs:304:9:304:20 | print_i64(...) | main.rs:303:5:305:5 | { ... } | | -| main.rs:304:9:304:21 | ExprStmt | main.rs:304:9:304:17 | print_i64 | | -| main.rs:304:19:304:19 | x | main.rs:304:9:304:20 | print_i64(...) | | -| main.rs:305:12:309:5 | { ... } | main.rs:296:5:309:5 | if ... {...} else {...} | | -| main.rs:306:9:307:14 | let ... = x | main.rs:307:13:307:13 | x | | -| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | | -| main.rs:306:13:306:13 | x | main.rs:308:9:308:30 | ExprStmt | match | -| main.rs:307:13:307:13 | x | main.rs:306:13:306:13 | x | | -| main.rs:308:9:308:17 | print_i64 | main.rs:308:19:308:19 | x | | -| main.rs:308:9:308:29 | print_i64(...) | main.rs:305:12:309:5 | { ... } | | -| main.rs:308:9:308:30 | ExprStmt | main.rs:308:9:308:17 | print_i64 | | -| main.rs:308:19:308:19 | x | main.rs:308:19:308:28 | x.unwrap() | | -| main.rs:308:19:308:28 | x.unwrap() | main.rs:308:9:308:29 | print_i64(...) | | -| main.rs:312:1:328:1 | enter fn match_pattern12 | main.rs:314:5:314:21 | let ... = ... | | -| main.rs:312:1:328:1 | exit fn match_pattern12 (normal) | main.rs:312:1:328:1 | exit fn match_pattern12 | | -| main.rs:313:22:328:1 | { ... } | main.rs:312:1:328:1 | exit fn match_pattern12 (normal) | | -| main.rs:314:5:314:21 | let ... = ... | main.rs:314:13:314:16 | Some | | -| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | | -| main.rs:314:9:314:9 | x | main.rs:315:5:325:5 | ExprStmt | match | -| main.rs:314:13:314:16 | Some | main.rs:314:18:314:19 | 42 | | -| main.rs:314:13:314:20 | Some(...) | main.rs:314:9:314:9 | x | | -| main.rs:314:18:314:19 | 42 | main.rs:314:13:314:20 | Some(...) | | -| main.rs:315:5:325:5 | ExprStmt | main.rs:316:7:316:7 | x | | -| main.rs:315:5:325:5 | while ... { ... } | main.rs:327:5:327:26 | ExprStmt | | -| main.rs:315:11:316:7 | [boolean(false)] let ... = x | main.rs:315:11:319:13 | [boolean(false)] ... && ... | false | -| main.rs:315:11:316:7 | [boolean(true)] let ... = x | main.rs:319:7:319:10 | Some | true | -| main.rs:315:11:319:13 | [boolean(false)] ... && ... | main.rs:315:11:321:9 | [boolean(false)] ... && ... | false | -| main.rs:315:11:319:13 | [boolean(true)] ... && ... | main.rs:321:5:321:5 | x | true | -| main.rs:315:11:321:9 | [boolean(false)] ... && ... | main.rs:315:5:325:5 | while ... { ... } | false | -| main.rs:315:11:321:9 | [boolean(true)] ... && ... | main.rs:323:9:323:21 | ExprStmt | true | -| main.rs:315:15:315:21 | Some(...) | main.rs:315:11:316:7 | [boolean(false)] let ... = x | no-match | -| main.rs:315:15:315:21 | Some(...) | main.rs:315:20:315:20 | x | match | -| main.rs:315:20:315:20 | x | main.rs:315:11:316:7 | [boolean(true)] let ... = x | match | -| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | | -| main.rs:316:7:316:7 | x | main.rs:315:15:315:21 | Some(...) | | -| main.rs:318:5:319:13 | [boolean(false)] let ... = ... | main.rs:315:11:319:13 | [boolean(false)] ... && ... | false | -| main.rs:318:5:319:13 | [boolean(true)] let ... = ... | main.rs:315:11:319:13 | [boolean(true)] ... && ... | true | -| main.rs:318:9:318:15 | Some(...) | main.rs:318:5:319:13 | [boolean(false)] let ... = ... | no-match | -| main.rs:318:9:318:15 | Some(...) | main.rs:318:14:318:14 | x | match | -| main.rs:318:14:318:14 | x | main.rs:318:5:319:13 | [boolean(true)] let ... = ... | match | -| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | | -| main.rs:319:7:319:10 | Some | main.rs:319:12:319:12 | x | | -| main.rs:319:7:319:13 | Some(...) | main.rs:318:9:318:15 | Some(...) | | -| main.rs:319:12:319:12 | x | main.rs:319:7:319:13 | Some(...) | | -| main.rs:321:5:321:5 | x | main.rs:321:9:321:9 | 0 | | -| main.rs:321:5:321:9 | ... > ... | main.rs:315:11:321:9 | [boolean(false)] ... && ... | false | -| main.rs:321:5:321:9 | ... > ... | main.rs:315:11:321:9 | [boolean(true)] ... && ... | true | -| main.rs:321:9:321:9 | 0 | main.rs:321:5:321:9 | ... > ... | | -| main.rs:323:9:323:17 | print_i64 | main.rs:323:19:323:19 | x | | -| main.rs:323:9:323:20 | print_i64(...) | main.rs:324:9:324:14 | ExprStmt | | -| main.rs:323:9:323:21 | ExprStmt | main.rs:323:9:323:17 | print_i64 | | -| main.rs:323:19:323:19 | x | main.rs:323:9:323:20 | print_i64(...) | | -| main.rs:324:9:324:13 | break | main.rs:315:5:325:5 | while ... { ... } | break | -| main.rs:324:9:324:14 | ExprStmt | main.rs:324:9:324:13 | break | | -| main.rs:327:5:327:13 | print_i64 | main.rs:327:15:327:15 | x | | -| main.rs:327:5:327:25 | print_i64(...) | main.rs:313:22:328:1 | { ... } | | -| main.rs:327:5:327:26 | ExprStmt | main.rs:327:5:327:13 | print_i64 | | -| main.rs:327:15:327:15 | x | main.rs:327:15:327:24 | x.unwrap() | | -| main.rs:327:15:327:24 | x.unwrap() | main.rs:327:5:327:25 | print_i64(...) | | -| main.rs:330:1:342:1 | enter fn match_pattern13 | main.rs:332:5:332:21 | let ... = ... | | -| main.rs:330:1:342:1 | exit fn match_pattern13 (normal) | main.rs:330:1:342:1 | exit fn match_pattern13 | | -| main.rs:331:22:342:1 | { ... } | main.rs:330:1:342:1 | exit fn match_pattern13 (normal) | | -| main.rs:332:5:332:21 | let ... = ... | main.rs:332:13:332:16 | Some | | -| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | | -| main.rs:332:9:332:9 | x | main.rs:333:5:339:5 | ExprStmt | match | -| main.rs:332:13:332:16 | Some | main.rs:332:18:332:19 | 42 | | -| main.rs:332:13:332:20 | Some(...) | main.rs:332:9:332:9 | x | | -| main.rs:332:18:332:19 | 42 | main.rs:332:13:332:20 | Some(...) | | -| main.rs:333:5:339:5 | ExprStmt | main.rs:333:11:333:11 | x | | -| main.rs:333:5:339:5 | match x { ... } | main.rs:341:5:341:26 | ExprStmt | | -| main.rs:333:11:333:11 | x | main.rs:334:9:334:15 | Some(...) | | -| main.rs:334:9:334:15 | Some(...) | main.rs:334:14:334:14 | x | match | -| main.rs:334:9:334:15 | Some(...) | main.rs:338:9:338:9 | _ | no-match | -| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | | -| main.rs:334:14:334:14 | x | main.rs:336:18:336:18 | x | match | -| main.rs:335:16:336:18 | [boolean(true)] let ... = x | main.rs:337:19:337:19 | x | true | -| main.rs:335:16:337:23 | [boolean(false)] ... && ... | main.rs:338:9:338:9 | _ | false | -| main.rs:335:16:337:23 | [boolean(true)] ... && ... | main.rs:337:28:337:29 | TupleExpr | true | -| main.rs:335:20:335:20 | x | main.rs:335:16:336:18 | [boolean(true)] let ... = x | match | -| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | | -| main.rs:336:18:336:18 | x | main.rs:335:20:335:20 | x | | -| main.rs:337:19:337:19 | x | main.rs:337:23:337:23 | 0 | | -| main.rs:337:19:337:23 | ... > ... | main.rs:335:16:337:23 | [boolean(false)] ... && ... | false | -| main.rs:337:19:337:23 | ... > ... | main.rs:335:16:337:23 | [boolean(true)] ... && ... | true | -| main.rs:337:23:337:23 | 0 | main.rs:337:19:337:23 | ... > ... | | -| main.rs:337:28:337:29 | TupleExpr | main.rs:333:5:339:5 | match x { ... } | | -| main.rs:338:9:338:9 | _ | main.rs:338:14:338:15 | TupleExpr | match | -| main.rs:338:14:338:15 | TupleExpr | main.rs:333:5:339:5 | match x { ... } | | -| main.rs:341:5:341:13 | print_i64 | main.rs:341:15:341:15 | x | | -| main.rs:341:5:341:25 | print_i64(...) | main.rs:331:22:342:1 | { ... } | | -| main.rs:341:5:341:26 | ExprStmt | main.rs:341:5:341:13 | print_i64 | | -| main.rs:341:15:341:15 | x | main.rs:341:15:341:24 | x.unwrap() | | -| main.rs:341:15:341:24 | x.unwrap() | main.rs:341:5:341:25 | print_i64(...) | | -| main.rs:344:1:359:1 | enter fn match_pattern14 | main.rs:346:5:346:19 | let ... = ... | | -| main.rs:344:1:359:1 | exit fn match_pattern14 (normal) | main.rs:344:1:359:1 | exit fn match_pattern14 | | -| main.rs:345:22:359:1 | { ... } | main.rs:344:1:359:1 | exit fn match_pattern14 (normal) | | -| main.rs:346:5:346:19 | let ... = ... | main.rs:346:13:346:14 | Ok | | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | | -| main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x | match | -| main.rs:346:13:346:14 | Ok | main.rs:346:16:346:17 | 42 | | -| main.rs:346:13:346:18 | Ok(...) | main.rs:346:9:346:9 | x | | -| main.rs:346:16:346:17 | 42 | main.rs:346:13:346:18 | Ok(...) | | -| main.rs:347:5:358:5 | if ... {...} else {...} | main.rs:345:22:359:1 | { ... } | | -| main.rs:347:8:348:7 | [boolean(false)] let ... = x | main.rs:353:7:353:7 | x | false | -| main.rs:347:8:348:7 | [boolean(true)] let ... = x | main.rs:350:9:350:21 | ExprStmt | true | -| main.rs:347:12:347:17 | Err(...) | main.rs:347:8:348:7 | [boolean(false)] let ... = x | no-match | -| main.rs:347:12:347:17 | Err(...) | main.rs:347:16:347:16 | x | match | -| main.rs:347:16:347:16 | x | main.rs:347:8:348:7 | [boolean(true)] let ... = x | match | -| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | | -| main.rs:348:7:348:7 | x | main.rs:347:12:347:17 | Err(...) | | -| main.rs:349:5:351:5 | { ... } | main.rs:347:5:358:5 | if ... {...} else {...} | | -| main.rs:350:9:350:17 | print_i64 | main.rs:350:19:350:19 | x | | -| main.rs:350:9:350:20 | print_i64(...) | main.rs:349:5:351:5 | { ... } | | -| main.rs:350:9:350:21 | ExprStmt | main.rs:350:9:350:17 | print_i64 | | -| main.rs:350:19:350:19 | x | main.rs:350:9:350:20 | print_i64(...) | | -| main.rs:352:10:358:5 | if ... {...} else {...} | main.rs:347:5:358:5 | if ... {...} else {...} | | -| main.rs:352:13:353:7 | [boolean(false)] let ... = x | main.rs:357:9:357:30 | ExprStmt | false | -| main.rs:352:13:353:7 | [boolean(true)] let ... = x | main.rs:355:9:355:21 | ExprStmt | true | -| main.rs:352:17:352:21 | Ok(...) | main.rs:352:13:353:7 | [boolean(false)] let ... = x | no-match | -| main.rs:352:17:352:21 | Ok(...) | main.rs:352:20:352:20 | x | match | -| main.rs:352:20:352:20 | x | main.rs:352:13:353:7 | [boolean(true)] let ... = x | match | -| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | | -| main.rs:353:7:353:7 | x | main.rs:352:17:352:21 | Ok(...) | | -| main.rs:354:5:356:5 | { ... } | main.rs:352:10:358:5 | if ... {...} else {...} | | -| main.rs:355:9:355:17 | print_i64 | main.rs:355:19:355:19 | x | | -| main.rs:355:9:355:20 | print_i64(...) | main.rs:354:5:356:5 | { ... } | | -| main.rs:355:9:355:21 | ExprStmt | main.rs:355:9:355:17 | print_i64 | | -| main.rs:355:19:355:19 | x | main.rs:355:9:355:20 | print_i64(...) | | -| main.rs:356:12:358:5 | { ... } | main.rs:352:10:358:5 | if ... {...} else {...} | | +| main.rs:150:23:150:27 | first | main.rs:150:13:150:28 | print_i64(...) | | +| main.rs:151:13:151:21 | print_i64 | main.rs:151:23:151:27 | third | | +| main.rs:151:13:151:28 | print_i64(...) | main.rs:152:13:152:29 | ExprStmt | | +| main.rs:151:13:151:29 | ExprStmt | main.rs:151:13:151:21 | print_i64 | | +| main.rs:151:23:151:27 | third | main.rs:151:13:151:28 | print_i64(...) | | +| main.rs:152:13:152:21 | print_i64 | main.rs:152:23:152:27 | fifth | | +| main.rs:152:13:152:28 | print_i64(...) | main.rs:149:14:153:9 | { ... } | | +| main.rs:152:13:152:29 | ExprStmt | main.rs:152:13:152:21 | print_i64 | | +| main.rs:152:23:152:27 | fifth | main.rs:152:13:152:28 | print_i64(...) | | +| main.rs:156:5:166:5 | match numbers { ... } | main.rs:138:21:167:1 | { ... } | | +| main.rs:156:11:156:17 | numbers | main.rs:158:9:162:9 | TuplePat | | +| main.rs:158:9:162:9 | TuplePat | main.rs:159:13:159:17 | first | match | +| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | | +| main.rs:159:13:159:17 | first | main.rs:160:13:160:14 | .. | match | +| main.rs:160:13:160:14 | .. | main.rs:161:13:161:16 | last | match | +| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | | +| main.rs:161:13:161:16 | last | main.rs:163:13:163:29 | ExprStmt | match | +| main.rs:162:14:165:9 | { ... } | main.rs:156:5:166:5 | match numbers { ... } | | +| main.rs:163:13:163:21 | print_i64 | main.rs:163:23:163:27 | first | | +| main.rs:163:13:163:28 | print_i64(...) | main.rs:164:13:164:28 | ExprStmt | | +| main.rs:163:13:163:29 | ExprStmt | main.rs:163:13:163:21 | print_i64 | | +| main.rs:163:23:163:27 | first | main.rs:163:13:163:28 | print_i64(...) | | +| main.rs:164:13:164:21 | print_i64 | main.rs:164:23:164:26 | last | | +| main.rs:164:13:164:27 | print_i64(...) | main.rs:162:14:165:9 | { ... } | | +| main.rs:164:13:164:28 | ExprStmt | main.rs:164:13:164:21 | print_i64 | | +| main.rs:164:23:164:26 | last | main.rs:164:13:164:27 | print_i64(...) | | +| main.rs:169:1:177:1 | enter fn match_pattern3 | main.rs:170:5:170:38 | let ... = ... | | +| main.rs:169:1:177:1 | exit fn match_pattern3 (normal) | main.rs:169:1:177:1 | exit fn match_pattern3 | | +| main.rs:169:21:177:1 | { ... } | main.rs:169:1:177:1 | exit fn match_pattern3 (normal) | | +| main.rs:170:5:170:38 | let ... = ... | main.rs:170:25:170:27 | "x" | | +| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | | +| main.rs:170:9:170:10 | p2 | main.rs:172:11:172:12 | p2 | match | +| main.rs:170:14:170:37 | Point {...} | main.rs:170:9:170:10 | p2 | | +| main.rs:170:25:170:27 | "x" | main.rs:170:33:170:35 | "y" | | +| main.rs:170:33:170:35 | "y" | main.rs:170:14:170:37 | Point {...} | | +| main.rs:172:5:176:5 | match p2 { ... } | main.rs:169:21:177:1 | { ... } | | +| main.rs:172:11:172:12 | p2 | main.rs:173:9:175:9 | Point {...} | | +| main.rs:173:9:175:9 | Point {...} | main.rs:174:16:174:17 | x7 | match | +| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | | +| main.rs:174:16:174:17 | x7 | main.rs:174:20:174:21 | .. | match | +| main.rs:174:20:174:21 | .. | main.rs:175:14:175:22 | print_str | match | +| main.rs:175:14:175:22 | print_str | main.rs:175:24:175:25 | x7 | | +| main.rs:175:14:175:26 | print_str(...) | main.rs:172:5:176:5 | match p2 { ... } | | +| main.rs:175:24:175:25 | x7 | main.rs:175:14:175:26 | print_str(...) | | +| main.rs:183:1:200:1 | enter fn match_pattern4 | main.rs:184:5:184:39 | let ... = ... | | +| main.rs:183:1:200:1 | exit fn match_pattern4 (normal) | main.rs:183:1:200:1 | exit fn match_pattern4 | | +| main.rs:183:21:200:1 | { ... } | main.rs:183:1:200:1 | exit fn match_pattern4 (normal) | | +| main.rs:184:5:184:39 | let ... = ... | main.rs:184:36:184:36 | 0 | | +| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | | +| main.rs:184:9:184:11 | msg | main.rs:186:11:186:13 | msg | match | +| main.rs:184:15:184:38 | ...::Hello {...} | main.rs:184:9:184:11 | msg | | +| main.rs:184:36:184:36 | 0 | main.rs:184:15:184:38 | ...::Hello {...} | | +| main.rs:186:5:199:5 | match msg { ... } | main.rs:183:21:200:1 | { ... } | | +| main.rs:186:11:186:13 | msg | main.rs:188:9:190:9 | ...::Hello {...} | | +| main.rs:188:9:190:9 | ...::Hello {...} | main.rs:189:31:189:35 | RangePat | match | +| main.rs:188:9:190:9 | ...::Hello {...} | main.rs:191:9:191:38 | ...::Hello {...} | no-match | +| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:35 | id_variable @ ... | | +| main.rs:189:17:189:35 | id_variable @ ... | main.rs:190:14:190:22 | print_i64 | match | +| main.rs:189:31:189:31 | 3 | main.rs:189:31:189:31 | 3 | | +| main.rs:189:31:189:31 | 3 | main.rs:189:35:189:35 | 7 | match | +| main.rs:189:31:189:31 | 3 | main.rs:191:9:191:38 | ...::Hello {...} | no-match | +| main.rs:189:31:189:35 | RangePat | main.rs:189:31:189:31 | 3 | match | +| main.rs:189:35:189:35 | 7 | main.rs:189:17:189:27 | id_variable | match | +| main.rs:189:35:189:35 | 7 | main.rs:189:35:189:35 | 7 | | +| main.rs:189:35:189:35 | 7 | main.rs:191:9:191:38 | ...::Hello {...} | no-match | +| main.rs:190:14:190:22 | print_i64 | main.rs:190:24:190:34 | id_variable | | +| main.rs:190:14:190:35 | print_i64(...) | main.rs:186:5:199:5 | match msg { ... } | | +| main.rs:190:24:190:34 | id_variable | main.rs:190:14:190:35 | print_i64(...) | | +| main.rs:191:9:191:38 | ...::Hello {...} | main.rs:191:30:191:36 | RangePat | match | +| main.rs:191:9:191:38 | ...::Hello {...} | main.rs:194:9:194:29 | ...::Hello {...} | no-match | +| main.rs:191:30:191:31 | 10 | main.rs:191:30:191:31 | 10 | | +| main.rs:191:30:191:31 | 10 | main.rs:191:35:191:36 | 12 | match | +| main.rs:191:30:191:31 | 10 | main.rs:194:9:194:29 | ...::Hello {...} | no-match | +| main.rs:191:30:191:36 | RangePat | main.rs:191:30:191:31 | 10 | match | +| main.rs:191:35:191:36 | 12 | main.rs:191:35:191:36 | 12 | | +| main.rs:191:35:191:36 | 12 | main.rs:192:22:192:51 | ExprStmt | match | +| main.rs:191:35:191:36 | 12 | main.rs:194:9:194:29 | ...::Hello {...} | no-match | +| main.rs:191:43:193:9 | { ... } | main.rs:186:5:199:5 | match msg { ... } | | +| main.rs:192:13:192:20 | ...::_print | main.rs:192:22:192:51 | "Found an id in another range\\... | | +| main.rs:192:13:192:52 | MacroExpr | main.rs:191:43:193:9 | { ... } | | +| main.rs:192:13:192:52 | println!... | main.rs:192:13:192:52 | MacroExpr | | +| main.rs:192:22:192:51 | "Found an id in another range\\... | main.rs:192:22:192:51 | FormatArgsExpr | | +| main.rs:192:22:192:51 | ...::_print(...) | main.rs:192:22:192:51 | { ... } | | +| main.rs:192:22:192:51 | ...::format_args_nl!... | main.rs:192:22:192:51 | MacroExpr | | +| main.rs:192:22:192:51 | ExprStmt | main.rs:192:13:192:20 | ...::_print | | +| main.rs:192:22:192:51 | FormatArgsExpr | main.rs:192:22:192:51 | ...::format_args_nl!... | | +| main.rs:192:22:192:51 | MacroBlockExpr | main.rs:192:13:192:52 | println!... | | +| main.rs:192:22:192:51 | MacroExpr | main.rs:192:22:192:51 | ...::_print(...) | | +| main.rs:192:22:192:51 | { ... } | main.rs:192:22:192:51 | MacroBlockExpr | | +| main.rs:194:9:194:29 | ...::Hello {...} | main.rs:194:26:194:27 | id | match | +| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | | +| main.rs:194:26:194:27 | id | main.rs:197:13:197:21 | print_i64 | match | +| main.rs:196:9:198:9 | { ... } | main.rs:186:5:199:5 | match msg { ... } | | +| main.rs:197:13:197:21 | print_i64 | main.rs:197:23:197:24 | id | | +| main.rs:197:13:197:25 | print_i64(...) | main.rs:196:9:198:9 | { ... } | | +| main.rs:197:23:197:24 | id | main.rs:197:13:197:25 | print_i64(...) | | +| main.rs:207:1:213:1 | enter fn match_pattern5 | main.rs:208:5:208:34 | let ... = ... | | +| main.rs:207:1:213:1 | exit fn match_pattern5 (normal) | main.rs:207:1:213:1 | exit fn match_pattern5 | | +| main.rs:207:21:213:1 | { ... } | main.rs:207:1:213:1 | exit fn match_pattern5 (normal) | | +| main.rs:208:5:208:34 | let ... = ... | main.rs:208:18:208:29 | ...::Left | | +| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | | +| main.rs:208:9:208:14 | either | main.rs:209:11:209:16 | either | match | +| main.rs:208:18:208:29 | ...::Left | main.rs:208:31:208:32 | 32 | | +| main.rs:208:18:208:33 | ...::Left(...) | main.rs:208:9:208:14 | either | | +| main.rs:208:31:208:32 | 32 | main.rs:208:18:208:33 | ...::Left(...) | | +| main.rs:209:5:212:5 | match either { ... } | main.rs:207:21:213:1 | { ... } | | +| main.rs:209:11:209:16 | either | main.rs:210:9:210:24 | ...::Left(...) | | +| main.rs:210:9:210:24 | ...::Left(...) | main.rs:210:22:210:23 | a3 | match | +| main.rs:210:9:210:24 | ...::Left(...) | main.rs:210:28:210:44 | ...::Right(...) | no-match | +| main.rs:210:9:210:44 | ... \| ... | main.rs:211:16:211:24 | print_i64 | match | +| main.rs:210:22:210:23 | a3 | main.rs:210:9:210:44 | ... \| ... | match | +| main.rs:210:22:210:23 | a3 | main.rs:210:22:210:23 | a3 | | +| main.rs:210:28:210:44 | ...::Right(...) | main.rs:210:42:210:43 | a3 | match | +| main.rs:210:42:210:43 | a3 | main.rs:210:9:210:44 | ... \| ... | match | +| main.rs:210:42:210:43 | a3 | main.rs:210:42:210:43 | a3 | | +| main.rs:211:16:211:24 | print_i64 | main.rs:211:26:211:27 | a3 | | +| main.rs:211:16:211:28 | print_i64(...) | main.rs:209:5:212:5 | match either { ... } | | +| main.rs:211:26:211:27 | a3 | main.rs:211:16:211:28 | print_i64(...) | | +| main.rs:221:1:235:1 | enter fn match_pattern6 | main.rs:222:5:222:37 | let ... = ... | | +| main.rs:221:1:235:1 | exit fn match_pattern6 (normal) | main.rs:221:1:235:1 | exit fn match_pattern6 | | +| main.rs:221:21:235:1 | { ... } | main.rs:221:1:235:1 | exit fn match_pattern6 (normal) | | +| main.rs:222:5:222:37 | let ... = ... | main.rs:222:14:222:32 | ...::Second | | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | | +| main.rs:222:9:222:10 | tv | main.rs:223:5:226:5 | ExprStmt | match | +| main.rs:222:14:222:32 | ...::Second | main.rs:222:34:222:35 | 62 | | +| main.rs:222:14:222:36 | ...::Second(...) | main.rs:222:9:222:10 | tv | | +| main.rs:222:34:222:35 | 62 | main.rs:222:14:222:36 | ...::Second(...) | | +| main.rs:223:5:226:5 | ExprStmt | main.rs:223:11:223:12 | tv | | +| main.rs:223:5:226:5 | match tv { ... } | main.rs:227:5:230:5 | ExprStmt | | +| main.rs:223:11:223:12 | tv | main.rs:224:9:224:30 | ...::First(...) | | +| main.rs:224:9:224:30 | ...::First(...) | main.rs:224:28:224:29 | a4 | match | +| main.rs:224:9:224:30 | ...::First(...) | main.rs:224:34:224:56 | ...::Second(...) | no-match | +| main.rs:224:9:224:81 | ... \| ... \| ... | main.rs:225:16:225:24 | print_i64 | match | +| main.rs:224:28:224:29 | a4 | main.rs:224:9:224:81 | ... \| ... \| ... | match | +| main.rs:224:28:224:29 | a4 | main.rs:224:28:224:29 | a4 | | +| main.rs:224:34:224:56 | ...::Second(...) | main.rs:224:54:224:55 | a4 | match | +| main.rs:224:34:224:56 | ...::Second(...) | main.rs:224:60:224:81 | ...::Third(...) | no-match | +| main.rs:224:54:224:55 | a4 | main.rs:224:9:224:81 | ... \| ... \| ... | match | +| main.rs:224:54:224:55 | a4 | main.rs:224:54:224:55 | a4 | | +| main.rs:224:60:224:81 | ...::Third(...) | main.rs:224:79:224:80 | a4 | match | +| main.rs:224:79:224:80 | a4 | main.rs:224:9:224:81 | ... \| ... \| ... | match | +| main.rs:224:79:224:80 | a4 | main.rs:224:79:224:80 | a4 | | +| main.rs:225:16:225:24 | print_i64 | main.rs:225:26:225:27 | a4 | | +| main.rs:225:16:225:28 | print_i64(...) | main.rs:223:5:226:5 | match tv { ... } | | +| main.rs:225:26:225:27 | a4 | main.rs:225:16:225:28 | print_i64(...) | | +| main.rs:227:5:230:5 | ExprStmt | main.rs:227:11:227:12 | tv | | +| main.rs:227:5:230:5 | match tv { ... } | main.rs:231:11:231:12 | tv | | +| main.rs:227:11:227:12 | tv | main.rs:228:10:228:31 | ...::First(...) | | +| main.rs:228:9:228:83 | ... \| ... | main.rs:229:16:229:24 | print_i64 | match | +| main.rs:228:10:228:31 | ...::First(...) | main.rs:228:29:228:30 | a5 | match | +| main.rs:228:10:228:31 | ...::First(...) | main.rs:228:35:228:57 | ...::Second(...) | no-match | +| main.rs:228:10:228:57 | [match(false)] ... \| ... | main.rs:228:62:228:83 | ...::Third(...) | no-match | +| main.rs:228:10:228:57 | [match(true)] ... \| ... | main.rs:228:9:228:83 | ... \| ... | match | +| main.rs:228:29:228:30 | a5 | main.rs:228:10:228:57 | [match(true)] ... \| ... | match | +| main.rs:228:29:228:30 | a5 | main.rs:228:29:228:30 | a5 | | +| main.rs:228:35:228:57 | ...::Second(...) | main.rs:228:10:228:57 | [match(false)] ... \| ... | no-match | +| main.rs:228:35:228:57 | ...::Second(...) | main.rs:228:55:228:56 | a5 | match | +| main.rs:228:55:228:56 | a5 | main.rs:228:10:228:57 | [match(true)] ... \| ... | match | +| main.rs:228:55:228:56 | a5 | main.rs:228:55:228:56 | a5 | | +| main.rs:228:62:228:83 | ...::Third(...) | main.rs:228:81:228:82 | a5 | match | +| main.rs:228:81:228:82 | a5 | main.rs:228:9:228:83 | ... \| ... | match | +| main.rs:228:81:228:82 | a5 | main.rs:228:81:228:82 | a5 | | +| main.rs:229:16:229:24 | print_i64 | main.rs:229:26:229:27 | a5 | | +| main.rs:229:16:229:28 | print_i64(...) | main.rs:227:5:230:5 | match tv { ... } | | +| main.rs:229:26:229:27 | a5 | main.rs:229:16:229:28 | print_i64(...) | | +| main.rs:231:5:234:5 | match tv { ... } | main.rs:221:21:235:1 | { ... } | | +| main.rs:231:11:231:12 | tv | main.rs:232:9:232:30 | ...::First(...) | | +| main.rs:232:9:232:30 | ...::First(...) | main.rs:232:28:232:29 | a6 | match | +| main.rs:232:9:232:30 | ...::First(...) | main.rs:232:35:232:57 | ...::Second(...) | no-match | +| main.rs:232:9:232:83 | ... \| ... | main.rs:233:16:233:24 | print_i64 | match | +| main.rs:232:28:232:29 | a6 | main.rs:232:9:232:83 | ... \| ... | match | +| main.rs:232:28:232:29 | a6 | main.rs:232:28:232:29 | a6 | | +| main.rs:232:35:232:57 | ...::Second(...) | main.rs:232:55:232:56 | a6 | match | +| main.rs:232:35:232:57 | ...::Second(...) | main.rs:232:61:232:82 | ...::Third(...) | no-match | +| main.rs:232:35:232:82 | ... \| ... | main.rs:232:9:232:83 | ... \| ... | match | +| main.rs:232:55:232:56 | a6 | main.rs:232:35:232:82 | ... \| ... | match | +| main.rs:232:55:232:56 | a6 | main.rs:232:55:232:56 | a6 | | +| main.rs:232:61:232:82 | ...::Third(...) | main.rs:232:80:232:81 | a6 | match | +| main.rs:232:80:232:81 | a6 | main.rs:232:35:232:82 | ... \| ... | match | +| main.rs:232:80:232:81 | a6 | main.rs:232:80:232:81 | a6 | | +| main.rs:233:16:233:24 | print_i64 | main.rs:233:26:233:27 | a6 | | +| main.rs:233:16:233:28 | print_i64(...) | main.rs:231:5:234:5 | match tv { ... } | | +| main.rs:233:26:233:27 | a6 | main.rs:233:16:233:28 | print_i64(...) | | +| main.rs:237:1:245:1 | enter fn match_pattern7 | main.rs:238:5:238:34 | let ... = ... | | +| main.rs:237:1:245:1 | exit fn match_pattern7 (normal) | main.rs:237:1:245:1 | exit fn match_pattern7 | | +| main.rs:237:21:245:1 | { ... } | main.rs:237:1:245:1 | exit fn match_pattern7 (normal) | | +| main.rs:238:5:238:34 | let ... = ... | main.rs:238:18:238:29 | ...::Left | | +| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | | +| main.rs:238:9:238:14 | either | main.rs:239:11:239:16 | either | match | +| main.rs:238:18:238:29 | ...::Left | main.rs:238:31:238:32 | 32 | | +| main.rs:238:18:238:33 | ...::Left(...) | main.rs:238:9:238:14 | either | | +| main.rs:238:31:238:32 | 32 | main.rs:238:18:238:33 | ...::Left(...) | | +| main.rs:239:5:244:5 | match either { ... } | main.rs:237:21:245:1 | { ... } | | +| main.rs:239:11:239:16 | either | main.rs:240:9:240:24 | ...::Left(...) | | +| main.rs:240:9:240:24 | ...::Left(...) | main.rs:240:22:240:23 | a7 | match | +| main.rs:240:9:240:24 | ...::Left(...) | main.rs:240:28:240:44 | ...::Right(...) | no-match | +| main.rs:240:9:240:44 | [match(false)] ... \| ... | main.rs:243:9:243:9 | _ | no-match | +| main.rs:240:9:240:44 | [match(true)] ... \| ... | main.rs:241:16:241:17 | a7 | match | +| main.rs:240:22:240:23 | a7 | main.rs:240:9:240:44 | [match(true)] ... \| ... | match | +| main.rs:240:22:240:23 | a7 | main.rs:240:22:240:23 | a7 | | +| main.rs:240:28:240:44 | ...::Right(...) | main.rs:240:9:240:44 | [match(false)] ... \| ... | no-match | +| main.rs:240:28:240:44 | ...::Right(...) | main.rs:240:42:240:43 | a7 | match | +| main.rs:240:42:240:43 | a7 | main.rs:240:9:240:44 | [match(true)] ... \| ... | match | +| main.rs:240:42:240:43 | a7 | main.rs:240:42:240:43 | a7 | | +| main.rs:241:16:241:17 | a7 | main.rs:241:21:241:21 | 0 | | +| main.rs:241:16:241:21 | ... > ... | main.rs:242:16:242:24 | print_i64 | true | +| main.rs:241:16:241:21 | ... > ... | main.rs:243:9:243:9 | _ | false | +| main.rs:241:21:241:21 | 0 | main.rs:241:16:241:21 | ... > ... | | +| main.rs:242:16:242:24 | print_i64 | main.rs:242:26:242:27 | a7 | | +| main.rs:242:16:242:28 | print_i64(...) | main.rs:239:5:244:5 | match either { ... } | | +| main.rs:242:26:242:27 | a7 | main.rs:242:16:242:28 | print_i64(...) | | +| main.rs:243:9:243:9 | _ | main.rs:243:14:243:15 | TupleExpr | match | +| main.rs:243:14:243:15 | TupleExpr | main.rs:239:5:244:5 | match either { ... } | | +| main.rs:247:1:262:1 | enter fn match_pattern8 | main.rs:248:5:248:34 | let ... = ... | | +| main.rs:247:1:262:1 | exit fn match_pattern8 (normal) | main.rs:247:1:262:1 | exit fn match_pattern8 | | +| main.rs:247:21:262:1 | { ... } | main.rs:247:1:262:1 | exit fn match_pattern8 (normal) | | +| main.rs:248:5:248:34 | let ... = ... | main.rs:248:18:248:29 | ...::Left | | +| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | | +| main.rs:248:9:248:14 | either | main.rs:250:11:250:16 | either | match | +| main.rs:248:18:248:29 | ...::Left | main.rs:248:31:248:32 | 32 | | +| main.rs:248:18:248:33 | ...::Left(...) | main.rs:248:9:248:14 | either | | +| main.rs:248:31:248:32 | 32 | main.rs:248:18:248:33 | ...::Left(...) | | +| main.rs:250:5:261:5 | match either { ... } | main.rs:247:21:262:1 | { ... } | | +| main.rs:250:11:250:16 | either | main.rs:252:14:252:30 | ...::Left(...) | | +| main.rs:251:9:252:52 | ref e @ ... | main.rs:254:13:254:27 | ExprStmt | match | +| main.rs:251:13:251:13 | e | main.rs:251:9:252:52 | ref e @ ... | | +| main.rs:252:14:252:30 | ...::Left(...) | main.rs:252:27:252:29 | a11 | match | +| main.rs:252:14:252:30 | ...::Left(...) | main.rs:252:34:252:51 | ...::Right(...) | no-match | +| main.rs:252:14:252:51 | [match(false)] ... \| ... | main.rs:260:9:260:9 | _ | no-match | +| main.rs:252:14:252:51 | [match(true)] ... \| ... | main.rs:251:13:251:13 | e | match | +| main.rs:252:27:252:29 | a11 | main.rs:252:14:252:51 | [match(true)] ... \| ... | match | +| main.rs:252:27:252:29 | a11 | main.rs:252:27:252:29 | a11 | | +| main.rs:252:34:252:51 | ...::Right(...) | main.rs:252:14:252:51 | [match(false)] ... \| ... | no-match | +| main.rs:252:34:252:51 | ...::Right(...) | main.rs:252:48:252:50 | a11 | match | +| main.rs:252:48:252:50 | a11 | main.rs:252:14:252:51 | [match(true)] ... \| ... | match | +| main.rs:252:48:252:50 | a11 | main.rs:252:48:252:50 | a11 | | +| main.rs:253:12:259:9 | { ... } | main.rs:250:5:261:5 | match either { ... } | | +| main.rs:254:13:254:21 | print_i64 | main.rs:254:23:254:25 | a11 | | +| main.rs:254:13:254:26 | print_i64(...) | main.rs:256:15:256:15 | e | | +| main.rs:254:13:254:27 | ExprStmt | main.rs:254:13:254:21 | print_i64 | | +| main.rs:254:23:254:25 | a11 | main.rs:254:13:254:26 | print_i64(...) | | +| main.rs:255:13:258:13 | if ... {...} | main.rs:253:12:259:9 | { ... } | | +| main.rs:255:16:256:15 | [boolean(false)] let ... = e | main.rs:255:13:258:13 | if ... {...} | false | +| main.rs:255:16:256:15 | [boolean(true)] let ... = e | main.rs:257:17:257:32 | ExprStmt | true | +| main.rs:255:20:255:36 | ...::Left(...) | main.rs:255:16:256:15 | [boolean(false)] let ... = e | no-match | +| main.rs:255:20:255:36 | ...::Left(...) | main.rs:255:33:255:35 | a12 | match | +| main.rs:255:33:255:35 | a12 | main.rs:255:16:256:15 | [boolean(true)] let ... = e | match | +| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | | +| main.rs:256:15:256:15 | e | main.rs:255:20:255:36 | ...::Left(...) | | +| main.rs:256:17:258:13 | { ... } | main.rs:255:13:258:13 | if ... {...} | | +| main.rs:257:17:257:25 | print_i64 | main.rs:257:28:257:30 | a12 | | +| main.rs:257:17:257:31 | print_i64(...) | main.rs:256:17:258:13 | { ... } | | +| main.rs:257:17:257:32 | ExprStmt | main.rs:257:17:257:25 | print_i64 | | +| main.rs:257:27:257:30 | * ... | main.rs:257:17:257:31 | print_i64(...) | | +| main.rs:257:28:257:30 | a12 | main.rs:257:27:257:30 | * ... | | +| main.rs:260:9:260:9 | _ | main.rs:260:14:260:15 | TupleExpr | match | +| main.rs:260:14:260:15 | TupleExpr | main.rs:250:5:261:5 | match either { ... } | | +| main.rs:271:1:277:1 | enter fn match_pattern9 | main.rs:272:5:272:36 | let ... = ... | | +| main.rs:271:1:277:1 | exit fn match_pattern9 (normal) | main.rs:271:1:277:1 | exit fn match_pattern9 | | +| main.rs:271:21:277:1 | { ... } | main.rs:271:1:277:1 | exit fn match_pattern9 (normal) | | +| main.rs:272:5:272:36 | let ... = ... | main.rs:272:14:272:31 | ...::Second | | +| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | | +| main.rs:272:9:272:10 | fv | main.rs:273:11:273:12 | fv | match | +| main.rs:272:14:272:31 | ...::Second | main.rs:272:33:272:34 | 62 | | +| main.rs:272:14:272:35 | ...::Second(...) | main.rs:272:9:272:10 | fv | | +| main.rs:272:33:272:34 | 62 | main.rs:272:14:272:35 | ...::Second(...) | | +| main.rs:273:5:276:5 | match fv { ... } | main.rs:271:21:277:1 | { ... } | | +| main.rs:273:11:273:12 | fv | main.rs:274:9:274:30 | ...::First(...) | | +| main.rs:274:9:274:30 | ...::First(...) | main.rs:274:27:274:29 | a13 | match | +| main.rs:274:9:274:30 | ...::First(...) | main.rs:274:35:274:57 | ...::Second(...) | no-match | +| main.rs:274:9:274:109 | ... \| ... \| ... | main.rs:275:16:275:24 | print_i64 | match | +| main.rs:274:27:274:29 | a13 | main.rs:274:9:274:109 | ... \| ... \| ... | match | +| main.rs:274:27:274:29 | a13 | main.rs:274:27:274:29 | a13 | | +| main.rs:274:35:274:57 | ...::Second(...) | main.rs:274:54:274:56 | a13 | match | +| main.rs:274:35:274:57 | ...::Second(...) | main.rs:274:61:274:82 | ...::Third(...) | no-match | +| main.rs:274:35:274:82 | [match(false)] ... \| ... | main.rs:274:87:274:109 | ...::Fourth(...) | no-match | +| main.rs:274:35:274:82 | [match(true)] ... \| ... | main.rs:274:9:274:109 | ... \| ... \| ... | match | +| main.rs:274:54:274:56 | a13 | main.rs:274:35:274:82 | [match(true)] ... \| ... | match | +| main.rs:274:54:274:56 | a13 | main.rs:274:54:274:56 | a13 | | +| main.rs:274:61:274:82 | ...::Third(...) | main.rs:274:35:274:82 | [match(false)] ... \| ... | no-match | +| main.rs:274:61:274:82 | ...::Third(...) | main.rs:274:79:274:81 | a13 | match | +| main.rs:274:79:274:81 | a13 | main.rs:274:35:274:82 | [match(true)] ... \| ... | match | +| main.rs:274:79:274:81 | a13 | main.rs:274:79:274:81 | a13 | | +| main.rs:274:87:274:109 | ...::Fourth(...) | main.rs:274:106:274:108 | a13 | match | +| main.rs:274:106:274:108 | a13 | main.rs:274:9:274:109 | ... \| ... \| ... | match | +| main.rs:274:106:274:108 | a13 | main.rs:274:106:274:108 | a13 | | +| main.rs:275:16:275:24 | print_i64 | main.rs:275:26:275:28 | a13 | | +| main.rs:275:16:275:29 | print_i64(...) | main.rs:273:5:276:5 | match fv { ... } | | +| main.rs:275:26:275:28 | a13 | main.rs:275:16:275:29 | print_i64(...) | | +| main.rs:279:1:293:1 | enter fn match_pattern10 | main.rs:281:5:281:20 | let ... = ... | | +| main.rs:279:1:293:1 | exit fn match_pattern10 (normal) | main.rs:279:1:293:1 | exit fn match_pattern10 | | +| main.rs:280:22:293:1 | { ... } | main.rs:279:1:293:1 | exit fn match_pattern10 (normal) | | +| main.rs:281:5:281:20 | let ... = ... | main.rs:281:12:281:15 | Some | | +| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | | +| main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x | match | +| main.rs:281:12:281:15 | Some | main.rs:281:17:281:18 | 42 | | +| main.rs:281:12:281:19 | Some(...) | main.rs:281:9:281:9 | x | | +| main.rs:281:17:281:18 | 42 | main.rs:281:12:281:19 | Some(...) | | +| main.rs:282:5:292:5 | if ... {...} else {...} | main.rs:280:22:293:1 | { ... } | | +| main.rs:282:8:283:7 | [boolean(false)] let ... = x | main.rs:282:8:285:9 | [boolean(false)] ... && ... | false | +| main.rs:282:8:283:7 | [boolean(true)] let ... = x | main.rs:285:5:285:5 | x | true | +| main.rs:282:8:285:9 | [boolean(false)] ... && ... | main.rs:289:9:290:14 | let ... = x | false | +| main.rs:282:8:285:9 | [boolean(true)] ... && ... | main.rs:287:9:287:21 | ExprStmt | true | +| main.rs:282:12:282:18 | Some(...) | main.rs:282:8:283:7 | [boolean(false)] let ... = x | no-match | +| main.rs:282:12:282:18 | Some(...) | main.rs:282:17:282:17 | x | match | +| main.rs:282:17:282:17 | x | main.rs:282:8:283:7 | [boolean(true)] let ... = x | match | +| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | | +| main.rs:283:7:283:7 | x | main.rs:282:12:282:18 | Some(...) | | +| main.rs:285:5:285:5 | x | main.rs:285:9:285:9 | 0 | | +| main.rs:285:5:285:9 | ... > ... | main.rs:282:8:285:9 | [boolean(false)] ... && ... | false | +| main.rs:285:5:285:9 | ... > ... | main.rs:282:8:285:9 | [boolean(true)] ... && ... | true | +| main.rs:285:9:285:9 | 0 | main.rs:285:5:285:9 | ... > ... | | +| main.rs:286:5:288:5 | { ... } | main.rs:282:5:292:5 | if ... {...} else {...} | | +| main.rs:287:9:287:17 | print_i64 | main.rs:287:19:287:19 | x | | +| main.rs:287:9:287:20 | print_i64(...) | main.rs:286:5:288:5 | { ... } | | +| main.rs:287:9:287:21 | ExprStmt | main.rs:287:9:287:17 | print_i64 | | +| main.rs:287:19:287:19 | x | main.rs:287:9:287:20 | print_i64(...) | | +| main.rs:288:12:292:5 | { ... } | main.rs:282:5:292:5 | if ... {...} else {...} | | +| main.rs:289:9:290:14 | let ... = x | main.rs:290:13:290:13 | x | | +| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | | +| main.rs:289:13:289:13 | x | main.rs:291:9:291:30 | ExprStmt | match | +| main.rs:290:13:290:13 | x | main.rs:289:13:289:13 | x | | +| main.rs:291:9:291:17 | print_i64 | main.rs:291:19:291:19 | x | | +| main.rs:291:9:291:29 | print_i64(...) | main.rs:288:12:292:5 | { ... } | | +| main.rs:291:9:291:30 | ExprStmt | main.rs:291:9:291:17 | print_i64 | | +| main.rs:291:19:291:19 | x | main.rs:291:19:291:28 | x.unwrap() | | +| main.rs:291:19:291:28 | x.unwrap() | main.rs:291:9:291:29 | print_i64(...) | | +| main.rs:295:1:312:1 | enter fn match_pattern11 | main.rs:297:5:297:21 | let ... = ... | | +| main.rs:295:1:312:1 | exit fn match_pattern11 (normal) | main.rs:295:1:312:1 | exit fn match_pattern11 | | +| main.rs:296:22:312:1 | { ... } | main.rs:295:1:312:1 | exit fn match_pattern11 (normal) | | +| main.rs:297:5:297:21 | let ... = ... | main.rs:297:13:297:16 | Some | | +| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | | +| main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x | match | +| main.rs:297:13:297:16 | Some | main.rs:297:18:297:19 | 42 | | +| main.rs:297:13:297:20 | Some(...) | main.rs:297:9:297:9 | x | | +| main.rs:297:18:297:19 | 42 | main.rs:297:13:297:20 | Some(...) | | +| main.rs:298:5:311:5 | if ... {...} else {...} | main.rs:296:22:312:1 | { ... } | | +| main.rs:298:8:299:7 | [boolean(false)] let ... = x | main.rs:298:8:302:13 | [boolean(false)] ... && ... | false | +| main.rs:298:8:299:7 | [boolean(true)] let ... = x | main.rs:302:7:302:10 | Some | true | +| main.rs:298:8:302:13 | [boolean(false)] ... && ... | main.rs:298:8:304:9 | [boolean(false)] ... && ... | false | +| main.rs:298:8:302:13 | [boolean(true)] ... && ... | main.rs:304:5:304:5 | x | true | +| main.rs:298:8:304:9 | [boolean(false)] ... && ... | main.rs:308:9:309:14 | let ... = x | false | +| main.rs:298:8:304:9 | [boolean(true)] ... && ... | main.rs:306:9:306:21 | ExprStmt | true | +| main.rs:298:12:298:18 | Some(...) | main.rs:298:8:299:7 | [boolean(false)] let ... = x | no-match | +| main.rs:298:12:298:18 | Some(...) | main.rs:298:17:298:17 | x | match | +| main.rs:298:17:298:17 | x | main.rs:298:8:299:7 | [boolean(true)] let ... = x | match | +| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | | +| main.rs:299:7:299:7 | x | main.rs:298:12:298:18 | Some(...) | | +| main.rs:301:5:302:13 | [boolean(false)] let ... = ... | main.rs:298:8:302:13 | [boolean(false)] ... && ... | false | +| main.rs:301:5:302:13 | [boolean(true)] let ... = ... | main.rs:298:8:302:13 | [boolean(true)] ... && ... | true | +| main.rs:301:9:301:15 | Some(...) | main.rs:301:5:302:13 | [boolean(false)] let ... = ... | no-match | +| main.rs:301:9:301:15 | Some(...) | main.rs:301:14:301:14 | x | match | +| main.rs:301:14:301:14 | x | main.rs:301:5:302:13 | [boolean(true)] let ... = ... | match | +| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | | +| main.rs:302:7:302:10 | Some | main.rs:302:12:302:12 | x | | +| main.rs:302:7:302:13 | Some(...) | main.rs:301:9:301:15 | Some(...) | | +| main.rs:302:12:302:12 | x | main.rs:302:7:302:13 | Some(...) | | +| main.rs:304:5:304:5 | x | main.rs:304:9:304:9 | 0 | | +| main.rs:304:5:304:9 | ... > ... | main.rs:298:8:304:9 | [boolean(false)] ... && ... | false | +| main.rs:304:5:304:9 | ... > ... | main.rs:298:8:304:9 | [boolean(true)] ... && ... | true | +| main.rs:304:9:304:9 | 0 | main.rs:304:5:304:9 | ... > ... | | +| main.rs:305:5:307:5 | { ... } | main.rs:298:5:311:5 | if ... {...} else {...} | | +| main.rs:306:9:306:17 | print_i64 | main.rs:306:19:306:19 | x | | +| main.rs:306:9:306:20 | print_i64(...) | main.rs:305:5:307:5 | { ... } | | +| main.rs:306:9:306:21 | ExprStmt | main.rs:306:9:306:17 | print_i64 | | +| main.rs:306:19:306:19 | x | main.rs:306:9:306:20 | print_i64(...) | | +| main.rs:307:12:311:5 | { ... } | main.rs:298:5:311:5 | if ... {...} else {...} | | +| main.rs:308:9:309:14 | let ... = x | main.rs:309:13:309:13 | x | | +| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | | +| main.rs:308:13:308:13 | x | main.rs:310:9:310:30 | ExprStmt | match | +| main.rs:309:13:309:13 | x | main.rs:308:13:308:13 | x | | +| main.rs:310:9:310:17 | print_i64 | main.rs:310:19:310:19 | x | | +| main.rs:310:9:310:29 | print_i64(...) | main.rs:307:12:311:5 | { ... } | | +| main.rs:310:9:310:30 | ExprStmt | main.rs:310:9:310:17 | print_i64 | | +| main.rs:310:19:310:19 | x | main.rs:310:19:310:28 | x.unwrap() | | +| main.rs:310:19:310:28 | x.unwrap() | main.rs:310:9:310:29 | print_i64(...) | | +| main.rs:314:1:330:1 | enter fn match_pattern12 | main.rs:316:5:316:21 | let ... = ... | | +| main.rs:314:1:330:1 | exit fn match_pattern12 (normal) | main.rs:314:1:330:1 | exit fn match_pattern12 | | +| main.rs:315:22:330:1 | { ... } | main.rs:314:1:330:1 | exit fn match_pattern12 (normal) | | +| main.rs:316:5:316:21 | let ... = ... | main.rs:316:13:316:16 | Some | | +| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | | +| main.rs:316:9:316:9 | x | main.rs:317:5:327:5 | ExprStmt | match | +| main.rs:316:13:316:16 | Some | main.rs:316:18:316:19 | 42 | | +| main.rs:316:13:316:20 | Some(...) | main.rs:316:9:316:9 | x | | +| main.rs:316:18:316:19 | 42 | main.rs:316:13:316:20 | Some(...) | | +| main.rs:317:5:327:5 | ExprStmt | main.rs:318:7:318:7 | x | | +| main.rs:317:5:327:5 | while ... { ... } | main.rs:329:5:329:26 | ExprStmt | | +| main.rs:317:11:318:7 | [boolean(false)] let ... = x | main.rs:317:11:321:13 | [boolean(false)] ... && ... | false | +| main.rs:317:11:318:7 | [boolean(true)] let ... = x | main.rs:321:7:321:10 | Some | true | +| main.rs:317:11:321:13 | [boolean(false)] ... && ... | main.rs:317:11:323:9 | [boolean(false)] ... && ... | false | +| main.rs:317:11:321:13 | [boolean(true)] ... && ... | main.rs:323:5:323:5 | x | true | +| main.rs:317:11:323:9 | [boolean(false)] ... && ... | main.rs:317:5:327:5 | while ... { ... } | false | +| main.rs:317:11:323:9 | [boolean(true)] ... && ... | main.rs:325:9:325:21 | ExprStmt | true | +| main.rs:317:15:317:21 | Some(...) | main.rs:317:11:318:7 | [boolean(false)] let ... = x | no-match | +| main.rs:317:15:317:21 | Some(...) | main.rs:317:20:317:20 | x | match | +| main.rs:317:20:317:20 | x | main.rs:317:11:318:7 | [boolean(true)] let ... = x | match | +| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | | +| main.rs:318:7:318:7 | x | main.rs:317:15:317:21 | Some(...) | | +| main.rs:320:5:321:13 | [boolean(false)] let ... = ... | main.rs:317:11:321:13 | [boolean(false)] ... && ... | false | +| main.rs:320:5:321:13 | [boolean(true)] let ... = ... | main.rs:317:11:321:13 | [boolean(true)] ... && ... | true | +| main.rs:320:9:320:15 | Some(...) | main.rs:320:5:321:13 | [boolean(false)] let ... = ... | no-match | +| main.rs:320:9:320:15 | Some(...) | main.rs:320:14:320:14 | x | match | +| main.rs:320:14:320:14 | x | main.rs:320:5:321:13 | [boolean(true)] let ... = ... | match | +| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | | +| main.rs:321:7:321:10 | Some | main.rs:321:12:321:12 | x | | +| main.rs:321:7:321:13 | Some(...) | main.rs:320:9:320:15 | Some(...) | | +| main.rs:321:12:321:12 | x | main.rs:321:7:321:13 | Some(...) | | +| main.rs:323:5:323:5 | x | main.rs:323:9:323:9 | 0 | | +| main.rs:323:5:323:9 | ... > ... | main.rs:317:11:323:9 | [boolean(false)] ... && ... | false | +| main.rs:323:5:323:9 | ... > ... | main.rs:317:11:323:9 | [boolean(true)] ... && ... | true | +| main.rs:323:9:323:9 | 0 | main.rs:323:5:323:9 | ... > ... | | +| main.rs:325:9:325:17 | print_i64 | main.rs:325:19:325:19 | x | | +| main.rs:325:9:325:20 | print_i64(...) | main.rs:326:9:326:14 | ExprStmt | | +| main.rs:325:9:325:21 | ExprStmt | main.rs:325:9:325:17 | print_i64 | | +| main.rs:325:19:325:19 | x | main.rs:325:9:325:20 | print_i64(...) | | +| main.rs:326:9:326:13 | break | main.rs:317:5:327:5 | while ... { ... } | break | +| main.rs:326:9:326:14 | ExprStmt | main.rs:326:9:326:13 | break | | +| main.rs:329:5:329:13 | print_i64 | main.rs:329:15:329:15 | x | | +| main.rs:329:5:329:25 | print_i64(...) | main.rs:315:22:330:1 | { ... } | | +| main.rs:329:5:329:26 | ExprStmt | main.rs:329:5:329:13 | print_i64 | | +| main.rs:329:15:329:15 | x | main.rs:329:15:329:24 | x.unwrap() | | +| main.rs:329:15:329:24 | x.unwrap() | main.rs:329:5:329:25 | print_i64(...) | | +| main.rs:332:1:344:1 | enter fn match_pattern13 | main.rs:334:5:334:21 | let ... = ... | | +| main.rs:332:1:344:1 | exit fn match_pattern13 (normal) | main.rs:332:1:344:1 | exit fn match_pattern13 | | +| main.rs:333:22:344:1 | { ... } | main.rs:332:1:344:1 | exit fn match_pattern13 (normal) | | +| main.rs:334:5:334:21 | let ... = ... | main.rs:334:13:334:16 | Some | | +| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | | +| main.rs:334:9:334:9 | x | main.rs:335:5:341:5 | ExprStmt | match | +| main.rs:334:13:334:16 | Some | main.rs:334:18:334:19 | 42 | | +| main.rs:334:13:334:20 | Some(...) | main.rs:334:9:334:9 | x | | +| main.rs:334:18:334:19 | 42 | main.rs:334:13:334:20 | Some(...) | | +| main.rs:335:5:341:5 | ExprStmt | main.rs:335:11:335:11 | x | | +| main.rs:335:5:341:5 | match x { ... } | main.rs:343:5:343:26 | ExprStmt | | +| main.rs:335:11:335:11 | x | main.rs:336:9:336:15 | Some(...) | | +| main.rs:336:9:336:15 | Some(...) | main.rs:336:14:336:14 | x | match | +| main.rs:336:9:336:15 | Some(...) | main.rs:340:9:340:9 | _ | no-match | +| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | | +| main.rs:336:14:336:14 | x | main.rs:338:18:338:18 | x | match | +| main.rs:337:16:338:18 | [boolean(true)] let ... = x | main.rs:339:19:339:19 | x | true | +| main.rs:337:16:339:23 | [boolean(false)] ... && ... | main.rs:340:9:340:9 | _ | false | +| main.rs:337:16:339:23 | [boolean(true)] ... && ... | main.rs:339:28:339:29 | TupleExpr | true | +| main.rs:337:20:337:20 | x | main.rs:337:16:338:18 | [boolean(true)] let ... = x | match | +| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | | +| main.rs:338:18:338:18 | x | main.rs:337:20:337:20 | x | | +| main.rs:339:19:339:19 | x | main.rs:339:23:339:23 | 0 | | +| main.rs:339:19:339:23 | ... > ... | main.rs:337:16:339:23 | [boolean(false)] ... && ... | false | +| main.rs:339:19:339:23 | ... > ... | main.rs:337:16:339:23 | [boolean(true)] ... && ... | true | +| main.rs:339:23:339:23 | 0 | main.rs:339:19:339:23 | ... > ... | | +| main.rs:339:28:339:29 | TupleExpr | main.rs:335:5:341:5 | match x { ... } | | +| main.rs:340:9:340:9 | _ | main.rs:340:14:340:15 | TupleExpr | match | +| main.rs:340:14:340:15 | TupleExpr | main.rs:335:5:341:5 | match x { ... } | | +| main.rs:343:5:343:13 | print_i64 | main.rs:343:15:343:15 | x | | +| main.rs:343:5:343:25 | print_i64(...) | main.rs:333:22:344:1 | { ... } | | +| main.rs:343:5:343:26 | ExprStmt | main.rs:343:5:343:13 | print_i64 | | +| main.rs:343:15:343:15 | x | main.rs:343:15:343:24 | x.unwrap() | | +| main.rs:343:15:343:24 | x.unwrap() | main.rs:343:5:343:25 | print_i64(...) | | +| main.rs:346:1:361:1 | enter fn match_pattern14 | main.rs:348:5:348:19 | let ... = ... | | +| main.rs:346:1:361:1 | exit fn match_pattern14 (normal) | main.rs:346:1:361:1 | exit fn match_pattern14 | | +| main.rs:347:22:361:1 | { ... } | main.rs:346:1:361:1 | exit fn match_pattern14 (normal) | | +| main.rs:348:5:348:19 | let ... = ... | main.rs:348:13:348:14 | Ok | | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | | +| main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | match | +| main.rs:348:13:348:14 | Ok | main.rs:348:16:348:17 | 42 | | +| main.rs:348:13:348:18 | Ok(...) | main.rs:348:9:348:9 | x | | +| main.rs:348:16:348:17 | 42 | main.rs:348:13:348:18 | Ok(...) | | +| main.rs:349:5:360:5 | if ... {...} else {...} | main.rs:347:22:361:1 | { ... } | | +| main.rs:349:8:350:7 | [boolean(false)] let ... = x | main.rs:355:7:355:7 | x | false | +| main.rs:349:8:350:7 | [boolean(true)] let ... = x | main.rs:352:9:352:21 | ExprStmt | true | +| main.rs:349:12:349:17 | Err(...) | main.rs:349:8:350:7 | [boolean(false)] let ... = x | no-match | +| main.rs:349:12:349:17 | Err(...) | main.rs:349:16:349:16 | x | match | +| main.rs:349:16:349:16 | x | main.rs:349:8:350:7 | [boolean(true)] let ... = x | match | +| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | | +| main.rs:350:7:350:7 | x | main.rs:349:12:349:17 | Err(...) | | +| main.rs:351:5:353:5 | { ... } | main.rs:349:5:360:5 | if ... {...} else {...} | | +| main.rs:352:9:352:17 | print_i64 | main.rs:352:19:352:19 | x | | +| main.rs:352:9:352:20 | print_i64(...) | main.rs:351:5:353:5 | { ... } | | +| main.rs:352:9:352:21 | ExprStmt | main.rs:352:9:352:17 | print_i64 | | +| main.rs:352:19:352:19 | x | main.rs:352:9:352:20 | print_i64(...) | | +| main.rs:354:10:360:5 | if ... {...} else {...} | main.rs:349:5:360:5 | if ... {...} else {...} | | +| main.rs:354:13:355:7 | [boolean(false)] let ... = x | main.rs:359:9:359:30 | ExprStmt | false | +| main.rs:354:13:355:7 | [boolean(true)] let ... = x | main.rs:357:9:357:21 | ExprStmt | true | +| main.rs:354:17:354:21 | Ok(...) | main.rs:354:13:355:7 | [boolean(false)] let ... = x | no-match | +| main.rs:354:17:354:21 | Ok(...) | main.rs:354:20:354:20 | x | match | +| main.rs:354:20:354:20 | x | main.rs:354:13:355:7 | [boolean(true)] let ... = x | match | +| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | | +| main.rs:355:7:355:7 | x | main.rs:354:17:354:21 | Ok(...) | | +| main.rs:356:5:358:5 | { ... } | main.rs:354:10:360:5 | if ... {...} else {...} | | | main.rs:357:9:357:17 | print_i64 | main.rs:357:19:357:19 | x | | -| main.rs:357:9:357:29 | print_i64(...) | main.rs:356:12:358:5 | { ... } | | -| main.rs:357:9:357:30 | ExprStmt | main.rs:357:9:357:17 | print_i64 | | -| main.rs:357:19:357:19 | x | main.rs:357:19:357:28 | x.unwrap() | | -| main.rs:357:19:357:28 | x.unwrap() | main.rs:357:9:357:29 | print_i64(...) | | -| main.rs:361:1:371:1 | enter fn param_pattern1 | main.rs:362:5:362:6 | a8 | | -| main.rs:361:1:371:1 | exit fn param_pattern1 (normal) | main.rs:361:1:371:1 | exit fn param_pattern1 | | -| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | | -| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:12 | ...: ... | match | -| main.rs:362:5:362:12 | ...: ... | main.rs:363:5:366:5 | TuplePat | | -| main.rs:363:5:366:5 | TuplePat | main.rs:364:9:364:10 | b3 | match | -| main.rs:363:5:366:19 | ...: ... | main.rs:368:5:368:18 | ExprStmt | | -| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | | -| main.rs:364:9:364:10 | b3 | main.rs:365:9:365:10 | c1 | match | -| main.rs:365:9:365:10 | c1 | main.rs:363:5:366:19 | ...: ... | match | -| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | | -| main.rs:367:9:371:1 | { ... } | main.rs:361:1:371:1 | exit fn param_pattern1 (normal) | | -| main.rs:368:5:368:13 | print_str | main.rs:368:15:368:16 | a8 | | -| main.rs:368:5:368:17 | print_str(...) | main.rs:369:5:369:18 | ExprStmt | | -| main.rs:368:5:368:18 | ExprStmt | main.rs:368:5:368:13 | print_str | | -| main.rs:368:15:368:16 | a8 | main.rs:368:5:368:17 | print_str(...) | | -| main.rs:369:5:369:13 | print_str | main.rs:369:15:369:16 | b3 | | -| main.rs:369:5:369:17 | print_str(...) | main.rs:370:5:370:18 | ExprStmt | | -| main.rs:369:5:369:18 | ExprStmt | main.rs:369:5:369:13 | print_str | | -| main.rs:369:15:369:16 | b3 | main.rs:369:5:369:17 | print_str(...) | | -| main.rs:370:5:370:13 | print_str | main.rs:370:15:370:16 | c1 | | -| main.rs:370:5:370:17 | print_str(...) | main.rs:367:9:371:1 | { ... } | | +| main.rs:357:9:357:20 | print_i64(...) | main.rs:356:5:358:5 | { ... } | | +| main.rs:357:9:357:21 | ExprStmt | main.rs:357:9:357:17 | print_i64 | | +| main.rs:357:19:357:19 | x | main.rs:357:9:357:20 | print_i64(...) | | +| main.rs:358:12:360:5 | { ... } | main.rs:354:10:360:5 | if ... {...} else {...} | | +| main.rs:359:9:359:17 | print_i64 | main.rs:359:19:359:19 | x | | +| main.rs:359:9:359:29 | print_i64(...) | main.rs:358:12:360:5 | { ... } | | +| main.rs:359:9:359:30 | ExprStmt | main.rs:359:9:359:17 | print_i64 | | +| main.rs:359:19:359:19 | x | main.rs:359:19:359:28 | x.unwrap() | | +| main.rs:359:19:359:28 | x.unwrap() | main.rs:359:9:359:29 | print_i64(...) | | +| main.rs:363:1:373:1 | enter fn param_pattern1 | main.rs:364:5:364:6 | a8 | | +| main.rs:363:1:373:1 | exit fn param_pattern1 (normal) | main.rs:363:1:373:1 | exit fn param_pattern1 | | +| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | | +| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:12 | ...: ... | match | +| main.rs:364:5:364:12 | ...: ... | main.rs:365:5:368:5 | TuplePat | | +| main.rs:365:5:368:5 | TuplePat | main.rs:366:9:366:10 | b3 | match | +| main.rs:365:5:368:19 | ...: ... | main.rs:370:5:370:18 | ExprStmt | | +| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | | +| main.rs:366:9:366:10 | b3 | main.rs:367:9:367:10 | c1 | match | +| main.rs:367:9:367:10 | c1 | main.rs:365:5:368:19 | ...: ... | match | +| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | | +| main.rs:369:9:373:1 | { ... } | main.rs:363:1:373:1 | exit fn param_pattern1 (normal) | | +| main.rs:370:5:370:13 | print_str | main.rs:370:15:370:16 | a8 | | +| main.rs:370:5:370:17 | print_str(...) | main.rs:371:5:371:18 | ExprStmt | | | main.rs:370:5:370:18 | ExprStmt | main.rs:370:5:370:13 | print_str | | -| main.rs:370:15:370:16 | c1 | main.rs:370:5:370:17 | print_str(...) | | -| main.rs:373:1:376:1 | enter fn param_pattern2 | main.rs:373:20:373:35 | ...::Left(...) | | -| main.rs:373:1:376:1 | exit fn param_pattern2 (normal) | main.rs:373:1:376:1 | exit fn param_pattern2 | | -| main.rs:373:19:373:64 | ...: Either | main.rs:375:5:375:18 | ExprStmt | | -| main.rs:373:20:373:35 | ...::Left(...) | main.rs:373:33:373:34 | a9 | match | -| main.rs:373:20:373:35 | ...::Left(...) | main.rs:373:39:373:55 | ...::Right(...) | no-match | -| main.rs:373:20:373:55 | ... \| ... | main.rs:373:19:373:64 | ...: Either | match | -| main.rs:373:33:373:34 | a9 | main.rs:373:20:373:55 | ... \| ... | match | -| main.rs:373:33:373:34 | a9 | main.rs:373:33:373:34 | a9 | | -| main.rs:373:39:373:55 | ...::Right(...) | main.rs:373:53:373:54 | a9 | match | -| main.rs:373:53:373:54 | a9 | main.rs:373:20:373:55 | ... \| ... | match | -| main.rs:373:53:373:54 | a9 | main.rs:373:53:373:54 | a9 | | -| main.rs:374:9:376:1 | { ... } | main.rs:373:1:376:1 | exit fn param_pattern2 (normal) | | -| main.rs:375:5:375:13 | print_i64 | main.rs:375:15:375:16 | a9 | | -| main.rs:375:5:375:17 | print_i64(...) | main.rs:374:9:376:1 | { ... } | | -| main.rs:375:5:375:18 | ExprStmt | main.rs:375:5:375:13 | print_i64 | | -| main.rs:375:15:375:16 | a9 | main.rs:375:5:375:17 | print_i64(...) | | -| main.rs:378:1:413:1 | enter fn destruct_assignment | main.rs:379:5:383:18 | let ... = ... | | -| main.rs:378:1:413:1 | exit fn destruct_assignment (normal) | main.rs:378:1:413:1 | exit fn destruct_assignment | | -| main.rs:378:26:413:1 | { ... } | main.rs:378:1:413:1 | exit fn destruct_assignment (normal) | | -| main.rs:379:5:383:18 | let ... = ... | main.rs:383:10:383:10 | 1 | | -| main.rs:379:9:383:5 | TuplePat | main.rs:380:13:380:15 | a10 | match | -| main.rs:380:9:380:15 | mut a10 | main.rs:381:13:381:14 | b4 | match | -| main.rs:380:13:380:15 | a10 | main.rs:380:9:380:15 | mut a10 | | -| main.rs:381:9:381:14 | mut b4 | main.rs:382:13:382:14 | c2 | match | -| main.rs:381:13:381:14 | b4 | main.rs:381:9:381:14 | mut b4 | | -| main.rs:382:9:382:14 | mut c2 | main.rs:384:5:384:19 | ExprStmt | match | -| main.rs:382:13:382:14 | c2 | main.rs:382:9:382:14 | mut c2 | | -| main.rs:383:9:383:17 | TupleExpr | main.rs:379:9:383:5 | TuplePat | | -| main.rs:383:10:383:10 | 1 | main.rs:383:13:383:13 | 2 | | -| main.rs:383:13:383:13 | 2 | main.rs:383:16:383:16 | 3 | | -| main.rs:383:16:383:16 | 3 | main.rs:383:9:383:17 | TupleExpr | | -| main.rs:384:5:384:13 | print_i64 | main.rs:384:15:384:17 | a10 | | -| main.rs:384:5:384:18 | print_i64(...) | main.rs:385:5:385:18 | ExprStmt | | -| main.rs:384:5:384:19 | ExprStmt | main.rs:384:5:384:13 | print_i64 | | -| main.rs:384:15:384:17 | a10 | main.rs:384:5:384:18 | print_i64(...) | | -| main.rs:385:5:385:13 | print_i64 | main.rs:385:15:385:16 | b4 | | -| main.rs:385:5:385:17 | print_i64(...) | main.rs:386:5:386:18 | ExprStmt | | -| main.rs:385:5:385:18 | ExprStmt | main.rs:385:5:385:13 | print_i64 | | -| main.rs:385:15:385:16 | b4 | main.rs:385:5:385:17 | print_i64(...) | | -| main.rs:386:5:386:13 | print_i64 | main.rs:386:15:386:16 | c2 | | -| main.rs:386:5:386:17 | print_i64(...) | main.rs:388:5:396:6 | ExprStmt | | -| main.rs:386:5:386:18 | ExprStmt | main.rs:386:5:386:13 | print_i64 | | -| main.rs:386:15:386:16 | c2 | main.rs:386:5:386:17 | print_i64(...) | | -| main.rs:388:5:392:5 | TupleExpr | main.rs:393:9:393:11 | a10 | | -| main.rs:388:5:396:5 | ... = ... | main.rs:397:5:397:19 | ExprStmt | | -| main.rs:388:5:396:6 | ExprStmt | main.rs:389:9:389:10 | c2 | | -| main.rs:389:9:389:10 | c2 | main.rs:390:9:390:10 | b4 | | -| main.rs:390:9:390:10 | b4 | main.rs:391:9:391:11 | a10 | | -| main.rs:391:9:391:11 | a10 | main.rs:388:5:392:5 | TupleExpr | | -| main.rs:392:9:396:5 | TupleExpr | main.rs:388:5:396:5 | ... = ... | | -| main.rs:393:9:393:11 | a10 | main.rs:394:9:394:10 | b4 | | -| main.rs:394:9:394:10 | b4 | main.rs:395:9:395:10 | c2 | | -| main.rs:395:9:395:10 | c2 | main.rs:392:9:396:5 | TupleExpr | | -| main.rs:397:5:397:13 | print_i64 | main.rs:397:15:397:17 | a10 | | -| main.rs:397:5:397:18 | print_i64(...) | main.rs:398:5:398:18 | ExprStmt | | -| main.rs:397:5:397:19 | ExprStmt | main.rs:397:5:397:13 | print_i64 | | -| main.rs:397:15:397:17 | a10 | main.rs:397:5:397:18 | print_i64(...) | | -| main.rs:398:5:398:13 | print_i64 | main.rs:398:15:398:16 | b4 | | -| main.rs:398:5:398:17 | print_i64(...) | main.rs:399:5:399:18 | ExprStmt | | -| main.rs:398:5:398:18 | ExprStmt | main.rs:398:5:398:13 | print_i64 | | -| main.rs:398:15:398:16 | b4 | main.rs:398:5:398:17 | print_i64(...) | | -| main.rs:399:5:399:13 | print_i64 | main.rs:399:15:399:16 | c2 | | -| main.rs:399:5:399:17 | print_i64(...) | main.rs:401:5:409:5 | ExprStmt | | -| main.rs:399:5:399:18 | ExprStmt | main.rs:399:5:399:13 | print_i64 | | -| main.rs:399:15:399:16 | c2 | main.rs:399:5:399:17 | print_i64(...) | | -| main.rs:401:5:409:5 | ExprStmt | main.rs:401:12:401:12 | 4 | | -| main.rs:401:5:409:5 | match ... { ... } | main.rs:411:5:411:19 | ExprStmt | | -| main.rs:401:11:401:16 | TupleExpr | main.rs:402:9:405:9 | TuplePat | | -| main.rs:401:12:401:12 | 4 | main.rs:401:15:401:15 | 5 | | -| main.rs:401:15:401:15 | 5 | main.rs:401:11:401:16 | TupleExpr | | -| main.rs:402:9:405:9 | TuplePat | main.rs:403:13:403:15 | a10 | match | -| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | | -| main.rs:403:13:403:15 | a10 | main.rs:404:13:404:14 | b4 | match | -| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | | -| main.rs:404:13:404:14 | b4 | main.rs:406:13:406:27 | ExprStmt | match | -| main.rs:405:14:408:9 | { ... } | main.rs:401:5:409:5 | match ... { ... } | | -| main.rs:406:13:406:21 | print_i64 | main.rs:406:23:406:25 | a10 | | -| main.rs:406:13:406:26 | print_i64(...) | main.rs:407:13:407:26 | ExprStmt | | -| main.rs:406:13:406:27 | ExprStmt | main.rs:406:13:406:21 | print_i64 | | -| main.rs:406:23:406:25 | a10 | main.rs:406:13:406:26 | print_i64(...) | | -| main.rs:407:13:407:21 | print_i64 | main.rs:407:23:407:24 | b4 | | -| main.rs:407:13:407:25 | print_i64(...) | main.rs:405:14:408:9 | { ... } | | -| main.rs:407:13:407:26 | ExprStmt | main.rs:407:13:407:21 | print_i64 | | -| main.rs:407:23:407:24 | b4 | main.rs:407:13:407:25 | print_i64(...) | | -| main.rs:411:5:411:13 | print_i64 | main.rs:411:15:411:17 | a10 | | -| main.rs:411:5:411:18 | print_i64(...) | main.rs:412:5:412:18 | ExprStmt | | -| main.rs:411:5:411:19 | ExprStmt | main.rs:411:5:411:13 | print_i64 | | -| main.rs:411:15:411:17 | a10 | main.rs:411:5:411:18 | print_i64(...) | | -| main.rs:412:5:412:13 | print_i64 | main.rs:412:15:412:16 | b4 | | -| main.rs:412:5:412:17 | print_i64(...) | main.rs:378:26:413:1 | { ... } | | -| main.rs:412:5:412:18 | ExprStmt | main.rs:412:5:412:13 | print_i64 | | -| main.rs:412:15:412:16 | b4 | main.rs:412:5:412:17 | print_i64(...) | | -| main.rs:415:1:430:1 | enter fn closure_variable | main.rs:416:5:418:10 | let ... = ... | | -| main.rs:415:1:430:1 | exit fn closure_variable (normal) | main.rs:415:1:430:1 | exit fn closure_variable | | -| main.rs:415:23:430:1 | { ... } | main.rs:415:1:430:1 | exit fn closure_variable (normal) | | -| main.rs:416:5:418:10 | let ... = ... | main.rs:417:9:418:9 | \|...\| x | | -| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | | -| main.rs:416:9:416:23 | example_closure | main.rs:419:5:420:27 | let ... = ... | match | -| main.rs:417:9:418:9 | \|...\| x | main.rs:416:9:416:23 | example_closure | | -| main.rs:417:9:418:9 | enter \|...\| x | main.rs:417:10:417:10 | x | | -| main.rs:417:9:418:9 | exit \|...\| x (normal) | main.rs:417:9:418:9 | exit \|...\| x | | -| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | | -| main.rs:417:10:417:10 | x | main.rs:417:10:417:15 | ...: i64 | match | -| main.rs:417:10:417:15 | ...: i64 | main.rs:418:9:418:9 | x | | -| main.rs:418:9:418:9 | x | main.rs:417:9:418:9 | exit \|...\| x (normal) | | -| main.rs:419:5:420:27 | let ... = ... | main.rs:420:9:420:23 | example_closure | | -| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | | -| main.rs:419:9:419:10 | n1 | main.rs:421:5:421:18 | ExprStmt | match | -| main.rs:420:9:420:23 | example_closure | main.rs:420:25:420:25 | 5 | | -| main.rs:420:9:420:26 | example_closure(...) | main.rs:419:9:419:10 | n1 | | -| main.rs:420:25:420:25 | 5 | main.rs:420:9:420:26 | example_closure(...) | | -| main.rs:421:5:421:13 | print_i64 | main.rs:421:15:421:16 | n1 | | -| main.rs:421:5:421:17 | print_i64(...) | main.rs:423:5:423:25 | ExprStmt | | -| main.rs:421:5:421:18 | ExprStmt | main.rs:421:5:421:13 | print_i64 | | -| main.rs:421:15:421:16 | n1 | main.rs:421:5:421:17 | print_i64(...) | | -| main.rs:423:5:423:22 | immutable_variable | main.rs:423:5:423:24 | immutable_variable(...) | | -| main.rs:423:5:423:24 | immutable_variable(...) | main.rs:424:5:426:10 | let ... = ... | | -| main.rs:423:5:423:25 | ExprStmt | main.rs:423:5:423:22 | immutable_variable | | -| main.rs:424:5:426:10 | let ... = ... | main.rs:425:5:426:9 | \|...\| x | | -| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | | -| main.rs:424:9:424:26 | immutable_variable | main.rs:427:5:428:30 | let ... = ... | match | -| main.rs:425:5:426:9 | \|...\| x | main.rs:424:9:424:26 | immutable_variable | | -| main.rs:425:5:426:9 | enter \|...\| x | main.rs:425:6:425:6 | x | | -| main.rs:425:5:426:9 | exit \|...\| x (normal) | main.rs:425:5:426:9 | exit \|...\| x | | -| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | | -| main.rs:425:6:425:6 | x | main.rs:425:6:425:11 | ...: i64 | match | -| main.rs:425:6:425:11 | ...: i64 | main.rs:426:9:426:9 | x | | -| main.rs:426:9:426:9 | x | main.rs:425:5:426:9 | exit \|...\| x (normal) | | -| main.rs:427:5:428:30 | let ... = ... | main.rs:428:9:428:26 | immutable_variable | | -| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | | -| main.rs:427:9:427:10 | n2 | main.rs:429:5:429:18 | ExprStmt | match | -| main.rs:428:9:428:26 | immutable_variable | main.rs:428:28:428:28 | 6 | | -| main.rs:428:9:428:29 | immutable_variable(...) | main.rs:427:9:427:10 | n2 | | -| main.rs:428:28:428:28 | 6 | main.rs:428:9:428:29 | immutable_variable(...) | | -| main.rs:429:5:429:13 | print_i64 | main.rs:429:15:429:16 | n2 | | -| main.rs:429:5:429:17 | print_i64(...) | main.rs:415:23:430:1 | { ... } | | -| main.rs:429:5:429:18 | ExprStmt | main.rs:429:5:429:13 | print_i64 | | -| main.rs:429:15:429:16 | n2 | main.rs:429:5:429:17 | print_i64(...) | | -| main.rs:432:1:462:1 | enter fn nested_function | main.rs:434:5:436:10 | let ... = ... | | -| main.rs:432:1:462:1 | exit fn nested_function (normal) | main.rs:432:1:462:1 | exit fn nested_function | | -| main.rs:432:22:462:1 | { ... } | main.rs:432:1:462:1 | exit fn nested_function (normal) | | -| main.rs:434:5:436:10 | let ... = ... | main.rs:435:9:436:9 | \|...\| x | | -| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | | -| main.rs:434:9:434:9 | f | main.rs:437:5:437:20 | ExprStmt | match | -| main.rs:435:9:436:9 | \|...\| x | main.rs:434:9:434:9 | f | | -| main.rs:435:9:436:9 | enter \|...\| x | main.rs:435:10:435:10 | x | | -| main.rs:435:9:436:9 | exit \|...\| x (normal) | main.rs:435:9:436:9 | exit \|...\| x | | -| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | | -| main.rs:435:10:435:10 | x | main.rs:435:10:435:15 | ...: i64 | match | -| main.rs:435:10:435:15 | ...: i64 | main.rs:436:9:436:9 | x | | -| main.rs:436:9:436:9 | x | main.rs:435:9:436:9 | exit \|...\| x (normal) | | -| main.rs:437:5:437:13 | print_i64 | main.rs:437:15:437:15 | f | | -| main.rs:437:5:437:19 | print_i64(...) | main.rs:439:5:442:5 | fn f | | -| main.rs:437:5:437:20 | ExprStmt | main.rs:437:5:437:13 | print_i64 | | -| main.rs:437:15:437:15 | f | main.rs:437:17:437:17 | 1 | | -| main.rs:437:15:437:18 | f(...) | main.rs:437:5:437:19 | print_i64(...) | | -| main.rs:437:17:437:17 | 1 | main.rs:437:15:437:18 | f(...) | | -| main.rs:439:5:442:5 | enter fn f | main.rs:439:10:439:10 | x | | -| main.rs:439:5:442:5 | exit fn f (normal) | main.rs:439:5:442:5 | exit fn f | | -| main.rs:439:5:442:5 | fn f | main.rs:444:5:444:20 | ExprStmt | | -| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | | -| main.rs:439:10:439:10 | x | main.rs:439:10:439:15 | ...: i64 | match | -| main.rs:439:10:439:15 | ...: i64 | main.rs:441:9:441:9 | x | | -| main.rs:440:5:442:5 | { ... } | main.rs:439:5:442:5 | exit fn f (normal) | | -| main.rs:441:9:441:9 | x | main.rs:441:13:441:13 | 1 | | -| main.rs:441:9:441:13 | ... + ... | main.rs:440:5:442:5 | { ... } | | -| main.rs:441:13:441:13 | 1 | main.rs:441:9:441:13 | ... + ... | | -| main.rs:444:5:444:13 | print_i64 | main.rs:444:15:444:15 | f | | -| main.rs:444:5:444:19 | print_i64(...) | main.rs:447:9:447:24 | ExprStmt | | -| main.rs:444:5:444:20 | ExprStmt | main.rs:444:5:444:13 | print_i64 | | -| main.rs:444:15:444:15 | f | main.rs:444:17:444:17 | 2 | | -| main.rs:444:15:444:18 | f(...) | main.rs:444:5:444:19 | print_i64(...) | | -| main.rs:444:17:444:17 | 2 | main.rs:444:15:444:18 | f(...) | | -| main.rs:446:5:461:5 | { ... } | main.rs:432:22:462:1 | { ... } | | -| main.rs:447:9:447:17 | print_i64 | main.rs:447:19:447:19 | f | | -| main.rs:447:9:447:23 | print_i64(...) | main.rs:448:9:451:9 | fn f | | -| main.rs:447:9:447:24 | ExprStmt | main.rs:447:9:447:17 | print_i64 | | -| main.rs:447:19:447:19 | f | main.rs:447:21:447:21 | 3 | | -| main.rs:447:19:447:22 | f(...) | main.rs:447:9:447:23 | print_i64(...) | | -| main.rs:447:21:447:21 | 3 | main.rs:447:19:447:22 | f(...) | | -| main.rs:448:9:451:9 | enter fn f | main.rs:448:14:448:14 | x | | -| main.rs:448:9:451:9 | exit fn f (normal) | main.rs:448:9:451:9 | exit fn f | | -| main.rs:448:9:451:9 | fn f | main.rs:453:9:455:9 | ExprStmt | | -| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | | -| main.rs:448:14:448:14 | x | main.rs:448:14:448:19 | ...: i64 | match | -| main.rs:448:14:448:19 | ...: i64 | main.rs:450:13:450:13 | 2 | | -| main.rs:449:9:451:9 | { ... } | main.rs:448:9:451:9 | exit fn f (normal) | | -| main.rs:450:13:450:13 | 2 | main.rs:450:17:450:17 | x | | -| main.rs:450:13:450:17 | ... * ... | main.rs:449:9:451:9 | { ... } | | -| main.rs:450:17:450:17 | x | main.rs:450:13:450:17 | ... * ... | | -| main.rs:453:9:455:9 | ExprStmt | main.rs:454:13:454:28 | ExprStmt | | -| main.rs:453:9:455:9 | { ... } | main.rs:457:9:459:14 | let ... = ... | | -| main.rs:454:13:454:21 | print_i64 | main.rs:454:23:454:23 | f | | -| main.rs:454:13:454:27 | print_i64(...) | main.rs:453:9:455:9 | { ... } | | -| main.rs:454:13:454:28 | ExprStmt | main.rs:454:13:454:21 | print_i64 | | -| main.rs:454:23:454:23 | f | main.rs:454:25:454:25 | 4 | | -| main.rs:454:23:454:26 | f(...) | main.rs:454:13:454:27 | print_i64(...) | | -| main.rs:454:25:454:25 | 4 | main.rs:454:23:454:26 | f(...) | | -| main.rs:457:9:459:14 | let ... = ... | main.rs:458:13:459:13 | \|...\| x | | -| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | | -| main.rs:457:13:457:13 | f | main.rs:460:9:460:24 | ExprStmt | match | -| main.rs:458:13:459:13 | \|...\| x | main.rs:457:13:457:13 | f | | -| main.rs:458:13:459:13 | enter \|...\| x | main.rs:458:14:458:14 | x | | -| main.rs:458:13:459:13 | exit \|...\| x (normal) | main.rs:458:13:459:13 | exit \|...\| x | | -| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | | -| main.rs:458:14:458:14 | x | main.rs:458:14:458:19 | ...: i64 | match | -| main.rs:458:14:458:19 | ...: i64 | main.rs:459:13:459:13 | x | | -| main.rs:459:13:459:13 | x | main.rs:458:13:459:13 | exit \|...\| x (normal) | | -| main.rs:460:9:460:17 | print_i64 | main.rs:460:19:460:19 | f | | -| main.rs:460:9:460:23 | print_i64(...) | main.rs:446:5:461:5 | { ... } | | -| main.rs:460:9:460:24 | ExprStmt | main.rs:460:9:460:17 | print_i64 | | -| main.rs:460:19:460:19 | f | main.rs:460:21:460:21 | 5 | | -| main.rs:460:19:460:22 | f(...) | main.rs:460:9:460:23 | print_i64(...) | | -| main.rs:460:21:460:21 | 5 | main.rs:460:19:460:22 | f(...) | | -| main.rs:464:1:471:1 | enter fn for_variable | main.rs:465:5:465:42 | let ... = ... | | -| main.rs:464:1:471:1 | exit fn for_variable (normal) | main.rs:464:1:471:1 | exit fn for_variable | | -| main.rs:464:19:471:1 | { ... } | main.rs:464:1:471:1 | exit fn for_variable (normal) | | -| main.rs:465:5:465:42 | let ... = ... | main.rs:465:15:465:22 | "apples" | | -| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | | -| main.rs:465:9:465:9 | v | main.rs:468:12:468:12 | v | match | -| main.rs:465:13:465:41 | &... | main.rs:465:9:465:9 | v | | -| main.rs:465:14:465:41 | [...] | main.rs:465:13:465:41 | &... | | -| main.rs:465:15:465:22 | "apples" | main.rs:465:25:465:30 | "cake" | | -| main.rs:465:25:465:30 | "cake" | main.rs:465:33:465:40 | "coffee" | | -| main.rs:465:33:465:40 | "coffee" | main.rs:465:14:465:41 | [...] | | -| main.rs:467:5:470:5 | for ... in ... { ... } | main.rs:464:19:471:1 | { ... } | | -| main.rs:467:9:467:12 | text | main.rs:467:5:470:5 | for ... in ... { ... } | no-match | -| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | | -| main.rs:467:9:467:12 | text | main.rs:469:9:469:24 | ExprStmt | match | -| main.rs:468:12:468:12 | v | main.rs:467:9:467:12 | text | | -| main.rs:468:14:470:5 | { ... } | main.rs:467:9:467:12 | text | | -| main.rs:469:9:469:17 | print_str | main.rs:469:19:469:22 | text | | -| main.rs:469:9:469:23 | print_str(...) | main.rs:468:14:470:5 | { ... } | | -| main.rs:469:9:469:24 | ExprStmt | main.rs:469:9:469:17 | print_str | | -| main.rs:469:19:469:22 | text | main.rs:469:9:469:23 | print_str(...) | | -| main.rs:473:1:479:1 | enter fn add_assign | main.rs:474:5:474:18 | let ... = 0 | | -| main.rs:473:1:479:1 | exit fn add_assign (normal) | main.rs:473:1:479:1 | exit fn add_assign | | -| main.rs:473:17:479:1 | { ... } | main.rs:473:1:479:1 | exit fn add_assign (normal) | | -| main.rs:474:5:474:18 | let ... = 0 | main.rs:474:17:474:17 | 0 | | -| main.rs:474:9:474:13 | mut a | main.rs:475:5:475:11 | ExprStmt | match | -| main.rs:474:13:474:13 | a | main.rs:474:9:474:13 | mut a | | -| main.rs:474:17:474:17 | 0 | main.rs:474:13:474:13 | a | | -| main.rs:475:5:475:5 | a | main.rs:475:10:475:10 | 1 | | -| main.rs:475:5:475:10 | ... += ... | main.rs:476:5:476:17 | ExprStmt | | -| main.rs:475:5:475:11 | ExprStmt | main.rs:475:5:475:5 | a | | -| main.rs:475:10:475:10 | 1 | main.rs:475:5:475:10 | ... += ... | | -| main.rs:476:5:476:13 | print_i64 | main.rs:476:15:476:15 | a | | -| main.rs:476:5:476:16 | print_i64(...) | main.rs:477:5:477:28 | ExprStmt | | -| main.rs:476:5:476:17 | ExprStmt | main.rs:476:5:476:13 | print_i64 | | -| main.rs:476:15:476:15 | a | main.rs:476:5:476:16 | print_i64(...) | | -| main.rs:477:5:477:27 | ... .add_assign(...) | main.rs:478:5:478:17 | ExprStmt | | -| main.rs:477:5:477:28 | ExprStmt | main.rs:477:11:477:11 | a | | -| main.rs:477:6:477:11 | &mut a | main.rs:477:25:477:26 | 10 | | -| main.rs:477:11:477:11 | a | main.rs:477:6:477:11 | &mut a | | -| main.rs:477:25:477:26 | 10 | main.rs:477:5:477:27 | ... .add_assign(...) | | +| main.rs:370:15:370:16 | a8 | main.rs:370:5:370:17 | print_str(...) | | +| main.rs:371:5:371:13 | print_str | main.rs:371:15:371:16 | b3 | | +| main.rs:371:5:371:17 | print_str(...) | main.rs:372:5:372:18 | ExprStmt | | +| main.rs:371:5:371:18 | ExprStmt | main.rs:371:5:371:13 | print_str | | +| main.rs:371:15:371:16 | b3 | main.rs:371:5:371:17 | print_str(...) | | +| main.rs:372:5:372:13 | print_str | main.rs:372:15:372:16 | c1 | | +| main.rs:372:5:372:17 | print_str(...) | main.rs:369:9:373:1 | { ... } | | +| main.rs:372:5:372:18 | ExprStmt | main.rs:372:5:372:13 | print_str | | +| main.rs:372:15:372:16 | c1 | main.rs:372:5:372:17 | print_str(...) | | +| main.rs:375:1:378:1 | enter fn param_pattern2 | main.rs:375:20:375:35 | ...::Left(...) | | +| main.rs:375:1:378:1 | exit fn param_pattern2 (normal) | main.rs:375:1:378:1 | exit fn param_pattern2 | | +| main.rs:375:19:375:64 | ...: Either | main.rs:377:5:377:18 | ExprStmt | | +| main.rs:375:20:375:35 | ...::Left(...) | main.rs:375:33:375:34 | a9 | match | +| main.rs:375:20:375:35 | ...::Left(...) | main.rs:375:39:375:55 | ...::Right(...) | no-match | +| main.rs:375:20:375:55 | ... \| ... | main.rs:375:19:375:64 | ...: Either | match | +| main.rs:375:33:375:34 | a9 | main.rs:375:20:375:55 | ... \| ... | match | +| main.rs:375:33:375:34 | a9 | main.rs:375:33:375:34 | a9 | | +| main.rs:375:39:375:55 | ...::Right(...) | main.rs:375:53:375:54 | a9 | match | +| main.rs:375:53:375:54 | a9 | main.rs:375:20:375:55 | ... \| ... | match | +| main.rs:375:53:375:54 | a9 | main.rs:375:53:375:54 | a9 | | +| main.rs:376:9:378:1 | { ... } | main.rs:375:1:378:1 | exit fn param_pattern2 (normal) | | +| main.rs:377:5:377:13 | print_i64 | main.rs:377:15:377:16 | a9 | | +| main.rs:377:5:377:17 | print_i64(...) | main.rs:376:9:378:1 | { ... } | | +| main.rs:377:5:377:18 | ExprStmt | main.rs:377:5:377:13 | print_i64 | | +| main.rs:377:15:377:16 | a9 | main.rs:377:5:377:17 | print_i64(...) | | +| main.rs:380:1:415:1 | enter fn destruct_assignment | main.rs:381:5:385:18 | let ... = ... | | +| main.rs:380:1:415:1 | exit fn destruct_assignment (normal) | main.rs:380:1:415:1 | exit fn destruct_assignment | | +| main.rs:380:26:415:1 | { ... } | main.rs:380:1:415:1 | exit fn destruct_assignment (normal) | | +| main.rs:381:5:385:18 | let ... = ... | main.rs:385:10:385:10 | 1 | | +| main.rs:381:9:385:5 | TuplePat | main.rs:382:13:382:15 | a10 | match | +| main.rs:382:9:382:15 | mut a10 | main.rs:383:13:383:14 | b4 | match | +| main.rs:382:13:382:15 | a10 | main.rs:382:9:382:15 | mut a10 | | +| main.rs:383:9:383:14 | mut b4 | main.rs:384:13:384:14 | c2 | match | +| main.rs:383:13:383:14 | b4 | main.rs:383:9:383:14 | mut b4 | | +| main.rs:384:9:384:14 | mut c2 | main.rs:386:5:386:19 | ExprStmt | match | +| main.rs:384:13:384:14 | c2 | main.rs:384:9:384:14 | mut c2 | | +| main.rs:385:9:385:17 | TupleExpr | main.rs:381:9:385:5 | TuplePat | | +| main.rs:385:10:385:10 | 1 | main.rs:385:13:385:13 | 2 | | +| main.rs:385:13:385:13 | 2 | main.rs:385:16:385:16 | 3 | | +| main.rs:385:16:385:16 | 3 | main.rs:385:9:385:17 | TupleExpr | | +| main.rs:386:5:386:13 | print_i64 | main.rs:386:15:386:17 | a10 | | +| main.rs:386:5:386:18 | print_i64(...) | main.rs:387:5:387:18 | ExprStmt | | +| main.rs:386:5:386:19 | ExprStmt | main.rs:386:5:386:13 | print_i64 | | +| main.rs:386:15:386:17 | a10 | main.rs:386:5:386:18 | print_i64(...) | | +| main.rs:387:5:387:13 | print_i64 | main.rs:387:15:387:16 | b4 | | +| main.rs:387:5:387:17 | print_i64(...) | main.rs:388:5:388:18 | ExprStmt | | +| main.rs:387:5:387:18 | ExprStmt | main.rs:387:5:387:13 | print_i64 | | +| main.rs:387:15:387:16 | b4 | main.rs:387:5:387:17 | print_i64(...) | | +| main.rs:388:5:388:13 | print_i64 | main.rs:388:15:388:16 | c2 | | +| main.rs:388:5:388:17 | print_i64(...) | main.rs:390:5:398:6 | ExprStmt | | +| main.rs:388:5:388:18 | ExprStmt | main.rs:388:5:388:13 | print_i64 | | +| main.rs:388:15:388:16 | c2 | main.rs:388:5:388:17 | print_i64(...) | | +| main.rs:390:5:394:5 | TupleExpr | main.rs:395:9:395:11 | a10 | | +| main.rs:390:5:398:5 | ... = ... | main.rs:399:5:399:19 | ExprStmt | | +| main.rs:390:5:398:6 | ExprStmt | main.rs:391:9:391:10 | c2 | | +| main.rs:391:9:391:10 | c2 | main.rs:392:9:392:10 | b4 | | +| main.rs:392:9:392:10 | b4 | main.rs:393:9:393:11 | a10 | | +| main.rs:393:9:393:11 | a10 | main.rs:390:5:394:5 | TupleExpr | | +| main.rs:394:9:398:5 | TupleExpr | main.rs:390:5:398:5 | ... = ... | | +| main.rs:395:9:395:11 | a10 | main.rs:396:9:396:10 | b4 | | +| main.rs:396:9:396:10 | b4 | main.rs:397:9:397:10 | c2 | | +| main.rs:397:9:397:10 | c2 | main.rs:394:9:398:5 | TupleExpr | | +| main.rs:399:5:399:13 | print_i64 | main.rs:399:15:399:17 | a10 | | +| main.rs:399:5:399:18 | print_i64(...) | main.rs:400:5:400:18 | ExprStmt | | +| main.rs:399:5:399:19 | ExprStmt | main.rs:399:5:399:13 | print_i64 | | +| main.rs:399:15:399:17 | a10 | main.rs:399:5:399:18 | print_i64(...) | | +| main.rs:400:5:400:13 | print_i64 | main.rs:400:15:400:16 | b4 | | +| main.rs:400:5:400:17 | print_i64(...) | main.rs:401:5:401:18 | ExprStmt | | +| main.rs:400:5:400:18 | ExprStmt | main.rs:400:5:400:13 | print_i64 | | +| main.rs:400:15:400:16 | b4 | main.rs:400:5:400:17 | print_i64(...) | | +| main.rs:401:5:401:13 | print_i64 | main.rs:401:15:401:16 | c2 | | +| main.rs:401:5:401:17 | print_i64(...) | main.rs:403:5:411:5 | ExprStmt | | +| main.rs:401:5:401:18 | ExprStmt | main.rs:401:5:401:13 | print_i64 | | +| main.rs:401:15:401:16 | c2 | main.rs:401:5:401:17 | print_i64(...) | | +| main.rs:403:5:411:5 | ExprStmt | main.rs:403:12:403:12 | 4 | | +| main.rs:403:5:411:5 | match ... { ... } | main.rs:413:5:413:19 | ExprStmt | | +| main.rs:403:11:403:16 | TupleExpr | main.rs:404:9:407:9 | TuplePat | | +| main.rs:403:12:403:12 | 4 | main.rs:403:15:403:15 | 5 | | +| main.rs:403:15:403:15 | 5 | main.rs:403:11:403:16 | TupleExpr | | +| main.rs:404:9:407:9 | TuplePat | main.rs:405:13:405:15 | a10 | match | +| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | | +| main.rs:405:13:405:15 | a10 | main.rs:406:13:406:14 | b4 | match | +| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | | +| main.rs:406:13:406:14 | b4 | main.rs:408:13:408:27 | ExprStmt | match | +| main.rs:407:14:410:9 | { ... } | main.rs:403:5:411:5 | match ... { ... } | | +| main.rs:408:13:408:21 | print_i64 | main.rs:408:23:408:25 | a10 | | +| main.rs:408:13:408:26 | print_i64(...) | main.rs:409:13:409:26 | ExprStmt | | +| main.rs:408:13:408:27 | ExprStmt | main.rs:408:13:408:21 | print_i64 | | +| main.rs:408:23:408:25 | a10 | main.rs:408:13:408:26 | print_i64(...) | | +| main.rs:409:13:409:21 | print_i64 | main.rs:409:23:409:24 | b4 | | +| main.rs:409:13:409:25 | print_i64(...) | main.rs:407:14:410:9 | { ... } | | +| main.rs:409:13:409:26 | ExprStmt | main.rs:409:13:409:21 | print_i64 | | +| main.rs:409:23:409:24 | b4 | main.rs:409:13:409:25 | print_i64(...) | | +| main.rs:413:5:413:13 | print_i64 | main.rs:413:15:413:17 | a10 | | +| main.rs:413:5:413:18 | print_i64(...) | main.rs:414:5:414:18 | ExprStmt | | +| main.rs:413:5:413:19 | ExprStmt | main.rs:413:5:413:13 | print_i64 | | +| main.rs:413:15:413:17 | a10 | main.rs:413:5:413:18 | print_i64(...) | | +| main.rs:414:5:414:13 | print_i64 | main.rs:414:15:414:16 | b4 | | +| main.rs:414:5:414:17 | print_i64(...) | main.rs:380:26:415:1 | { ... } | | +| main.rs:414:5:414:18 | ExprStmt | main.rs:414:5:414:13 | print_i64 | | +| main.rs:414:15:414:16 | b4 | main.rs:414:5:414:17 | print_i64(...) | | +| main.rs:417:1:432:1 | enter fn closure_variable | main.rs:418:5:420:10 | let ... = ... | | +| main.rs:417:1:432:1 | exit fn closure_variable (normal) | main.rs:417:1:432:1 | exit fn closure_variable | | +| main.rs:417:23:432:1 | { ... } | main.rs:417:1:432:1 | exit fn closure_variable (normal) | | +| main.rs:418:5:420:10 | let ... = ... | main.rs:419:9:420:9 | \|...\| x | | +| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | | +| main.rs:418:9:418:23 | example_closure | main.rs:421:5:422:27 | let ... = ... | match | +| main.rs:419:9:420:9 | \|...\| x | main.rs:418:9:418:23 | example_closure | | +| main.rs:419:9:420:9 | enter \|...\| x | main.rs:419:10:419:10 | x | | +| main.rs:419:9:420:9 | exit \|...\| x (normal) | main.rs:419:9:420:9 | exit \|...\| x | | +| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | | +| main.rs:419:10:419:10 | x | main.rs:419:10:419:15 | ...: i64 | match | +| main.rs:419:10:419:15 | ...: i64 | main.rs:420:9:420:9 | x | | +| main.rs:420:9:420:9 | x | main.rs:419:9:420:9 | exit \|...\| x (normal) | | +| main.rs:421:5:422:27 | let ... = ... | main.rs:422:9:422:23 | example_closure | | +| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | | +| main.rs:421:9:421:10 | n1 | main.rs:423:5:423:18 | ExprStmt | match | +| main.rs:422:9:422:23 | example_closure | main.rs:422:25:422:25 | 5 | | +| main.rs:422:9:422:26 | example_closure(...) | main.rs:421:9:421:10 | n1 | | +| main.rs:422:25:422:25 | 5 | main.rs:422:9:422:26 | example_closure(...) | | +| main.rs:423:5:423:13 | print_i64 | main.rs:423:15:423:16 | n1 | | +| main.rs:423:5:423:17 | print_i64(...) | main.rs:425:5:425:25 | ExprStmt | | +| main.rs:423:5:423:18 | ExprStmt | main.rs:423:5:423:13 | print_i64 | | +| main.rs:423:15:423:16 | n1 | main.rs:423:5:423:17 | print_i64(...) | | +| main.rs:425:5:425:22 | immutable_variable | main.rs:425:5:425:24 | immutable_variable(...) | | +| main.rs:425:5:425:24 | immutable_variable(...) | main.rs:426:5:428:10 | let ... = ... | | +| main.rs:425:5:425:25 | ExprStmt | main.rs:425:5:425:22 | immutable_variable | | +| main.rs:426:5:428:10 | let ... = ... | main.rs:427:5:428:9 | \|...\| x | | +| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | | +| main.rs:426:9:426:26 | immutable_variable | main.rs:429:5:430:30 | let ... = ... | match | +| main.rs:427:5:428:9 | \|...\| x | main.rs:426:9:426:26 | immutable_variable | | +| main.rs:427:5:428:9 | enter \|...\| x | main.rs:427:6:427:6 | x | | +| main.rs:427:5:428:9 | exit \|...\| x (normal) | main.rs:427:5:428:9 | exit \|...\| x | | +| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | | +| main.rs:427:6:427:6 | x | main.rs:427:6:427:11 | ...: i64 | match | +| main.rs:427:6:427:11 | ...: i64 | main.rs:428:9:428:9 | x | | +| main.rs:428:9:428:9 | x | main.rs:427:5:428:9 | exit \|...\| x (normal) | | +| main.rs:429:5:430:30 | let ... = ... | main.rs:430:9:430:26 | immutable_variable | | +| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | | +| main.rs:429:9:429:10 | n2 | main.rs:431:5:431:18 | ExprStmt | match | +| main.rs:430:9:430:26 | immutable_variable | main.rs:430:28:430:28 | 6 | | +| main.rs:430:9:430:29 | immutable_variable(...) | main.rs:429:9:429:10 | n2 | | +| main.rs:430:28:430:28 | 6 | main.rs:430:9:430:29 | immutable_variable(...) | | +| main.rs:431:5:431:13 | print_i64 | main.rs:431:15:431:16 | n2 | | +| main.rs:431:5:431:17 | print_i64(...) | main.rs:417:23:432:1 | { ... } | | +| main.rs:431:5:431:18 | ExprStmt | main.rs:431:5:431:13 | print_i64 | | +| main.rs:431:15:431:16 | n2 | main.rs:431:5:431:17 | print_i64(...) | | +| main.rs:434:1:464:1 | enter fn nested_function | main.rs:436:5:438:10 | let ... = ... | | +| main.rs:434:1:464:1 | exit fn nested_function (normal) | main.rs:434:1:464:1 | exit fn nested_function | | +| main.rs:434:22:464:1 | { ... } | main.rs:434:1:464:1 | exit fn nested_function (normal) | | +| main.rs:436:5:438:10 | let ... = ... | main.rs:437:9:438:9 | \|...\| x | | +| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | | +| main.rs:436:9:436:9 | f | main.rs:439:5:439:20 | ExprStmt | match | +| main.rs:437:9:438:9 | \|...\| x | main.rs:436:9:436:9 | f | | +| main.rs:437:9:438:9 | enter \|...\| x | main.rs:437:10:437:10 | x | | +| main.rs:437:9:438:9 | exit \|...\| x (normal) | main.rs:437:9:438:9 | exit \|...\| x | | +| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | | +| main.rs:437:10:437:10 | x | main.rs:437:10:437:15 | ...: i64 | match | +| main.rs:437:10:437:15 | ...: i64 | main.rs:438:9:438:9 | x | | +| main.rs:438:9:438:9 | x | main.rs:437:9:438:9 | exit \|...\| x (normal) | | +| main.rs:439:5:439:13 | print_i64 | main.rs:439:15:439:15 | f | | +| main.rs:439:5:439:19 | print_i64(...) | main.rs:441:5:444:5 | fn f | | +| main.rs:439:5:439:20 | ExprStmt | main.rs:439:5:439:13 | print_i64 | | +| main.rs:439:15:439:15 | f | main.rs:439:17:439:17 | 1 | | +| main.rs:439:15:439:18 | f(...) | main.rs:439:5:439:19 | print_i64(...) | | +| main.rs:439:17:439:17 | 1 | main.rs:439:15:439:18 | f(...) | | +| main.rs:441:5:444:5 | enter fn f | main.rs:441:10:441:10 | x | | +| main.rs:441:5:444:5 | exit fn f (normal) | main.rs:441:5:444:5 | exit fn f | | +| main.rs:441:5:444:5 | fn f | main.rs:446:5:446:20 | ExprStmt | | +| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | | +| main.rs:441:10:441:10 | x | main.rs:441:10:441:15 | ...: i64 | match | +| main.rs:441:10:441:15 | ...: i64 | main.rs:443:9:443:9 | x | | +| main.rs:442:5:444:5 | { ... } | main.rs:441:5:444:5 | exit fn f (normal) | | +| main.rs:443:9:443:9 | x | main.rs:443:13:443:13 | 1 | | +| main.rs:443:9:443:13 | ... + ... | main.rs:442:5:444:5 | { ... } | | +| main.rs:443:13:443:13 | 1 | main.rs:443:9:443:13 | ... + ... | | +| main.rs:446:5:446:13 | print_i64 | main.rs:446:15:446:15 | f | | +| main.rs:446:5:446:19 | print_i64(...) | main.rs:449:9:449:24 | ExprStmt | | +| main.rs:446:5:446:20 | ExprStmt | main.rs:446:5:446:13 | print_i64 | | +| main.rs:446:15:446:15 | f | main.rs:446:17:446:17 | 2 | | +| main.rs:446:15:446:18 | f(...) | main.rs:446:5:446:19 | print_i64(...) | | +| main.rs:446:17:446:17 | 2 | main.rs:446:15:446:18 | f(...) | | +| main.rs:448:5:463:5 | { ... } | main.rs:434:22:464:1 | { ... } | | +| main.rs:449:9:449:17 | print_i64 | main.rs:449:19:449:19 | f | | +| main.rs:449:9:449:23 | print_i64(...) | main.rs:450:9:453:9 | fn f | | +| main.rs:449:9:449:24 | ExprStmt | main.rs:449:9:449:17 | print_i64 | | +| main.rs:449:19:449:19 | f | main.rs:449:21:449:21 | 3 | | +| main.rs:449:19:449:22 | f(...) | main.rs:449:9:449:23 | print_i64(...) | | +| main.rs:449:21:449:21 | 3 | main.rs:449:19:449:22 | f(...) | | +| main.rs:450:9:453:9 | enter fn f | main.rs:450:14:450:14 | x | | +| main.rs:450:9:453:9 | exit fn f (normal) | main.rs:450:9:453:9 | exit fn f | | +| main.rs:450:9:453:9 | fn f | main.rs:455:9:457:9 | ExprStmt | | +| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | | +| main.rs:450:14:450:14 | x | main.rs:450:14:450:19 | ...: i64 | match | +| main.rs:450:14:450:19 | ...: i64 | main.rs:452:13:452:13 | 2 | | +| main.rs:451:9:453:9 | { ... } | main.rs:450:9:453:9 | exit fn f (normal) | | +| main.rs:452:13:452:13 | 2 | main.rs:452:17:452:17 | x | | +| main.rs:452:13:452:17 | ... * ... | main.rs:451:9:453:9 | { ... } | | +| main.rs:452:17:452:17 | x | main.rs:452:13:452:17 | ... * ... | | +| main.rs:455:9:457:9 | ExprStmt | main.rs:456:13:456:28 | ExprStmt | | +| main.rs:455:9:457:9 | { ... } | main.rs:459:9:461:14 | let ... = ... | | +| main.rs:456:13:456:21 | print_i64 | main.rs:456:23:456:23 | f | | +| main.rs:456:13:456:27 | print_i64(...) | main.rs:455:9:457:9 | { ... } | | +| main.rs:456:13:456:28 | ExprStmt | main.rs:456:13:456:21 | print_i64 | | +| main.rs:456:23:456:23 | f | main.rs:456:25:456:25 | 4 | | +| main.rs:456:23:456:26 | f(...) | main.rs:456:13:456:27 | print_i64(...) | | +| main.rs:456:25:456:25 | 4 | main.rs:456:23:456:26 | f(...) | | +| main.rs:459:9:461:14 | let ... = ... | main.rs:460:13:461:13 | \|...\| x | | +| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | | +| main.rs:459:13:459:13 | f | main.rs:462:9:462:24 | ExprStmt | match | +| main.rs:460:13:461:13 | \|...\| x | main.rs:459:13:459:13 | f | | +| main.rs:460:13:461:13 | enter \|...\| x | main.rs:460:14:460:14 | x | | +| main.rs:460:13:461:13 | exit \|...\| x (normal) | main.rs:460:13:461:13 | exit \|...\| x | | +| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | | +| main.rs:460:14:460:14 | x | main.rs:460:14:460:19 | ...: i64 | match | +| main.rs:460:14:460:19 | ...: i64 | main.rs:461:13:461:13 | x | | +| main.rs:461:13:461:13 | x | main.rs:460:13:461:13 | exit \|...\| x (normal) | | +| main.rs:462:9:462:17 | print_i64 | main.rs:462:19:462:19 | f | | +| main.rs:462:9:462:23 | print_i64(...) | main.rs:448:5:463:5 | { ... } | | +| main.rs:462:9:462:24 | ExprStmt | main.rs:462:9:462:17 | print_i64 | | +| main.rs:462:19:462:19 | f | main.rs:462:21:462:21 | 5 | | +| main.rs:462:19:462:22 | f(...) | main.rs:462:9:462:23 | print_i64(...) | | +| main.rs:462:21:462:21 | 5 | main.rs:462:19:462:22 | f(...) | | +| main.rs:466:1:473:1 | enter fn for_variable | main.rs:467:5:467:42 | let ... = ... | | +| main.rs:466:1:473:1 | exit fn for_variable (normal) | main.rs:466:1:473:1 | exit fn for_variable | | +| main.rs:466:19:473:1 | { ... } | main.rs:466:1:473:1 | exit fn for_variable (normal) | | +| main.rs:467:5:467:42 | let ... = ... | main.rs:467:15:467:22 | "apples" | | +| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | | +| main.rs:467:9:467:9 | v | main.rs:470:12:470:12 | v | match | +| main.rs:467:13:467:41 | &... | main.rs:467:9:467:9 | v | | +| main.rs:467:14:467:41 | [...] | main.rs:467:13:467:41 | &... | | +| main.rs:467:15:467:22 | "apples" | main.rs:467:25:467:30 | "cake" | | +| main.rs:467:25:467:30 | "cake" | main.rs:467:33:467:40 | "coffee" | | +| main.rs:467:33:467:40 | "coffee" | main.rs:467:14:467:41 | [...] | | +| main.rs:469:5:472:5 | for ... in ... { ... } | main.rs:466:19:473:1 | { ... } | | +| main.rs:469:9:469:12 | text | main.rs:469:5:472:5 | for ... in ... { ... } | no-match | +| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | | +| main.rs:469:9:469:12 | text | main.rs:471:9:471:24 | ExprStmt | match | +| main.rs:470:12:470:12 | v | main.rs:469:9:469:12 | text | | +| main.rs:470:14:472:5 | { ... } | main.rs:469:9:469:12 | text | | +| main.rs:471:9:471:17 | print_str | main.rs:471:19:471:22 | text | | +| main.rs:471:9:471:23 | print_str(...) | main.rs:470:14:472:5 | { ... } | | +| main.rs:471:9:471:24 | ExprStmt | main.rs:471:9:471:17 | print_str | | +| main.rs:471:19:471:22 | text | main.rs:471:9:471:23 | print_str(...) | | +| main.rs:475:1:481:1 | enter fn add_assign | main.rs:476:5:476:18 | let ... = 0 | | +| main.rs:475:1:481:1 | exit fn add_assign (normal) | main.rs:475:1:481:1 | exit fn add_assign | | +| main.rs:475:17:481:1 | { ... } | main.rs:475:1:481:1 | exit fn add_assign (normal) | | +| main.rs:476:5:476:18 | let ... = 0 | main.rs:476:17:476:17 | 0 | | +| main.rs:476:9:476:13 | mut a | main.rs:477:5:477:11 | ExprStmt | match | +| main.rs:476:13:476:13 | a | main.rs:476:9:476:13 | mut a | | +| main.rs:476:17:476:17 | 0 | main.rs:476:13:476:13 | a | | +| main.rs:477:5:477:5 | a | main.rs:477:10:477:10 | 1 | | +| main.rs:477:5:477:10 | ... += ... | main.rs:478:5:478:17 | ExprStmt | | +| main.rs:477:5:477:11 | ExprStmt | main.rs:477:5:477:5 | a | | +| main.rs:477:10:477:10 | 1 | main.rs:477:5:477:10 | ... += ... | | | main.rs:478:5:478:13 | print_i64 | main.rs:478:15:478:15 | a | | -| main.rs:478:5:478:16 | print_i64(...) | main.rs:473:17:479:1 | { ... } | | +| main.rs:478:5:478:16 | print_i64(...) | main.rs:479:5:479:28 | ExprStmt | | | main.rs:478:5:478:17 | ExprStmt | main.rs:478:5:478:13 | print_i64 | | | main.rs:478:15:478:15 | a | main.rs:478:5:478:16 | print_i64(...) | | -| main.rs:481:1:487:1 | enter fn mutate | main.rs:482:5:482:18 | let ... = 1 | | -| main.rs:481:1:487:1 | exit fn mutate (normal) | main.rs:481:1:487:1 | exit fn mutate | | -| main.rs:481:13:487:1 | { ... } | main.rs:481:1:487:1 | exit fn mutate (normal) | | -| main.rs:482:5:482:18 | let ... = 1 | main.rs:482:17:482:17 | 1 | | -| main.rs:482:9:482:13 | mut i | main.rs:483:5:484:15 | let ... = ... | match | -| main.rs:482:13:482:13 | i | main.rs:482:9:482:13 | mut i | | -| main.rs:482:17:482:17 | 1 | main.rs:482:13:482:13 | i | | -| main.rs:483:5:484:15 | let ... = ... | main.rs:484:14:484:14 | i | | -| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | | -| main.rs:483:9:483:13 | ref_i | main.rs:485:5:485:15 | ExprStmt | match | -| main.rs:484:9:484:14 | &mut i | main.rs:483:9:483:13 | ref_i | | -| main.rs:484:14:484:14 | i | main.rs:484:9:484:14 | &mut i | | -| main.rs:485:5:485:10 | * ... | main.rs:485:14:485:14 | 2 | | -| main.rs:485:5:485:14 | ... = ... | main.rs:486:5:486:17 | ExprStmt | | -| main.rs:485:5:485:15 | ExprStmt | main.rs:485:6:485:10 | ref_i | | -| main.rs:485:6:485:10 | ref_i | main.rs:485:5:485:10 | * ... | | -| main.rs:485:14:485:14 | 2 | main.rs:485:5:485:14 | ... = ... | | -| main.rs:486:5:486:13 | print_i64 | main.rs:486:15:486:15 | i | | -| main.rs:486:5:486:16 | print_i64(...) | main.rs:481:13:487:1 | { ... } | | -| main.rs:486:5:486:17 | ExprStmt | main.rs:486:5:486:13 | print_i64 | | -| main.rs:486:15:486:15 | i | main.rs:486:5:486:16 | print_i64(...) | | -| main.rs:489:1:494:1 | enter fn mutate_param | main.rs:489:17:489:17 | x | | -| main.rs:489:1:494:1 | exit fn mutate_param (normal) | main.rs:489:1:494:1 | exit fn mutate_param | | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:27 | ...: ... | match | -| main.rs:489:17:489:27 | ...: ... | main.rs:490:5:492:11 | ExprStmt | | -| main.rs:490:5:490:6 | * ... | main.rs:491:10:491:10 | x | | -| main.rs:490:5:492:10 | ... = ... | main.rs:493:5:493:13 | ExprStmt | | -| main.rs:490:5:492:11 | ExprStmt | main.rs:490:6:490:6 | x | | -| main.rs:490:6:490:6 | x | main.rs:490:5:490:6 | * ... | | -| main.rs:491:9:491:10 | * ... | main.rs:492:10:492:10 | x | | -| main.rs:491:9:492:10 | ... + ... | main.rs:490:5:492:10 | ... = ... | | -| main.rs:491:10:491:10 | x | main.rs:491:9:491:10 | * ... | | -| main.rs:492:9:492:10 | * ... | main.rs:491:9:492:10 | ... + ... | | -| main.rs:492:10:492:10 | x | main.rs:492:9:492:10 | * ... | | -| main.rs:493:5:493:12 | return x | main.rs:489:1:494:1 | exit fn mutate_param (normal) | return | -| main.rs:493:5:493:13 | ExprStmt | main.rs:493:12:493:12 | x | | -| main.rs:493:12:493:12 | x | main.rs:493:5:493:12 | return x | | -| main.rs:496:1:502:1 | enter fn mutate_param2 | main.rs:496:22:496:22 | x | | -| main.rs:496:1:502:1 | exit fn mutate_param2 (normal) | main.rs:496:1:502:1 | exit fn mutate_param2 | | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:35 | ...: ... | match | -| main.rs:496:22:496:35 | ...: ... | main.rs:496:38:496:38 | y | | -| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | | -| main.rs:496:38:496:38 | y | main.rs:496:38:496:56 | ...: ... | match | -| main.rs:496:38:496:56 | ...: ... | main.rs:497:5:499:11 | ExprStmt | | -| main.rs:496:59:502:1 | { ... } | main.rs:496:1:502:1 | exit fn mutate_param2 (normal) | | -| main.rs:497:5:497:6 | * ... | main.rs:498:10:498:10 | x | | -| main.rs:497:5:499:10 | ... = ... | main.rs:500:5:501:10 | ExprStmt | | -| main.rs:497:5:499:11 | ExprStmt | main.rs:497:6:497:6 | x | | -| main.rs:497:6:497:6 | x | main.rs:497:5:497:6 | * ... | | -| main.rs:498:9:498:10 | * ... | main.rs:499:10:499:10 | x | | -| main.rs:498:9:499:10 | ... + ... | main.rs:497:5:499:10 | ... = ... | | -| main.rs:498:10:498:10 | x | main.rs:498:9:498:10 | * ... | | -| main.rs:499:9:499:10 | * ... | main.rs:498:9:499:10 | ... + ... | | -| main.rs:499:10:499:10 | x | main.rs:499:9:499:10 | * ... | | -| main.rs:500:5:500:6 | * ... | main.rs:501:9:501:9 | x | | -| main.rs:500:5:501:9 | ... = ... | main.rs:496:59:502:1 | { ... } | | -| main.rs:500:5:501:10 | ExprStmt | main.rs:500:6:500:6 | y | | -| main.rs:500:6:500:6 | y | main.rs:500:5:500:6 | * ... | | -| main.rs:501:9:501:9 | x | main.rs:500:5:501:9 | ... = ... | | -| main.rs:504:1:524:1 | enter fn mutate_arg | main.rs:505:5:505:18 | let ... = 2 | | -| main.rs:504:1:524:1 | exit fn mutate_arg (normal) | main.rs:504:1:524:1 | exit fn mutate_arg | | -| main.rs:504:17:524:1 | { ... } | main.rs:504:1:524:1 | exit fn mutate_arg (normal) | | -| main.rs:505:5:505:18 | let ... = 2 | main.rs:505:17:505:17 | 2 | | -| main.rs:505:9:505:13 | mut x | main.rs:506:5:507:29 | let ... = ... | match | -| main.rs:505:13:505:13 | x | main.rs:505:9:505:13 | mut x | | -| main.rs:505:17:505:17 | 2 | main.rs:505:13:505:13 | x | | -| main.rs:506:5:507:29 | let ... = ... | main.rs:507:9:507:20 | mutate_param | | -| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | | -| main.rs:506:9:506:9 | y | main.rs:508:5:508:12 | ExprStmt | match | -| main.rs:507:9:507:20 | mutate_param | main.rs:507:27:507:27 | x | | -| main.rs:507:9:507:28 | mutate_param(...) | main.rs:506:9:506:9 | y | | -| main.rs:507:22:507:27 | &mut x | main.rs:507:9:507:28 | mutate_param(...) | | -| main.rs:507:27:507:27 | x | main.rs:507:22:507:27 | &mut x | | -| main.rs:508:5:508:6 | * ... | main.rs:508:10:508:11 | 10 | | -| main.rs:508:5:508:11 | ... = ... | main.rs:511:5:511:17 | ExprStmt | | -| main.rs:508:5:508:12 | ExprStmt | main.rs:508:6:508:6 | y | | -| main.rs:508:6:508:6 | y | main.rs:508:5:508:6 | * ... | | -| main.rs:508:10:508:11 | 10 | main.rs:508:5:508:11 | ... = ... | | -| main.rs:511:5:511:13 | print_i64 | main.rs:511:15:511:15 | x | | -| main.rs:511:5:511:16 | print_i64(...) | main.rs:513:5:513:18 | let ... = 4 | | -| main.rs:511:5:511:17 | ExprStmt | main.rs:511:5:511:13 | print_i64 | | -| main.rs:511:15:511:15 | x | main.rs:511:5:511:16 | print_i64(...) | | -| main.rs:513:5:513:18 | let ... = 4 | main.rs:513:17:513:17 | 4 | | -| main.rs:513:9:513:13 | mut z | main.rs:514:5:515:20 | let ... = ... | match | -| main.rs:513:13:513:13 | z | main.rs:513:9:513:13 | mut z | | -| main.rs:513:17:513:17 | 4 | main.rs:513:13:513:13 | z | | -| main.rs:514:5:515:20 | let ... = ... | main.rs:515:19:515:19 | x | | -| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | | -| main.rs:514:9:514:9 | w | main.rs:516:5:519:6 | ExprStmt | match | -| main.rs:515:9:515:19 | &mut ... | main.rs:514:9:514:9 | w | | -| main.rs:515:14:515:19 | &mut x | main.rs:515:9:515:19 | &mut ... | | -| main.rs:515:19:515:19 | x | main.rs:515:14:515:19 | &mut x | | -| main.rs:516:5:516:17 | mutate_param2 | main.rs:517:14:517:14 | z | | -| main.rs:516:5:519:5 | mutate_param2(...) | main.rs:520:5:520:13 | ExprStmt | | -| main.rs:516:5:519:6 | ExprStmt | main.rs:516:5:516:17 | mutate_param2 | | -| main.rs:517:9:517:14 | &mut z | main.rs:518:9:518:9 | w | | -| main.rs:517:14:517:14 | z | main.rs:517:9:517:14 | &mut z | | -| main.rs:518:9:518:9 | w | main.rs:516:5:519:5 | mutate_param2(...) | | -| main.rs:520:5:520:7 | * ... | main.rs:520:11:520:12 | 11 | | -| main.rs:520:5:520:12 | ... = ... | main.rs:523:5:523:17 | ExprStmt | | -| main.rs:520:5:520:13 | ExprStmt | main.rs:520:7:520:7 | w | | -| main.rs:520:6:520:7 | * ... | main.rs:520:5:520:7 | * ... | | -| main.rs:520:7:520:7 | w | main.rs:520:6:520:7 | * ... | | -| main.rs:520:11:520:12 | 11 | main.rs:520:5:520:12 | ... = ... | | -| main.rs:523:5:523:13 | print_i64 | main.rs:523:15:523:15 | z | | -| main.rs:523:5:523:16 | print_i64(...) | main.rs:504:17:524:1 | { ... } | | -| main.rs:523:5:523:17 | ExprStmt | main.rs:523:5:523:13 | print_i64 | | -| main.rs:523:15:523:15 | z | main.rs:523:5:523:16 | print_i64(...) | | -| main.rs:526:1:532:1 | enter fn alias | main.rs:527:5:527:18 | let ... = 1 | | -| main.rs:526:1:532:1 | exit fn alias (normal) | main.rs:526:1:532:1 | exit fn alias | | -| main.rs:526:12:532:1 | { ... } | main.rs:526:1:532:1 | exit fn alias (normal) | | -| main.rs:527:5:527:18 | let ... = 1 | main.rs:527:17:527:17 | 1 | | -| main.rs:527:9:527:13 | mut x | main.rs:528:5:529:15 | let ... = ... | match | -| main.rs:527:13:527:13 | x | main.rs:527:9:527:13 | mut x | | -| main.rs:527:17:527:17 | 1 | main.rs:527:13:527:13 | x | | -| main.rs:528:5:529:15 | let ... = ... | main.rs:529:14:529:14 | x | | -| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | | -| main.rs:528:9:528:9 | y | main.rs:530:5:530:11 | ExprStmt | match | -| main.rs:529:9:529:14 | &mut x | main.rs:528:9:528:9 | y | | -| main.rs:529:14:529:14 | x | main.rs:529:9:529:14 | &mut x | | -| main.rs:530:5:530:6 | * ... | main.rs:530:10:530:10 | 2 | | -| main.rs:530:5:530:10 | ... = ... | main.rs:531:5:531:17 | ExprStmt | | -| main.rs:530:5:530:11 | ExprStmt | main.rs:530:6:530:6 | y | | -| main.rs:530:6:530:6 | y | main.rs:530:5:530:6 | * ... | | -| main.rs:530:10:530:10 | 2 | main.rs:530:5:530:10 | ... = ... | | -| main.rs:531:5:531:13 | print_i64 | main.rs:531:15:531:15 | x | | -| main.rs:531:5:531:16 | print_i64(...) | main.rs:526:12:532:1 | { ... } | | -| main.rs:531:5:531:17 | ExprStmt | main.rs:531:5:531:13 | print_i64 | | -| main.rs:531:15:531:15 | x | main.rs:531:5:531:16 | print_i64(...) | | -| main.rs:534:1:543:1 | enter fn capture_immut | main.rs:535:5:535:16 | let ... = 100 | | -| main.rs:534:1:543:1 | exit fn capture_immut (normal) | main.rs:534:1:543:1 | exit fn capture_immut | | -| main.rs:534:20:543:1 | { ... } | main.rs:534:1:543:1 | exit fn capture_immut (normal) | | -| main.rs:535:5:535:16 | let ... = 100 | main.rs:535:13:535:15 | 100 | | -| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | | -| main.rs:535:9:535:9 | x | main.rs:538:5:540:6 | let ... = ... | match | -| main.rs:535:13:535:15 | 100 | main.rs:535:9:535:9 | x | | -| main.rs:538:5:540:6 | let ... = ... | main.rs:538:15:540:5 | \|...\| ... | | -| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | | -| main.rs:538:9:538:11 | cap | main.rs:541:5:541:10 | ExprStmt | match | -| main.rs:538:15:540:5 | \|...\| ... | main.rs:538:9:538:11 | cap | | -| main.rs:538:15:540:5 | enter \|...\| ... | main.rs:539:9:539:21 | ExprStmt | | -| main.rs:538:15:540:5 | exit \|...\| ... (normal) | main.rs:538:15:540:5 | exit \|...\| ... | | -| main.rs:538:18:540:5 | { ... } | main.rs:538:15:540:5 | exit \|...\| ... (normal) | | -| main.rs:539:9:539:17 | print_i64 | main.rs:539:19:539:19 | x | | -| main.rs:539:9:539:20 | print_i64(...) | main.rs:538:18:540:5 | { ... } | | -| main.rs:539:9:539:21 | ExprStmt | main.rs:539:9:539:17 | print_i64 | | -| main.rs:539:19:539:19 | x | main.rs:539:9:539:20 | print_i64(...) | | -| main.rs:541:5:541:7 | cap | main.rs:541:5:541:9 | cap(...) | | -| main.rs:541:5:541:9 | cap(...) | main.rs:542:5:542:17 | ExprStmt | | -| main.rs:541:5:541:10 | ExprStmt | main.rs:541:5:541:7 | cap | | -| main.rs:542:5:542:13 | print_i64 | main.rs:542:15:542:15 | x | | -| main.rs:542:5:542:16 | print_i64(...) | main.rs:534:20:543:1 | { ... } | | -| main.rs:542:5:542:17 | ExprStmt | main.rs:542:5:542:13 | print_i64 | | -| main.rs:542:15:542:15 | x | main.rs:542:5:542:16 | print_i64(...) | | -| main.rs:545:1:572:1 | enter fn capture_mut | main.rs:546:5:546:18 | let ... = 1 | | -| main.rs:545:1:572:1 | exit fn capture_mut (normal) | main.rs:545:1:572:1 | exit fn capture_mut | | -| main.rs:545:18:572:1 | { ... } | main.rs:545:1:572:1 | exit fn capture_mut (normal) | | -| main.rs:546:5:546:18 | let ... = 1 | main.rs:546:17:546:17 | 1 | | -| main.rs:546:9:546:13 | mut x | main.rs:549:5:551:6 | let ... = ... | match | -| main.rs:546:13:546:13 | x | main.rs:546:9:546:13 | mut x | | -| main.rs:546:17:546:17 | 1 | main.rs:546:13:546:13 | x | | -| main.rs:549:5:551:6 | let ... = ... | main.rs:549:20:551:5 | \|...\| ... | | -| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | | -| main.rs:549:9:549:16 | closure1 | main.rs:552:5:552:15 | ExprStmt | match | -| main.rs:549:20:551:5 | \|...\| ... | main.rs:549:9:549:16 | closure1 | | -| main.rs:549:20:551:5 | enter \|...\| ... | main.rs:550:9:550:21 | ExprStmt | | -| main.rs:549:20:551:5 | exit \|...\| ... (normal) | main.rs:549:20:551:5 | exit \|...\| ... | | -| main.rs:549:23:551:5 | { ... } | main.rs:549:20:551:5 | exit \|...\| ... (normal) | | -| main.rs:550:9:550:17 | print_i64 | main.rs:550:19:550:19 | x | | -| main.rs:550:9:550:20 | print_i64(...) | main.rs:549:23:551:5 | { ... } | | -| main.rs:550:9:550:21 | ExprStmt | main.rs:550:9:550:17 | print_i64 | | -| main.rs:550:19:550:19 | x | main.rs:550:9:550:20 | print_i64(...) | | -| main.rs:552:5:552:12 | closure1 | main.rs:552:5:552:14 | closure1(...) | | -| main.rs:552:5:552:14 | closure1(...) | main.rs:553:5:553:17 | ExprStmt | | -| main.rs:552:5:552:15 | ExprStmt | main.rs:552:5:552:12 | closure1 | | -| main.rs:553:5:553:13 | print_i64 | main.rs:553:15:553:15 | x | | -| main.rs:553:5:553:16 | print_i64(...) | main.rs:555:5:555:18 | let ... = 2 | | -| main.rs:553:5:553:17 | ExprStmt | main.rs:553:5:553:13 | print_i64 | | -| main.rs:553:15:553:15 | x | main.rs:553:5:553:16 | print_i64(...) | | -| main.rs:555:5:555:18 | let ... = 2 | main.rs:555:17:555:17 | 2 | | -| main.rs:555:9:555:13 | mut y | main.rs:558:5:560:6 | let ... = ... | match | -| main.rs:555:13:555:13 | y | main.rs:555:9:555:13 | mut y | | -| main.rs:555:17:555:17 | 2 | main.rs:555:13:555:13 | y | | -| main.rs:558:5:560:6 | let ... = ... | main.rs:558:24:560:5 | \|...\| ... | | -| main.rs:558:9:558:20 | mut closure2 | main.rs:561:5:561:15 | ExprStmt | match | -| main.rs:558:13:558:20 | closure2 | main.rs:558:9:558:20 | mut closure2 | | -| main.rs:558:24:560:5 | \|...\| ... | main.rs:558:13:558:20 | closure2 | | -| main.rs:558:24:560:5 | enter \|...\| ... | main.rs:559:9:559:14 | ExprStmt | | -| main.rs:558:24:560:5 | exit \|...\| ... (normal) | main.rs:558:24:560:5 | exit \|...\| ... | | -| main.rs:558:27:560:5 | { ... } | main.rs:558:24:560:5 | exit \|...\| ... (normal) | | -| main.rs:559:9:559:9 | y | main.rs:559:13:559:13 | 3 | | -| main.rs:559:9:559:13 | ... = ... | main.rs:558:27:560:5 | { ... } | | -| main.rs:559:9:559:14 | ExprStmt | main.rs:559:9:559:9 | y | | -| main.rs:559:13:559:13 | 3 | main.rs:559:9:559:13 | ... = ... | | -| main.rs:561:5:561:12 | closure2 | main.rs:561:5:561:14 | closure2(...) | | -| main.rs:561:5:561:14 | closure2(...) | main.rs:562:5:562:17 | ExprStmt | | -| main.rs:561:5:561:15 | ExprStmt | main.rs:561:5:561:12 | closure2 | | -| main.rs:562:5:562:13 | print_i64 | main.rs:562:15:562:15 | y | | -| main.rs:562:5:562:16 | print_i64(...) | main.rs:564:5:564:18 | let ... = 2 | | -| main.rs:562:5:562:17 | ExprStmt | main.rs:562:5:562:13 | print_i64 | | -| main.rs:562:15:562:15 | y | main.rs:562:5:562:16 | print_i64(...) | | -| main.rs:564:5:564:18 | let ... = 2 | main.rs:564:17:564:17 | 2 | | -| main.rs:564:9:564:13 | mut z | main.rs:567:5:569:6 | let ... = ... | match | -| main.rs:564:13:564:13 | z | main.rs:564:9:564:13 | mut z | | -| main.rs:564:17:564:17 | 2 | main.rs:564:13:564:13 | z | | -| main.rs:567:5:569:6 | let ... = ... | main.rs:567:24:569:5 | \|...\| ... | | -| main.rs:567:9:567:20 | mut closure3 | main.rs:570:5:570:15 | ExprStmt | match | -| main.rs:567:13:567:20 | closure3 | main.rs:567:9:567:20 | mut closure3 | | -| main.rs:567:24:569:5 | \|...\| ... | main.rs:567:13:567:20 | closure3 | | -| main.rs:567:24:569:5 | enter \|...\| ... | main.rs:568:9:568:24 | ExprStmt | | -| main.rs:567:24:569:5 | exit \|...\| ... (normal) | main.rs:567:24:569:5 | exit \|...\| ... | | -| main.rs:567:27:569:5 | { ... } | main.rs:567:24:569:5 | exit \|...\| ... (normal) | | -| main.rs:568:9:568:9 | z | main.rs:568:22:568:22 | 1 | | -| main.rs:568:9:568:23 | z.add_assign(...) | main.rs:567:27:569:5 | { ... } | | -| main.rs:568:9:568:24 | ExprStmt | main.rs:568:9:568:9 | z | | -| main.rs:568:22:568:22 | 1 | main.rs:568:9:568:23 | z.add_assign(...) | | -| main.rs:570:5:570:12 | closure3 | main.rs:570:5:570:14 | closure3(...) | | -| main.rs:570:5:570:14 | closure3(...) | main.rs:571:5:571:17 | ExprStmt | | -| main.rs:570:5:570:15 | ExprStmt | main.rs:570:5:570:12 | closure3 | | -| main.rs:571:5:571:13 | print_i64 | main.rs:571:15:571:15 | z | | -| main.rs:571:5:571:16 | print_i64(...) | main.rs:545:18:572:1 | { ... } | | -| main.rs:571:5:571:17 | ExprStmt | main.rs:571:5:571:13 | print_i64 | | -| main.rs:571:15:571:15 | z | main.rs:571:5:571:16 | print_i64(...) | | -| main.rs:574:1:582:1 | enter fn async_block_capture | main.rs:575:5:575:23 | let ... = 0 | | -| main.rs:574:1:582:1 | exit fn async_block_capture (normal) | main.rs:574:1:582:1 | exit fn async_block_capture | | -| main.rs:574:32:582:1 | { ... } | main.rs:574:1:582:1 | exit fn async_block_capture (normal) | | -| main.rs:575:5:575:23 | let ... = 0 | main.rs:575:22:575:22 | 0 | | -| main.rs:575:9:575:13 | mut i | main.rs:576:5:578:6 | let ... = ... | match | -| main.rs:575:13:575:13 | i | main.rs:575:9:575:13 | mut i | | -| main.rs:575:22:575:22 | 0 | main.rs:575:13:575:13 | i | | -| main.rs:576:5:578:6 | let ... = ... | main.rs:576:17:578:5 | { ... } | | -| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | | -| main.rs:576:9:576:13 | block | main.rs:580:5:580:16 | ExprStmt | match | -| main.rs:576:17:578:5 | enter { ... } | main.rs:577:9:577:14 | ExprStmt | | -| main.rs:576:17:578:5 | exit { ... } (normal) | main.rs:576:17:578:5 | exit { ... } | | -| main.rs:576:17:578:5 | { ... } | main.rs:576:9:576:13 | block | | -| main.rs:577:9:577:9 | i | main.rs:577:13:577:13 | 1 | | -| main.rs:577:9:577:13 | ... = ... | main.rs:576:17:578:5 | exit { ... } (normal) | | -| main.rs:577:9:577:14 | ExprStmt | main.rs:577:9:577:9 | i | | -| main.rs:577:13:577:13 | 1 | main.rs:577:9:577:13 | ... = ... | | -| main.rs:580:5:580:9 | block | main.rs:580:5:580:15 | await block | | -| main.rs:580:5:580:15 | await block | main.rs:581:5:581:17 | ExprStmt | | -| main.rs:580:5:580:16 | ExprStmt | main.rs:580:5:580:9 | block | | -| main.rs:581:5:581:13 | print_i64 | main.rs:581:15:581:15 | i | | -| main.rs:581:5:581:16 | print_i64(...) | main.rs:574:32:582:1 | { ... } | | -| main.rs:581:5:581:17 | ExprStmt | main.rs:581:5:581:13 | print_i64 | | -| main.rs:581:15:581:15 | i | main.rs:581:5:581:16 | print_i64(...) | | -| main.rs:584:1:600:1 | enter fn phi | main.rs:584:8:584:8 | b | | -| main.rs:584:1:600:1 | exit fn phi (normal) | main.rs:584:1:600:1 | exit fn phi | | -| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | | -| main.rs:584:8:584:8 | b | main.rs:584:8:584:14 | ...: bool | match | -| main.rs:584:8:584:14 | ...: bool | main.rs:585:5:585:18 | let ... = 1 | | -| main.rs:584:17:600:1 | { ... } | main.rs:584:1:600:1 | exit fn phi (normal) | | -| main.rs:585:5:585:18 | let ... = 1 | main.rs:585:17:585:17 | 1 | | -| main.rs:585:9:585:13 | mut x | main.rs:586:5:586:17 | ExprStmt | match | -| main.rs:585:13:585:13 | x | main.rs:585:9:585:13 | mut x | | -| main.rs:585:17:585:17 | 1 | main.rs:585:13:585:13 | x | | -| main.rs:586:5:586:13 | print_i64 | main.rs:586:15:586:15 | x | | -| main.rs:586:5:586:16 | print_i64(...) | main.rs:587:5:587:21 | ExprStmt | | -| main.rs:586:5:586:17 | ExprStmt | main.rs:586:5:586:13 | print_i64 | | -| main.rs:586:15:586:15 | x | main.rs:586:5:586:16 | print_i64(...) | | -| main.rs:587:5:587:13 | print_i64 | main.rs:587:15:587:15 | x | | -| main.rs:587:5:587:20 | print_i64(...) | main.rs:588:5:598:6 | let _ = ... | | -| main.rs:587:5:587:21 | ExprStmt | main.rs:587:5:587:13 | print_i64 | | -| main.rs:587:15:587:15 | x | main.rs:587:19:587:19 | 1 | | -| main.rs:587:15:587:19 | ... + ... | main.rs:587:5:587:20 | print_i64(...) | | -| main.rs:587:19:587:19 | 1 | main.rs:587:15:587:19 | ... + ... | | -| main.rs:588:5:598:6 | let _ = ... | main.rs:589:16:589:16 | b | | -| main.rs:589:9:589:9 | _ | main.rs:599:5:599:17 | ExprStmt | match | -| main.rs:589:13:598:5 | if b {...} else {...} | main.rs:589:9:589:9 | _ | | -| main.rs:589:16:589:16 | b | main.rs:591:9:591:14 | ExprStmt | true | -| main.rs:589:16:589:16 | b | main.rs:595:9:595:14 | ExprStmt | false | -| main.rs:590:5:594:5 | { ... } | main.rs:589:13:598:5 | if b {...} else {...} | | -| main.rs:591:9:591:9 | x | main.rs:591:13:591:13 | 2 | | -| main.rs:591:9:591:13 | ... = ... | main.rs:592:9:592:21 | ExprStmt | | -| main.rs:591:9:591:14 | ExprStmt | main.rs:591:9:591:9 | x | | -| main.rs:591:13:591:13 | 2 | main.rs:591:9:591:13 | ... = ... | | -| main.rs:592:9:592:17 | print_i64 | main.rs:592:19:592:19 | x | | -| main.rs:592:9:592:20 | print_i64(...) | main.rs:593:9:593:25 | ExprStmt | | -| main.rs:592:9:592:21 | ExprStmt | main.rs:592:9:592:17 | print_i64 | | -| main.rs:592:19:592:19 | x | main.rs:592:9:592:20 | print_i64(...) | | -| main.rs:593:9:593:17 | print_i64 | main.rs:593:19:593:19 | x | | -| main.rs:593:9:593:24 | print_i64(...) | main.rs:590:5:594:5 | { ... } | | -| main.rs:593:9:593:25 | ExprStmt | main.rs:593:9:593:17 | print_i64 | | -| main.rs:593:19:593:19 | x | main.rs:593:23:593:23 | 1 | | -| main.rs:593:19:593:23 | ... + ... | main.rs:593:9:593:24 | print_i64(...) | | -| main.rs:593:23:593:23 | 1 | main.rs:593:19:593:23 | ... + ... | | -| main.rs:594:12:598:5 | { ... } | main.rs:589:13:598:5 | if b {...} else {...} | | -| main.rs:595:9:595:9 | x | main.rs:595:13:595:13 | 3 | | -| main.rs:595:9:595:13 | ... = ... | main.rs:596:9:596:21 | ExprStmt | | -| main.rs:595:9:595:14 | ExprStmt | main.rs:595:9:595:9 | x | | -| main.rs:595:13:595:13 | 3 | main.rs:595:9:595:13 | ... = ... | | -| main.rs:596:9:596:17 | print_i64 | main.rs:596:19:596:19 | x | | -| main.rs:596:9:596:20 | print_i64(...) | main.rs:597:9:597:25 | ExprStmt | | -| main.rs:596:9:596:21 | ExprStmt | main.rs:596:9:596:17 | print_i64 | | -| main.rs:596:19:596:19 | x | main.rs:596:9:596:20 | print_i64(...) | | -| main.rs:597:9:597:17 | print_i64 | main.rs:597:19:597:19 | x | | -| main.rs:597:9:597:24 | print_i64(...) | main.rs:594:12:598:5 | { ... } | | -| main.rs:597:9:597:25 | ExprStmt | main.rs:597:9:597:17 | print_i64 | | -| main.rs:597:19:597:19 | x | main.rs:597:23:597:23 | 1 | | -| main.rs:597:19:597:23 | ... + ... | main.rs:597:9:597:24 | print_i64(...) | | -| main.rs:597:23:597:23 | 1 | main.rs:597:19:597:23 | ... + ... | | -| main.rs:599:5:599:13 | print_i64 | main.rs:599:15:599:15 | x | | -| main.rs:599:5:599:16 | print_i64(...) | main.rs:584:17:600:1 | { ... } | | -| main.rs:599:5:599:17 | ExprStmt | main.rs:599:5:599:13 | print_i64 | | -| main.rs:599:15:599:15 | x | main.rs:599:5:599:16 | print_i64(...) | | -| main.rs:602:1:619:1 | enter fn phi_read | main.rs:602:13:602:14 | b1 | | -| main.rs:602:1:619:1 | exit fn phi_read (normal) | main.rs:602:1:619:1 | exit fn phi_read | | -| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | | -| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:20 | ...: bool | match | -| main.rs:602:13:602:20 | ...: bool | main.rs:602:23:602:24 | b2 | | -| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | | -| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:30 | ...: bool | match | -| main.rs:602:23:602:30 | ...: bool | main.rs:603:5:603:14 | let ... = 1 | | -| main.rs:602:33:619:1 | { ... } | main.rs:602:1:619:1 | exit fn phi_read (normal) | | -| main.rs:603:5:603:14 | let ... = 1 | main.rs:603:13:603:13 | 1 | | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | | -| main.rs:603:9:603:9 | x | main.rs:604:5:610:6 | let _ = ... | match | -| main.rs:603:13:603:13 | 1 | main.rs:603:9:603:9 | x | | -| main.rs:604:5:610:6 | let _ = ... | main.rs:605:16:605:17 | b1 | | -| main.rs:605:9:605:9 | _ | main.rs:612:5:618:6 | let _ = ... | match | -| main.rs:605:13:610:5 | if b1 {...} else {...} | main.rs:605:9:605:9 | _ | | -| main.rs:605:16:605:17 | b1 | main.rs:607:9:607:21 | ExprStmt | true | -| main.rs:605:16:605:17 | b1 | main.rs:609:9:609:21 | ExprStmt | false | -| main.rs:606:5:608:5 | { ... } | main.rs:605:13:610:5 | if b1 {...} else {...} | | -| main.rs:607:9:607:17 | print_i64 | main.rs:607:19:607:19 | x | | -| main.rs:607:9:607:20 | print_i64(...) | main.rs:606:5:608:5 | { ... } | | -| main.rs:607:9:607:21 | ExprStmt | main.rs:607:9:607:17 | print_i64 | | -| main.rs:607:19:607:19 | x | main.rs:607:9:607:20 | print_i64(...) | | -| main.rs:608:12:610:5 | { ... } | main.rs:605:13:610:5 | if b1 {...} else {...} | | +| main.rs:479:5:479:27 | ... .add_assign(...) | main.rs:480:5:480:17 | ExprStmt | | +| main.rs:479:5:479:28 | ExprStmt | main.rs:479:11:479:11 | a | | +| main.rs:479:6:479:11 | &mut a | main.rs:479:25:479:26 | 10 | | +| main.rs:479:11:479:11 | a | main.rs:479:6:479:11 | &mut a | | +| main.rs:479:25:479:26 | 10 | main.rs:479:5:479:27 | ... .add_assign(...) | | +| main.rs:480:5:480:13 | print_i64 | main.rs:480:15:480:15 | a | | +| main.rs:480:5:480:16 | print_i64(...) | main.rs:475:17:481:1 | { ... } | | +| main.rs:480:5:480:17 | ExprStmt | main.rs:480:5:480:13 | print_i64 | | +| main.rs:480:15:480:15 | a | main.rs:480:5:480:16 | print_i64(...) | | +| main.rs:483:1:489:1 | enter fn mutate | main.rs:484:5:484:18 | let ... = 1 | | +| main.rs:483:1:489:1 | exit fn mutate (normal) | main.rs:483:1:489:1 | exit fn mutate | | +| main.rs:483:13:489:1 | { ... } | main.rs:483:1:489:1 | exit fn mutate (normal) | | +| main.rs:484:5:484:18 | let ... = 1 | main.rs:484:17:484:17 | 1 | | +| main.rs:484:9:484:13 | mut i | main.rs:485:5:486:15 | let ... = ... | match | +| main.rs:484:13:484:13 | i | main.rs:484:9:484:13 | mut i | | +| main.rs:484:17:484:17 | 1 | main.rs:484:13:484:13 | i | | +| main.rs:485:5:486:15 | let ... = ... | main.rs:486:14:486:14 | i | | +| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | | +| main.rs:485:9:485:13 | ref_i | main.rs:487:5:487:15 | ExprStmt | match | +| main.rs:486:9:486:14 | &mut i | main.rs:485:9:485:13 | ref_i | | +| main.rs:486:14:486:14 | i | main.rs:486:9:486:14 | &mut i | | +| main.rs:487:5:487:10 | * ... | main.rs:487:14:487:14 | 2 | | +| main.rs:487:5:487:14 | ... = ... | main.rs:488:5:488:17 | ExprStmt | | +| main.rs:487:5:487:15 | ExprStmt | main.rs:487:6:487:10 | ref_i | | +| main.rs:487:6:487:10 | ref_i | main.rs:487:5:487:10 | * ... | | +| main.rs:487:14:487:14 | 2 | main.rs:487:5:487:14 | ... = ... | | +| main.rs:488:5:488:13 | print_i64 | main.rs:488:15:488:15 | i | | +| main.rs:488:5:488:16 | print_i64(...) | main.rs:483:13:489:1 | { ... } | | +| main.rs:488:5:488:17 | ExprStmt | main.rs:488:5:488:13 | print_i64 | | +| main.rs:488:15:488:15 | i | main.rs:488:5:488:16 | print_i64(...) | | +| main.rs:491:1:496:1 | enter fn mutate_param | main.rs:491:17:491:17 | x | | +| main.rs:491:1:496:1 | exit fn mutate_param (normal) | main.rs:491:1:496:1 | exit fn mutate_param | | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:27 | ...: ... | match | +| main.rs:491:17:491:27 | ...: ... | main.rs:492:5:494:11 | ExprStmt | | +| main.rs:492:5:492:6 | * ... | main.rs:493:10:493:10 | x | | +| main.rs:492:5:494:10 | ... = ... | main.rs:495:5:495:13 | ExprStmt | | +| main.rs:492:5:494:11 | ExprStmt | main.rs:492:6:492:6 | x | | +| main.rs:492:6:492:6 | x | main.rs:492:5:492:6 | * ... | | +| main.rs:493:9:493:10 | * ... | main.rs:494:10:494:10 | x | | +| main.rs:493:9:494:10 | ... + ... | main.rs:492:5:494:10 | ... = ... | | +| main.rs:493:10:493:10 | x | main.rs:493:9:493:10 | * ... | | +| main.rs:494:9:494:10 | * ... | main.rs:493:9:494:10 | ... + ... | | +| main.rs:494:10:494:10 | x | main.rs:494:9:494:10 | * ... | | +| main.rs:495:5:495:12 | return x | main.rs:491:1:496:1 | exit fn mutate_param (normal) | return | +| main.rs:495:5:495:13 | ExprStmt | main.rs:495:12:495:12 | x | | +| main.rs:495:12:495:12 | x | main.rs:495:5:495:12 | return x | | +| main.rs:498:1:504:1 | enter fn mutate_param2 | main.rs:498:22:498:22 | x | | +| main.rs:498:1:504:1 | exit fn mutate_param2 (normal) | main.rs:498:1:504:1 | exit fn mutate_param2 | | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:35 | ...: ... | match | +| main.rs:498:22:498:35 | ...: ... | main.rs:498:38:498:38 | y | | +| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | | +| main.rs:498:38:498:38 | y | main.rs:498:38:498:56 | ...: ... | match | +| main.rs:498:38:498:56 | ...: ... | main.rs:499:5:501:11 | ExprStmt | | +| main.rs:498:59:504:1 | { ... } | main.rs:498:1:504:1 | exit fn mutate_param2 (normal) | | +| main.rs:499:5:499:6 | * ... | main.rs:500:10:500:10 | x | | +| main.rs:499:5:501:10 | ... = ... | main.rs:502:5:503:10 | ExprStmt | | +| main.rs:499:5:501:11 | ExprStmt | main.rs:499:6:499:6 | x | | +| main.rs:499:6:499:6 | x | main.rs:499:5:499:6 | * ... | | +| main.rs:500:9:500:10 | * ... | main.rs:501:10:501:10 | x | | +| main.rs:500:9:501:10 | ... + ... | main.rs:499:5:501:10 | ... = ... | | +| main.rs:500:10:500:10 | x | main.rs:500:9:500:10 | * ... | | +| main.rs:501:9:501:10 | * ... | main.rs:500:9:501:10 | ... + ... | | +| main.rs:501:10:501:10 | x | main.rs:501:9:501:10 | * ... | | +| main.rs:502:5:502:6 | * ... | main.rs:503:9:503:9 | x | | +| main.rs:502:5:503:9 | ... = ... | main.rs:498:59:504:1 | { ... } | | +| main.rs:502:5:503:10 | ExprStmt | main.rs:502:6:502:6 | y | | +| main.rs:502:6:502:6 | y | main.rs:502:5:502:6 | * ... | | +| main.rs:503:9:503:9 | x | main.rs:502:5:503:9 | ... = ... | | +| main.rs:506:1:526:1 | enter fn mutate_arg | main.rs:507:5:507:18 | let ... = 2 | | +| main.rs:506:1:526:1 | exit fn mutate_arg (normal) | main.rs:506:1:526:1 | exit fn mutate_arg | | +| main.rs:506:17:526:1 | { ... } | main.rs:506:1:526:1 | exit fn mutate_arg (normal) | | +| main.rs:507:5:507:18 | let ... = 2 | main.rs:507:17:507:17 | 2 | | +| main.rs:507:9:507:13 | mut x | main.rs:508:5:509:29 | let ... = ... | match | +| main.rs:507:13:507:13 | x | main.rs:507:9:507:13 | mut x | | +| main.rs:507:17:507:17 | 2 | main.rs:507:13:507:13 | x | | +| main.rs:508:5:509:29 | let ... = ... | main.rs:509:9:509:20 | mutate_param | | +| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | | +| main.rs:508:9:508:9 | y | main.rs:510:5:510:12 | ExprStmt | match | +| main.rs:509:9:509:20 | mutate_param | main.rs:509:27:509:27 | x | | +| main.rs:509:9:509:28 | mutate_param(...) | main.rs:508:9:508:9 | y | | +| main.rs:509:22:509:27 | &mut x | main.rs:509:9:509:28 | mutate_param(...) | | +| main.rs:509:27:509:27 | x | main.rs:509:22:509:27 | &mut x | | +| main.rs:510:5:510:6 | * ... | main.rs:510:10:510:11 | 10 | | +| main.rs:510:5:510:11 | ... = ... | main.rs:513:5:513:17 | ExprStmt | | +| main.rs:510:5:510:12 | ExprStmt | main.rs:510:6:510:6 | y | | +| main.rs:510:6:510:6 | y | main.rs:510:5:510:6 | * ... | | +| main.rs:510:10:510:11 | 10 | main.rs:510:5:510:11 | ... = ... | | +| main.rs:513:5:513:13 | print_i64 | main.rs:513:15:513:15 | x | | +| main.rs:513:5:513:16 | print_i64(...) | main.rs:515:5:515:18 | let ... = 4 | | +| main.rs:513:5:513:17 | ExprStmt | main.rs:513:5:513:13 | print_i64 | | +| main.rs:513:15:513:15 | x | main.rs:513:5:513:16 | print_i64(...) | | +| main.rs:515:5:515:18 | let ... = 4 | main.rs:515:17:515:17 | 4 | | +| main.rs:515:9:515:13 | mut z | main.rs:516:5:517:20 | let ... = ... | match | +| main.rs:515:13:515:13 | z | main.rs:515:9:515:13 | mut z | | +| main.rs:515:17:515:17 | 4 | main.rs:515:13:515:13 | z | | +| main.rs:516:5:517:20 | let ... = ... | main.rs:517:19:517:19 | x | | +| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | | +| main.rs:516:9:516:9 | w | main.rs:518:5:521:6 | ExprStmt | match | +| main.rs:517:9:517:19 | &mut ... | main.rs:516:9:516:9 | w | | +| main.rs:517:14:517:19 | &mut x | main.rs:517:9:517:19 | &mut ... | | +| main.rs:517:19:517:19 | x | main.rs:517:14:517:19 | &mut x | | +| main.rs:518:5:518:17 | mutate_param2 | main.rs:519:14:519:14 | z | | +| main.rs:518:5:521:5 | mutate_param2(...) | main.rs:522:5:522:13 | ExprStmt | | +| main.rs:518:5:521:6 | ExprStmt | main.rs:518:5:518:17 | mutate_param2 | | +| main.rs:519:9:519:14 | &mut z | main.rs:520:9:520:9 | w | | +| main.rs:519:14:519:14 | z | main.rs:519:9:519:14 | &mut z | | +| main.rs:520:9:520:9 | w | main.rs:518:5:521:5 | mutate_param2(...) | | +| main.rs:522:5:522:7 | * ... | main.rs:522:11:522:12 | 11 | | +| main.rs:522:5:522:12 | ... = ... | main.rs:525:5:525:17 | ExprStmt | | +| main.rs:522:5:522:13 | ExprStmt | main.rs:522:7:522:7 | w | | +| main.rs:522:6:522:7 | * ... | main.rs:522:5:522:7 | * ... | | +| main.rs:522:7:522:7 | w | main.rs:522:6:522:7 | * ... | | +| main.rs:522:11:522:12 | 11 | main.rs:522:5:522:12 | ... = ... | | +| main.rs:525:5:525:13 | print_i64 | main.rs:525:15:525:15 | z | | +| main.rs:525:5:525:16 | print_i64(...) | main.rs:506:17:526:1 | { ... } | | +| main.rs:525:5:525:17 | ExprStmt | main.rs:525:5:525:13 | print_i64 | | +| main.rs:525:15:525:15 | z | main.rs:525:5:525:16 | print_i64(...) | | +| main.rs:528:1:534:1 | enter fn alias | main.rs:529:5:529:18 | let ... = 1 | | +| main.rs:528:1:534:1 | exit fn alias (normal) | main.rs:528:1:534:1 | exit fn alias | | +| main.rs:528:12:534:1 | { ... } | main.rs:528:1:534:1 | exit fn alias (normal) | | +| main.rs:529:5:529:18 | let ... = 1 | main.rs:529:17:529:17 | 1 | | +| main.rs:529:9:529:13 | mut x | main.rs:530:5:531:15 | let ... = ... | match | +| main.rs:529:13:529:13 | x | main.rs:529:9:529:13 | mut x | | +| main.rs:529:17:529:17 | 1 | main.rs:529:13:529:13 | x | | +| main.rs:530:5:531:15 | let ... = ... | main.rs:531:14:531:14 | x | | +| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | | +| main.rs:530:9:530:9 | y | main.rs:532:5:532:11 | ExprStmt | match | +| main.rs:531:9:531:14 | &mut x | main.rs:530:9:530:9 | y | | +| main.rs:531:14:531:14 | x | main.rs:531:9:531:14 | &mut x | | +| main.rs:532:5:532:6 | * ... | main.rs:532:10:532:10 | 2 | | +| main.rs:532:5:532:10 | ... = ... | main.rs:533:5:533:17 | ExprStmt | | +| main.rs:532:5:532:11 | ExprStmt | main.rs:532:6:532:6 | y | | +| main.rs:532:6:532:6 | y | main.rs:532:5:532:6 | * ... | | +| main.rs:532:10:532:10 | 2 | main.rs:532:5:532:10 | ... = ... | | +| main.rs:533:5:533:13 | print_i64 | main.rs:533:15:533:15 | x | | +| main.rs:533:5:533:16 | print_i64(...) | main.rs:528:12:534:1 | { ... } | | +| main.rs:533:5:533:17 | ExprStmt | main.rs:533:5:533:13 | print_i64 | | +| main.rs:533:15:533:15 | x | main.rs:533:5:533:16 | print_i64(...) | | +| main.rs:536:1:545:1 | enter fn capture_immut | main.rs:537:5:537:16 | let ... = 100 | | +| main.rs:536:1:545:1 | exit fn capture_immut (normal) | main.rs:536:1:545:1 | exit fn capture_immut | | +| main.rs:536:20:545:1 | { ... } | main.rs:536:1:545:1 | exit fn capture_immut (normal) | | +| main.rs:537:5:537:16 | let ... = 100 | main.rs:537:13:537:15 | 100 | | +| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | | +| main.rs:537:9:537:9 | x | main.rs:540:5:542:6 | let ... = ... | match | +| main.rs:537:13:537:15 | 100 | main.rs:537:9:537:9 | x | | +| main.rs:540:5:542:6 | let ... = ... | main.rs:540:15:542:5 | \|...\| ... | | +| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | | +| main.rs:540:9:540:11 | cap | main.rs:543:5:543:10 | ExprStmt | match | +| main.rs:540:15:542:5 | \|...\| ... | main.rs:540:9:540:11 | cap | | +| main.rs:540:15:542:5 | enter \|...\| ... | main.rs:541:9:541:21 | ExprStmt | | +| main.rs:540:15:542:5 | exit \|...\| ... (normal) | main.rs:540:15:542:5 | exit \|...\| ... | | +| main.rs:540:18:542:5 | { ... } | main.rs:540:15:542:5 | exit \|...\| ... (normal) | | +| main.rs:541:9:541:17 | print_i64 | main.rs:541:19:541:19 | x | | +| main.rs:541:9:541:20 | print_i64(...) | main.rs:540:18:542:5 | { ... } | | +| main.rs:541:9:541:21 | ExprStmt | main.rs:541:9:541:17 | print_i64 | | +| main.rs:541:19:541:19 | x | main.rs:541:9:541:20 | print_i64(...) | | +| main.rs:543:5:543:7 | cap | main.rs:543:5:543:9 | cap(...) | | +| main.rs:543:5:543:9 | cap(...) | main.rs:544:5:544:17 | ExprStmt | | +| main.rs:543:5:543:10 | ExprStmt | main.rs:543:5:543:7 | cap | | +| main.rs:544:5:544:13 | print_i64 | main.rs:544:15:544:15 | x | | +| main.rs:544:5:544:16 | print_i64(...) | main.rs:536:20:545:1 | { ... } | | +| main.rs:544:5:544:17 | ExprStmt | main.rs:544:5:544:13 | print_i64 | | +| main.rs:544:15:544:15 | x | main.rs:544:5:544:16 | print_i64(...) | | +| main.rs:547:1:574:1 | enter fn capture_mut | main.rs:548:5:548:18 | let ... = 1 | | +| main.rs:547:1:574:1 | exit fn capture_mut (normal) | main.rs:547:1:574:1 | exit fn capture_mut | | +| main.rs:547:18:574:1 | { ... } | main.rs:547:1:574:1 | exit fn capture_mut (normal) | | +| main.rs:548:5:548:18 | let ... = 1 | main.rs:548:17:548:17 | 1 | | +| main.rs:548:9:548:13 | mut x | main.rs:551:5:553:6 | let ... = ... | match | +| main.rs:548:13:548:13 | x | main.rs:548:9:548:13 | mut x | | +| main.rs:548:17:548:17 | 1 | main.rs:548:13:548:13 | x | | +| main.rs:551:5:553:6 | let ... = ... | main.rs:551:20:553:5 | \|...\| ... | | +| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | | +| main.rs:551:9:551:16 | closure1 | main.rs:554:5:554:15 | ExprStmt | match | +| main.rs:551:20:553:5 | \|...\| ... | main.rs:551:9:551:16 | closure1 | | +| main.rs:551:20:553:5 | enter \|...\| ... | main.rs:552:9:552:21 | ExprStmt | | +| main.rs:551:20:553:5 | exit \|...\| ... (normal) | main.rs:551:20:553:5 | exit \|...\| ... | | +| main.rs:551:23:553:5 | { ... } | main.rs:551:20:553:5 | exit \|...\| ... (normal) | | +| main.rs:552:9:552:17 | print_i64 | main.rs:552:19:552:19 | x | | +| main.rs:552:9:552:20 | print_i64(...) | main.rs:551:23:553:5 | { ... } | | +| main.rs:552:9:552:21 | ExprStmt | main.rs:552:9:552:17 | print_i64 | | +| main.rs:552:19:552:19 | x | main.rs:552:9:552:20 | print_i64(...) | | +| main.rs:554:5:554:12 | closure1 | main.rs:554:5:554:14 | closure1(...) | | +| main.rs:554:5:554:14 | closure1(...) | main.rs:555:5:555:17 | ExprStmt | | +| main.rs:554:5:554:15 | ExprStmt | main.rs:554:5:554:12 | closure1 | | +| main.rs:555:5:555:13 | print_i64 | main.rs:555:15:555:15 | x | | +| main.rs:555:5:555:16 | print_i64(...) | main.rs:557:5:557:18 | let ... = 2 | | +| main.rs:555:5:555:17 | ExprStmt | main.rs:555:5:555:13 | print_i64 | | +| main.rs:555:15:555:15 | x | main.rs:555:5:555:16 | print_i64(...) | | +| main.rs:557:5:557:18 | let ... = 2 | main.rs:557:17:557:17 | 2 | | +| main.rs:557:9:557:13 | mut y | main.rs:560:5:562:6 | let ... = ... | match | +| main.rs:557:13:557:13 | y | main.rs:557:9:557:13 | mut y | | +| main.rs:557:17:557:17 | 2 | main.rs:557:13:557:13 | y | | +| main.rs:560:5:562:6 | let ... = ... | main.rs:560:24:562:5 | \|...\| ... | | +| main.rs:560:9:560:20 | mut closure2 | main.rs:563:5:563:15 | ExprStmt | match | +| main.rs:560:13:560:20 | closure2 | main.rs:560:9:560:20 | mut closure2 | | +| main.rs:560:24:562:5 | \|...\| ... | main.rs:560:13:560:20 | closure2 | | +| main.rs:560:24:562:5 | enter \|...\| ... | main.rs:561:9:561:14 | ExprStmt | | +| main.rs:560:24:562:5 | exit \|...\| ... (normal) | main.rs:560:24:562:5 | exit \|...\| ... | | +| main.rs:560:27:562:5 | { ... } | main.rs:560:24:562:5 | exit \|...\| ... (normal) | | +| main.rs:561:9:561:9 | y | main.rs:561:13:561:13 | 3 | | +| main.rs:561:9:561:13 | ... = ... | main.rs:560:27:562:5 | { ... } | | +| main.rs:561:9:561:14 | ExprStmt | main.rs:561:9:561:9 | y | | +| main.rs:561:13:561:13 | 3 | main.rs:561:9:561:13 | ... = ... | | +| main.rs:563:5:563:12 | closure2 | main.rs:563:5:563:14 | closure2(...) | | +| main.rs:563:5:563:14 | closure2(...) | main.rs:564:5:564:17 | ExprStmt | | +| main.rs:563:5:563:15 | ExprStmt | main.rs:563:5:563:12 | closure2 | | +| main.rs:564:5:564:13 | print_i64 | main.rs:564:15:564:15 | y | | +| main.rs:564:5:564:16 | print_i64(...) | main.rs:566:5:566:18 | let ... = 2 | | +| main.rs:564:5:564:17 | ExprStmt | main.rs:564:5:564:13 | print_i64 | | +| main.rs:564:15:564:15 | y | main.rs:564:5:564:16 | print_i64(...) | | +| main.rs:566:5:566:18 | let ... = 2 | main.rs:566:17:566:17 | 2 | | +| main.rs:566:9:566:13 | mut z | main.rs:569:5:571:6 | let ... = ... | match | +| main.rs:566:13:566:13 | z | main.rs:566:9:566:13 | mut z | | +| main.rs:566:17:566:17 | 2 | main.rs:566:13:566:13 | z | | +| main.rs:569:5:571:6 | let ... = ... | main.rs:569:24:571:5 | \|...\| ... | | +| main.rs:569:9:569:20 | mut closure3 | main.rs:572:5:572:15 | ExprStmt | match | +| main.rs:569:13:569:20 | closure3 | main.rs:569:9:569:20 | mut closure3 | | +| main.rs:569:24:571:5 | \|...\| ... | main.rs:569:13:569:20 | closure3 | | +| main.rs:569:24:571:5 | enter \|...\| ... | main.rs:570:9:570:24 | ExprStmt | | +| main.rs:569:24:571:5 | exit \|...\| ... (normal) | main.rs:569:24:571:5 | exit \|...\| ... | | +| main.rs:569:27:571:5 | { ... } | main.rs:569:24:571:5 | exit \|...\| ... (normal) | | +| main.rs:570:9:570:9 | z | main.rs:570:22:570:22 | 1 | | +| main.rs:570:9:570:23 | z.add_assign(...) | main.rs:569:27:571:5 | { ... } | | +| main.rs:570:9:570:24 | ExprStmt | main.rs:570:9:570:9 | z | | +| main.rs:570:22:570:22 | 1 | main.rs:570:9:570:23 | z.add_assign(...) | | +| main.rs:572:5:572:12 | closure3 | main.rs:572:5:572:14 | closure3(...) | | +| main.rs:572:5:572:14 | closure3(...) | main.rs:573:5:573:17 | ExprStmt | | +| main.rs:572:5:572:15 | ExprStmt | main.rs:572:5:572:12 | closure3 | | +| main.rs:573:5:573:13 | print_i64 | main.rs:573:15:573:15 | z | | +| main.rs:573:5:573:16 | print_i64(...) | main.rs:547:18:574:1 | { ... } | | +| main.rs:573:5:573:17 | ExprStmt | main.rs:573:5:573:13 | print_i64 | | +| main.rs:573:15:573:15 | z | main.rs:573:5:573:16 | print_i64(...) | | +| main.rs:576:1:584:1 | enter fn async_block_capture | main.rs:577:5:577:23 | let ... = 0 | | +| main.rs:576:1:584:1 | exit fn async_block_capture (normal) | main.rs:576:1:584:1 | exit fn async_block_capture | | +| main.rs:576:32:584:1 | { ... } | main.rs:576:1:584:1 | exit fn async_block_capture (normal) | | +| main.rs:577:5:577:23 | let ... = 0 | main.rs:577:22:577:22 | 0 | | +| main.rs:577:9:577:13 | mut i | main.rs:578:5:580:6 | let ... = ... | match | +| main.rs:577:13:577:13 | i | main.rs:577:9:577:13 | mut i | | +| main.rs:577:22:577:22 | 0 | main.rs:577:13:577:13 | i | | +| main.rs:578:5:580:6 | let ... = ... | main.rs:578:17:580:5 | { ... } | | +| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | | +| main.rs:578:9:578:13 | block | main.rs:582:5:582:16 | ExprStmt | match | +| main.rs:578:17:580:5 | enter { ... } | main.rs:579:9:579:14 | ExprStmt | | +| main.rs:578:17:580:5 | exit { ... } (normal) | main.rs:578:17:580:5 | exit { ... } | | +| main.rs:578:17:580:5 | { ... } | main.rs:578:9:578:13 | block | | +| main.rs:579:9:579:9 | i | main.rs:579:13:579:13 | 1 | | +| main.rs:579:9:579:13 | ... = ... | main.rs:578:17:580:5 | exit { ... } (normal) | | +| main.rs:579:9:579:14 | ExprStmt | main.rs:579:9:579:9 | i | | +| main.rs:579:13:579:13 | 1 | main.rs:579:9:579:13 | ... = ... | | +| main.rs:582:5:582:9 | block | main.rs:582:5:582:15 | await block | | +| main.rs:582:5:582:15 | await block | main.rs:583:5:583:17 | ExprStmt | | +| main.rs:582:5:582:16 | ExprStmt | main.rs:582:5:582:9 | block | | +| main.rs:583:5:583:13 | print_i64 | main.rs:583:15:583:15 | i | | +| main.rs:583:5:583:16 | print_i64(...) | main.rs:576:32:584:1 | { ... } | | +| main.rs:583:5:583:17 | ExprStmt | main.rs:583:5:583:13 | print_i64 | | +| main.rs:583:15:583:15 | i | main.rs:583:5:583:16 | print_i64(...) | | +| main.rs:586:1:602:1 | enter fn phi | main.rs:586:8:586:8 | b | | +| main.rs:586:1:602:1 | exit fn phi (normal) | main.rs:586:1:602:1 | exit fn phi | | +| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | | +| main.rs:586:8:586:8 | b | main.rs:586:8:586:14 | ...: bool | match | +| main.rs:586:8:586:14 | ...: bool | main.rs:587:5:587:18 | let ... = 1 | | +| main.rs:586:17:602:1 | { ... } | main.rs:586:1:602:1 | exit fn phi (normal) | | +| main.rs:587:5:587:18 | let ... = 1 | main.rs:587:17:587:17 | 1 | | +| main.rs:587:9:587:13 | mut x | main.rs:588:5:588:17 | ExprStmt | match | +| main.rs:587:13:587:13 | x | main.rs:587:9:587:13 | mut x | | +| main.rs:587:17:587:17 | 1 | main.rs:587:13:587:13 | x | | +| main.rs:588:5:588:13 | print_i64 | main.rs:588:15:588:15 | x | | +| main.rs:588:5:588:16 | print_i64(...) | main.rs:589:5:589:21 | ExprStmt | | +| main.rs:588:5:588:17 | ExprStmt | main.rs:588:5:588:13 | print_i64 | | +| main.rs:588:15:588:15 | x | main.rs:588:5:588:16 | print_i64(...) | | +| main.rs:589:5:589:13 | print_i64 | main.rs:589:15:589:15 | x | | +| main.rs:589:5:589:20 | print_i64(...) | main.rs:590:5:600:6 | let _ = ... | | +| main.rs:589:5:589:21 | ExprStmt | main.rs:589:5:589:13 | print_i64 | | +| main.rs:589:15:589:15 | x | main.rs:589:19:589:19 | 1 | | +| main.rs:589:15:589:19 | ... + ... | main.rs:589:5:589:20 | print_i64(...) | | +| main.rs:589:19:589:19 | 1 | main.rs:589:15:589:19 | ... + ... | | +| main.rs:590:5:600:6 | let _ = ... | main.rs:591:16:591:16 | b | | +| main.rs:591:9:591:9 | _ | main.rs:601:5:601:17 | ExprStmt | match | +| main.rs:591:13:600:5 | if b {...} else {...} | main.rs:591:9:591:9 | _ | | +| main.rs:591:16:591:16 | b | main.rs:593:9:593:14 | ExprStmt | true | +| main.rs:591:16:591:16 | b | main.rs:597:9:597:14 | ExprStmt | false | +| main.rs:592:5:596:5 | { ... } | main.rs:591:13:600:5 | if b {...} else {...} | | +| main.rs:593:9:593:9 | x | main.rs:593:13:593:13 | 2 | | +| main.rs:593:9:593:13 | ... = ... | main.rs:594:9:594:21 | ExprStmt | | +| main.rs:593:9:593:14 | ExprStmt | main.rs:593:9:593:9 | x | | +| main.rs:593:13:593:13 | 2 | main.rs:593:9:593:13 | ... = ... | | +| main.rs:594:9:594:17 | print_i64 | main.rs:594:19:594:19 | x | | +| main.rs:594:9:594:20 | print_i64(...) | main.rs:595:9:595:25 | ExprStmt | | +| main.rs:594:9:594:21 | ExprStmt | main.rs:594:9:594:17 | print_i64 | | +| main.rs:594:19:594:19 | x | main.rs:594:9:594:20 | print_i64(...) | | +| main.rs:595:9:595:17 | print_i64 | main.rs:595:19:595:19 | x | | +| main.rs:595:9:595:24 | print_i64(...) | main.rs:592:5:596:5 | { ... } | | +| main.rs:595:9:595:25 | ExprStmt | main.rs:595:9:595:17 | print_i64 | | +| main.rs:595:19:595:19 | x | main.rs:595:23:595:23 | 1 | | +| main.rs:595:19:595:23 | ... + ... | main.rs:595:9:595:24 | print_i64(...) | | +| main.rs:595:23:595:23 | 1 | main.rs:595:19:595:23 | ... + ... | | +| main.rs:596:12:600:5 | { ... } | main.rs:591:13:600:5 | if b {...} else {...} | | +| main.rs:597:9:597:9 | x | main.rs:597:13:597:13 | 3 | | +| main.rs:597:9:597:13 | ... = ... | main.rs:598:9:598:21 | ExprStmt | | +| main.rs:597:9:597:14 | ExprStmt | main.rs:597:9:597:9 | x | | +| main.rs:597:13:597:13 | 3 | main.rs:597:9:597:13 | ... = ... | | +| main.rs:598:9:598:17 | print_i64 | main.rs:598:19:598:19 | x | | +| main.rs:598:9:598:20 | print_i64(...) | main.rs:599:9:599:25 | ExprStmt | | +| main.rs:598:9:598:21 | ExprStmt | main.rs:598:9:598:17 | print_i64 | | +| main.rs:598:19:598:19 | x | main.rs:598:9:598:20 | print_i64(...) | | +| main.rs:599:9:599:17 | print_i64 | main.rs:599:19:599:19 | x | | +| main.rs:599:9:599:24 | print_i64(...) | main.rs:596:12:600:5 | { ... } | | +| main.rs:599:9:599:25 | ExprStmt | main.rs:599:9:599:17 | print_i64 | | +| main.rs:599:19:599:19 | x | main.rs:599:23:599:23 | 1 | | +| main.rs:599:19:599:23 | ... + ... | main.rs:599:9:599:24 | print_i64(...) | | +| main.rs:599:23:599:23 | 1 | main.rs:599:19:599:23 | ... + ... | | +| main.rs:601:5:601:13 | print_i64 | main.rs:601:15:601:15 | x | | +| main.rs:601:5:601:16 | print_i64(...) | main.rs:586:17:602:1 | { ... } | | +| main.rs:601:5:601:17 | ExprStmt | main.rs:601:5:601:13 | print_i64 | | +| main.rs:601:15:601:15 | x | main.rs:601:5:601:16 | print_i64(...) | | +| main.rs:604:1:621:1 | enter fn phi_read | main.rs:604:13:604:14 | b1 | | +| main.rs:604:1:621:1 | exit fn phi_read (normal) | main.rs:604:1:621:1 | exit fn phi_read | | +| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | | +| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:20 | ...: bool | match | +| main.rs:604:13:604:20 | ...: bool | main.rs:604:23:604:24 | b2 | | +| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | | +| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:30 | ...: bool | match | +| main.rs:604:23:604:30 | ...: bool | main.rs:605:5:605:14 | let ... = 1 | | +| main.rs:604:33:621:1 | { ... } | main.rs:604:1:621:1 | exit fn phi_read (normal) | | +| main.rs:605:5:605:14 | let ... = 1 | main.rs:605:13:605:13 | 1 | | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | | +| main.rs:605:9:605:9 | x | main.rs:606:5:612:6 | let _ = ... | match | +| main.rs:605:13:605:13 | 1 | main.rs:605:9:605:9 | x | | +| main.rs:606:5:612:6 | let _ = ... | main.rs:607:16:607:17 | b1 | | +| main.rs:607:9:607:9 | _ | main.rs:614:5:620:6 | let _ = ... | match | +| main.rs:607:13:612:5 | if b1 {...} else {...} | main.rs:607:9:607:9 | _ | | +| main.rs:607:16:607:17 | b1 | main.rs:609:9:609:21 | ExprStmt | true | +| main.rs:607:16:607:17 | b1 | main.rs:611:9:611:21 | ExprStmt | false | +| main.rs:608:5:610:5 | { ... } | main.rs:607:13:612:5 | if b1 {...} else {...} | | | main.rs:609:9:609:17 | print_i64 | main.rs:609:19:609:19 | x | | -| main.rs:609:9:609:20 | print_i64(...) | main.rs:608:12:610:5 | { ... } | | +| main.rs:609:9:609:20 | print_i64(...) | main.rs:608:5:610:5 | { ... } | | | main.rs:609:9:609:21 | ExprStmt | main.rs:609:9:609:17 | print_i64 | | | main.rs:609:19:609:19 | x | main.rs:609:9:609:20 | print_i64(...) | | -| main.rs:612:5:618:6 | let _ = ... | main.rs:613:16:613:17 | b2 | | -| main.rs:613:9:613:9 | _ | main.rs:602:33:619:1 | { ... } | match | -| main.rs:613:13:618:5 | if b2 {...} else {...} | main.rs:613:9:613:9 | _ | | -| main.rs:613:16:613:17 | b2 | main.rs:615:9:615:21 | ExprStmt | true | -| main.rs:613:16:613:17 | b2 | main.rs:617:9:617:21 | ExprStmt | false | -| main.rs:614:5:616:5 | { ... } | main.rs:613:13:618:5 | if b2 {...} else {...} | | -| main.rs:615:9:615:17 | print_i64 | main.rs:615:19:615:19 | x | | -| main.rs:615:9:615:20 | print_i64(...) | main.rs:614:5:616:5 | { ... } | | -| main.rs:615:9:615:21 | ExprStmt | main.rs:615:9:615:17 | print_i64 | | -| main.rs:615:19:615:19 | x | main.rs:615:9:615:20 | print_i64(...) | | -| main.rs:616:12:618:5 | { ... } | main.rs:613:13:618:5 | if b2 {...} else {...} | | +| main.rs:610:12:612:5 | { ... } | main.rs:607:13:612:5 | if b1 {...} else {...} | | +| main.rs:611:9:611:17 | print_i64 | main.rs:611:19:611:19 | x | | +| main.rs:611:9:611:20 | print_i64(...) | main.rs:610:12:612:5 | { ... } | | +| main.rs:611:9:611:21 | ExprStmt | main.rs:611:9:611:17 | print_i64 | | +| main.rs:611:19:611:19 | x | main.rs:611:9:611:20 | print_i64(...) | | +| main.rs:614:5:620:6 | let _ = ... | main.rs:615:16:615:17 | b2 | | +| main.rs:615:9:615:9 | _ | main.rs:604:33:621:1 | { ... } | match | +| main.rs:615:13:620:5 | if b2 {...} else {...} | main.rs:615:9:615:9 | _ | | +| main.rs:615:16:615:17 | b2 | main.rs:617:9:617:21 | ExprStmt | true | +| main.rs:615:16:615:17 | b2 | main.rs:619:9:619:21 | ExprStmt | false | +| main.rs:616:5:618:5 | { ... } | main.rs:615:13:620:5 | if b2 {...} else {...} | | | main.rs:617:9:617:17 | print_i64 | main.rs:617:19:617:19 | x | | -| main.rs:617:9:617:20 | print_i64(...) | main.rs:616:12:618:5 | { ... } | | +| main.rs:617:9:617:20 | print_i64(...) | main.rs:616:5:618:5 | { ... } | | | main.rs:617:9:617:21 | ExprStmt | main.rs:617:9:617:17 | print_i64 | | | main.rs:617:19:617:19 | x | main.rs:617:9:617:20 | print_i64(...) | | -| main.rs:626:5:628:5 | enter fn my_get | main.rs:626:20:626:23 | self | | -| main.rs:626:5:628:5 | exit fn my_get (normal) | main.rs:626:5:628:5 | exit fn my_get | | -| main.rs:626:15:626:23 | SelfParam | main.rs:627:9:627:24 | ExprStmt | | -| main.rs:626:20:626:23 | self | main.rs:626:15:626:23 | SelfParam | | -| main.rs:627:9:627:23 | return ... | main.rs:626:5:628:5 | exit fn my_get (normal) | return | -| main.rs:627:9:627:24 | ExprStmt | main.rs:627:16:627:19 | self | | -| main.rs:627:16:627:19 | self | main.rs:627:16:627:23 | self.val | | -| main.rs:627:16:627:23 | self.val | main.rs:627:9:627:23 | return ... | | -| main.rs:630:5:632:5 | enter fn id | main.rs:630:11:630:14 | self | | -| main.rs:630:5:632:5 | exit fn id (normal) | main.rs:630:5:632:5 | exit fn id | | -| main.rs:630:11:630:14 | SelfParam | main.rs:631:9:631:12 | self | | -| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | SelfParam | | -| main.rs:630:25:632:5 | { ... } | main.rs:630:5:632:5 | exit fn id (normal) | | -| main.rs:631:9:631:12 | self | main.rs:630:25:632:5 | { ... } | | -| main.rs:634:5:641:5 | enter fn my_method | main.rs:634:23:634:26 | self | | -| main.rs:634:5:641:5 | exit fn my_method (normal) | main.rs:634:5:641:5 | exit fn my_method | | -| main.rs:634:18:634:26 | SelfParam | main.rs:635:9:638:10 | let ... = ... | | -| main.rs:634:23:634:26 | self | main.rs:634:18:634:26 | SelfParam | | -| main.rs:634:29:641:5 | { ... } | main.rs:634:5:641:5 | exit fn my_method (normal) | | -| main.rs:635:9:638:10 | let ... = ... | main.rs:635:21:638:9 | \|...\| ... | | -| main.rs:635:13:635:17 | mut f | main.rs:639:9:639:13 | ExprStmt | match | -| main.rs:635:17:635:17 | f | main.rs:635:13:635:17 | mut f | | -| main.rs:635:21:638:9 | \|...\| ... | main.rs:635:17:635:17 | f | | -| main.rs:635:21:638:9 | enter \|...\| ... | main.rs:635:22:635:22 | n | | -| main.rs:635:21:638:9 | exit \|...\| ... (normal) | main.rs:635:21:638:9 | exit \|...\| ... | | -| main.rs:635:22:635:22 | ... | main.rs:637:13:637:26 | ExprStmt | | -| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | ... | match | -| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | | -| main.rs:635:25:638:9 | { ... } | main.rs:635:21:638:9 | exit \|...\| ... (normal) | | -| main.rs:637:13:637:16 | self | main.rs:637:13:637:20 | self.val | | -| main.rs:637:13:637:20 | self.val | main.rs:637:25:637:25 | n | | -| main.rs:637:13:637:25 | ... += ... | main.rs:635:25:638:9 | { ... } | | -| main.rs:637:13:637:26 | ExprStmt | main.rs:637:13:637:16 | self | | -| main.rs:637:25:637:25 | n | main.rs:637:13:637:25 | ... += ... | | -| main.rs:639:9:639:9 | f | main.rs:639:11:639:11 | 3 | | -| main.rs:639:9:639:12 | f(...) | main.rs:640:9:640:13 | ExprStmt | | -| main.rs:639:9:639:13 | ExprStmt | main.rs:639:9:639:9 | f | | -| main.rs:639:11:639:11 | 3 | main.rs:639:9:639:12 | f(...) | | -| main.rs:640:9:640:9 | f | main.rs:640:11:640:11 | 4 | | -| main.rs:640:9:640:12 | f(...) | main.rs:634:29:641:5 | { ... } | | -| main.rs:640:9:640:13 | ExprStmt | main.rs:640:9:640:9 | f | | -| main.rs:640:11:640:11 | 4 | main.rs:640:9:640:12 | f(...) | | -| main.rs:644:1:651:1 | enter fn structs | main.rs:645:5:645:36 | let ... = ... | | -| main.rs:644:1:651:1 | exit fn structs (normal) | main.rs:644:1:651:1 | exit fn structs | | -| main.rs:644:14:651:1 | { ... } | main.rs:644:1:651:1 | exit fn structs (normal) | | -| main.rs:645:5:645:36 | let ... = ... | main.rs:645:33:645:33 | 1 | | -| main.rs:645:9:645:13 | mut a | main.rs:646:5:646:26 | ExprStmt | match | -| main.rs:645:13:645:13 | a | main.rs:645:9:645:13 | mut a | | -| main.rs:645:17:645:35 | MyStruct {...} | main.rs:645:13:645:13 | a | | -| main.rs:645:33:645:33 | 1 | main.rs:645:17:645:35 | MyStruct {...} | | -| main.rs:646:5:646:13 | print_i64 | main.rs:646:15:646:15 | a | | -| main.rs:646:5:646:25 | print_i64(...) | main.rs:647:5:647:14 | ExprStmt | | -| main.rs:646:5:646:26 | ExprStmt | main.rs:646:5:646:13 | print_i64 | | -| main.rs:646:15:646:15 | a | main.rs:646:15:646:24 | a.my_get() | | -| main.rs:646:15:646:24 | a.my_get() | main.rs:646:5:646:25 | print_i64(...) | | -| main.rs:647:5:647:5 | a | main.rs:647:5:647:9 | a.val | | -| main.rs:647:5:647:9 | a.val | main.rs:647:13:647:13 | 5 | | -| main.rs:647:5:647:13 | ... = ... | main.rs:648:5:648:26 | ExprStmt | | -| main.rs:647:5:647:14 | ExprStmt | main.rs:647:5:647:5 | a | | -| main.rs:647:13:647:13 | 5 | main.rs:647:5:647:13 | ... = ... | | +| main.rs:618:12:620:5 | { ... } | main.rs:615:13:620:5 | if b2 {...} else {...} | | +| main.rs:619:9:619:17 | print_i64 | main.rs:619:19:619:19 | x | | +| main.rs:619:9:619:20 | print_i64(...) | main.rs:618:12:620:5 | { ... } | | +| main.rs:619:9:619:21 | ExprStmt | main.rs:619:9:619:17 | print_i64 | | +| main.rs:619:19:619:19 | x | main.rs:619:9:619:20 | print_i64(...) | | +| main.rs:628:5:630:5 | enter fn my_get | main.rs:628:20:628:23 | self | | +| main.rs:628:5:630:5 | exit fn my_get (normal) | main.rs:628:5:630:5 | exit fn my_get | | +| main.rs:628:15:628:23 | SelfParam | main.rs:629:9:629:24 | ExprStmt | | +| main.rs:628:20:628:23 | self | main.rs:628:15:628:23 | SelfParam | | +| main.rs:629:9:629:23 | return ... | main.rs:628:5:630:5 | exit fn my_get (normal) | return | +| main.rs:629:9:629:24 | ExprStmt | main.rs:629:16:629:19 | self | | +| main.rs:629:16:629:19 | self | main.rs:629:16:629:23 | self.val | | +| main.rs:629:16:629:23 | self.val | main.rs:629:9:629:23 | return ... | | +| main.rs:632:5:634:5 | enter fn id | main.rs:632:11:632:14 | self | | +| main.rs:632:5:634:5 | exit fn id (normal) | main.rs:632:5:634:5 | exit fn id | | +| main.rs:632:11:632:14 | SelfParam | main.rs:633:9:633:12 | self | | +| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | SelfParam | | +| main.rs:632:25:634:5 | { ... } | main.rs:632:5:634:5 | exit fn id (normal) | | +| main.rs:633:9:633:12 | self | main.rs:632:25:634:5 | { ... } | | +| main.rs:636:5:643:5 | enter fn my_method | main.rs:636:23:636:26 | self | | +| main.rs:636:5:643:5 | exit fn my_method (normal) | main.rs:636:5:643:5 | exit fn my_method | | +| main.rs:636:18:636:26 | SelfParam | main.rs:637:9:640:10 | let ... = ... | | +| main.rs:636:23:636:26 | self | main.rs:636:18:636:26 | SelfParam | | +| main.rs:636:29:643:5 | { ... } | main.rs:636:5:643:5 | exit fn my_method (normal) | | +| main.rs:637:9:640:10 | let ... = ... | main.rs:637:21:640:9 | \|...\| ... | | +| main.rs:637:13:637:17 | mut f | main.rs:641:9:641:13 | ExprStmt | match | +| main.rs:637:17:637:17 | f | main.rs:637:13:637:17 | mut f | | +| main.rs:637:21:640:9 | \|...\| ... | main.rs:637:17:637:17 | f | | +| main.rs:637:21:640:9 | enter \|...\| ... | main.rs:637:22:637:22 | n | | +| main.rs:637:21:640:9 | exit \|...\| ... (normal) | main.rs:637:21:640:9 | exit \|...\| ... | | +| main.rs:637:22:637:22 | ... | main.rs:639:13:639:26 | ExprStmt | | +| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | ... | match | +| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | | +| main.rs:637:25:640:9 | { ... } | main.rs:637:21:640:9 | exit \|...\| ... (normal) | | +| main.rs:639:13:639:16 | self | main.rs:639:13:639:20 | self.val | | +| main.rs:639:13:639:20 | self.val | main.rs:639:25:639:25 | n | | +| main.rs:639:13:639:25 | ... += ... | main.rs:637:25:640:9 | { ... } | | +| main.rs:639:13:639:26 | ExprStmt | main.rs:639:13:639:16 | self | | +| main.rs:639:25:639:25 | n | main.rs:639:13:639:25 | ... += ... | | +| main.rs:641:9:641:9 | f | main.rs:641:11:641:11 | 3 | | +| main.rs:641:9:641:12 | f(...) | main.rs:642:9:642:13 | ExprStmt | | +| main.rs:641:9:641:13 | ExprStmt | main.rs:641:9:641:9 | f | | +| main.rs:641:11:641:11 | 3 | main.rs:641:9:641:12 | f(...) | | +| main.rs:642:9:642:9 | f | main.rs:642:11:642:11 | 4 | | +| main.rs:642:9:642:12 | f(...) | main.rs:636:29:643:5 | { ... } | | +| main.rs:642:9:642:13 | ExprStmt | main.rs:642:9:642:9 | f | | +| main.rs:642:11:642:11 | 4 | main.rs:642:9:642:12 | f(...) | | +| main.rs:646:1:653:1 | enter fn structs | main.rs:647:5:647:36 | let ... = ... | | +| main.rs:646:1:653:1 | exit fn structs (normal) | main.rs:646:1:653:1 | exit fn structs | | +| main.rs:646:14:653:1 | { ... } | main.rs:646:1:653:1 | exit fn structs (normal) | | +| main.rs:647:5:647:36 | let ... = ... | main.rs:647:33:647:33 | 1 | | +| main.rs:647:9:647:13 | mut a | main.rs:648:5:648:26 | ExprStmt | match | +| main.rs:647:13:647:13 | a | main.rs:647:9:647:13 | mut a | | +| main.rs:647:17:647:35 | MyStruct {...} | main.rs:647:13:647:13 | a | | +| main.rs:647:33:647:33 | 1 | main.rs:647:17:647:35 | MyStruct {...} | | | main.rs:648:5:648:13 | print_i64 | main.rs:648:15:648:15 | a | | -| main.rs:648:5:648:25 | print_i64(...) | main.rs:649:5:649:28 | ExprStmt | | +| main.rs:648:5:648:25 | print_i64(...) | main.rs:649:5:649:14 | ExprStmt | | | main.rs:648:5:648:26 | ExprStmt | main.rs:648:5:648:13 | print_i64 | | | main.rs:648:15:648:15 | a | main.rs:648:15:648:24 | a.my_get() | | | main.rs:648:15:648:24 | a.my_get() | main.rs:648:5:648:25 | print_i64(...) | | -| main.rs:649:5:649:5 | a | main.rs:649:25:649:25 | 2 | | -| main.rs:649:5:649:27 | ... = ... | main.rs:650:5:650:26 | ExprStmt | | -| main.rs:649:5:649:28 | ExprStmt | main.rs:649:5:649:5 | a | | -| main.rs:649:9:649:27 | MyStruct {...} | main.rs:649:5:649:27 | ... = ... | | -| main.rs:649:25:649:25 | 2 | main.rs:649:9:649:27 | MyStruct {...} | | +| main.rs:649:5:649:5 | a | main.rs:649:5:649:9 | a.val | | +| main.rs:649:5:649:9 | a.val | main.rs:649:13:649:13 | 5 | | +| main.rs:649:5:649:13 | ... = ... | main.rs:650:5:650:26 | ExprStmt | | +| main.rs:649:5:649:14 | ExprStmt | main.rs:649:5:649:5 | a | | +| main.rs:649:13:649:13 | 5 | main.rs:649:5:649:13 | ... = ... | | | main.rs:650:5:650:13 | print_i64 | main.rs:650:15:650:15 | a | | -| main.rs:650:5:650:25 | print_i64(...) | main.rs:644:14:651:1 | { ... } | | +| main.rs:650:5:650:25 | print_i64(...) | main.rs:651:5:651:28 | ExprStmt | | | main.rs:650:5:650:26 | ExprStmt | main.rs:650:5:650:13 | print_i64 | | | main.rs:650:15:650:15 | a | main.rs:650:15:650:24 | a.my_get() | | | main.rs:650:15:650:24 | a.my_get() | main.rs:650:5:650:25 | print_i64(...) | | -| main.rs:653:1:660:1 | enter fn arrays | main.rs:654:5:654:26 | let ... = ... | | -| main.rs:653:1:660:1 | exit fn arrays (normal) | main.rs:653:1:660:1 | exit fn arrays | | -| main.rs:653:13:660:1 | { ... } | main.rs:653:1:660:1 | exit fn arrays (normal) | | -| main.rs:654:5:654:26 | let ... = ... | main.rs:654:18:654:18 | 1 | | -| main.rs:654:9:654:13 | mut a | main.rs:655:5:655:20 | ExprStmt | match | -| main.rs:654:13:654:13 | a | main.rs:654:9:654:13 | mut a | | -| main.rs:654:17:654:25 | [...] | main.rs:654:13:654:13 | a | | -| main.rs:654:18:654:18 | 1 | main.rs:654:21:654:21 | 2 | | -| main.rs:654:21:654:21 | 2 | main.rs:654:24:654:24 | 3 | | -| main.rs:654:24:654:24 | 3 | main.rs:654:17:654:25 | [...] | | -| main.rs:655:5:655:13 | print_i64 | main.rs:655:15:655:15 | a | | -| main.rs:655:5:655:19 | print_i64(...) | main.rs:656:5:656:13 | ExprStmt | | -| main.rs:655:5:655:20 | ExprStmt | main.rs:655:5:655:13 | print_i64 | | -| main.rs:655:15:655:15 | a | main.rs:655:17:655:17 | 0 | | -| main.rs:655:15:655:18 | a[0] | main.rs:655:5:655:19 | print_i64(...) | | -| main.rs:655:17:655:17 | 0 | main.rs:655:15:655:18 | a[0] | | -| main.rs:656:5:656:5 | a | main.rs:656:7:656:7 | 1 | | -| main.rs:656:5:656:8 | a[1] | main.rs:656:12:656:12 | 5 | | -| main.rs:656:5:656:12 | ... = ... | main.rs:657:5:657:20 | ExprStmt | | -| main.rs:656:5:656:13 | ExprStmt | main.rs:656:5:656:5 | a | | -| main.rs:656:7:656:7 | 1 | main.rs:656:5:656:8 | a[1] | | -| main.rs:656:12:656:12 | 5 | main.rs:656:5:656:12 | ... = ... | | +| main.rs:651:5:651:5 | a | main.rs:651:25:651:25 | 2 | | +| main.rs:651:5:651:27 | ... = ... | main.rs:652:5:652:26 | ExprStmt | | +| main.rs:651:5:651:28 | ExprStmt | main.rs:651:5:651:5 | a | | +| main.rs:651:9:651:27 | MyStruct {...} | main.rs:651:5:651:27 | ... = ... | | +| main.rs:651:25:651:25 | 2 | main.rs:651:9:651:27 | MyStruct {...} | | +| main.rs:652:5:652:13 | print_i64 | main.rs:652:15:652:15 | a | | +| main.rs:652:5:652:25 | print_i64(...) | main.rs:646:14:653:1 | { ... } | | +| main.rs:652:5:652:26 | ExprStmt | main.rs:652:5:652:13 | print_i64 | | +| main.rs:652:15:652:15 | a | main.rs:652:15:652:24 | a.my_get() | | +| main.rs:652:15:652:24 | a.my_get() | main.rs:652:5:652:25 | print_i64(...) | | +| main.rs:655:1:662:1 | enter fn arrays | main.rs:656:5:656:26 | let ... = ... | | +| main.rs:655:1:662:1 | exit fn arrays (normal) | main.rs:655:1:662:1 | exit fn arrays | | +| main.rs:655:13:662:1 | { ... } | main.rs:655:1:662:1 | exit fn arrays (normal) | | +| main.rs:656:5:656:26 | let ... = ... | main.rs:656:18:656:18 | 1 | | +| main.rs:656:9:656:13 | mut a | main.rs:657:5:657:20 | ExprStmt | match | +| main.rs:656:13:656:13 | a | main.rs:656:9:656:13 | mut a | | +| main.rs:656:17:656:25 | [...] | main.rs:656:13:656:13 | a | | +| main.rs:656:18:656:18 | 1 | main.rs:656:21:656:21 | 2 | | +| main.rs:656:21:656:21 | 2 | main.rs:656:24:656:24 | 3 | | +| main.rs:656:24:656:24 | 3 | main.rs:656:17:656:25 | [...] | | | main.rs:657:5:657:13 | print_i64 | main.rs:657:15:657:15 | a | | -| main.rs:657:5:657:19 | print_i64(...) | main.rs:658:5:658:18 | ExprStmt | | +| main.rs:657:5:657:19 | print_i64(...) | main.rs:658:5:658:13 | ExprStmt | | | main.rs:657:5:657:20 | ExprStmt | main.rs:657:5:657:13 | print_i64 | | -| main.rs:657:15:657:15 | a | main.rs:657:17:657:17 | 1 | | -| main.rs:657:15:657:18 | a[1] | main.rs:657:5:657:19 | print_i64(...) | | -| main.rs:657:17:657:17 | 1 | main.rs:657:15:657:18 | a[1] | | -| main.rs:658:5:658:5 | a | main.rs:658:10:658:10 | 4 | | -| main.rs:658:5:658:17 | ... = ... | main.rs:659:5:659:20 | ExprStmt | | -| main.rs:658:5:658:18 | ExprStmt | main.rs:658:5:658:5 | a | | -| main.rs:658:9:658:17 | [...] | main.rs:658:5:658:17 | ... = ... | | -| main.rs:658:10:658:10 | 4 | main.rs:658:13:658:13 | 5 | | -| main.rs:658:13:658:13 | 5 | main.rs:658:16:658:16 | 6 | | -| main.rs:658:16:658:16 | 6 | main.rs:658:9:658:17 | [...] | | +| main.rs:657:15:657:15 | a | main.rs:657:17:657:17 | 0 | | +| main.rs:657:15:657:18 | a[0] | main.rs:657:5:657:19 | print_i64(...) | | +| main.rs:657:17:657:17 | 0 | main.rs:657:15:657:18 | a[0] | | +| main.rs:658:5:658:5 | a | main.rs:658:7:658:7 | 1 | | +| main.rs:658:5:658:8 | a[1] | main.rs:658:12:658:12 | 5 | | +| main.rs:658:5:658:12 | ... = ... | main.rs:659:5:659:20 | ExprStmt | | +| main.rs:658:5:658:13 | ExprStmt | main.rs:658:5:658:5 | a | | +| main.rs:658:7:658:7 | 1 | main.rs:658:5:658:8 | a[1] | | +| main.rs:658:12:658:12 | 5 | main.rs:658:5:658:12 | ... = ... | | | main.rs:659:5:659:13 | print_i64 | main.rs:659:15:659:15 | a | | -| main.rs:659:5:659:19 | print_i64(...) | main.rs:653:13:660:1 | { ... } | | +| main.rs:659:5:659:19 | print_i64(...) | main.rs:660:5:660:18 | ExprStmt | | | main.rs:659:5:659:20 | ExprStmt | main.rs:659:5:659:13 | print_i64 | | -| main.rs:659:15:659:15 | a | main.rs:659:17:659:17 | 2 | | -| main.rs:659:15:659:18 | a[2] | main.rs:659:5:659:19 | print_i64(...) | | -| main.rs:659:17:659:17 | 2 | main.rs:659:15:659:18 | a[2] | | -| main.rs:662:1:669:1 | enter fn ref_arg | main.rs:663:5:663:15 | let ... = 16 | | -| main.rs:662:1:669:1 | exit fn ref_arg (normal) | main.rs:662:1:669:1 | exit fn ref_arg | | -| main.rs:662:14:669:1 | { ... } | main.rs:662:1:669:1 | exit fn ref_arg (normal) | | -| main.rs:663:5:663:15 | let ... = 16 | main.rs:663:13:663:14 | 16 | | -| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | | -| main.rs:663:9:663:9 | x | main.rs:664:5:664:22 | ExprStmt | match | -| main.rs:663:13:663:14 | 16 | main.rs:663:9:663:9 | x | | -| main.rs:664:5:664:17 | print_i64_ref | main.rs:664:20:664:20 | x | | -| main.rs:664:5:664:21 | print_i64_ref(...) | main.rs:665:5:665:17 | ExprStmt | | -| main.rs:664:5:664:22 | ExprStmt | main.rs:664:5:664:17 | print_i64_ref | | -| main.rs:664:19:664:20 | &x | main.rs:664:5:664:21 | print_i64_ref(...) | | -| main.rs:664:20:664:20 | x | main.rs:664:19:664:20 | &x | | -| main.rs:665:5:665:13 | print_i64 | main.rs:665:15:665:15 | x | | -| main.rs:665:5:665:16 | print_i64(...) | main.rs:667:5:667:15 | let ... = 17 | | -| main.rs:665:5:665:17 | ExprStmt | main.rs:665:5:665:13 | print_i64 | | -| main.rs:665:15:665:15 | x | main.rs:665:5:665:16 | print_i64(...) | | -| main.rs:667:5:667:15 | let ... = 17 | main.rs:667:13:667:14 | 17 | | -| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | | -| main.rs:667:9:667:9 | z | main.rs:668:5:668:22 | ExprStmt | match | -| main.rs:667:13:667:14 | 17 | main.rs:667:9:667:9 | z | | -| main.rs:668:5:668:17 | print_i64_ref | main.rs:668:20:668:20 | z | | -| main.rs:668:5:668:21 | print_i64_ref(...) | main.rs:662:14:669:1 | { ... } | | -| main.rs:668:5:668:22 | ExprStmt | main.rs:668:5:668:17 | print_i64_ref | | -| main.rs:668:19:668:20 | &z | main.rs:668:5:668:21 | print_i64_ref(...) | | -| main.rs:668:20:668:20 | z | main.rs:668:19:668:20 | &z | | -| main.rs:676:5:678:5 | enter fn bar | main.rs:676:17:676:20 | self | | -| main.rs:676:5:678:5 | exit fn bar (normal) | main.rs:676:5:678:5 | exit fn bar | | -| main.rs:676:12:676:20 | SelfParam | main.rs:677:9:677:36 | ExprStmt | | -| main.rs:676:17:676:20 | self | main.rs:676:12:676:20 | SelfParam | | -| main.rs:676:23:678:5 | { ... } | main.rs:676:5:678:5 | exit fn bar (normal) | | -| main.rs:677:9:677:13 | * ... | main.rs:677:33:677:33 | 3 | | -| main.rs:677:9:677:35 | ... = ... | main.rs:676:23:678:5 | { ... } | | -| main.rs:677:9:677:36 | ExprStmt | main.rs:677:10:677:13 | self | | -| main.rs:677:10:677:13 | self | main.rs:677:9:677:13 | * ... | | -| main.rs:677:17:677:35 | MyStruct {...} | main.rs:677:9:677:35 | ... = ... | | -| main.rs:677:33:677:33 | 3 | main.rs:677:17:677:35 | MyStruct {...} | | -| main.rs:681:1:687:1 | enter fn ref_methodcall_receiver | main.rs:682:5:682:36 | let ... = ... | | -| main.rs:681:1:687:1 | exit fn ref_methodcall_receiver (normal) | main.rs:681:1:687:1 | exit fn ref_methodcall_receiver | | -| main.rs:681:30:687:1 | { ... } | main.rs:681:1:687:1 | exit fn ref_methodcall_receiver (normal) | | -| main.rs:682:5:682:36 | let ... = ... | main.rs:682:33:682:33 | 1 | | -| main.rs:682:9:682:13 | mut a | main.rs:683:5:683:12 | ExprStmt | match | -| main.rs:682:13:682:13 | a | main.rs:682:9:682:13 | mut a | | -| main.rs:682:17:682:35 | MyStruct {...} | main.rs:682:13:682:13 | a | | -| main.rs:682:33:682:33 | 1 | main.rs:682:17:682:35 | MyStruct {...} | | -| main.rs:683:5:683:5 | a | main.rs:683:5:683:11 | a.bar() | | -| main.rs:683:5:683:11 | a.bar() | main.rs:686:5:686:21 | ExprStmt | | -| main.rs:683:5:683:12 | ExprStmt | main.rs:683:5:683:5 | a | | -| main.rs:686:5:686:13 | print_i64 | main.rs:686:15:686:15 | a | | -| main.rs:686:5:686:20 | print_i64(...) | main.rs:681:30:687:1 | { ... } | | -| main.rs:686:5:686:21 | ExprStmt | main.rs:686:5:686:13 | print_i64 | | -| main.rs:686:15:686:15 | a | main.rs:686:15:686:19 | a.val | | -| main.rs:686:15:686:19 | a.val | main.rs:686:5:686:20 | print_i64(...) | | -| main.rs:703:1:714:1 | enter fn macro_invocation | main.rs:704:5:705:26 | let ... = ... | | -| main.rs:703:1:714:1 | exit fn macro_invocation (normal) | main.rs:703:1:714:1 | exit fn macro_invocation | | -| main.rs:703:23:714:1 | { ... } | main.rs:703:1:714:1 | exit fn macro_invocation (normal) | | -| main.rs:704:5:705:26 | let ... = ... | main.rs:705:23:705:24 | let ... = 37 | | -| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | | -| main.rs:704:9:704:22 | var_from_macro | main.rs:706:5:706:30 | ExprStmt | match | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | match | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:23:705:24 | { ... } | | -| main.rs:705:9:705:25 | MacroExpr | main.rs:704:9:704:22 | var_from_macro | | -| main.rs:705:9:705:25 | let_in_macro!... | main.rs:705:9:705:25 | MacroExpr | | -| main.rs:705:23:705:24 | 37 | main.rs:705:9:705:21 | var_in_macro | | -| main.rs:705:23:705:24 | let ... = 37 | main.rs:705:23:705:24 | 37 | | -| main.rs:705:23:705:24 | { ... } | main.rs:705:9:705:25 | let_in_macro!... | | -| main.rs:706:5:706:13 | print_i64 | main.rs:706:15:706:28 | var_from_macro | | -| main.rs:706:5:706:29 | print_i64(...) | main.rs:707:5:707:26 | let ... = 33 | | -| main.rs:706:5:706:30 | ExprStmt | main.rs:706:5:706:13 | print_i64 | | -| main.rs:706:15:706:28 | var_from_macro | main.rs:706:5:706:29 | print_i64(...) | | -| main.rs:707:5:707:26 | let ... = 33 | main.rs:707:24:707:25 | 33 | | -| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | | -| main.rs:707:9:707:20 | var_in_macro | main.rs:712:5:712:44 | ExprStmt | match | -| main.rs:707:24:707:25 | 33 | main.rs:707:9:707:20 | var_in_macro | | -| main.rs:712:5:712:13 | print_i64 | main.rs:712:15:712:28 | let ... = 0 | | -| main.rs:712:5:712:43 | print_i64(...) | main.rs:713:5:713:28 | ExprStmt | | -| main.rs:712:5:712:44 | ExprStmt | main.rs:712:5:712:13 | print_i64 | | -| main.rs:712:15:712:28 | 0 | main.rs:712:15:712:28 | var_in_macro | | -| main.rs:712:15:712:28 | let ... = 0 | main.rs:712:15:712:28 | 0 | | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:30:712:41 | var_in_macro | match | -| main.rs:712:15:712:42 | MacroExpr | main.rs:712:5:712:43 | print_i64(...) | | -| main.rs:712:15:712:42 | let_in_macro2!... | main.rs:712:15:712:42 | MacroExpr | | -| main.rs:712:30:712:41 | var_in_macro | main.rs:712:30:712:41 | { ... } | | -| main.rs:712:30:712:41 | { ... } | main.rs:712:15:712:42 | let_in_macro2!... | | -| main.rs:713:5:713:13 | print_i64 | main.rs:713:15:713:26 | var_in_macro | | -| main.rs:713:5:713:27 | print_i64(...) | main.rs:703:23:714:1 | { ... } | | -| main.rs:713:5:713:28 | ExprStmt | main.rs:713:5:713:13 | print_i64 | | -| main.rs:713:15:713:26 | var_in_macro | main.rs:713:5:713:27 | print_i64(...) | | -| main.rs:716:1:720:1 | enter fn let_without_initializer | main.rs:717:5:717:10 | let ... | | -| main.rs:716:1:720:1 | exit fn let_without_initializer (normal) | main.rs:716:1:720:1 | exit fn let_without_initializer | | -| main.rs:716:30:720:1 | { ... } | main.rs:716:1:720:1 | exit fn let_without_initializer (normal) | | -| main.rs:717:5:717:10 | let ... | main.rs:717:9:717:9 | x | | -| main.rs:717:9:717:9 | x | main.rs:717:9:717:9 | x | | -| main.rs:717:9:717:9 | x | main.rs:718:5:718:10 | ExprStmt | match | -| main.rs:718:5:718:5 | x | main.rs:718:9:718:9 | 1 | | -| main.rs:718:5:718:9 | ... = ... | main.rs:719:5:719:17 | ExprStmt | | -| main.rs:718:5:718:10 | ExprStmt | main.rs:718:5:718:5 | x | | -| main.rs:718:9:718:9 | 1 | main.rs:718:5:718:9 | ... = ... | | -| main.rs:719:5:719:13 | print_i64 | main.rs:719:15:719:15 | x | | -| main.rs:719:5:719:16 | print_i64(...) | main.rs:716:30:720:1 | { ... } | | -| main.rs:719:5:719:17 | ExprStmt | main.rs:719:5:719:13 | print_i64 | | -| main.rs:719:15:719:15 | x | main.rs:719:5:719:16 | print_i64(...) | | -| main.rs:722:1:732:1 | enter fn capture_phi | main.rs:723:5:723:20 | let ... = 100 | | -| main.rs:722:1:732:1 | exit fn capture_phi (normal) | main.rs:722:1:732:1 | exit fn capture_phi | | -| main.rs:722:18:732:1 | { ... } | main.rs:722:1:732:1 | exit fn capture_phi (normal) | | -| main.rs:723:5:723:20 | let ... = 100 | main.rs:723:17:723:19 | 100 | | -| main.rs:723:9:723:13 | mut x | main.rs:724:5:729:6 | let ... = ... | match | -| main.rs:723:13:723:13 | x | main.rs:723:9:723:13 | mut x | | -| main.rs:723:17:723:19 | 100 | main.rs:723:13:723:13 | x | | -| main.rs:724:5:729:6 | let ... = ... | main.rs:724:19:729:5 | \|...\| ... | | -| main.rs:724:9:724:15 | mut cap | main.rs:730:5:730:14 | ExprStmt | match | -| main.rs:724:13:724:15 | cap | main.rs:724:9:724:15 | mut cap | | -| main.rs:724:19:729:5 | \|...\| ... | main.rs:724:13:724:15 | cap | | -| main.rs:724:19:729:5 | enter \|...\| ... | main.rs:724:20:724:20 | b | | -| main.rs:724:19:729:5 | exit \|...\| ... (normal) | main.rs:724:19:729:5 | exit \|...\| ... | | -| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | | -| main.rs:724:20:724:20 | b | main.rs:724:20:724:26 | ...: bool | match | -| main.rs:724:20:724:26 | ...: bool | main.rs:725:9:728:10 | let _ = ... | | -| main.rs:724:29:729:5 | { ... } | main.rs:724:19:729:5 | exit \|...\| ... (normal) | | -| main.rs:725:9:728:10 | let _ = ... | main.rs:726:20:726:20 | b | | -| main.rs:726:13:726:13 | _ | main.rs:724:29:729:5 | { ... } | match | -| main.rs:726:17:728:9 | if b {...} | main.rs:726:13:726:13 | _ | | -| main.rs:726:20:726:20 | b | main.rs:726:17:728:9 | if b {...} | false | -| main.rs:726:20:726:20 | b | main.rs:727:13:727:20 | ExprStmt | true | -| main.rs:726:22:728:9 | { ... } | main.rs:726:17:728:9 | if b {...} | | -| main.rs:727:13:727:13 | x | main.rs:727:17:727:19 | 200 | | -| main.rs:727:13:727:19 | ... = ... | main.rs:726:22:728:9 | { ... } | | -| main.rs:727:13:727:20 | ExprStmt | main.rs:727:13:727:13 | x | | -| main.rs:727:17:727:19 | 200 | main.rs:727:13:727:19 | ... = ... | | -| main.rs:730:5:730:7 | cap | main.rs:730:9:730:12 | true | | -| main.rs:730:5:730:13 | cap(...) | main.rs:731:5:731:17 | ExprStmt | | -| main.rs:730:5:730:14 | ExprStmt | main.rs:730:5:730:7 | cap | | -| main.rs:730:9:730:12 | true | main.rs:730:5:730:13 | cap(...) | | -| main.rs:731:5:731:13 | print_i64 | main.rs:731:15:731:15 | x | | -| main.rs:731:5:731:16 | print_i64(...) | main.rs:722:18:732:1 | { ... } | | -| main.rs:731:5:731:17 | ExprStmt | main.rs:731:5:731:13 | print_i64 | | -| main.rs:731:15:731:15 | x | main.rs:731:5:731:16 | print_i64(...) | | -| main.rs:734:1:776:1 | enter fn main | main.rs:735:5:735:25 | ExprStmt | | -| main.rs:734:1:776:1 | exit fn main (normal) | main.rs:734:1:776:1 | exit fn main | | -| main.rs:734:11:776:1 | { ... } | main.rs:734:1:776:1 | exit fn main (normal) | | -| main.rs:735:5:735:22 | immutable_variable | main.rs:735:5:735:24 | immutable_variable(...) | | -| main.rs:735:5:735:24 | immutable_variable(...) | main.rs:736:5:736:23 | ExprStmt | | -| main.rs:735:5:735:25 | ExprStmt | main.rs:735:5:735:22 | immutable_variable | | -| main.rs:736:5:736:20 | mutable_variable | main.rs:736:5:736:22 | mutable_variable(...) | | -| main.rs:736:5:736:22 | mutable_variable(...) | main.rs:737:5:737:40 | ExprStmt | | -| main.rs:736:5:736:23 | ExprStmt | main.rs:736:5:736:20 | mutable_variable | | -| main.rs:737:5:737:37 | mutable_variable_immutable_borrow | main.rs:737:5:737:39 | mutable_variable_immutable_borrow(...) | | -| main.rs:737:5:737:39 | mutable_variable_immutable_borrow(...) | main.rs:738:5:738:23 | ExprStmt | | -| main.rs:737:5:737:40 | ExprStmt | main.rs:737:5:737:37 | mutable_variable_immutable_borrow | | -| main.rs:738:5:738:20 | variable_shadow1 | main.rs:738:5:738:22 | variable_shadow1(...) | | -| main.rs:738:5:738:22 | variable_shadow1(...) | main.rs:739:5:739:23 | ExprStmt | | -| main.rs:738:5:738:23 | ExprStmt | main.rs:738:5:738:20 | variable_shadow1 | | -| main.rs:739:5:739:20 | variable_shadow2 | main.rs:739:5:739:22 | variable_shadow2(...) | | -| main.rs:739:5:739:22 | variable_shadow2(...) | main.rs:740:5:740:19 | ExprStmt | | -| main.rs:739:5:739:23 | ExprStmt | main.rs:739:5:739:20 | variable_shadow2 | | -| main.rs:740:5:740:16 | let_pattern1 | main.rs:740:5:740:18 | let_pattern1(...) | | -| main.rs:740:5:740:18 | let_pattern1(...) | main.rs:741:5:741:19 | ExprStmt | | -| main.rs:740:5:740:19 | ExprStmt | main.rs:740:5:740:16 | let_pattern1 | | -| main.rs:741:5:741:16 | let_pattern2 | main.rs:741:5:741:18 | let_pattern2(...) | | -| main.rs:741:5:741:18 | let_pattern2(...) | main.rs:742:5:742:19 | ExprStmt | | -| main.rs:741:5:741:19 | ExprStmt | main.rs:741:5:741:16 | let_pattern2 | | -| main.rs:742:5:742:16 | let_pattern3 | main.rs:742:5:742:18 | let_pattern3(...) | | -| main.rs:742:5:742:18 | let_pattern3(...) | main.rs:743:5:743:19 | ExprStmt | | -| main.rs:742:5:742:19 | ExprStmt | main.rs:742:5:742:16 | let_pattern3 | | -| main.rs:743:5:743:16 | let_pattern4 | main.rs:743:5:743:18 | let_pattern4(...) | | -| main.rs:743:5:743:18 | let_pattern4(...) | main.rs:744:5:744:21 | ExprStmt | | -| main.rs:743:5:743:19 | ExprStmt | main.rs:743:5:743:16 | let_pattern4 | | -| main.rs:744:5:744:18 | match_pattern1 | main.rs:744:5:744:20 | match_pattern1(...) | | -| main.rs:744:5:744:20 | match_pattern1(...) | main.rs:745:5:745:21 | ExprStmt | | -| main.rs:744:5:744:21 | ExprStmt | main.rs:744:5:744:18 | match_pattern1 | | -| main.rs:745:5:745:18 | match_pattern2 | main.rs:745:5:745:20 | match_pattern2(...) | | -| main.rs:745:5:745:20 | match_pattern2(...) | main.rs:746:5:746:21 | ExprStmt | | -| main.rs:745:5:745:21 | ExprStmt | main.rs:745:5:745:18 | match_pattern2 | | -| main.rs:746:5:746:18 | match_pattern3 | main.rs:746:5:746:20 | match_pattern3(...) | | -| main.rs:746:5:746:20 | match_pattern3(...) | main.rs:747:5:747:21 | ExprStmt | | -| main.rs:746:5:746:21 | ExprStmt | main.rs:746:5:746:18 | match_pattern3 | | -| main.rs:747:5:747:18 | match_pattern4 | main.rs:747:5:747:20 | match_pattern4(...) | | -| main.rs:747:5:747:20 | match_pattern4(...) | main.rs:748:5:748:21 | ExprStmt | | -| main.rs:747:5:747:21 | ExprStmt | main.rs:747:5:747:18 | match_pattern4 | | -| main.rs:748:5:748:18 | match_pattern5 | main.rs:748:5:748:20 | match_pattern5(...) | | -| main.rs:748:5:748:20 | match_pattern5(...) | main.rs:749:5:749:21 | ExprStmt | | -| main.rs:748:5:748:21 | ExprStmt | main.rs:748:5:748:18 | match_pattern5 | | -| main.rs:749:5:749:18 | match_pattern6 | main.rs:749:5:749:20 | match_pattern6(...) | | -| main.rs:749:5:749:20 | match_pattern6(...) | main.rs:750:5:750:21 | ExprStmt | | -| main.rs:749:5:749:21 | ExprStmt | main.rs:749:5:749:18 | match_pattern6 | | -| main.rs:750:5:750:18 | match_pattern7 | main.rs:750:5:750:20 | match_pattern7(...) | | -| main.rs:750:5:750:20 | match_pattern7(...) | main.rs:751:5:751:21 | ExprStmt | | -| main.rs:750:5:750:21 | ExprStmt | main.rs:750:5:750:18 | match_pattern7 | | -| main.rs:751:5:751:18 | match_pattern8 | main.rs:751:5:751:20 | match_pattern8(...) | | -| main.rs:751:5:751:20 | match_pattern8(...) | main.rs:752:5:752:21 | ExprStmt | | -| main.rs:751:5:751:21 | ExprStmt | main.rs:751:5:751:18 | match_pattern8 | | -| main.rs:752:5:752:18 | match_pattern9 | main.rs:752:5:752:20 | match_pattern9(...) | | -| main.rs:752:5:752:20 | match_pattern9(...) | main.rs:753:5:753:22 | ExprStmt | | -| main.rs:752:5:752:21 | ExprStmt | main.rs:752:5:752:18 | match_pattern9 | | -| main.rs:753:5:753:19 | match_pattern10 | main.rs:753:5:753:21 | match_pattern10(...) | | -| main.rs:753:5:753:21 | match_pattern10(...) | main.rs:754:5:754:22 | ExprStmt | | -| main.rs:753:5:753:22 | ExprStmt | main.rs:753:5:753:19 | match_pattern10 | | -| main.rs:754:5:754:19 | match_pattern11 | main.rs:754:5:754:21 | match_pattern11(...) | | -| main.rs:754:5:754:21 | match_pattern11(...) | main.rs:755:5:755:22 | ExprStmt | | -| main.rs:754:5:754:22 | ExprStmt | main.rs:754:5:754:19 | match_pattern11 | | -| main.rs:755:5:755:19 | match_pattern12 | main.rs:755:5:755:21 | match_pattern12(...) | | -| main.rs:755:5:755:21 | match_pattern12(...) | main.rs:756:5:756:22 | ExprStmt | | -| main.rs:755:5:755:22 | ExprStmt | main.rs:755:5:755:19 | match_pattern12 | | -| main.rs:756:5:756:19 | match_pattern13 | main.rs:756:5:756:21 | match_pattern13(...) | | -| main.rs:756:5:756:21 | match_pattern13(...) | main.rs:757:5:757:22 | ExprStmt | | -| main.rs:756:5:756:22 | ExprStmt | main.rs:756:5:756:19 | match_pattern13 | | -| main.rs:757:5:757:19 | match_pattern14 | main.rs:757:5:757:21 | match_pattern14(...) | | -| main.rs:757:5:757:21 | match_pattern14(...) | main.rs:758:5:758:36 | ExprStmt | | -| main.rs:757:5:757:22 | ExprStmt | main.rs:757:5:757:19 | match_pattern14 | | -| main.rs:758:5:758:18 | param_pattern1 | main.rs:758:20:758:22 | "a" | | -| main.rs:758:5:758:35 | param_pattern1(...) | main.rs:759:5:759:37 | ExprStmt | | -| main.rs:758:5:758:36 | ExprStmt | main.rs:758:5:758:18 | param_pattern1 | | -| main.rs:758:20:758:22 | "a" | main.rs:758:26:758:28 | "b" | | -| main.rs:758:25:758:34 | TupleExpr | main.rs:758:5:758:35 | param_pattern1(...) | | -| main.rs:758:26:758:28 | "b" | main.rs:758:31:758:33 | "c" | | -| main.rs:758:31:758:33 | "c" | main.rs:758:25:758:34 | TupleExpr | | -| main.rs:759:5:759:18 | param_pattern2 | main.rs:759:20:759:31 | ...::Left | | -| main.rs:759:5:759:36 | param_pattern2(...) | main.rs:760:5:760:26 | ExprStmt | | -| main.rs:759:5:759:37 | ExprStmt | main.rs:759:5:759:18 | param_pattern2 | | -| main.rs:759:20:759:31 | ...::Left | main.rs:759:33:759:34 | 45 | | -| main.rs:759:20:759:35 | ...::Left(...) | main.rs:759:5:759:36 | param_pattern2(...) | | -| main.rs:759:33:759:34 | 45 | main.rs:759:20:759:35 | ...::Left(...) | | -| main.rs:760:5:760:23 | destruct_assignment | main.rs:760:5:760:25 | destruct_assignment(...) | | -| main.rs:760:5:760:25 | destruct_assignment(...) | main.rs:761:5:761:23 | ExprStmt | | -| main.rs:760:5:760:26 | ExprStmt | main.rs:760:5:760:23 | destruct_assignment | | -| main.rs:761:5:761:20 | closure_variable | main.rs:761:5:761:22 | closure_variable(...) | | -| main.rs:761:5:761:22 | closure_variable(...) | main.rs:762:5:762:22 | ExprStmt | | -| main.rs:761:5:761:23 | ExprStmt | main.rs:761:5:761:20 | closure_variable | | -| main.rs:762:5:762:19 | nested_function | main.rs:762:5:762:21 | nested_function(...) | | -| main.rs:762:5:762:21 | nested_function(...) | main.rs:763:5:763:19 | ExprStmt | | -| main.rs:762:5:762:22 | ExprStmt | main.rs:762:5:762:19 | nested_function | | -| main.rs:763:5:763:16 | for_variable | main.rs:763:5:763:18 | for_variable(...) | | -| main.rs:763:5:763:18 | for_variable(...) | main.rs:764:5:764:17 | ExprStmt | | -| main.rs:763:5:763:19 | ExprStmt | main.rs:763:5:763:16 | for_variable | | -| main.rs:764:5:764:14 | add_assign | main.rs:764:5:764:16 | add_assign(...) | | -| main.rs:764:5:764:16 | add_assign(...) | main.rs:765:5:765:13 | ExprStmt | | -| main.rs:764:5:764:17 | ExprStmt | main.rs:764:5:764:14 | add_assign | | -| main.rs:765:5:765:10 | mutate | main.rs:765:5:765:12 | mutate(...) | | -| main.rs:765:5:765:12 | mutate(...) | main.rs:766:5:766:17 | ExprStmt | | -| main.rs:765:5:765:13 | ExprStmt | main.rs:765:5:765:10 | mutate | | -| main.rs:766:5:766:14 | mutate_arg | main.rs:766:5:766:16 | mutate_arg(...) | | -| main.rs:766:5:766:16 | mutate_arg(...) | main.rs:767:5:767:12 | ExprStmt | | -| main.rs:766:5:766:17 | ExprStmt | main.rs:766:5:766:14 | mutate_arg | | -| main.rs:767:5:767:9 | alias | main.rs:767:5:767:11 | alias(...) | | -| main.rs:767:5:767:11 | alias(...) | main.rs:768:5:768:18 | ExprStmt | | -| main.rs:767:5:767:12 | ExprStmt | main.rs:767:5:767:9 | alias | | -| main.rs:768:5:768:15 | capture_mut | main.rs:768:5:768:17 | capture_mut(...) | | -| main.rs:768:5:768:17 | capture_mut(...) | main.rs:769:5:769:20 | ExprStmt | | -| main.rs:768:5:768:18 | ExprStmt | main.rs:768:5:768:15 | capture_mut | | -| main.rs:769:5:769:17 | capture_immut | main.rs:769:5:769:19 | capture_immut(...) | | -| main.rs:769:5:769:19 | capture_immut(...) | main.rs:770:5:770:26 | ExprStmt | | -| main.rs:769:5:769:20 | ExprStmt | main.rs:769:5:769:17 | capture_immut | | -| main.rs:770:5:770:23 | async_block_capture | main.rs:770:5:770:25 | async_block_capture(...) | | -| main.rs:770:5:770:25 | async_block_capture(...) | main.rs:771:5:771:14 | ExprStmt | | -| main.rs:770:5:770:26 | ExprStmt | main.rs:770:5:770:23 | async_block_capture | | -| main.rs:771:5:771:11 | structs | main.rs:771:5:771:13 | structs(...) | | -| main.rs:771:5:771:13 | structs(...) | main.rs:772:5:772:14 | ExprStmt | | -| main.rs:771:5:771:14 | ExprStmt | main.rs:771:5:771:11 | structs | | -| main.rs:772:5:772:11 | ref_arg | main.rs:772:5:772:13 | ref_arg(...) | | -| main.rs:772:5:772:13 | ref_arg(...) | main.rs:773:5:773:30 | ExprStmt | | -| main.rs:772:5:772:14 | ExprStmt | main.rs:772:5:772:11 | ref_arg | | -| main.rs:773:5:773:27 | ref_methodcall_receiver | main.rs:773:5:773:29 | ref_methodcall_receiver(...) | | -| main.rs:773:5:773:29 | ref_methodcall_receiver(...) | main.rs:774:5:774:23 | ExprStmt | | -| main.rs:773:5:773:30 | ExprStmt | main.rs:773:5:773:27 | ref_methodcall_receiver | | -| main.rs:774:5:774:20 | macro_invocation | main.rs:774:5:774:22 | macro_invocation(...) | | -| main.rs:774:5:774:22 | macro_invocation(...) | main.rs:775:5:775:18 | ExprStmt | | -| main.rs:774:5:774:23 | ExprStmt | main.rs:774:5:774:20 | macro_invocation | | -| main.rs:775:5:775:15 | capture_phi | main.rs:775:5:775:17 | capture_phi(...) | | -| main.rs:775:5:775:17 | capture_phi(...) | main.rs:734:11:776:1 | { ... } | | -| main.rs:775:5:775:18 | ExprStmt | main.rs:775:5:775:15 | capture_phi | | +| main.rs:659:15:659:15 | a | main.rs:659:17:659:17 | 1 | | +| main.rs:659:15:659:18 | a[1] | main.rs:659:5:659:19 | print_i64(...) | | +| main.rs:659:17:659:17 | 1 | main.rs:659:15:659:18 | a[1] | | +| main.rs:660:5:660:5 | a | main.rs:660:10:660:10 | 4 | | +| main.rs:660:5:660:17 | ... = ... | main.rs:661:5:661:20 | ExprStmt | | +| main.rs:660:5:660:18 | ExprStmt | main.rs:660:5:660:5 | a | | +| main.rs:660:9:660:17 | [...] | main.rs:660:5:660:17 | ... = ... | | +| main.rs:660:10:660:10 | 4 | main.rs:660:13:660:13 | 5 | | +| main.rs:660:13:660:13 | 5 | main.rs:660:16:660:16 | 6 | | +| main.rs:660:16:660:16 | 6 | main.rs:660:9:660:17 | [...] | | +| main.rs:661:5:661:13 | print_i64 | main.rs:661:15:661:15 | a | | +| main.rs:661:5:661:19 | print_i64(...) | main.rs:655:13:662:1 | { ... } | | +| main.rs:661:5:661:20 | ExprStmt | main.rs:661:5:661:13 | print_i64 | | +| main.rs:661:15:661:15 | a | main.rs:661:17:661:17 | 2 | | +| main.rs:661:15:661:18 | a[2] | main.rs:661:5:661:19 | print_i64(...) | | +| main.rs:661:17:661:17 | 2 | main.rs:661:15:661:18 | a[2] | | +| main.rs:664:1:671:1 | enter fn ref_arg | main.rs:665:5:665:15 | let ... = 16 | | +| main.rs:664:1:671:1 | exit fn ref_arg (normal) | main.rs:664:1:671:1 | exit fn ref_arg | | +| main.rs:664:14:671:1 | { ... } | main.rs:664:1:671:1 | exit fn ref_arg (normal) | | +| main.rs:665:5:665:15 | let ... = 16 | main.rs:665:13:665:14 | 16 | | +| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | | +| main.rs:665:9:665:9 | x | main.rs:666:5:666:22 | ExprStmt | match | +| main.rs:665:13:665:14 | 16 | main.rs:665:9:665:9 | x | | +| main.rs:666:5:666:17 | print_i64_ref | main.rs:666:20:666:20 | x | | +| main.rs:666:5:666:21 | print_i64_ref(...) | main.rs:667:5:667:17 | ExprStmt | | +| main.rs:666:5:666:22 | ExprStmt | main.rs:666:5:666:17 | print_i64_ref | | +| main.rs:666:19:666:20 | &x | main.rs:666:5:666:21 | print_i64_ref(...) | | +| main.rs:666:20:666:20 | x | main.rs:666:19:666:20 | &x | | +| main.rs:667:5:667:13 | print_i64 | main.rs:667:15:667:15 | x | | +| main.rs:667:5:667:16 | print_i64(...) | main.rs:669:5:669:15 | let ... = 17 | | +| main.rs:667:5:667:17 | ExprStmt | main.rs:667:5:667:13 | print_i64 | | +| main.rs:667:15:667:15 | x | main.rs:667:5:667:16 | print_i64(...) | | +| main.rs:669:5:669:15 | let ... = 17 | main.rs:669:13:669:14 | 17 | | +| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | | +| main.rs:669:9:669:9 | z | main.rs:670:5:670:22 | ExprStmt | match | +| main.rs:669:13:669:14 | 17 | main.rs:669:9:669:9 | z | | +| main.rs:670:5:670:17 | print_i64_ref | main.rs:670:20:670:20 | z | | +| main.rs:670:5:670:21 | print_i64_ref(...) | main.rs:664:14:671:1 | { ... } | | +| main.rs:670:5:670:22 | ExprStmt | main.rs:670:5:670:17 | print_i64_ref | | +| main.rs:670:19:670:20 | &z | main.rs:670:5:670:21 | print_i64_ref(...) | | +| main.rs:670:20:670:20 | z | main.rs:670:19:670:20 | &z | | +| main.rs:678:5:680:5 | enter fn bar | main.rs:678:17:678:20 | self | | +| main.rs:678:5:680:5 | exit fn bar (normal) | main.rs:678:5:680:5 | exit fn bar | | +| main.rs:678:12:678:20 | SelfParam | main.rs:679:9:679:36 | ExprStmt | | +| main.rs:678:17:678:20 | self | main.rs:678:12:678:20 | SelfParam | | +| main.rs:678:23:680:5 | { ... } | main.rs:678:5:680:5 | exit fn bar (normal) | | +| main.rs:679:9:679:13 | * ... | main.rs:679:33:679:33 | 3 | | +| main.rs:679:9:679:35 | ... = ... | main.rs:678:23:680:5 | { ... } | | +| main.rs:679:9:679:36 | ExprStmt | main.rs:679:10:679:13 | self | | +| main.rs:679:10:679:13 | self | main.rs:679:9:679:13 | * ... | | +| main.rs:679:17:679:35 | MyStruct {...} | main.rs:679:9:679:35 | ... = ... | | +| main.rs:679:33:679:33 | 3 | main.rs:679:17:679:35 | MyStruct {...} | | +| main.rs:683:1:689:1 | enter fn ref_methodcall_receiver | main.rs:684:5:684:36 | let ... = ... | | +| main.rs:683:1:689:1 | exit fn ref_methodcall_receiver (normal) | main.rs:683:1:689:1 | exit fn ref_methodcall_receiver | | +| main.rs:683:30:689:1 | { ... } | main.rs:683:1:689:1 | exit fn ref_methodcall_receiver (normal) | | +| main.rs:684:5:684:36 | let ... = ... | main.rs:684:33:684:33 | 1 | | +| main.rs:684:9:684:13 | mut a | main.rs:685:5:685:12 | ExprStmt | match | +| main.rs:684:13:684:13 | a | main.rs:684:9:684:13 | mut a | | +| main.rs:684:17:684:35 | MyStruct {...} | main.rs:684:13:684:13 | a | | +| main.rs:684:33:684:33 | 1 | main.rs:684:17:684:35 | MyStruct {...} | | +| main.rs:685:5:685:5 | a | main.rs:685:5:685:11 | a.bar() | | +| main.rs:685:5:685:11 | a.bar() | main.rs:688:5:688:21 | ExprStmt | | +| main.rs:685:5:685:12 | ExprStmt | main.rs:685:5:685:5 | a | | +| main.rs:688:5:688:13 | print_i64 | main.rs:688:15:688:15 | a | | +| main.rs:688:5:688:20 | print_i64(...) | main.rs:683:30:689:1 | { ... } | | +| main.rs:688:5:688:21 | ExprStmt | main.rs:688:5:688:13 | print_i64 | | +| main.rs:688:15:688:15 | a | main.rs:688:15:688:19 | a.val | | +| main.rs:688:15:688:19 | a.val | main.rs:688:5:688:20 | print_i64(...) | | +| main.rs:705:1:716:1 | enter fn macro_invocation | main.rs:706:5:707:26 | let ... = ... | | +| main.rs:705:1:716:1 | exit fn macro_invocation (normal) | main.rs:705:1:716:1 | exit fn macro_invocation | | +| main.rs:705:23:716:1 | { ... } | main.rs:705:1:716:1 | exit fn macro_invocation (normal) | | +| main.rs:706:5:707:26 | let ... = ... | main.rs:707:23:707:24 | let ... = 37 | | +| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | | +| main.rs:706:9:706:22 | var_from_macro | main.rs:708:5:708:30 | ExprStmt | match | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | match | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:23:707:24 | { ... } | | +| main.rs:707:9:707:25 | MacroExpr | main.rs:706:9:706:22 | var_from_macro | | +| main.rs:707:9:707:25 | let_in_macro!... | main.rs:707:9:707:25 | MacroExpr | | +| main.rs:707:23:707:24 | 37 | main.rs:707:9:707:21 | var_in_macro | | +| main.rs:707:23:707:24 | let ... = 37 | main.rs:707:23:707:24 | 37 | | +| main.rs:707:23:707:24 | { ... } | main.rs:707:9:707:25 | let_in_macro!... | | +| main.rs:708:5:708:13 | print_i64 | main.rs:708:15:708:28 | var_from_macro | | +| main.rs:708:5:708:29 | print_i64(...) | main.rs:709:5:709:26 | let ... = 33 | | +| main.rs:708:5:708:30 | ExprStmt | main.rs:708:5:708:13 | print_i64 | | +| main.rs:708:15:708:28 | var_from_macro | main.rs:708:5:708:29 | print_i64(...) | | +| main.rs:709:5:709:26 | let ... = 33 | main.rs:709:24:709:25 | 33 | | +| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | | +| main.rs:709:9:709:20 | var_in_macro | main.rs:714:5:714:44 | ExprStmt | match | +| main.rs:709:24:709:25 | 33 | main.rs:709:9:709:20 | var_in_macro | | +| main.rs:714:5:714:13 | print_i64 | main.rs:714:15:714:28 | let ... = 0 | | +| main.rs:714:5:714:43 | print_i64(...) | main.rs:715:5:715:28 | ExprStmt | | +| main.rs:714:5:714:44 | ExprStmt | main.rs:714:5:714:13 | print_i64 | | +| main.rs:714:15:714:28 | 0 | main.rs:714:15:714:28 | var_in_macro | | +| main.rs:714:15:714:28 | let ... = 0 | main.rs:714:15:714:28 | 0 | | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:30:714:41 | var_in_macro | match | +| main.rs:714:15:714:42 | MacroExpr | main.rs:714:5:714:43 | print_i64(...) | | +| main.rs:714:15:714:42 | let_in_macro2!... | main.rs:714:15:714:42 | MacroExpr | | +| main.rs:714:30:714:41 | var_in_macro | main.rs:714:30:714:41 | { ... } | | +| main.rs:714:30:714:41 | { ... } | main.rs:714:15:714:42 | let_in_macro2!... | | +| main.rs:715:5:715:13 | print_i64 | main.rs:715:15:715:26 | var_in_macro | | +| main.rs:715:5:715:27 | print_i64(...) | main.rs:705:23:716:1 | { ... } | | +| main.rs:715:5:715:28 | ExprStmt | main.rs:715:5:715:13 | print_i64 | | +| main.rs:715:15:715:26 | var_in_macro | main.rs:715:5:715:27 | print_i64(...) | | +| main.rs:718:1:722:1 | enter fn let_without_initializer | main.rs:719:5:719:10 | let ... | | +| main.rs:718:1:722:1 | exit fn let_without_initializer (normal) | main.rs:718:1:722:1 | exit fn let_without_initializer | | +| main.rs:718:30:722:1 | { ... } | main.rs:718:1:722:1 | exit fn let_without_initializer (normal) | | +| main.rs:719:5:719:10 | let ... | main.rs:719:9:719:9 | x | | +| main.rs:719:9:719:9 | x | main.rs:719:9:719:9 | x | | +| main.rs:719:9:719:9 | x | main.rs:720:5:720:10 | ExprStmt | match | +| main.rs:720:5:720:5 | x | main.rs:720:9:720:9 | 1 | | +| main.rs:720:5:720:9 | ... = ... | main.rs:721:5:721:17 | ExprStmt | | +| main.rs:720:5:720:10 | ExprStmt | main.rs:720:5:720:5 | x | | +| main.rs:720:9:720:9 | 1 | main.rs:720:5:720:9 | ... = ... | | +| main.rs:721:5:721:13 | print_i64 | main.rs:721:15:721:15 | x | | +| main.rs:721:5:721:16 | print_i64(...) | main.rs:718:30:722:1 | { ... } | | +| main.rs:721:5:721:17 | ExprStmt | main.rs:721:5:721:13 | print_i64 | | +| main.rs:721:15:721:15 | x | main.rs:721:5:721:16 | print_i64(...) | | +| main.rs:724:1:734:1 | enter fn capture_phi | main.rs:725:5:725:20 | let ... = 100 | | +| main.rs:724:1:734:1 | exit fn capture_phi (normal) | main.rs:724:1:734:1 | exit fn capture_phi | | +| main.rs:724:18:734:1 | { ... } | main.rs:724:1:734:1 | exit fn capture_phi (normal) | | +| main.rs:725:5:725:20 | let ... = 100 | main.rs:725:17:725:19 | 100 | | +| main.rs:725:9:725:13 | mut x | main.rs:726:5:731:6 | let ... = ... | match | +| main.rs:725:13:725:13 | x | main.rs:725:9:725:13 | mut x | | +| main.rs:725:17:725:19 | 100 | main.rs:725:13:725:13 | x | | +| main.rs:726:5:731:6 | let ... = ... | main.rs:726:19:731:5 | \|...\| ... | | +| main.rs:726:9:726:15 | mut cap | main.rs:732:5:732:14 | ExprStmt | match | +| main.rs:726:13:726:15 | cap | main.rs:726:9:726:15 | mut cap | | +| main.rs:726:19:731:5 | \|...\| ... | main.rs:726:13:726:15 | cap | | +| main.rs:726:19:731:5 | enter \|...\| ... | main.rs:726:20:726:20 | b | | +| main.rs:726:19:731:5 | exit \|...\| ... (normal) | main.rs:726:19:731:5 | exit \|...\| ... | | +| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | | +| main.rs:726:20:726:20 | b | main.rs:726:20:726:26 | ...: bool | match | +| main.rs:726:20:726:26 | ...: bool | main.rs:727:9:730:10 | let _ = ... | | +| main.rs:726:29:731:5 | { ... } | main.rs:726:19:731:5 | exit \|...\| ... (normal) | | +| main.rs:727:9:730:10 | let _ = ... | main.rs:728:20:728:20 | b | | +| main.rs:728:13:728:13 | _ | main.rs:726:29:731:5 | { ... } | match | +| main.rs:728:17:730:9 | if b {...} | main.rs:728:13:728:13 | _ | | +| main.rs:728:20:728:20 | b | main.rs:728:17:730:9 | if b {...} | false | +| main.rs:728:20:728:20 | b | main.rs:729:13:729:20 | ExprStmt | true | +| main.rs:728:22:730:9 | { ... } | main.rs:728:17:730:9 | if b {...} | | +| main.rs:729:13:729:13 | x | main.rs:729:17:729:19 | 200 | | +| main.rs:729:13:729:19 | ... = ... | main.rs:728:22:730:9 | { ... } | | +| main.rs:729:13:729:20 | ExprStmt | main.rs:729:13:729:13 | x | | +| main.rs:729:17:729:19 | 200 | main.rs:729:13:729:19 | ... = ... | | +| main.rs:732:5:732:7 | cap | main.rs:732:9:732:12 | true | | +| main.rs:732:5:732:13 | cap(...) | main.rs:733:5:733:17 | ExprStmt | | +| main.rs:732:5:732:14 | ExprStmt | main.rs:732:5:732:7 | cap | | +| main.rs:732:9:732:12 | true | main.rs:732:5:732:13 | cap(...) | | +| main.rs:733:5:733:13 | print_i64 | main.rs:733:15:733:15 | x | | +| main.rs:733:5:733:16 | print_i64(...) | main.rs:724:18:734:1 | { ... } | | +| main.rs:733:5:733:17 | ExprStmt | main.rs:733:5:733:13 | print_i64 | | +| main.rs:733:15:733:15 | x | main.rs:733:5:733:16 | print_i64(...) | | +| main.rs:736:1:778:1 | enter fn main | main.rs:737:5:737:25 | ExprStmt | | +| main.rs:736:1:778:1 | exit fn main (normal) | main.rs:736:1:778:1 | exit fn main | | +| main.rs:736:11:778:1 | { ... } | main.rs:736:1:778:1 | exit fn main (normal) | | +| main.rs:737:5:737:22 | immutable_variable | main.rs:737:5:737:24 | immutable_variable(...) | | +| main.rs:737:5:737:24 | immutable_variable(...) | main.rs:738:5:738:23 | ExprStmt | | +| main.rs:737:5:737:25 | ExprStmt | main.rs:737:5:737:22 | immutable_variable | | +| main.rs:738:5:738:20 | mutable_variable | main.rs:738:5:738:22 | mutable_variable(...) | | +| main.rs:738:5:738:22 | mutable_variable(...) | main.rs:739:5:739:40 | ExprStmt | | +| main.rs:738:5:738:23 | ExprStmt | main.rs:738:5:738:20 | mutable_variable | | +| main.rs:739:5:739:37 | mutable_variable_immutable_borrow | main.rs:739:5:739:39 | mutable_variable_immutable_borrow(...) | | +| main.rs:739:5:739:39 | mutable_variable_immutable_borrow(...) | main.rs:740:5:740:23 | ExprStmt | | +| main.rs:739:5:739:40 | ExprStmt | main.rs:739:5:739:37 | mutable_variable_immutable_borrow | | +| main.rs:740:5:740:20 | variable_shadow1 | main.rs:740:5:740:22 | variable_shadow1(...) | | +| main.rs:740:5:740:22 | variable_shadow1(...) | main.rs:741:5:741:23 | ExprStmt | | +| main.rs:740:5:740:23 | ExprStmt | main.rs:740:5:740:20 | variable_shadow1 | | +| main.rs:741:5:741:20 | variable_shadow2 | main.rs:741:5:741:22 | variable_shadow2(...) | | +| main.rs:741:5:741:22 | variable_shadow2(...) | main.rs:742:5:742:19 | ExprStmt | | +| main.rs:741:5:741:23 | ExprStmt | main.rs:741:5:741:20 | variable_shadow2 | | +| main.rs:742:5:742:16 | let_pattern1 | main.rs:742:5:742:18 | let_pattern1(...) | | +| main.rs:742:5:742:18 | let_pattern1(...) | main.rs:743:5:743:19 | ExprStmt | | +| main.rs:742:5:742:19 | ExprStmt | main.rs:742:5:742:16 | let_pattern1 | | +| main.rs:743:5:743:16 | let_pattern2 | main.rs:743:5:743:18 | let_pattern2(...) | | +| main.rs:743:5:743:18 | let_pattern2(...) | main.rs:744:5:744:19 | ExprStmt | | +| main.rs:743:5:743:19 | ExprStmt | main.rs:743:5:743:16 | let_pattern2 | | +| main.rs:744:5:744:16 | let_pattern3 | main.rs:744:5:744:18 | let_pattern3(...) | | +| main.rs:744:5:744:18 | let_pattern3(...) | main.rs:745:5:745:19 | ExprStmt | | +| main.rs:744:5:744:19 | ExprStmt | main.rs:744:5:744:16 | let_pattern3 | | +| main.rs:745:5:745:16 | let_pattern4 | main.rs:745:5:745:18 | let_pattern4(...) | | +| main.rs:745:5:745:18 | let_pattern4(...) | main.rs:746:5:746:21 | ExprStmt | | +| main.rs:745:5:745:19 | ExprStmt | main.rs:745:5:745:16 | let_pattern4 | | +| main.rs:746:5:746:18 | match_pattern1 | main.rs:746:5:746:20 | match_pattern1(...) | | +| main.rs:746:5:746:20 | match_pattern1(...) | main.rs:747:5:747:21 | ExprStmt | | +| main.rs:746:5:746:21 | ExprStmt | main.rs:746:5:746:18 | match_pattern1 | | +| main.rs:747:5:747:18 | match_pattern2 | main.rs:747:5:747:20 | match_pattern2(...) | | +| main.rs:747:5:747:20 | match_pattern2(...) | main.rs:748:5:748:21 | ExprStmt | | +| main.rs:747:5:747:21 | ExprStmt | main.rs:747:5:747:18 | match_pattern2 | | +| main.rs:748:5:748:18 | match_pattern3 | main.rs:748:5:748:20 | match_pattern3(...) | | +| main.rs:748:5:748:20 | match_pattern3(...) | main.rs:749:5:749:21 | ExprStmt | | +| main.rs:748:5:748:21 | ExprStmt | main.rs:748:5:748:18 | match_pattern3 | | +| main.rs:749:5:749:18 | match_pattern4 | main.rs:749:5:749:20 | match_pattern4(...) | | +| main.rs:749:5:749:20 | match_pattern4(...) | main.rs:750:5:750:21 | ExprStmt | | +| main.rs:749:5:749:21 | ExprStmt | main.rs:749:5:749:18 | match_pattern4 | | +| main.rs:750:5:750:18 | match_pattern5 | main.rs:750:5:750:20 | match_pattern5(...) | | +| main.rs:750:5:750:20 | match_pattern5(...) | main.rs:751:5:751:21 | ExprStmt | | +| main.rs:750:5:750:21 | ExprStmt | main.rs:750:5:750:18 | match_pattern5 | | +| main.rs:751:5:751:18 | match_pattern6 | main.rs:751:5:751:20 | match_pattern6(...) | | +| main.rs:751:5:751:20 | match_pattern6(...) | main.rs:752:5:752:21 | ExprStmt | | +| main.rs:751:5:751:21 | ExprStmt | main.rs:751:5:751:18 | match_pattern6 | | +| main.rs:752:5:752:18 | match_pattern7 | main.rs:752:5:752:20 | match_pattern7(...) | | +| main.rs:752:5:752:20 | match_pattern7(...) | main.rs:753:5:753:21 | ExprStmt | | +| main.rs:752:5:752:21 | ExprStmt | main.rs:752:5:752:18 | match_pattern7 | | +| main.rs:753:5:753:18 | match_pattern8 | main.rs:753:5:753:20 | match_pattern8(...) | | +| main.rs:753:5:753:20 | match_pattern8(...) | main.rs:754:5:754:21 | ExprStmt | | +| main.rs:753:5:753:21 | ExprStmt | main.rs:753:5:753:18 | match_pattern8 | | +| main.rs:754:5:754:18 | match_pattern9 | main.rs:754:5:754:20 | match_pattern9(...) | | +| main.rs:754:5:754:20 | match_pattern9(...) | main.rs:755:5:755:22 | ExprStmt | | +| main.rs:754:5:754:21 | ExprStmt | main.rs:754:5:754:18 | match_pattern9 | | +| main.rs:755:5:755:19 | match_pattern10 | main.rs:755:5:755:21 | match_pattern10(...) | | +| main.rs:755:5:755:21 | match_pattern10(...) | main.rs:756:5:756:22 | ExprStmt | | +| main.rs:755:5:755:22 | ExprStmt | main.rs:755:5:755:19 | match_pattern10 | | +| main.rs:756:5:756:19 | match_pattern11 | main.rs:756:5:756:21 | match_pattern11(...) | | +| main.rs:756:5:756:21 | match_pattern11(...) | main.rs:757:5:757:22 | ExprStmt | | +| main.rs:756:5:756:22 | ExprStmt | main.rs:756:5:756:19 | match_pattern11 | | +| main.rs:757:5:757:19 | match_pattern12 | main.rs:757:5:757:21 | match_pattern12(...) | | +| main.rs:757:5:757:21 | match_pattern12(...) | main.rs:758:5:758:22 | ExprStmt | | +| main.rs:757:5:757:22 | ExprStmt | main.rs:757:5:757:19 | match_pattern12 | | +| main.rs:758:5:758:19 | match_pattern13 | main.rs:758:5:758:21 | match_pattern13(...) | | +| main.rs:758:5:758:21 | match_pattern13(...) | main.rs:759:5:759:22 | ExprStmt | | +| main.rs:758:5:758:22 | ExprStmt | main.rs:758:5:758:19 | match_pattern13 | | +| main.rs:759:5:759:19 | match_pattern14 | main.rs:759:5:759:21 | match_pattern14(...) | | +| main.rs:759:5:759:21 | match_pattern14(...) | main.rs:760:5:760:36 | ExprStmt | | +| main.rs:759:5:759:22 | ExprStmt | main.rs:759:5:759:19 | match_pattern14 | | +| main.rs:760:5:760:18 | param_pattern1 | main.rs:760:20:760:22 | "a" | | +| main.rs:760:5:760:35 | param_pattern1(...) | main.rs:761:5:761:37 | ExprStmt | | +| main.rs:760:5:760:36 | ExprStmt | main.rs:760:5:760:18 | param_pattern1 | | +| main.rs:760:20:760:22 | "a" | main.rs:760:26:760:28 | "b" | | +| main.rs:760:25:760:34 | TupleExpr | main.rs:760:5:760:35 | param_pattern1(...) | | +| main.rs:760:26:760:28 | "b" | main.rs:760:31:760:33 | "c" | | +| main.rs:760:31:760:33 | "c" | main.rs:760:25:760:34 | TupleExpr | | +| main.rs:761:5:761:18 | param_pattern2 | main.rs:761:20:761:31 | ...::Left | | +| main.rs:761:5:761:36 | param_pattern2(...) | main.rs:762:5:762:26 | ExprStmt | | +| main.rs:761:5:761:37 | ExprStmt | main.rs:761:5:761:18 | param_pattern2 | | +| main.rs:761:20:761:31 | ...::Left | main.rs:761:33:761:34 | 45 | | +| main.rs:761:20:761:35 | ...::Left(...) | main.rs:761:5:761:36 | param_pattern2(...) | | +| main.rs:761:33:761:34 | 45 | main.rs:761:20:761:35 | ...::Left(...) | | +| main.rs:762:5:762:23 | destruct_assignment | main.rs:762:5:762:25 | destruct_assignment(...) | | +| main.rs:762:5:762:25 | destruct_assignment(...) | main.rs:763:5:763:23 | ExprStmt | | +| main.rs:762:5:762:26 | ExprStmt | main.rs:762:5:762:23 | destruct_assignment | | +| main.rs:763:5:763:20 | closure_variable | main.rs:763:5:763:22 | closure_variable(...) | | +| main.rs:763:5:763:22 | closure_variable(...) | main.rs:764:5:764:22 | ExprStmt | | +| main.rs:763:5:763:23 | ExprStmt | main.rs:763:5:763:20 | closure_variable | | +| main.rs:764:5:764:19 | nested_function | main.rs:764:5:764:21 | nested_function(...) | | +| main.rs:764:5:764:21 | nested_function(...) | main.rs:765:5:765:19 | ExprStmt | | +| main.rs:764:5:764:22 | ExprStmt | main.rs:764:5:764:19 | nested_function | | +| main.rs:765:5:765:16 | for_variable | main.rs:765:5:765:18 | for_variable(...) | | +| main.rs:765:5:765:18 | for_variable(...) | main.rs:766:5:766:17 | ExprStmt | | +| main.rs:765:5:765:19 | ExprStmt | main.rs:765:5:765:16 | for_variable | | +| main.rs:766:5:766:14 | add_assign | main.rs:766:5:766:16 | add_assign(...) | | +| main.rs:766:5:766:16 | add_assign(...) | main.rs:767:5:767:13 | ExprStmt | | +| main.rs:766:5:766:17 | ExprStmt | main.rs:766:5:766:14 | add_assign | | +| main.rs:767:5:767:10 | mutate | main.rs:767:5:767:12 | mutate(...) | | +| main.rs:767:5:767:12 | mutate(...) | main.rs:768:5:768:17 | ExprStmt | | +| main.rs:767:5:767:13 | ExprStmt | main.rs:767:5:767:10 | mutate | | +| main.rs:768:5:768:14 | mutate_arg | main.rs:768:5:768:16 | mutate_arg(...) | | +| main.rs:768:5:768:16 | mutate_arg(...) | main.rs:769:5:769:12 | ExprStmt | | +| main.rs:768:5:768:17 | ExprStmt | main.rs:768:5:768:14 | mutate_arg | | +| main.rs:769:5:769:9 | alias | main.rs:769:5:769:11 | alias(...) | | +| main.rs:769:5:769:11 | alias(...) | main.rs:770:5:770:18 | ExprStmt | | +| main.rs:769:5:769:12 | ExprStmt | main.rs:769:5:769:9 | alias | | +| main.rs:770:5:770:15 | capture_mut | main.rs:770:5:770:17 | capture_mut(...) | | +| main.rs:770:5:770:17 | capture_mut(...) | main.rs:771:5:771:20 | ExprStmt | | +| main.rs:770:5:770:18 | ExprStmt | main.rs:770:5:770:15 | capture_mut | | +| main.rs:771:5:771:17 | capture_immut | main.rs:771:5:771:19 | capture_immut(...) | | +| main.rs:771:5:771:19 | capture_immut(...) | main.rs:772:5:772:26 | ExprStmt | | +| main.rs:771:5:771:20 | ExprStmt | main.rs:771:5:771:17 | capture_immut | | +| main.rs:772:5:772:23 | async_block_capture | main.rs:772:5:772:25 | async_block_capture(...) | | +| main.rs:772:5:772:25 | async_block_capture(...) | main.rs:773:5:773:14 | ExprStmt | | +| main.rs:772:5:772:26 | ExprStmt | main.rs:772:5:772:23 | async_block_capture | | +| main.rs:773:5:773:11 | structs | main.rs:773:5:773:13 | structs(...) | | +| main.rs:773:5:773:13 | structs(...) | main.rs:774:5:774:14 | ExprStmt | | +| main.rs:773:5:773:14 | ExprStmt | main.rs:773:5:773:11 | structs | | +| main.rs:774:5:774:11 | ref_arg | main.rs:774:5:774:13 | ref_arg(...) | | +| main.rs:774:5:774:13 | ref_arg(...) | main.rs:775:5:775:30 | ExprStmt | | +| main.rs:774:5:774:14 | ExprStmt | main.rs:774:5:774:11 | ref_arg | | +| main.rs:775:5:775:27 | ref_methodcall_receiver | main.rs:775:5:775:29 | ref_methodcall_receiver(...) | | +| main.rs:775:5:775:29 | ref_methodcall_receiver(...) | main.rs:776:5:776:23 | ExprStmt | | +| main.rs:775:5:775:30 | ExprStmt | main.rs:775:5:775:27 | ref_methodcall_receiver | | +| main.rs:776:5:776:20 | macro_invocation | main.rs:776:5:776:22 | macro_invocation(...) | | +| main.rs:776:5:776:22 | macro_invocation(...) | main.rs:777:5:777:18 | ExprStmt | | +| main.rs:776:5:776:23 | ExprStmt | main.rs:776:5:776:20 | macro_invocation | | +| main.rs:777:5:777:15 | capture_phi | main.rs:777:5:777:17 | capture_phi(...) | | +| main.rs:777:5:777:17 | capture_phi(...) | main.rs:736:11:778:1 | { ... } | | +| main.rs:777:5:777:18 | ExprStmt | main.rs:777:5:777:15 | capture_phi | | breakTarget -| main.rs:324:9:324:13 | break | main.rs:315:5:325:5 | while ... { ... } | +| main.rs:326:9:326:13 | break | main.rs:317:5:327:5 | while ... { ... } | continueTarget diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index da0a2b272e8b..52f163088569 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -5,191 +5,192 @@ definition | main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | | main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | -| main.rs:32:13:32:13 | x | main.rs:32:13:32:13 | x | -| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | -| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | +| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | | main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | -| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | -| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | -| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | -| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | -| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | -| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | -| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | -| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | -| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | -| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | -| main.rs:91:21:91:22 | s2 | main.rs:91:21:91:22 | s2 | -| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | -| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | -| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | -| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | -| main.rs:113:24:113:25 | s2 | main.rs:113:24:113:25 | s2 | -| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | -| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | -| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | -| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | -| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | -| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | -| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | -| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | -| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | -| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | -| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | -| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | -| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:27 | id_variable | -| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | -| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | -| main.rs:208:22:208:23 | a3 | main.rs:208:9:208:44 | a3 | -| main.rs:208:42:208:43 | a3 | main.rs:208:9:208:44 | a3 | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | -| main.rs:222:28:222:29 | a4 | main.rs:222:9:222:81 | a4 | -| main.rs:222:54:222:55 | a4 | main.rs:222:9:222:81 | a4 | -| main.rs:222:79:222:80 | a4 | main.rs:222:9:222:81 | a4 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | -| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:9:226:83 | a5 | -| main.rs:226:29:226:30 | a5 | main.rs:226:9:226:83 | a5 | -| main.rs:226:55:226:56 | a5 | main.rs:226:9:226:83 | a5 | -| main.rs:226:81:226:82 | a5 | main.rs:226:9:226:83 | a5 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | -| main.rs:230:28:230:29 | a6 | main.rs:230:9:230:83 | a6 | -| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | -| main.rs:230:55:230:56 | a6 | main.rs:230:9:230:83 | a6 | -| main.rs:230:80:230:81 | a6 | main.rs:230:9:230:83 | a6 | -| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | -| main.rs:238:22:238:23 | a7 | main.rs:238:9:238:44 | a7 | -| main.rs:238:42:238:43 | a7 | main.rs:238:9:238:44 | a7 | -| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | -| main.rs:249:13:249:13 | e | main.rs:249:13:249:13 | e | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | -| main.rs:250:27:250:29 | a11 | main.rs:250:14:250:51 | a11 | -| main.rs:250:48:250:50 | a11 | main.rs:250:14:250:51 | a11 | -| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | -| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | -| main.rs:272:27:272:29 | a13 | main.rs:272:9:272:109 | a13 | -| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:9:272:109 | a13 | -| main.rs:272:54:272:56 | a13 | main.rs:272:9:272:109 | a13 | -| main.rs:272:79:272:81 | a13 | main.rs:272:9:272:109 | a13 | -| main.rs:272:106:272:108 | a13 | main.rs:272:9:272:109 | a13 | -| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | -| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | -| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | -| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | -| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | -| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | -| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | -| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | -| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | -| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | -| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | -| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | -| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | -| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | -| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | -| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | -| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | -| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | -| main.rs:373:33:373:34 | a9 | main.rs:373:20:373:55 | a9 | -| main.rs:373:53:373:54 | a9 | main.rs:373:20:373:55 | a9 | -| main.rs:380:13:380:15 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:381:13:381:14 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:382:13:382:14 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | -| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | -| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | -| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | -| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | -| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | -| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | -| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | -| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | -| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | -| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | -| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | -| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | -| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | -| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | -| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | -| main.rs:474:13:474:13 | a | main.rs:474:13:474:13 | a | -| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | -| main.rs:477:6:477:11 | &mut a | main.rs:474:13:474:13 | a | -| main.rs:482:13:482:13 | i | main.rs:482:13:482:13 | i | -| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | -| main.rs:484:9:484:14 | &mut i | main.rs:482:13:482:13 | i | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | -| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | -| main.rs:505:13:505:13 | x | main.rs:505:13:505:13 | x | -| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | -| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | -| main.rs:513:13:513:13 | z | main.rs:513:13:513:13 | z | -| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | -| main.rs:517:9:517:14 | &mut z | main.rs:513:13:513:13 | z | -| main.rs:527:13:527:13 | x | main.rs:527:13:527:13 | x | -| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | -| main.rs:529:9:529:14 | &mut x | main.rs:527:13:527:13 | x | -| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | -| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | -| main.rs:538:15:540:5 | x | main.rs:535:9:535:9 | x | -| main.rs:546:13:546:13 | x | main.rs:546:13:546:13 | x | -| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | -| main.rs:549:20:551:5 | x | main.rs:546:13:546:13 | x | -| main.rs:555:13:555:13 | y | main.rs:555:13:555:13 | y | -| main.rs:558:13:558:20 | closure2 | main.rs:558:13:558:20 | closure2 | -| main.rs:559:9:559:9 | y | main.rs:555:13:555:13 | y | -| main.rs:561:5:561:14 | y | main.rs:555:13:555:13 | y | -| main.rs:564:13:564:13 | z | main.rs:564:13:564:13 | z | -| main.rs:567:13:567:20 | closure3 | main.rs:567:13:567:20 | closure3 | -| main.rs:567:24:569:5 | z | main.rs:564:13:564:13 | z | -| main.rs:575:13:575:13 | i | main.rs:575:13:575:13 | i | -| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | -| main.rs:577:9:577:9 | i | main.rs:575:13:575:13 | i | -| main.rs:580:5:580:15 | i | main.rs:575:13:575:13 | i | -| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | -| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | -| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | -| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | -| main.rs:626:20:626:23 | self | main.rs:626:20:626:23 | self | -| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | self | -| main.rs:634:23:634:26 | self | main.rs:634:23:634:26 | self | -| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | -| main.rs:635:21:638:9 | self | main.rs:634:23:634:26 | self | -| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | -| main.rs:645:13:645:13 | a | main.rs:645:13:645:13 | a | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | -| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | -| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | -| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | -| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | -| main.rs:676:17:676:20 | self | main.rs:676:17:676:20 | self | -| main.rs:682:13:682:13 | a | main.rs:682:13:682:13 | a | -| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | -| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | -| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | -| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | -| main.rs:723:13:723:13 | x | main.rs:723:13:723:13 | x | -| main.rs:724:13:724:15 | cap | main.rs:724:13:724:15 | cap | -| main.rs:724:19:729:5 | x | main.rs:723:13:723:13 | x | -| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | -| main.rs:726:17:728:9 | SSA phi(x) | main.rs:723:13:723:13 | x | -| main.rs:727:13:727:13 | x | main.rs:723:13:723:13 | x | -| main.rs:730:5:730:13 | x | main.rs:723:13:723:13 | x | +| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | +| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | +| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | +| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | +| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | +| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | +| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | +| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | +| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | +| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | +| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | +| main.rs:93:21:93:22 | s2 | main.rs:93:21:93:22 | s2 | +| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | +| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | +| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | +| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | +| main.rs:115:24:115:25 | s2 | main.rs:115:24:115:25 | s2 | +| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | +| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | +| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | +| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | +| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | +| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | +| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | +| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | +| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | +| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | +| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | +| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | +| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:27 | id_variable | +| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | +| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | +| main.rs:210:22:210:23 | a3 | main.rs:210:9:210:44 | a3 | +| main.rs:210:42:210:43 | a3 | main.rs:210:9:210:44 | a3 | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | +| main.rs:224:28:224:29 | a4 | main.rs:224:9:224:81 | a4 | +| main.rs:224:54:224:55 | a4 | main.rs:224:9:224:81 | a4 | +| main.rs:224:79:224:80 | a4 | main.rs:224:9:224:81 | a4 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | +| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:9:228:83 | a5 | +| main.rs:228:29:228:30 | a5 | main.rs:228:9:228:83 | a5 | +| main.rs:228:55:228:56 | a5 | main.rs:228:9:228:83 | a5 | +| main.rs:228:81:228:82 | a5 | main.rs:228:9:228:83 | a5 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | +| main.rs:232:28:232:29 | a6 | main.rs:232:9:232:83 | a6 | +| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | +| main.rs:232:55:232:56 | a6 | main.rs:232:9:232:83 | a6 | +| main.rs:232:80:232:81 | a6 | main.rs:232:9:232:83 | a6 | +| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | +| main.rs:240:22:240:23 | a7 | main.rs:240:9:240:44 | a7 | +| main.rs:240:42:240:43 | a7 | main.rs:240:9:240:44 | a7 | +| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | +| main.rs:251:13:251:13 | e | main.rs:251:13:251:13 | e | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | +| main.rs:252:27:252:29 | a11 | main.rs:252:14:252:51 | a11 | +| main.rs:252:48:252:50 | a11 | main.rs:252:14:252:51 | a11 | +| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | +| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | +| main.rs:274:27:274:29 | a13 | main.rs:274:9:274:109 | a13 | +| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:9:274:109 | a13 | +| main.rs:274:54:274:56 | a13 | main.rs:274:9:274:109 | a13 | +| main.rs:274:79:274:81 | a13 | main.rs:274:9:274:109 | a13 | +| main.rs:274:106:274:108 | a13 | main.rs:274:9:274:109 | a13 | +| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | +| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | +| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | +| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | +| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | +| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | +| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | +| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | +| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | +| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | +| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | +| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | +| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | +| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | +| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | +| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | +| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | +| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | +| main.rs:375:33:375:34 | a9 | main.rs:375:20:375:55 | a9 | +| main.rs:375:53:375:54 | a9 | main.rs:375:20:375:55 | a9 | +| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | +| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | +| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | +| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | +| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | +| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | +| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | +| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | +| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | +| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | +| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | +| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | +| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | +| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | +| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | +| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | +| main.rs:476:13:476:13 | a | main.rs:476:13:476:13 | a | +| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | +| main.rs:479:6:479:11 | &mut a | main.rs:476:13:476:13 | a | +| main.rs:484:13:484:13 | i | main.rs:484:13:484:13 | i | +| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | +| main.rs:486:9:486:14 | &mut i | main.rs:484:13:484:13 | i | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | +| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | +| main.rs:507:13:507:13 | x | main.rs:507:13:507:13 | x | +| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | +| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | +| main.rs:515:13:515:13 | z | main.rs:515:13:515:13 | z | +| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | +| main.rs:519:9:519:14 | &mut z | main.rs:515:13:515:13 | z | +| main.rs:529:13:529:13 | x | main.rs:529:13:529:13 | x | +| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | +| main.rs:531:9:531:14 | &mut x | main.rs:529:13:529:13 | x | +| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | +| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | +| main.rs:540:15:542:5 | x | main.rs:537:9:537:9 | x | +| main.rs:548:13:548:13 | x | main.rs:548:13:548:13 | x | +| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | +| main.rs:551:20:553:5 | x | main.rs:548:13:548:13 | x | +| main.rs:557:13:557:13 | y | main.rs:557:13:557:13 | y | +| main.rs:560:13:560:20 | closure2 | main.rs:560:13:560:20 | closure2 | +| main.rs:561:9:561:9 | y | main.rs:557:13:557:13 | y | +| main.rs:563:5:563:14 | y | main.rs:557:13:557:13 | y | +| main.rs:566:13:566:13 | z | main.rs:566:13:566:13 | z | +| main.rs:569:13:569:20 | closure3 | main.rs:569:13:569:20 | closure3 | +| main.rs:569:24:571:5 | z | main.rs:566:13:566:13 | z | +| main.rs:577:13:577:13 | i | main.rs:577:13:577:13 | i | +| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | +| main.rs:579:9:579:9 | i | main.rs:577:13:577:13 | i | +| main.rs:582:5:582:15 | i | main.rs:577:13:577:13 | i | +| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | +| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | +| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | +| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | +| main.rs:628:20:628:23 | self | main.rs:628:20:628:23 | self | +| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | self | +| main.rs:636:23:636:26 | self | main.rs:636:23:636:26 | self | +| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | +| main.rs:637:21:640:9 | self | main.rs:636:23:636:26 | self | +| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | +| main.rs:647:13:647:13 | a | main.rs:647:13:647:13 | a | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | +| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | +| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | +| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | +| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | +| main.rs:678:17:678:20 | self | main.rs:678:17:678:20 | self | +| main.rs:684:13:684:13 | a | main.rs:684:13:684:13 | a | +| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | +| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | +| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | +| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | +| main.rs:725:13:725:13 | x | main.rs:725:13:725:13 | x | +| main.rs:726:13:726:15 | cap | main.rs:726:13:726:15 | cap | +| main.rs:726:19:731:5 | x | main.rs:725:13:725:13 | x | +| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | +| main.rs:728:17:730:9 | SSA phi(x) | main.rs:725:13:725:13 | x | +| main.rs:729:13:729:13 | x | main.rs:725:13:725:13 | x | +| main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x | read | main.rs:5:14:5:14 | s | main.rs:5:14:5:14 | s | main.rs:7:20:7:20 | s | | main.rs:10:14:10:14 | i | main.rs:10:14:10:14 | i | main.rs:12:20:12:20 | i | @@ -197,200 +198,202 @@ read | main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | main.rs:21:15:21:16 | x1 | | main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | main.rs:26:15:26:16 | x2 | | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 | -| main.rs:32:13:32:13 | x | main.rs:32:13:32:13 | x | main.rs:33:20:33:20 | x | -| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | main.rs:35:20:35:20 | x | -| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:40:15:40:16 | x3 | -| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:42:9:42:10 | x3 | -| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:43:15:43:16 | x3 | -| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:48:15:48:16 | x4 | -| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:53:15:53:16 | x4 | -| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | main.rs:51:19:51:20 | x4 | -| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | main.rs:72:15:72:16 | a1 | -| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | main.rs:73:15:73:16 | b1 | -| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | main.rs:74:15:74:15 | x | -| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | main.rs:75:15:75:15 | y | -| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | main.rs:83:9:83:10 | p1 | -| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | main.rs:84:15:84:16 | a2 | -| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | main.rs:85:15:85:16 | b2 | -| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | main.rs:92:11:92:12 | s1 | -| main.rs:91:21:91:22 | s2 | main.rs:91:21:91:22 | s2 | main.rs:93:19:93:20 | s2 | -| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:100:7:100:7 | x | -| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:103:13:103:13 | x | -| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | main.rs:107:15:107:15 | x | -| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | main.rs:104:19:104:19 | x | -| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | -| main.rs:113:24:113:25 | s2 | main.rs:113:24:113:25 | s2 | main.rs:115:19:115:20 | s2 | -| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | main.rs:123:11:123:12 | x6 | -| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | main.rs:133:15:133:16 | y1 | -| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | main.rs:128:23:128:24 | y1 | -| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:139:11:139:17 | numbers | -| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:154:11:154:17 | numbers | -| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | main.rs:148:23:148:27 | first | -| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | main.rs:149:23:149:27 | third | -| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | main.rs:150:23:150:27 | fifth | -| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | main.rs:161:23:161:27 | first | -| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | main.rs:162:23:162:26 | last | -| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | main.rs:170:11:170:12 | p2 | -| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | main.rs:173:24:173:25 | x7 | -| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | main.rs:184:11:184:13 | msg | -| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:27 | id_variable | main.rs:188:24:188:34 | id_variable | -| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | main.rs:195:23:195:24 | id | -| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | main.rs:207:11:207:16 | either | -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:209:26:209:27 | a3 | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:221:11:221:12 | tv | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:225:11:225:12 | tv | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:229:11:229:12 | tv | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:223:26:223:27 | a4 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:227:26:227:27 | a5 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:231:26:231:27 | a6 | -| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | main.rs:237:11:237:16 | either | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:239:16:239:17 | a7 | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:240:26:240:27 | a7 | -| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | main.rs:248:11:248:16 | either | -| main.rs:249:13:249:13 | e | main.rs:249:13:249:13 | e | main.rs:254:15:254:15 | e | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:252:23:252:25 | a11 | -| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | main.rs:255:28:255:30 | a12 | -| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | main.rs:271:11:271:12 | fv | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:273:26:273:28 | a13 | -| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x | -| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:288:13:288:13 | x | -| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:283:5:283:5 | x | -| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:285:19:285:19 | x | -| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | main.rs:289:19:289:19 | x | -| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x | -| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:307:13:307:13 | x | -| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | main.rs:300:12:300:12 | x | -| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:302:5:302:5 | x | -| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:304:19:304:19 | x | -| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | main.rs:308:19:308:19 | x | -| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:316:7:316:7 | x | -| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:327:15:327:15 | x | -| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | main.rs:319:12:319:12 | x | -| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:321:5:321:5 | x | -| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:323:19:323:19 | x | -| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:333:11:333:11 | x | -| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:341:15:341:15 | x | -| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | main.rs:336:18:336:18 | x | -| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | main.rs:337:19:337:19 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:353:7:353:7 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:357:19:357:19 | x | -| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | main.rs:350:19:350:19 | x | -| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | main.rs:355:19:355:19 | x | -| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | main.rs:368:15:368:16 | a8 | -| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | main.rs:369:15:369:16 | b3 | -| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | main.rs:370:15:370:16 | c1 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:375:15:375:16 | a9 | -| main.rs:380:13:380:15 | a10 | main.rs:380:13:380:15 | a10 | main.rs:384:15:384:17 | a10 | -| main.rs:381:13:381:14 | b4 | main.rs:381:13:381:14 | b4 | main.rs:385:15:385:16 | b4 | -| main.rs:382:13:382:14 | c2 | main.rs:382:13:382:14 | c2 | main.rs:386:15:386:16 | c2 | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:395:9:395:10 | c2 | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:399:15:399:16 | c2 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:394:9:394:10 | b4 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:398:15:398:16 | b4 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:412:15:412:16 | b4 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:393:9:393:11 | a10 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:397:15:397:17 | a10 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:411:15:411:17 | a10 | -| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | main.rs:406:23:406:25 | a10 | -| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | main.rs:407:23:407:24 | b4 | -| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | main.rs:420:9:420:23 | example_closure | -| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | main.rs:418:9:418:9 | x | -| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | main.rs:421:15:421:16 | n1 | -| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | main.rs:428:9:428:26 | immutable_variable | -| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | main.rs:426:9:426:9 | x | -| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | main.rs:429:15:429:16 | n2 | -| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:437:15:437:15 | f | -| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:444:15:444:15 | f | -| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | main.rs:436:9:436:9 | x | -| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | main.rs:441:9:441:9 | x | -| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | main.rs:450:17:450:17 | x | -| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | main.rs:460:19:460:19 | f | -| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | main.rs:459:13:459:13 | x | -| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | main.rs:468:12:468:12 | v | -| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | main.rs:469:19:469:22 | text | -| main.rs:474:13:474:13 | a | main.rs:474:13:474:13 | a | main.rs:475:5:475:5 | a | -| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:476:15:476:15 | a | -| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:477:11:477:11 | a | -| main.rs:477:6:477:11 | &mut a | main.rs:474:13:474:13 | a | main.rs:478:15:478:15 | a | -| main.rs:482:13:482:13 | i | main.rs:482:13:482:13 | i | main.rs:484:14:484:14 | i | -| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | main.rs:485:6:485:10 | ref_i | -| main.rs:484:9:484:14 | &mut i | main.rs:482:13:482:13 | i | main.rs:486:15:486:15 | i | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:490:6:490:6 | x | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:491:10:491:10 | x | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:492:10:492:10 | x | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:493:12:493:12 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:497:6:497:6 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:498:10:498:10 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:499:10:499:10 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:501:9:501:9 | x | -| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | main.rs:500:6:500:6 | y | -| main.rs:505:13:505:13 | x | main.rs:505:13:505:13 | x | main.rs:507:27:507:27 | x | -| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | main.rs:508:6:508:6 | y | -| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:511:15:511:15 | x | -| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:515:19:515:19 | x | -| main.rs:513:13:513:13 | z | main.rs:513:13:513:13 | z | main.rs:517:14:517:14 | z | -| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:518:9:518:9 | w | -| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:520:7:520:7 | w | -| main.rs:517:9:517:14 | &mut z | main.rs:513:13:513:13 | z | main.rs:523:15:523:15 | z | -| main.rs:527:13:527:13 | x | main.rs:527:13:527:13 | x | main.rs:529:14:529:14 | x | -| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | main.rs:530:6:530:6 | y | -| main.rs:529:9:529:14 | &mut x | main.rs:527:13:527:13 | x | main.rs:531:15:531:15 | x | -| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | main.rs:542:15:542:15 | x | -| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | main.rs:541:5:541:7 | cap | -| main.rs:538:15:540:5 | x | main.rs:535:9:535:9 | x | main.rs:539:19:539:19 | x | -| main.rs:546:13:546:13 | x | main.rs:546:13:546:13 | x | main.rs:553:15:553:15 | x | -| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | main.rs:552:5:552:12 | closure1 | -| main.rs:549:20:551:5 | x | main.rs:546:13:546:13 | x | main.rs:550:19:550:19 | x | -| main.rs:558:13:558:20 | closure2 | main.rs:558:13:558:20 | closure2 | main.rs:561:5:561:12 | closure2 | -| main.rs:561:5:561:14 | y | main.rs:555:13:555:13 | y | main.rs:562:15:562:15 | y | -| main.rs:564:13:564:13 | z | main.rs:564:13:564:13 | z | main.rs:571:15:571:15 | z | -| main.rs:567:13:567:20 | closure3 | main.rs:567:13:567:20 | closure3 | main.rs:570:5:570:12 | closure3 | -| main.rs:567:24:569:5 | z | main.rs:564:13:564:13 | z | main.rs:568:9:568:9 | z | -| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | main.rs:580:5:580:9 | block | -| main.rs:580:5:580:15 | i | main.rs:575:13:575:13 | i | main.rs:581:15:581:15 | i | -| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | main.rs:589:16:589:16 | b | -| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:586:15:586:15 | x | -| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:587:15:587:15 | x | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:599:15:599:15 | x | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:592:19:592:19 | x | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:593:19:593:19 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:596:19:596:19 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:597:19:597:19 | x | -| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | main.rs:605:16:605:17 | b1 | -| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | main.rs:613:16:613:17 | b2 | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:615:19:615:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:617:19:617:19 | x | -| main.rs:626:20:626:23 | self | main.rs:626:20:626:23 | self | main.rs:627:16:627:19 | self | -| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | self | main.rs:631:9:631:12 | self | -| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:639:9:639:9 | f | -| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:640:9:640:9 | f | -| main.rs:635:21:638:9 | self | main.rs:634:23:634:26 | self | main.rs:637:13:637:16 | self | -| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | main.rs:637:25:637:25 | n | -| main.rs:645:13:645:13 | a | main.rs:645:13:645:13 | a | main.rs:646:15:646:15 | a | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:647:5:647:5 | a | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:648:15:648:15 | a | -| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | main.rs:650:15:650:15 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:655:15:655:15 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:656:5:656:5 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:657:15:657:15 | a | -| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | main.rs:659:15:659:15 | a | -| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:664:20:664:20 | x | -| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:665:15:665:15 | x | -| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | main.rs:668:20:668:20 | z | -| main.rs:676:17:676:20 | self | main.rs:676:17:676:20 | self | main.rs:677:10:677:13 | self | -| main.rs:682:13:682:13 | a | main.rs:682:13:682:13 | a | main.rs:683:5:683:5 | a | -| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | main.rs:686:15:686:15 | a | -| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | main.rs:706:15:706:28 | var_from_macro | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | -| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | main.rs:713:15:713:26 | var_in_macro | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | main.rs:712:30:712:41 | var_in_macro | -| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | main.rs:719:15:719:15 | x | -| main.rs:724:13:724:15 | cap | main.rs:724:13:724:15 | cap | main.rs:730:5:730:7 | cap | -| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | main.rs:726:20:726:20 | b | -| main.rs:730:5:730:13 | x | main.rs:723:13:723:13 | x | main.rs:731:15:731:15 | x | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:30:15:30:16 | x2 | +| main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | main.rs:35:20:35:20 | x | +| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | main.rs:37:20:37:20 | x | +| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 | +| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:44:9:44:10 | x3 | +| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | main.rs:45:15:45:16 | x3 | +| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 | +| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:55:15:55:16 | x4 | +| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | main.rs:53:19:53:20 | x4 | +| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | main.rs:74:15:74:16 | a1 | +| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | main.rs:75:15:75:16 | b1 | +| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | main.rs:76:15:76:15 | x | +| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | main.rs:77:15:77:15 | y | +| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | main.rs:85:9:85:10 | p1 | +| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | main.rs:86:15:86:16 | a2 | +| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | main.rs:87:15:87:16 | b2 | +| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | main.rs:94:11:94:12 | s1 | +| main.rs:93:21:93:22 | s2 | main.rs:93:21:93:22 | s2 | main.rs:95:19:95:20 | s2 | +| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x | +| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:105:13:105:13 | x | +| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | main.rs:109:15:109:15 | x | +| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | main.rs:106:19:106:19 | x | +| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | +| main.rs:115:24:115:25 | s2 | main.rs:115:24:115:25 | s2 | main.rs:117:19:117:20 | s2 | +| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | main.rs:125:11:125:12 | x6 | +| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | main.rs:135:15:135:16 | y1 | +| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | main.rs:130:23:130:24 | y1 | +| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:141:11:141:17 | numbers | +| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:156:11:156:17 | numbers | +| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | main.rs:150:23:150:27 | first | +| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | main.rs:151:23:151:27 | third | +| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | main.rs:152:23:152:27 | fifth | +| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | main.rs:163:23:163:27 | first | +| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | main.rs:164:23:164:26 | last | +| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | main.rs:172:11:172:12 | p2 | +| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | main.rs:175:24:175:25 | x7 | +| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | main.rs:186:11:186:13 | msg | +| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:27 | id_variable | main.rs:190:24:190:34 | id_variable | +| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | main.rs:197:23:197:24 | id | +| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | main.rs:209:11:209:16 | either | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:211:26:211:27 | a3 | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:223:11:223:12 | tv | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:227:11:227:12 | tv | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:231:11:231:12 | tv | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:225:26:225:27 | a4 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:229:26:229:27 | a5 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:233:26:233:27 | a6 | +| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | main.rs:239:11:239:16 | either | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:241:16:241:17 | a7 | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:242:26:242:27 | a7 | +| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | main.rs:250:11:250:16 | either | +| main.rs:251:13:251:13 | e | main.rs:251:13:251:13 | e | main.rs:256:15:256:15 | e | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:254:23:254:25 | a11 | +| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | main.rs:257:28:257:30 | a12 | +| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | main.rs:273:11:273:12 | fv | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:275:26:275:28 | a13 | +| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x | +| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:290:13:290:13 | x | +| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:285:5:285:5 | x | +| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:287:19:287:19 | x | +| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | main.rs:291:19:291:19 | x | +| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x | +| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:309:13:309:13 | x | +| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | main.rs:302:12:302:12 | x | +| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:304:5:304:5 | x | +| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:306:19:306:19 | x | +| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | main.rs:310:19:310:19 | x | +| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:318:7:318:7 | x | +| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:329:15:329:15 | x | +| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | main.rs:321:12:321:12 | x | +| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:323:5:323:5 | x | +| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:325:19:325:19 | x | +| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x | +| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:343:15:343:15 | x | +| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | main.rs:338:18:338:18 | x | +| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | main.rs:339:19:339:19 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:355:7:355:7 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:359:19:359:19 | x | +| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | main.rs:352:19:352:19 | x | +| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | main.rs:357:19:357:19 | x | +| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | main.rs:370:15:370:16 | a8 | +| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | main.rs:371:15:371:16 | b3 | +| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | main.rs:372:15:372:16 | c1 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:377:15:377:16 | a9 | +| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 | +| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 | +| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:401:15:401:16 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:414:15:414:16 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:413:15:413:17 | a10 | +| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | main.rs:408:23:408:25 | a10 | +| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | main.rs:409:23:409:24 | b4 | +| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | main.rs:422:9:422:23 | example_closure | +| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | main.rs:420:9:420:9 | x | +| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | main.rs:423:15:423:16 | n1 | +| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | main.rs:430:9:430:26 | immutable_variable | +| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | main.rs:428:9:428:9 | x | +| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | main.rs:431:15:431:16 | n2 | +| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f | +| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:446:15:446:15 | f | +| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | main.rs:438:9:438:9 | x | +| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | main.rs:443:9:443:9 | x | +| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | main.rs:452:17:452:17 | x | +| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | main.rs:462:19:462:19 | f | +| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | main.rs:461:13:461:13 | x | +| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | main.rs:470:12:470:12 | v | +| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | main.rs:471:19:471:22 | text | +| main.rs:476:13:476:13 | a | main.rs:476:13:476:13 | a | main.rs:477:5:477:5 | a | +| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a | +| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:479:11:479:11 | a | +| main.rs:479:6:479:11 | &mut a | main.rs:476:13:476:13 | a | main.rs:480:15:480:15 | a | +| main.rs:484:13:484:13 | i | main.rs:484:13:484:13 | i | main.rs:486:14:486:14 | i | +| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | main.rs:487:6:487:10 | ref_i | +| main.rs:486:9:486:14 | &mut i | main.rs:484:13:484:13 | i | main.rs:488:15:488:15 | i | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:492:6:492:6 | x | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:493:10:493:10 | x | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:494:10:494:10 | x | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:495:12:495:12 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:499:6:499:6 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:500:10:500:10 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:501:10:501:10 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:503:9:503:9 | x | +| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | main.rs:502:6:502:6 | y | +| main.rs:507:13:507:13 | x | main.rs:507:13:507:13 | x | main.rs:509:27:509:27 | x | +| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | main.rs:510:6:510:6 | y | +| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:513:15:513:15 | x | +| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:517:19:517:19 | x | +| main.rs:515:13:515:13 | z | main.rs:515:13:515:13 | z | main.rs:519:14:519:14 | z | +| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:520:9:520:9 | w | +| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:522:7:522:7 | w | +| main.rs:519:9:519:14 | &mut z | main.rs:515:13:515:13 | z | main.rs:525:15:525:15 | z | +| main.rs:529:13:529:13 | x | main.rs:529:13:529:13 | x | main.rs:531:14:531:14 | x | +| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | main.rs:532:6:532:6 | y | +| main.rs:531:9:531:14 | &mut x | main.rs:529:13:529:13 | x | main.rs:533:15:533:15 | x | +| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | main.rs:544:15:544:15 | x | +| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | main.rs:543:5:543:7 | cap | +| main.rs:540:15:542:5 | x | main.rs:537:9:537:9 | x | main.rs:541:19:541:19 | x | +| main.rs:548:13:548:13 | x | main.rs:548:13:548:13 | x | main.rs:555:15:555:15 | x | +| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | main.rs:554:5:554:12 | closure1 | +| main.rs:551:20:553:5 | x | main.rs:548:13:548:13 | x | main.rs:552:19:552:19 | x | +| main.rs:560:13:560:20 | closure2 | main.rs:560:13:560:20 | closure2 | main.rs:563:5:563:12 | closure2 | +| main.rs:563:5:563:14 | y | main.rs:557:13:557:13 | y | main.rs:564:15:564:15 | y | +| main.rs:566:13:566:13 | z | main.rs:566:13:566:13 | z | main.rs:573:15:573:15 | z | +| main.rs:569:13:569:20 | closure3 | main.rs:569:13:569:20 | closure3 | main.rs:572:5:572:12 | closure3 | +| main.rs:569:24:571:5 | z | main.rs:566:13:566:13 | z | main.rs:570:9:570:9 | z | +| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | main.rs:582:5:582:9 | block | +| main.rs:582:5:582:15 | i | main.rs:577:13:577:13 | i | main.rs:583:15:583:15 | i | +| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | main.rs:591:16:591:16 | b | +| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:588:15:588:15 | x | +| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:589:15:589:15 | x | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:601:15:601:15 | x | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:594:19:594:19 | x | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:595:19:595:19 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:598:19:598:19 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:599:19:599:19 | x | +| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | main.rs:607:16:607:17 | b1 | +| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | main.rs:615:16:615:17 | b2 | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:617:19:617:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:619:19:619:19 | x | +| main.rs:628:20:628:23 | self | main.rs:628:20:628:23 | self | main.rs:629:16:629:19 | self | +| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | self | main.rs:633:9:633:12 | self | +| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:641:9:641:9 | f | +| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:642:9:642:9 | f | +| main.rs:637:21:640:9 | self | main.rs:636:23:636:26 | self | main.rs:639:13:639:16 | self | +| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | main.rs:639:25:639:25 | n | +| main.rs:647:13:647:13 | a | main.rs:647:13:647:13 | a | main.rs:648:15:648:15 | a | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:649:5:649:5 | a | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:650:15:650:15 | a | +| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | main.rs:652:15:652:15 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:657:15:657:15 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:658:5:658:5 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:659:15:659:15 | a | +| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | main.rs:661:15:661:15 | a | +| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:666:20:666:20 | x | +| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:667:15:667:15 | x | +| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | main.rs:670:20:670:20 | z | +| main.rs:678:17:678:20 | self | main.rs:678:17:678:20 | self | main.rs:679:10:679:13 | self | +| main.rs:684:13:684:13 | a | main.rs:684:13:684:13 | a | main.rs:685:5:685:5 | a | +| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | main.rs:688:15:688:15 | a | +| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | main.rs:708:15:708:28 | var_from_macro | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | +| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | main.rs:715:15:715:26 | var_in_macro | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | main.rs:714:30:714:41 | var_in_macro | +| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | main.rs:721:15:721:15 | x | +| main.rs:726:13:726:15 | cap | main.rs:726:13:726:15 | cap | main.rs:732:5:732:7 | cap | +| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | main.rs:728:20:728:20 | b | +| main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x | main.rs:733:15:733:15 | x | firstRead | main.rs:5:14:5:14 | s | main.rs:5:14:5:14 | s | main.rs:7:20:7:20 | s | | main.rs:10:14:10:14 | i | main.rs:10:14:10:14 | i | main.rs:12:20:12:20 | i | @@ -398,355 +401,358 @@ firstRead | main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | main.rs:21:15:21:16 | x1 | | main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | main.rs:26:15:26:16 | x2 | | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 | -| main.rs:32:13:32:13 | x | main.rs:32:13:32:13 | x | main.rs:33:20:33:20 | x | -| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | main.rs:35:20:35:20 | x | -| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:40:15:40:16 | x3 | -| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:43:15:43:16 | x3 | -| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:48:15:48:16 | x4 | -| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | main.rs:51:19:51:20 | x4 | -| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | main.rs:72:15:72:16 | a1 | -| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | main.rs:73:15:73:16 | b1 | -| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | main.rs:74:15:74:15 | x | -| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | main.rs:75:15:75:15 | y | -| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | main.rs:83:9:83:10 | p1 | -| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | main.rs:84:15:84:16 | a2 | -| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | main.rs:85:15:85:16 | b2 | -| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | main.rs:92:11:92:12 | s1 | -| main.rs:91:21:91:22 | s2 | main.rs:91:21:91:22 | s2 | main.rs:93:19:93:20 | s2 | -| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:100:7:100:7 | x | -| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | main.rs:107:15:107:15 | x | -| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | main.rs:104:19:104:19 | x | -| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | -| main.rs:113:24:113:25 | s2 | main.rs:113:24:113:25 | s2 | main.rs:115:19:115:20 | s2 | -| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | main.rs:123:11:123:12 | x6 | -| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | main.rs:133:15:133:16 | y1 | -| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | main.rs:128:23:128:24 | y1 | -| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:139:11:139:17 | numbers | -| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | main.rs:148:23:148:27 | first | -| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | main.rs:149:23:149:27 | third | -| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | main.rs:150:23:150:27 | fifth | -| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | main.rs:161:23:161:27 | first | -| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | main.rs:162:23:162:26 | last | -| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | main.rs:170:11:170:12 | p2 | -| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | main.rs:173:24:173:25 | x7 | -| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | main.rs:184:11:184:13 | msg | -| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:27 | id_variable | main.rs:188:24:188:34 | id_variable | -| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | main.rs:195:23:195:24 | id | -| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | main.rs:207:11:207:16 | either | -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:209:26:209:27 | a3 | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:221:11:221:12 | tv | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:223:26:223:27 | a4 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:227:26:227:27 | a5 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:231:26:231:27 | a6 | -| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | main.rs:237:11:237:16 | either | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:239:16:239:17 | a7 | -| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | main.rs:248:11:248:16 | either | -| main.rs:249:13:249:13 | e | main.rs:249:13:249:13 | e | main.rs:254:15:254:15 | e | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:252:23:252:25 | a11 | -| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | main.rs:255:28:255:30 | a12 | -| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | main.rs:271:11:271:12 | fv | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:273:26:273:28 | a13 | -| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x | -| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:283:5:283:5 | x | -| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | main.rs:289:19:289:19 | x | -| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x | -| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | main.rs:300:12:300:12 | x | -| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:302:5:302:5 | x | -| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | main.rs:308:19:308:19 | x | -| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:316:7:316:7 | x | -| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | main.rs:319:12:319:12 | x | -| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:321:5:321:5 | x | -| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:333:11:333:11 | x | -| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | main.rs:336:18:336:18 | x | -| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | main.rs:337:19:337:19 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x | -| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | main.rs:350:19:350:19 | x | -| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | main.rs:355:19:355:19 | x | -| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | main.rs:368:15:368:16 | a8 | -| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | main.rs:369:15:369:16 | b3 | -| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | main.rs:370:15:370:16 | c1 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:375:15:375:16 | a9 | -| main.rs:380:13:380:15 | a10 | main.rs:380:13:380:15 | a10 | main.rs:384:15:384:17 | a10 | -| main.rs:381:13:381:14 | b4 | main.rs:381:13:381:14 | b4 | main.rs:385:15:385:16 | b4 | -| main.rs:382:13:382:14 | c2 | main.rs:382:13:382:14 | c2 | main.rs:386:15:386:16 | c2 | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:395:9:395:10 | c2 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:394:9:394:10 | b4 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:393:9:393:11 | a10 | -| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | main.rs:406:23:406:25 | a10 | -| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | main.rs:407:23:407:24 | b4 | -| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | main.rs:420:9:420:23 | example_closure | -| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | main.rs:418:9:418:9 | x | -| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | main.rs:421:15:421:16 | n1 | -| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | main.rs:428:9:428:26 | immutable_variable | -| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | main.rs:426:9:426:9 | x | -| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | main.rs:429:15:429:16 | n2 | -| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:437:15:437:15 | f | -| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | main.rs:436:9:436:9 | x | -| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | main.rs:441:9:441:9 | x | -| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | main.rs:450:17:450:17 | x | -| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | main.rs:460:19:460:19 | f | -| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | main.rs:459:13:459:13 | x | -| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | main.rs:468:12:468:12 | v | -| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | main.rs:469:19:469:22 | text | -| main.rs:474:13:474:13 | a | main.rs:474:13:474:13 | a | main.rs:475:5:475:5 | a | -| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:476:15:476:15 | a | -| main.rs:477:6:477:11 | &mut a | main.rs:474:13:474:13 | a | main.rs:478:15:478:15 | a | -| main.rs:482:13:482:13 | i | main.rs:482:13:482:13 | i | main.rs:484:14:484:14 | i | -| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | main.rs:485:6:485:10 | ref_i | -| main.rs:484:9:484:14 | &mut i | main.rs:482:13:482:13 | i | main.rs:486:15:486:15 | i | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:490:6:490:6 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:497:6:497:6 | x | -| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | main.rs:500:6:500:6 | y | -| main.rs:505:13:505:13 | x | main.rs:505:13:505:13 | x | main.rs:507:27:507:27 | x | -| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | main.rs:508:6:508:6 | y | -| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:511:15:511:15 | x | -| main.rs:513:13:513:13 | z | main.rs:513:13:513:13 | z | main.rs:517:14:517:14 | z | -| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:518:9:518:9 | w | -| main.rs:517:9:517:14 | &mut z | main.rs:513:13:513:13 | z | main.rs:523:15:523:15 | z | -| main.rs:527:13:527:13 | x | main.rs:527:13:527:13 | x | main.rs:529:14:529:14 | x | -| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | main.rs:530:6:530:6 | y | -| main.rs:529:9:529:14 | &mut x | main.rs:527:13:527:13 | x | main.rs:531:15:531:15 | x | -| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | main.rs:542:15:542:15 | x | -| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | main.rs:541:5:541:7 | cap | -| main.rs:538:15:540:5 | x | main.rs:535:9:535:9 | x | main.rs:539:19:539:19 | x | -| main.rs:546:13:546:13 | x | main.rs:546:13:546:13 | x | main.rs:553:15:553:15 | x | -| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | main.rs:552:5:552:12 | closure1 | -| main.rs:549:20:551:5 | x | main.rs:546:13:546:13 | x | main.rs:550:19:550:19 | x | -| main.rs:558:13:558:20 | closure2 | main.rs:558:13:558:20 | closure2 | main.rs:561:5:561:12 | closure2 | -| main.rs:561:5:561:14 | y | main.rs:555:13:555:13 | y | main.rs:562:15:562:15 | y | -| main.rs:564:13:564:13 | z | main.rs:564:13:564:13 | z | main.rs:571:15:571:15 | z | -| main.rs:567:13:567:20 | closure3 | main.rs:567:13:567:20 | closure3 | main.rs:570:5:570:12 | closure3 | -| main.rs:567:24:569:5 | z | main.rs:564:13:564:13 | z | main.rs:568:9:568:9 | z | -| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | main.rs:580:5:580:9 | block | -| main.rs:580:5:580:15 | i | main.rs:575:13:575:13 | i | main.rs:581:15:581:15 | i | -| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | main.rs:589:16:589:16 | b | -| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:586:15:586:15 | x | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:599:15:599:15 | x | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:592:19:592:19 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:596:19:596:19 | x | -| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | main.rs:605:16:605:17 | b1 | -| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | main.rs:613:16:613:17 | b2 | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x | -| main.rs:626:20:626:23 | self | main.rs:626:20:626:23 | self | main.rs:627:16:627:19 | self | -| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | self | main.rs:631:9:631:12 | self | -| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:639:9:639:9 | f | -| main.rs:635:21:638:9 | self | main.rs:634:23:634:26 | self | main.rs:637:13:637:16 | self | -| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | main.rs:637:25:637:25 | n | -| main.rs:645:13:645:13 | a | main.rs:645:13:645:13 | a | main.rs:646:15:646:15 | a | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:647:5:647:5 | a | -| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | main.rs:650:15:650:15 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:655:15:655:15 | a | -| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | main.rs:659:15:659:15 | a | -| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:664:20:664:20 | x | -| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | main.rs:668:20:668:20 | z | -| main.rs:676:17:676:20 | self | main.rs:676:17:676:20 | self | main.rs:677:10:677:13 | self | -| main.rs:682:13:682:13 | a | main.rs:682:13:682:13 | a | main.rs:683:5:683:5 | a | -| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | main.rs:686:15:686:15 | a | -| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | main.rs:706:15:706:28 | var_from_macro | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | -| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | main.rs:713:15:713:26 | var_in_macro | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | main.rs:712:30:712:41 | var_in_macro | -| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | main.rs:719:15:719:15 | x | -| main.rs:724:13:724:15 | cap | main.rs:724:13:724:15 | cap | main.rs:730:5:730:7 | cap | -| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | main.rs:726:20:726:20 | b | -| main.rs:730:5:730:13 | x | main.rs:723:13:723:13 | x | main.rs:731:15:731:15 | x | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | +| main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | main.rs:35:20:35:20 | x | +| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | main.rs:37:20:37:20 | x | +| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 | +| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | main.rs:45:15:45:16 | x3 | +| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 | +| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | main.rs:53:19:53:20 | x4 | +| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | main.rs:74:15:74:16 | a1 | +| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | main.rs:75:15:75:16 | b1 | +| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | main.rs:76:15:76:15 | x | +| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | main.rs:77:15:77:15 | y | +| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | main.rs:85:9:85:10 | p1 | +| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | main.rs:86:15:86:16 | a2 | +| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | main.rs:87:15:87:16 | b2 | +| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | main.rs:94:11:94:12 | s1 | +| main.rs:93:21:93:22 | s2 | main.rs:93:21:93:22 | s2 | main.rs:95:19:95:20 | s2 | +| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x | +| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | main.rs:109:15:109:15 | x | +| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | main.rs:106:19:106:19 | x | +| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | +| main.rs:115:24:115:25 | s2 | main.rs:115:24:115:25 | s2 | main.rs:117:19:117:20 | s2 | +| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | main.rs:125:11:125:12 | x6 | +| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | main.rs:135:15:135:16 | y1 | +| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | main.rs:130:23:130:24 | y1 | +| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:141:11:141:17 | numbers | +| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | main.rs:150:23:150:27 | first | +| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | main.rs:151:23:151:27 | third | +| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | main.rs:152:23:152:27 | fifth | +| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | main.rs:163:23:163:27 | first | +| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | main.rs:164:23:164:26 | last | +| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | main.rs:172:11:172:12 | p2 | +| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | main.rs:175:24:175:25 | x7 | +| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | main.rs:186:11:186:13 | msg | +| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:27 | id_variable | main.rs:190:24:190:34 | id_variable | +| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | main.rs:197:23:197:24 | id | +| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | main.rs:209:11:209:16 | either | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:211:26:211:27 | a3 | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:223:11:223:12 | tv | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:225:26:225:27 | a4 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:229:26:229:27 | a5 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:233:26:233:27 | a6 | +| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | main.rs:239:11:239:16 | either | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:241:16:241:17 | a7 | +| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | main.rs:250:11:250:16 | either | +| main.rs:251:13:251:13 | e | main.rs:251:13:251:13 | e | main.rs:256:15:256:15 | e | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:254:23:254:25 | a11 | +| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | main.rs:257:28:257:30 | a12 | +| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | main.rs:273:11:273:12 | fv | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:275:26:275:28 | a13 | +| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x | +| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:285:5:285:5 | x | +| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | main.rs:291:19:291:19 | x | +| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x | +| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | main.rs:302:12:302:12 | x | +| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:304:5:304:5 | x | +| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | main.rs:310:19:310:19 | x | +| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:318:7:318:7 | x | +| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | main.rs:321:12:321:12 | x | +| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:323:5:323:5 | x | +| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x | +| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | main.rs:338:18:338:18 | x | +| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | main.rs:339:19:339:19 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | +| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | main.rs:352:19:352:19 | x | +| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | main.rs:357:19:357:19 | x | +| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | main.rs:370:15:370:16 | a8 | +| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | main.rs:371:15:371:16 | b3 | +| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | main.rs:372:15:372:16 | c1 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:377:15:377:16 | a9 | +| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 | +| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 | +| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | +| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | main.rs:408:23:408:25 | a10 | +| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | main.rs:409:23:409:24 | b4 | +| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | main.rs:422:9:422:23 | example_closure | +| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | main.rs:420:9:420:9 | x | +| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | main.rs:423:15:423:16 | n1 | +| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | main.rs:430:9:430:26 | immutable_variable | +| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | main.rs:428:9:428:9 | x | +| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | main.rs:431:15:431:16 | n2 | +| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f | +| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | main.rs:438:9:438:9 | x | +| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | main.rs:443:9:443:9 | x | +| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | main.rs:452:17:452:17 | x | +| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | main.rs:462:19:462:19 | f | +| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | main.rs:461:13:461:13 | x | +| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | main.rs:470:12:470:12 | v | +| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | main.rs:471:19:471:22 | text | +| main.rs:476:13:476:13 | a | main.rs:476:13:476:13 | a | main.rs:477:5:477:5 | a | +| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a | +| main.rs:479:6:479:11 | &mut a | main.rs:476:13:476:13 | a | main.rs:480:15:480:15 | a | +| main.rs:484:13:484:13 | i | main.rs:484:13:484:13 | i | main.rs:486:14:486:14 | i | +| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | main.rs:487:6:487:10 | ref_i | +| main.rs:486:9:486:14 | &mut i | main.rs:484:13:484:13 | i | main.rs:488:15:488:15 | i | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:492:6:492:6 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:499:6:499:6 | x | +| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | main.rs:502:6:502:6 | y | +| main.rs:507:13:507:13 | x | main.rs:507:13:507:13 | x | main.rs:509:27:509:27 | x | +| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | main.rs:510:6:510:6 | y | +| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:513:15:513:15 | x | +| main.rs:515:13:515:13 | z | main.rs:515:13:515:13 | z | main.rs:519:14:519:14 | z | +| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:520:9:520:9 | w | +| main.rs:519:9:519:14 | &mut z | main.rs:515:13:515:13 | z | main.rs:525:15:525:15 | z | +| main.rs:529:13:529:13 | x | main.rs:529:13:529:13 | x | main.rs:531:14:531:14 | x | +| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | main.rs:532:6:532:6 | y | +| main.rs:531:9:531:14 | &mut x | main.rs:529:13:529:13 | x | main.rs:533:15:533:15 | x | +| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | main.rs:544:15:544:15 | x | +| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | main.rs:543:5:543:7 | cap | +| main.rs:540:15:542:5 | x | main.rs:537:9:537:9 | x | main.rs:541:19:541:19 | x | +| main.rs:548:13:548:13 | x | main.rs:548:13:548:13 | x | main.rs:555:15:555:15 | x | +| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | main.rs:554:5:554:12 | closure1 | +| main.rs:551:20:553:5 | x | main.rs:548:13:548:13 | x | main.rs:552:19:552:19 | x | +| main.rs:560:13:560:20 | closure2 | main.rs:560:13:560:20 | closure2 | main.rs:563:5:563:12 | closure2 | +| main.rs:563:5:563:14 | y | main.rs:557:13:557:13 | y | main.rs:564:15:564:15 | y | +| main.rs:566:13:566:13 | z | main.rs:566:13:566:13 | z | main.rs:573:15:573:15 | z | +| main.rs:569:13:569:20 | closure3 | main.rs:569:13:569:20 | closure3 | main.rs:572:5:572:12 | closure3 | +| main.rs:569:24:571:5 | z | main.rs:566:13:566:13 | z | main.rs:570:9:570:9 | z | +| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | main.rs:582:5:582:9 | block | +| main.rs:582:5:582:15 | i | main.rs:577:13:577:13 | i | main.rs:583:15:583:15 | i | +| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | main.rs:591:16:591:16 | b | +| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:588:15:588:15 | x | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:601:15:601:15 | x | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:594:19:594:19 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:598:19:598:19 | x | +| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | main.rs:607:16:607:17 | b1 | +| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | main.rs:615:16:615:17 | b2 | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x | +| main.rs:628:20:628:23 | self | main.rs:628:20:628:23 | self | main.rs:629:16:629:19 | self | +| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | self | main.rs:633:9:633:12 | self | +| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:641:9:641:9 | f | +| main.rs:637:21:640:9 | self | main.rs:636:23:636:26 | self | main.rs:639:13:639:16 | self | +| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | main.rs:639:25:639:25 | n | +| main.rs:647:13:647:13 | a | main.rs:647:13:647:13 | a | main.rs:648:15:648:15 | a | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:649:5:649:5 | a | +| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | main.rs:652:15:652:15 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:657:15:657:15 | a | +| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | main.rs:661:15:661:15 | a | +| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:666:20:666:20 | x | +| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | main.rs:670:20:670:20 | z | +| main.rs:678:17:678:20 | self | main.rs:678:17:678:20 | self | main.rs:679:10:679:13 | self | +| main.rs:684:13:684:13 | a | main.rs:684:13:684:13 | a | main.rs:685:5:685:5 | a | +| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | main.rs:688:15:688:15 | a | +| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | main.rs:708:15:708:28 | var_from_macro | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | +| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | main.rs:715:15:715:26 | var_in_macro | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | main.rs:714:30:714:41 | var_in_macro | +| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | main.rs:721:15:721:15 | x | +| main.rs:726:13:726:15 | cap | main.rs:726:13:726:15 | cap | main.rs:732:5:732:7 | cap | +| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | main.rs:728:20:728:20 | b | +| main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x | main.rs:733:15:733:15 | x | adjacentReads -| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:40:15:40:16 | x3 | main.rs:42:9:42:10 | x3 | -| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:48:15:48:16 | x4 | main.rs:53:15:53:16 | x4 | -| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:100:7:100:7 | x | main.rs:103:13:103:13 | x | -| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | main.rs:114:11:114:12 | s1 | -| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:139:11:139:17 | numbers | main.rs:154:11:154:17 | numbers | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:221:11:221:12 | tv | main.rs:225:11:225:12 | tv | -| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:225:11:225:12 | tv | main.rs:229:11:229:12 | tv | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:239:16:239:17 | a7 | main.rs:240:26:240:27 | a7 | -| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x | main.rs:288:13:288:13 | x | -| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:283:5:283:5 | x | main.rs:285:19:285:19 | x | -| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x | main.rs:307:13:307:13 | x | -| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:302:5:302:5 | x | main.rs:304:19:304:19 | x | -| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:316:7:316:7 | x | main.rs:327:15:327:15 | x | -| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:321:5:321:5 | x | main.rs:323:19:323:19 | x | -| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:333:11:333:11 | x | main.rs:341:15:341:15 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x | main.rs:353:7:353:7 | x | -| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:353:7:353:7 | x | main.rs:357:19:357:19 | x | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:395:9:395:10 | c2 | main.rs:399:15:399:16 | c2 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:394:9:394:10 | b4 | main.rs:398:15:398:16 | b4 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:398:15:398:16 | b4 | main.rs:412:15:412:16 | b4 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:393:9:393:11 | a10 | main.rs:397:15:397:17 | a10 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:397:15:397:17 | a10 | main.rs:411:15:411:17 | a10 | -| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:437:15:437:15 | f | main.rs:444:15:444:15 | f | -| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:476:15:476:15 | a | main.rs:477:11:477:11 | a | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:490:6:490:6 | x | main.rs:491:10:491:10 | x | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:491:10:491:10 | x | main.rs:492:10:492:10 | x | -| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:492:10:492:10 | x | main.rs:493:12:493:12 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:497:6:497:6 | x | main.rs:498:10:498:10 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:498:10:498:10 | x | main.rs:499:10:499:10 | x | -| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:499:10:499:10 | x | main.rs:501:9:501:9 | x | -| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:511:15:511:15 | x | main.rs:515:19:515:19 | x | -| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:518:9:518:9 | w | main.rs:520:7:520:7 | w | -| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:586:15:586:15 | x | main.rs:587:15:587:15 | x | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:592:19:592:19 | x | main.rs:593:19:593:19 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:596:19:596:19 | x | main.rs:597:19:597:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x | main.rs:615:19:615:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x | main.rs:617:19:617:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x | main.rs:615:19:615:19 | x | -| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x | main.rs:617:19:617:19 | x | -| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:639:9:639:9 | f | main.rs:640:9:640:9 | f | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:647:5:647:5 | a | main.rs:648:15:648:15 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:655:15:655:15 | a | main.rs:656:5:656:5 | a | -| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:656:5:656:5 | a | main.rs:657:15:657:15 | a | -| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:664:20:664:20 | x | main.rs:665:15:665:15 | x | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | main.rs:30:15:30:16 | x2 | +| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 | main.rs:44:9:44:10 | x3 | +| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 | main.rs:55:15:55:16 | x4 | +| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x | main.rs:105:13:105:13 | x | +| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | main.rs:116:11:116:12 | s1 | +| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:141:11:141:17 | numbers | main.rs:156:11:156:17 | numbers | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:223:11:223:12 | tv | main.rs:227:11:227:12 | tv | +| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:227:11:227:12 | tv | main.rs:231:11:231:12 | tv | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:241:16:241:17 | a7 | main.rs:242:26:242:27 | a7 | +| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x | main.rs:290:13:290:13 | x | +| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:285:5:285:5 | x | main.rs:287:19:287:19 | x | +| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x | main.rs:309:13:309:13 | x | +| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:304:5:304:5 | x | main.rs:306:19:306:19 | x | +| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:318:7:318:7 | x | main.rs:329:15:329:15 | x | +| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:323:5:323:5 | x | main.rs:325:19:325:19 | x | +| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x | main.rs:343:15:343:15 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | main.rs:355:7:355:7 | x | +| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:355:7:355:7 | x | main.rs:359:19:359:19 | x | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | main.rs:401:15:401:16 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | main.rs:400:15:400:16 | b4 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 | main.rs:414:15:414:16 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | main.rs:399:15:399:17 | a10 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 | main.rs:413:15:413:17 | a10 | +| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f | main.rs:446:15:446:15 | f | +| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a | main.rs:479:11:479:11 | a | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:492:6:492:6 | x | main.rs:493:10:493:10 | x | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:493:10:493:10 | x | main.rs:494:10:494:10 | x | +| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:494:10:494:10 | x | main.rs:495:12:495:12 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:499:6:499:6 | x | main.rs:500:10:500:10 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:500:10:500:10 | x | main.rs:501:10:501:10 | x | +| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:501:10:501:10 | x | main.rs:503:9:503:9 | x | +| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:513:15:513:15 | x | main.rs:517:19:517:19 | x | +| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:520:9:520:9 | w | main.rs:522:7:522:7 | w | +| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:588:15:588:15 | x | main.rs:589:15:589:15 | x | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:594:19:594:19 | x | main.rs:595:19:595:19 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:598:19:598:19 | x | main.rs:599:19:599:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x | main.rs:617:19:617:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x | main.rs:619:19:619:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x | main.rs:617:19:617:19 | x | +| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x | main.rs:619:19:619:19 | x | +| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:641:9:641:9 | f | main.rs:642:9:642:9 | f | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:649:5:649:5 | a | main.rs:650:15:650:15 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:657:15:657:15 | a | main.rs:658:5:658:5 | a | +| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:658:5:658:5 | a | main.rs:659:15:659:15 | a | +| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:666:20:666:20 | x | main.rs:667:15:667:15 | x | phi -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:208:22:208:23 | a3 | -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:208:42:208:43 | a3 | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:222:28:222:29 | a4 | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:222:54:222:55 | a4 | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:222:79:222:80 | a4 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:81:226:82 | a5 | -| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:29:226:30 | a5 | -| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:55:226:56 | a5 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:28:230:29 | a6 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:35:230:82 | SSA phi(a6) | -| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:55:230:56 | a6 | -| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:80:230:81 | a6 | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:238:22:238:23 | a7 | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:238:42:238:43 | a7 | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:250:27:250:29 | a11 | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:250:48:250:50 | a11 | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:27:272:29 | a13 | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:106:272:108 | a13 | -| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:54:272:56 | a13 | -| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:79:272:81 | a13 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:373:33:373:34 | a9 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:373:53:373:54 | a9 | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:591:9:591:9 | x | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:595:9:595:9 | x | -| main.rs:726:17:728:9 | SSA phi(x) | main.rs:723:13:723:13 | x | main.rs:724:19:729:5 | x | -| main.rs:726:17:728:9 | SSA phi(x) | main.rs:723:13:723:13 | x | main.rs:727:13:727:13 | x | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:210:22:210:23 | a3 | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:210:42:210:43 | a3 | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:224:28:224:29 | a4 | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:224:54:224:55 | a4 | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:224:79:224:80 | a4 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:81:228:82 | a5 | +| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:29:228:30 | a5 | +| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:55:228:56 | a5 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:28:232:29 | a6 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:35:232:82 | SSA phi(a6) | +| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:55:232:56 | a6 | +| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:80:232:81 | a6 | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:240:22:240:23 | a7 | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:240:42:240:43 | a7 | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:252:27:252:29 | a11 | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:252:48:252:50 | a11 | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:27:274:29 | a13 | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:106:274:108 | a13 | +| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:54:274:56 | a13 | +| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:79:274:81 | a13 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:375:33:375:34 | a9 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:375:53:375:54 | a9 | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:593:9:593:9 | x | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:597:9:597:9 | x | +| main.rs:728:17:730:9 | SSA phi(x) | main.rs:725:13:725:13 | x | main.rs:726:19:731:5 | x | +| main.rs:728:17:730:9 | SSA phi(x) | main.rs:725:13:725:13 | x | main.rs:729:13:729:13 | x | phiReadNode -| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:111:9:111:10 | s1 | -| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:603:9:603:9 | x | +| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:113:9:113:10 | s1 | +| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:605:9:605:9 | x | phiReadNodeFirstRead -| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | -| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:603:9:603:9 | x | main.rs:615:19:615:19 | x | -| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:603:9:603:9 | x | main.rs:617:19:617:19 | x | +| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | +| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:605:9:605:9 | x | main.rs:617:19:617:19 | x | +| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:605:9:605:9 | x | main.rs:619:19:619:19 | x | phiReadInput -| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:111:9:111:10 | s1 | -| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:114:11:114:12 | SSA read(s1) | -| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:607:19:607:19 | SSA read(x) | -| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:609:19:609:19 | SSA read(x) | +| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:113:9:113:10 | s1 | +| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:116:11:116:12 | SSA read(s1) | +| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:609:19:609:19 | SSA read(x) | +| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:611:19:611:19 | SSA read(x) | ultimateDef -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:22:208:23 | a3 | -| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:42:208:43 | a3 | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:28:222:29 | a4 | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:54:222:55 | a4 | -| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:79:222:80 | a4 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:29:226:30 | a5 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:55:226:56 | a5 | -| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:81:226:82 | a5 | -| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:29:226:30 | a5 | -| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:55:226:56 | a5 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:28:230:29 | a6 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:55:230:56 | a6 | -| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:80:230:81 | a6 | -| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:55:230:56 | a6 | -| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:80:230:81 | a6 | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:22:238:23 | a7 | -| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:42:238:43 | a7 | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:27:250:29 | a11 | -| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:48:250:50 | a11 | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:27:272:29 | a13 | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:54:272:56 | a13 | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:79:272:81 | a13 | -| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:106:272:108 | a13 | -| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:54:272:56 | a13 | -| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:79:272:81 | a13 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:33:373:34 | a9 | -| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:53:373:54 | a9 | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:591:9:591:9 | x | -| main.rs:589:13:598:5 | SSA phi(x) | main.rs:595:9:595:9 | x | -| main.rs:726:17:728:9 | SSA phi(x) | main.rs:724:19:729:5 | x | -| main.rs:726:17:728:9 | SSA phi(x) | main.rs:727:13:727:13 | x | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:22:210:23 | a3 | +| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:42:210:43 | a3 | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:28:224:29 | a4 | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:54:224:55 | a4 | +| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:79:224:80 | a4 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:29:228:30 | a5 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:55:228:56 | a5 | +| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:81:228:82 | a5 | +| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:29:228:30 | a5 | +| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:55:228:56 | a5 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:28:232:29 | a6 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:55:232:56 | a6 | +| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:80:232:81 | a6 | +| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:55:232:56 | a6 | +| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:80:232:81 | a6 | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:22:240:23 | a7 | +| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:42:240:43 | a7 | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:27:252:29 | a11 | +| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:48:252:50 | a11 | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:27:274:29 | a13 | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:54:274:56 | a13 | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:79:274:81 | a13 | +| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:106:274:108 | a13 | +| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:54:274:56 | a13 | +| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:79:274:81 | a13 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:33:375:34 | a9 | +| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:53:375:54 | a9 | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:593:9:593:9 | x | +| main.rs:591:13:600:5 | SSA phi(x) | main.rs:597:9:597:9 | x | +| main.rs:728:17:730:9 | SSA phi(x) | main.rs:726:19:731:5 | x | +| main.rs:728:17:730:9 | SSA phi(x) | main.rs:729:13:729:13 | x | assigns | main.rs:20:9:20:10 | x1 | main.rs:20:14:20:16 | "a" | | main.rs:25:13:25:14 | x2 | main.rs:25:18:25:18 | 4 | | main.rs:27:5:27:6 | x2 | main.rs:27:10:27:10 | 5 | -| main.rs:32:13:32:13 | x | main.rs:32:17:32:17 | 1 | -| main.rs:34:5:34:5 | x | main.rs:34:9:34:9 | 2 | -| main.rs:39:9:39:10 | x3 | main.rs:39:14:39:14 | 1 | -| main.rs:41:9:41:10 | x3 | main.rs:42:9:42:14 | ... + ... | -| main.rs:47:9:47:10 | x4 | main.rs:47:14:47:16 | "a" | -| main.rs:50:13:50:14 | x4 | main.rs:50:18:50:20 | "b" | -| main.rs:79:9:79:10 | p1 | main.rs:79:14:79:37 | Point {...} | -| main.rs:89:9:89:10 | s1 | main.rs:89:14:89:41 | Some(...) | -| main.rs:98:9:98:9 | x | main.rs:98:13:98:22 | Some(...) | -| main.rs:102:13:102:13 | x | main.rs:103:13:103:13 | x | -| main.rs:111:9:111:10 | s1 | main.rs:111:14:111:41 | Some(...) | -| main.rs:120:9:120:10 | x6 | main.rs:120:14:120:20 | Some(...) | -| main.rs:121:9:121:10 | y1 | main.rs:121:14:121:15 | 10 | -| main.rs:137:9:137:15 | numbers | main.rs:137:19:137:35 | TupleExpr | -| main.rs:168:9:168:10 | p2 | main.rs:168:14:168:37 | Point {...} | -| main.rs:182:9:182:11 | msg | main.rs:182:15:182:38 | ...::Hello {...} | -| main.rs:206:9:206:14 | either | main.rs:206:18:206:33 | ...::Left(...) | -| main.rs:220:9:220:10 | tv | main.rs:220:14:220:36 | ...::Second(...) | -| main.rs:236:9:236:14 | either | main.rs:236:18:236:33 | ...::Left(...) | -| main.rs:246:9:246:14 | either | main.rs:246:18:246:33 | ...::Left(...) | -| main.rs:270:9:270:10 | fv | main.rs:270:14:270:35 | ...::Second(...) | -| main.rs:279:9:279:9 | x | main.rs:279:12:279:19 | Some(...) | -| main.rs:287:13:287:13 | x | main.rs:288:13:288:13 | x | -| main.rs:295:9:295:9 | x | main.rs:295:13:295:20 | Some(...) | -| main.rs:306:13:306:13 | x | main.rs:307:13:307:13 | x | -| main.rs:314:9:314:9 | x | main.rs:314:13:314:20 | Some(...) | -| main.rs:332:9:332:9 | x | main.rs:332:13:332:20 | Some(...) | -| main.rs:335:20:335:20 | x | main.rs:336:18:336:18 | x | -| main.rs:346:9:346:9 | x | main.rs:346:13:346:18 | Ok(...) | -| main.rs:416:9:416:23 | example_closure | main.rs:417:9:418:9 | \|...\| x | -| main.rs:419:9:419:10 | n1 | main.rs:420:9:420:26 | example_closure(...) | -| main.rs:424:9:424:26 | immutable_variable | main.rs:425:5:426:9 | \|...\| x | -| main.rs:427:9:427:10 | n2 | main.rs:428:9:428:29 | immutable_variable(...) | -| main.rs:434:9:434:9 | f | main.rs:435:9:436:9 | \|...\| x | -| main.rs:457:13:457:13 | f | main.rs:458:13:459:13 | \|...\| x | -| main.rs:465:9:465:9 | v | main.rs:465:13:465:41 | &... | -| main.rs:474:13:474:13 | a | main.rs:474:17:474:17 | 0 | -| main.rs:482:13:482:13 | i | main.rs:482:17:482:17 | 1 | -| main.rs:483:9:483:13 | ref_i | main.rs:484:9:484:14 | &mut i | -| main.rs:505:13:505:13 | x | main.rs:505:17:505:17 | 2 | -| main.rs:506:9:506:9 | y | main.rs:507:9:507:28 | mutate_param(...) | -| main.rs:513:13:513:13 | z | main.rs:513:17:513:17 | 4 | -| main.rs:514:9:514:9 | w | main.rs:515:9:515:19 | &mut ... | -| main.rs:527:13:527:13 | x | main.rs:527:17:527:17 | 1 | -| main.rs:528:9:528:9 | y | main.rs:529:9:529:14 | &mut x | -| main.rs:535:9:535:9 | x | main.rs:535:13:535:15 | 100 | -| main.rs:538:9:538:11 | cap | main.rs:538:15:540:5 | \|...\| ... | -| main.rs:546:13:546:13 | x | main.rs:546:17:546:17 | 1 | -| main.rs:549:9:549:16 | closure1 | main.rs:549:20:551:5 | \|...\| ... | -| main.rs:555:13:555:13 | y | main.rs:555:17:555:17 | 2 | -| main.rs:558:13:558:20 | closure2 | main.rs:558:24:560:5 | \|...\| ... | -| main.rs:559:9:559:9 | y | main.rs:559:13:559:13 | 3 | -| main.rs:564:13:564:13 | z | main.rs:564:17:564:17 | 2 | -| main.rs:567:13:567:20 | closure3 | main.rs:567:24:569:5 | \|...\| ... | -| main.rs:575:13:575:13 | i | main.rs:575:22:575:22 | 0 | -| main.rs:576:9:576:13 | block | main.rs:576:17:578:5 | { ... } | -| main.rs:577:9:577:9 | i | main.rs:577:13:577:13 | 1 | -| main.rs:585:13:585:13 | x | main.rs:585:17:585:17 | 1 | -| main.rs:591:9:591:9 | x | main.rs:591:13:591:13 | 2 | -| main.rs:595:9:595:9 | x | main.rs:595:13:595:13 | 3 | -| main.rs:603:9:603:9 | x | main.rs:603:13:603:13 | 1 | -| main.rs:635:17:635:17 | f | main.rs:635:21:638:9 | \|...\| ... | -| main.rs:645:13:645:13 | a | main.rs:645:17:645:35 | MyStruct {...} | -| main.rs:649:5:649:5 | a | main.rs:649:9:649:27 | MyStruct {...} | -| main.rs:654:13:654:13 | a | main.rs:654:17:654:25 | [...] | -| main.rs:658:5:658:5 | a | main.rs:658:9:658:17 | [...] | -| main.rs:663:9:663:9 | x | main.rs:663:13:663:14 | 16 | -| main.rs:667:9:667:9 | z | main.rs:667:13:667:14 | 17 | -| main.rs:682:13:682:13 | a | main.rs:682:17:682:35 | MyStruct {...} | -| main.rs:704:9:704:22 | var_from_macro | main.rs:705:9:705:25 | MacroExpr | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:23:705:24 | 37 | -| main.rs:707:9:707:20 | var_in_macro | main.rs:707:24:707:25 | 33 | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | 0 | -| main.rs:718:5:718:5 | x | main.rs:718:9:718:9 | 1 | -| main.rs:723:13:723:13 | x | main.rs:723:17:723:19 | 100 | -| main.rs:724:13:724:15 | cap | main.rs:724:19:729:5 | \|...\| ... | -| main.rs:727:13:727:13 | x | main.rs:727:17:727:19 | 200 | +| main.rs:29:5:29:6 | x2 | main.rs:29:10:29:11 | x2 | +| main.rs:34:13:34:13 | x | main.rs:34:17:34:17 | 1 | +| main.rs:36:5:36:5 | x | main.rs:36:9:36:9 | 2 | +| main.rs:41:9:41:10 | x3 | main.rs:41:14:41:14 | 1 | +| main.rs:43:9:43:10 | x3 | main.rs:44:9:44:14 | ... + ... | +| main.rs:49:9:49:10 | x4 | main.rs:49:14:49:16 | "a" | +| main.rs:52:13:52:14 | x4 | main.rs:52:18:52:20 | "b" | +| main.rs:81:9:81:10 | p1 | main.rs:81:14:81:37 | Point {...} | +| main.rs:91:9:91:10 | s1 | main.rs:91:14:91:41 | Some(...) | +| main.rs:100:9:100:9 | x | main.rs:100:13:100:22 | Some(...) | +| main.rs:104:13:104:13 | x | main.rs:105:13:105:13 | x | +| main.rs:113:9:113:10 | s1 | main.rs:113:14:113:41 | Some(...) | +| main.rs:122:9:122:10 | x6 | main.rs:122:14:122:20 | Some(...) | +| main.rs:123:9:123:10 | y1 | main.rs:123:14:123:15 | 10 | +| main.rs:139:9:139:15 | numbers | main.rs:139:19:139:35 | TupleExpr | +| main.rs:170:9:170:10 | p2 | main.rs:170:14:170:37 | Point {...} | +| main.rs:184:9:184:11 | msg | main.rs:184:15:184:38 | ...::Hello {...} | +| main.rs:208:9:208:14 | either | main.rs:208:18:208:33 | ...::Left(...) | +| main.rs:222:9:222:10 | tv | main.rs:222:14:222:36 | ...::Second(...) | +| main.rs:238:9:238:14 | either | main.rs:238:18:238:33 | ...::Left(...) | +| main.rs:248:9:248:14 | either | main.rs:248:18:248:33 | ...::Left(...) | +| main.rs:272:9:272:10 | fv | main.rs:272:14:272:35 | ...::Second(...) | +| main.rs:281:9:281:9 | x | main.rs:281:12:281:19 | Some(...) | +| main.rs:289:13:289:13 | x | main.rs:290:13:290:13 | x | +| main.rs:297:9:297:9 | x | main.rs:297:13:297:20 | Some(...) | +| main.rs:308:13:308:13 | x | main.rs:309:13:309:13 | x | +| main.rs:316:9:316:9 | x | main.rs:316:13:316:20 | Some(...) | +| main.rs:334:9:334:9 | x | main.rs:334:13:334:20 | Some(...) | +| main.rs:337:20:337:20 | x | main.rs:338:18:338:18 | x | +| main.rs:348:9:348:9 | x | main.rs:348:13:348:18 | Ok(...) | +| main.rs:418:9:418:23 | example_closure | main.rs:419:9:420:9 | \|...\| x | +| main.rs:421:9:421:10 | n1 | main.rs:422:9:422:26 | example_closure(...) | +| main.rs:426:9:426:26 | immutable_variable | main.rs:427:5:428:9 | \|...\| x | +| main.rs:429:9:429:10 | n2 | main.rs:430:9:430:29 | immutable_variable(...) | +| main.rs:436:9:436:9 | f | main.rs:437:9:438:9 | \|...\| x | +| main.rs:459:13:459:13 | f | main.rs:460:13:461:13 | \|...\| x | +| main.rs:467:9:467:9 | v | main.rs:467:13:467:41 | &... | +| main.rs:476:13:476:13 | a | main.rs:476:17:476:17 | 0 | +| main.rs:484:13:484:13 | i | main.rs:484:17:484:17 | 1 | +| main.rs:485:9:485:13 | ref_i | main.rs:486:9:486:14 | &mut i | +| main.rs:507:13:507:13 | x | main.rs:507:17:507:17 | 2 | +| main.rs:508:9:508:9 | y | main.rs:509:9:509:28 | mutate_param(...) | +| main.rs:515:13:515:13 | z | main.rs:515:17:515:17 | 4 | +| main.rs:516:9:516:9 | w | main.rs:517:9:517:19 | &mut ... | +| main.rs:529:13:529:13 | x | main.rs:529:17:529:17 | 1 | +| main.rs:530:9:530:9 | y | main.rs:531:9:531:14 | &mut x | +| main.rs:537:9:537:9 | x | main.rs:537:13:537:15 | 100 | +| main.rs:540:9:540:11 | cap | main.rs:540:15:542:5 | \|...\| ... | +| main.rs:548:13:548:13 | x | main.rs:548:17:548:17 | 1 | +| main.rs:551:9:551:16 | closure1 | main.rs:551:20:553:5 | \|...\| ... | +| main.rs:557:13:557:13 | y | main.rs:557:17:557:17 | 2 | +| main.rs:560:13:560:20 | closure2 | main.rs:560:24:562:5 | \|...\| ... | +| main.rs:561:9:561:9 | y | main.rs:561:13:561:13 | 3 | +| main.rs:566:13:566:13 | z | main.rs:566:17:566:17 | 2 | +| main.rs:569:13:569:20 | closure3 | main.rs:569:24:571:5 | \|...\| ... | +| main.rs:577:13:577:13 | i | main.rs:577:22:577:22 | 0 | +| main.rs:578:9:578:13 | block | main.rs:578:17:580:5 | { ... } | +| main.rs:579:9:579:9 | i | main.rs:579:13:579:13 | 1 | +| main.rs:587:13:587:13 | x | main.rs:587:17:587:17 | 1 | +| main.rs:593:9:593:9 | x | main.rs:593:13:593:13 | 2 | +| main.rs:597:9:597:9 | x | main.rs:597:13:597:13 | 3 | +| main.rs:605:9:605:9 | x | main.rs:605:13:605:13 | 1 | +| main.rs:637:17:637:17 | f | main.rs:637:21:640:9 | \|...\| ... | +| main.rs:647:13:647:13 | a | main.rs:647:17:647:35 | MyStruct {...} | +| main.rs:651:5:651:5 | a | main.rs:651:9:651:27 | MyStruct {...} | +| main.rs:656:13:656:13 | a | main.rs:656:17:656:25 | [...] | +| main.rs:660:5:660:5 | a | main.rs:660:9:660:17 | [...] | +| main.rs:665:9:665:9 | x | main.rs:665:13:665:14 | 16 | +| main.rs:669:9:669:9 | z | main.rs:669:13:669:14 | 17 | +| main.rs:684:13:684:13 | a | main.rs:684:17:684:35 | MyStruct {...} | +| main.rs:706:9:706:22 | var_from_macro | main.rs:707:9:707:25 | MacroExpr | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:23:707:24 | 37 | +| main.rs:709:9:709:20 | var_in_macro | main.rs:709:24:709:25 | 33 | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | 0 | +| main.rs:720:5:720:5 | x | main.rs:720:9:720:9 | 1 | +| main.rs:725:13:725:13 | x | main.rs:725:17:725:19 | 100 | +| main.rs:726:13:726:15 | cap | main.rs:726:19:731:5 | \|...\| ... | +| main.rs:729:13:729:13 | x | main.rs:729:17:729:19 | 200 | diff --git a/rust/ql/test/library-tests/variables/main.rs b/rust/ql/test/library-tests/variables/main.rs index 97ab183099e7..948d9134be3e 100644 --- a/rust/ql/test/library-tests/variables/main.rs +++ b/rust/ql/test/library-tests/variables/main.rs @@ -26,6 +26,8 @@ fn mutable_variable() { print_i64(x2); // $ read_access=x2 x2 = 5; // $ write_access=x2 print_i64(x2); // $ read_access=x2 + x2 = x2; // $ read_access=x2 $ write_access=x2 + print_i64(x2); // $ read_access=x2 } fn mutable_variable_immutable_borrow() { diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected index 2a8673172d21..d2194a59cadd 100644 --- a/rust/ql/test/library-tests/variables/variables.expected +++ b/rust/ql/test/library-tests/variables/variables.expected @@ -5,138 +5,138 @@ variable | main.rs:15:18:15:18 | i | | main.rs:20:9:20:10 | x1 | | main.rs:25:13:25:14 | x2 | -| main.rs:32:13:32:13 | x | -| main.rs:39:9:39:10 | x3 | +| main.rs:34:13:34:13 | x | | main.rs:41:9:41:10 | x3 | -| main.rs:47:9:47:10 | x4 | -| main.rs:50:13:50:14 | x4 | -| main.rs:64:13:64:14 | a1 | -| main.rs:65:13:65:14 | b1 | -| main.rs:68:13:68:13 | x | -| main.rs:69:13:69:13 | y | -| main.rs:79:9:79:10 | p1 | -| main.rs:81:12:81:13 | a2 | -| main.rs:82:12:82:13 | b2 | -| main.rs:89:9:89:10 | s1 | -| main.rs:91:21:91:22 | s2 | -| main.rs:98:9:98:9 | x | -| main.rs:99:14:99:14 | x | -| main.rs:102:13:102:13 | x | -| main.rs:111:9:111:10 | s1 | -| main.rs:113:24:113:25 | s2 | -| main.rs:120:9:120:10 | x6 | -| main.rs:121:9:121:10 | y1 | -| main.rs:125:14:125:15 | y1 | -| main.rs:137:9:137:15 | numbers | -| main.rs:142:13:142:17 | first | -| main.rs:144:13:144:17 | third | -| main.rs:146:13:146:17 | fifth | -| main.rs:157:13:157:17 | first | -| main.rs:159:13:159:16 | last | -| main.rs:168:9:168:10 | p2 | -| main.rs:172:16:172:17 | x7 | -| main.rs:182:9:182:11 | msg | -| main.rs:187:17:187:27 | id_variable | -| main.rs:192:26:192:27 | id | -| main.rs:206:9:206:14 | either | -| main.rs:208:9:208:44 | a3 | -| main.rs:220:9:220:10 | tv | -| main.rs:222:9:222:81 | a4 | -| main.rs:226:9:226:83 | a5 | -| main.rs:230:9:230:83 | a6 | -| main.rs:236:9:236:14 | either | -| main.rs:238:9:238:44 | a7 | -| main.rs:246:9:246:14 | either | -| main.rs:249:13:249:13 | e | -| main.rs:250:14:250:51 | a11 | -| main.rs:253:33:253:35 | a12 | -| main.rs:270:9:270:10 | fv | -| main.rs:272:9:272:109 | a13 | -| main.rs:279:9:279:9 | x | -| main.rs:280:17:280:17 | x | -| main.rs:287:13:287:13 | x | -| main.rs:295:9:295:9 | x | -| main.rs:296:17:296:17 | x | -| main.rs:299:14:299:14 | x | -| main.rs:306:13:306:13 | x | -| main.rs:314:9:314:9 | x | -| main.rs:315:20:315:20 | x | -| main.rs:318:14:318:14 | x | -| main.rs:332:9:332:9 | x | -| main.rs:334:14:334:14 | x | -| main.rs:335:20:335:20 | x | -| main.rs:346:9:346:9 | x | -| main.rs:347:16:347:16 | x | -| main.rs:352:20:352:20 | x | -| main.rs:362:5:362:6 | a8 | -| main.rs:364:9:364:10 | b3 | -| main.rs:365:9:365:10 | c1 | -| main.rs:373:20:373:55 | a9 | -| main.rs:380:13:380:15 | a10 | -| main.rs:381:13:381:14 | b4 | -| main.rs:382:13:382:14 | c2 | -| main.rs:403:13:403:15 | a10 | -| main.rs:404:13:404:14 | b4 | -| main.rs:416:9:416:23 | example_closure | -| main.rs:417:10:417:10 | x | -| main.rs:419:9:419:10 | n1 | -| main.rs:424:9:424:26 | immutable_variable | -| main.rs:425:6:425:6 | x | -| main.rs:427:9:427:10 | n2 | -| main.rs:434:9:434:9 | f | -| main.rs:435:10:435:10 | x | -| main.rs:439:10:439:10 | x | -| main.rs:448:14:448:14 | x | -| main.rs:457:13:457:13 | f | -| main.rs:458:14:458:14 | x | -| main.rs:465:9:465:9 | v | -| main.rs:467:9:467:12 | text | -| main.rs:474:13:474:13 | a | -| main.rs:482:13:482:13 | i | -| main.rs:483:9:483:13 | ref_i | -| main.rs:489:17:489:17 | x | -| main.rs:496:22:496:22 | x | -| main.rs:496:38:496:38 | y | -| main.rs:505:13:505:13 | x | -| main.rs:506:9:506:9 | y | -| main.rs:513:13:513:13 | z | -| main.rs:514:9:514:9 | w | -| main.rs:527:13:527:13 | x | -| main.rs:528:9:528:9 | y | -| main.rs:535:9:535:9 | x | -| main.rs:538:9:538:11 | cap | -| main.rs:546:13:546:13 | x | -| main.rs:549:9:549:16 | closure1 | -| main.rs:555:13:555:13 | y | -| main.rs:558:13:558:20 | closure2 | -| main.rs:564:13:564:13 | z | -| main.rs:567:13:567:20 | closure3 | -| main.rs:575:13:575:13 | i | -| main.rs:576:9:576:13 | block | -| main.rs:584:8:584:8 | b | -| main.rs:585:13:585:13 | x | -| main.rs:602:13:602:14 | b1 | -| main.rs:602:23:602:24 | b2 | -| main.rs:603:9:603:9 | x | -| main.rs:626:20:626:23 | self | -| main.rs:630:11:630:14 | self | -| main.rs:634:23:634:26 | self | -| main.rs:635:17:635:17 | f | -| main.rs:635:22:635:22 | n | -| main.rs:645:13:645:13 | a | -| main.rs:654:13:654:13 | a | -| main.rs:663:9:663:9 | x | -| main.rs:667:9:667:9 | z | -| main.rs:676:17:676:20 | self | -| main.rs:682:13:682:13 | a | -| main.rs:704:9:704:22 | var_from_macro | -| main.rs:705:9:705:21 | var_in_macro | -| main.rs:707:9:707:20 | var_in_macro | -| main.rs:712:15:712:28 | var_in_macro | -| main.rs:717:9:717:9 | x | -| main.rs:723:13:723:13 | x | -| main.rs:724:13:724:15 | cap | -| main.rs:724:20:724:20 | b | +| main.rs:43:9:43:10 | x3 | +| main.rs:49:9:49:10 | x4 | +| main.rs:52:13:52:14 | x4 | +| main.rs:66:13:66:14 | a1 | +| main.rs:67:13:67:14 | b1 | +| main.rs:70:13:70:13 | x | +| main.rs:71:13:71:13 | y | +| main.rs:81:9:81:10 | p1 | +| main.rs:83:12:83:13 | a2 | +| main.rs:84:12:84:13 | b2 | +| main.rs:91:9:91:10 | s1 | +| main.rs:93:21:93:22 | s2 | +| main.rs:100:9:100:9 | x | +| main.rs:101:14:101:14 | x | +| main.rs:104:13:104:13 | x | +| main.rs:113:9:113:10 | s1 | +| main.rs:115:24:115:25 | s2 | +| main.rs:122:9:122:10 | x6 | +| main.rs:123:9:123:10 | y1 | +| main.rs:127:14:127:15 | y1 | +| main.rs:139:9:139:15 | numbers | +| main.rs:144:13:144:17 | first | +| main.rs:146:13:146:17 | third | +| main.rs:148:13:148:17 | fifth | +| main.rs:159:13:159:17 | first | +| main.rs:161:13:161:16 | last | +| main.rs:170:9:170:10 | p2 | +| main.rs:174:16:174:17 | x7 | +| main.rs:184:9:184:11 | msg | +| main.rs:189:17:189:27 | id_variable | +| main.rs:194:26:194:27 | id | +| main.rs:208:9:208:14 | either | +| main.rs:210:9:210:44 | a3 | +| main.rs:222:9:222:10 | tv | +| main.rs:224:9:224:81 | a4 | +| main.rs:228:9:228:83 | a5 | +| main.rs:232:9:232:83 | a6 | +| main.rs:238:9:238:14 | either | +| main.rs:240:9:240:44 | a7 | +| main.rs:248:9:248:14 | either | +| main.rs:251:13:251:13 | e | +| main.rs:252:14:252:51 | a11 | +| main.rs:255:33:255:35 | a12 | +| main.rs:272:9:272:10 | fv | +| main.rs:274:9:274:109 | a13 | +| main.rs:281:9:281:9 | x | +| main.rs:282:17:282:17 | x | +| main.rs:289:13:289:13 | x | +| main.rs:297:9:297:9 | x | +| main.rs:298:17:298:17 | x | +| main.rs:301:14:301:14 | x | +| main.rs:308:13:308:13 | x | +| main.rs:316:9:316:9 | x | +| main.rs:317:20:317:20 | x | +| main.rs:320:14:320:14 | x | +| main.rs:334:9:334:9 | x | +| main.rs:336:14:336:14 | x | +| main.rs:337:20:337:20 | x | +| main.rs:348:9:348:9 | x | +| main.rs:349:16:349:16 | x | +| main.rs:354:20:354:20 | x | +| main.rs:364:5:364:6 | a8 | +| main.rs:366:9:366:10 | b3 | +| main.rs:367:9:367:10 | c1 | +| main.rs:375:20:375:55 | a9 | +| main.rs:382:13:382:15 | a10 | +| main.rs:383:13:383:14 | b4 | +| main.rs:384:13:384:14 | c2 | +| main.rs:405:13:405:15 | a10 | +| main.rs:406:13:406:14 | b4 | +| main.rs:418:9:418:23 | example_closure | +| main.rs:419:10:419:10 | x | +| main.rs:421:9:421:10 | n1 | +| main.rs:426:9:426:26 | immutable_variable | +| main.rs:427:6:427:6 | x | +| main.rs:429:9:429:10 | n2 | +| main.rs:436:9:436:9 | f | +| main.rs:437:10:437:10 | x | +| main.rs:441:10:441:10 | x | +| main.rs:450:14:450:14 | x | +| main.rs:459:13:459:13 | f | +| main.rs:460:14:460:14 | x | +| main.rs:467:9:467:9 | v | +| main.rs:469:9:469:12 | text | +| main.rs:476:13:476:13 | a | +| main.rs:484:13:484:13 | i | +| main.rs:485:9:485:13 | ref_i | +| main.rs:491:17:491:17 | x | +| main.rs:498:22:498:22 | x | +| main.rs:498:38:498:38 | y | +| main.rs:507:13:507:13 | x | +| main.rs:508:9:508:9 | y | +| main.rs:515:13:515:13 | z | +| main.rs:516:9:516:9 | w | +| main.rs:529:13:529:13 | x | +| main.rs:530:9:530:9 | y | +| main.rs:537:9:537:9 | x | +| main.rs:540:9:540:11 | cap | +| main.rs:548:13:548:13 | x | +| main.rs:551:9:551:16 | closure1 | +| main.rs:557:13:557:13 | y | +| main.rs:560:13:560:20 | closure2 | +| main.rs:566:13:566:13 | z | +| main.rs:569:13:569:20 | closure3 | +| main.rs:577:13:577:13 | i | +| main.rs:578:9:578:13 | block | +| main.rs:586:8:586:8 | b | +| main.rs:587:13:587:13 | x | +| main.rs:604:13:604:14 | b1 | +| main.rs:604:23:604:24 | b2 | +| main.rs:605:9:605:9 | x | +| main.rs:628:20:628:23 | self | +| main.rs:632:11:632:14 | self | +| main.rs:636:23:636:26 | self | +| main.rs:637:17:637:17 | f | +| main.rs:637:22:637:22 | n | +| main.rs:647:13:647:13 | a | +| main.rs:656:13:656:13 | a | +| main.rs:665:9:665:9 | x | +| main.rs:669:9:669:9 | z | +| main.rs:678:17:678:20 | self | +| main.rs:684:13:684:13 | a | +| main.rs:706:9:706:22 | var_from_macro | +| main.rs:707:9:707:21 | var_in_macro | +| main.rs:709:9:709:20 | var_in_macro | +| main.rs:714:15:714:28 | var_in_macro | +| main.rs:719:9:719:9 | x | +| main.rs:725:13:725:13 | x | +| main.rs:726:13:726:15 | cap | +| main.rs:726:20:726:20 | b | variableAccess | main.rs:7:20:7:20 | s | main.rs:5:14:5:14 | s | | main.rs:12:20:12:20 | i | main.rs:10:14:10:14 | i | @@ -145,226 +145,230 @@ variableAccess | main.rs:26:15:26:16 | x2 | main.rs:25:13:25:14 | x2 | | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | | main.rs:28:15:28:16 | x2 | main.rs:25:13:25:14 | x2 | -| main.rs:33:20:33:20 | x | main.rs:32:13:32:13 | x | -| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | -| main.rs:35:20:35:20 | x | main.rs:32:13:32:13 | x | -| main.rs:40:15:40:16 | x3 | main.rs:39:9:39:10 | x3 | -| main.rs:42:9:42:10 | x3 | main.rs:39:9:39:10 | x3 | -| main.rs:43:15:43:16 | x3 | main.rs:41:9:41:10 | x3 | -| main.rs:48:15:48:16 | x4 | main.rs:47:9:47:10 | x4 | -| main.rs:51:19:51:20 | x4 | main.rs:50:13:50:14 | x4 | -| main.rs:53:15:53:16 | x4 | main.rs:47:9:47:10 | x4 | -| main.rs:72:15:72:16 | a1 | main.rs:64:13:64:14 | a1 | -| main.rs:73:15:73:16 | b1 | main.rs:65:13:65:14 | b1 | -| main.rs:74:15:74:15 | x | main.rs:68:13:68:13 | x | -| main.rs:75:15:75:15 | y | main.rs:69:13:69:13 | y | -| main.rs:83:9:83:10 | p1 | main.rs:79:9:79:10 | p1 | -| main.rs:84:15:84:16 | a2 | main.rs:81:12:81:13 | a2 | -| main.rs:85:15:85:16 | b2 | main.rs:82:12:82:13 | b2 | -| main.rs:92:11:92:12 | s1 | main.rs:89:9:89:10 | s1 | -| main.rs:93:19:93:20 | s2 | main.rs:91:21:91:22 | s2 | -| main.rs:100:7:100:7 | x | main.rs:98:9:98:9 | x | -| main.rs:103:13:103:13 | x | main.rs:98:9:98:9 | x | -| main.rs:104:19:104:19 | x | main.rs:102:13:102:13 | x | -| main.rs:107:15:107:15 | x | main.rs:99:14:99:14 | x | -| main.rs:114:11:114:12 | s1 | main.rs:111:9:111:10 | s1 | -| main.rs:115:19:115:20 | s2 | main.rs:113:24:113:25 | s2 | -| main.rs:123:11:123:12 | x6 | main.rs:120:9:120:10 | x6 | -| main.rs:128:23:128:24 | y1 | main.rs:125:14:125:15 | y1 | -| main.rs:133:15:133:16 | y1 | main.rs:121:9:121:10 | y1 | -| main.rs:139:11:139:17 | numbers | main.rs:137:9:137:15 | numbers | -| main.rs:148:23:148:27 | first | main.rs:142:13:142:17 | first | -| main.rs:149:23:149:27 | third | main.rs:144:13:144:17 | third | -| main.rs:150:23:150:27 | fifth | main.rs:146:13:146:17 | fifth | -| main.rs:154:11:154:17 | numbers | main.rs:137:9:137:15 | numbers | -| main.rs:161:23:161:27 | first | main.rs:157:13:157:17 | first | -| main.rs:162:23:162:26 | last | main.rs:159:13:159:16 | last | -| main.rs:170:11:170:12 | p2 | main.rs:168:9:168:10 | p2 | -| main.rs:173:24:173:25 | x7 | main.rs:172:16:172:17 | x7 | -| main.rs:184:11:184:13 | msg | main.rs:182:9:182:11 | msg | -| main.rs:188:24:188:34 | id_variable | main.rs:187:17:187:27 | id_variable | -| main.rs:195:23:195:24 | id | main.rs:192:26:192:27 | id | -| main.rs:207:11:207:16 | either | main.rs:206:9:206:14 | either | -| main.rs:209:26:209:27 | a3 | main.rs:208:9:208:44 | a3 | -| main.rs:221:11:221:12 | tv | main.rs:220:9:220:10 | tv | -| main.rs:223:26:223:27 | a4 | main.rs:222:9:222:81 | a4 | -| main.rs:225:11:225:12 | tv | main.rs:220:9:220:10 | tv | -| main.rs:227:26:227:27 | a5 | main.rs:226:9:226:83 | a5 | -| main.rs:229:11:229:12 | tv | main.rs:220:9:220:10 | tv | -| main.rs:231:26:231:27 | a6 | main.rs:230:9:230:83 | a6 | -| main.rs:237:11:237:16 | either | main.rs:236:9:236:14 | either | -| main.rs:239:16:239:17 | a7 | main.rs:238:9:238:44 | a7 | -| main.rs:240:26:240:27 | a7 | main.rs:238:9:238:44 | a7 | -| main.rs:248:11:248:16 | either | main.rs:246:9:246:14 | either | -| main.rs:252:23:252:25 | a11 | main.rs:250:14:250:51 | a11 | -| main.rs:254:15:254:15 | e | main.rs:249:13:249:13 | e | -| main.rs:255:28:255:30 | a12 | main.rs:253:33:253:35 | a12 | -| main.rs:271:11:271:12 | fv | main.rs:270:9:270:10 | fv | -| main.rs:273:26:273:28 | a13 | main.rs:272:9:272:109 | a13 | -| main.rs:281:7:281:7 | x | main.rs:279:9:279:9 | x | -| main.rs:283:5:283:5 | x | main.rs:280:17:280:17 | x | -| main.rs:285:19:285:19 | x | main.rs:280:17:280:17 | x | -| main.rs:288:13:288:13 | x | main.rs:279:9:279:9 | x | -| main.rs:289:19:289:19 | x | main.rs:287:13:287:13 | x | -| main.rs:297:7:297:7 | x | main.rs:295:9:295:9 | x | -| main.rs:300:12:300:12 | x | main.rs:296:17:296:17 | x | -| main.rs:302:5:302:5 | x | main.rs:299:14:299:14 | x | -| main.rs:304:19:304:19 | x | main.rs:299:14:299:14 | x | -| main.rs:307:13:307:13 | x | main.rs:295:9:295:9 | x | -| main.rs:308:19:308:19 | x | main.rs:306:13:306:13 | x | -| main.rs:316:7:316:7 | x | main.rs:314:9:314:9 | x | -| main.rs:319:12:319:12 | x | main.rs:315:20:315:20 | x | -| main.rs:321:5:321:5 | x | main.rs:318:14:318:14 | x | -| main.rs:323:19:323:19 | x | main.rs:318:14:318:14 | x | -| main.rs:327:15:327:15 | x | main.rs:314:9:314:9 | x | -| main.rs:333:11:333:11 | x | main.rs:332:9:332:9 | x | -| main.rs:336:18:336:18 | x | main.rs:334:14:334:14 | x | -| main.rs:337:19:337:19 | x | main.rs:335:20:335:20 | x | -| main.rs:341:15:341:15 | x | main.rs:332:9:332:9 | x | -| main.rs:348:7:348:7 | x | main.rs:346:9:346:9 | x | -| main.rs:350:19:350:19 | x | main.rs:347:16:347:16 | x | -| main.rs:353:7:353:7 | x | main.rs:346:9:346:9 | x | -| main.rs:355:19:355:19 | x | main.rs:352:20:352:20 | x | -| main.rs:357:19:357:19 | x | main.rs:346:9:346:9 | x | -| main.rs:368:15:368:16 | a8 | main.rs:362:5:362:6 | a8 | -| main.rs:369:15:369:16 | b3 | main.rs:364:9:364:10 | b3 | -| main.rs:370:15:370:16 | c1 | main.rs:365:9:365:10 | c1 | -| main.rs:375:15:375:16 | a9 | main.rs:373:20:373:55 | a9 | -| main.rs:384:15:384:17 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:385:15:385:16 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:386:15:386:16 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:393:9:393:11 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:394:9:394:10 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:395:9:395:10 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:397:15:397:17 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:398:15:398:16 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:399:15:399:16 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:406:23:406:25 | a10 | main.rs:403:13:403:15 | a10 | -| main.rs:407:23:407:24 | b4 | main.rs:404:13:404:14 | b4 | -| main.rs:411:15:411:17 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:412:15:412:16 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:418:9:418:9 | x | main.rs:417:10:417:10 | x | -| main.rs:420:9:420:23 | example_closure | main.rs:416:9:416:23 | example_closure | -| main.rs:421:15:421:16 | n1 | main.rs:419:9:419:10 | n1 | -| main.rs:426:9:426:9 | x | main.rs:425:6:425:6 | x | -| main.rs:428:9:428:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | -| main.rs:429:15:429:16 | n2 | main.rs:427:9:427:10 | n2 | -| main.rs:436:9:436:9 | x | main.rs:435:10:435:10 | x | -| main.rs:437:15:437:15 | f | main.rs:434:9:434:9 | f | -| main.rs:441:9:441:9 | x | main.rs:439:10:439:10 | x | -| main.rs:444:15:444:15 | f | main.rs:434:9:434:9 | f | -| main.rs:450:17:450:17 | x | main.rs:448:14:448:14 | x | -| main.rs:459:13:459:13 | x | main.rs:458:14:458:14 | x | -| main.rs:460:19:460:19 | f | main.rs:457:13:457:13 | f | -| main.rs:468:12:468:12 | v | main.rs:465:9:465:9 | v | -| main.rs:469:19:469:22 | text | main.rs:467:9:467:12 | text | -| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | -| main.rs:476:15:476:15 | a | main.rs:474:13:474:13 | a | -| main.rs:477:11:477:11 | a | main.rs:474:13:474:13 | a | -| main.rs:478:15:478:15 | a | main.rs:474:13:474:13 | a | -| main.rs:484:14:484:14 | i | main.rs:482:13:482:13 | i | -| main.rs:485:6:485:10 | ref_i | main.rs:483:9:483:13 | ref_i | -| main.rs:486:15:486:15 | i | main.rs:482:13:482:13 | i | -| main.rs:490:6:490:6 | x | main.rs:489:17:489:17 | x | -| main.rs:491:10:491:10 | x | main.rs:489:17:489:17 | x | -| main.rs:492:10:492:10 | x | main.rs:489:17:489:17 | x | -| main.rs:493:12:493:12 | x | main.rs:489:17:489:17 | x | -| main.rs:497:6:497:6 | x | main.rs:496:22:496:22 | x | -| main.rs:498:10:498:10 | x | main.rs:496:22:496:22 | x | -| main.rs:499:10:499:10 | x | main.rs:496:22:496:22 | x | -| main.rs:500:6:500:6 | y | main.rs:496:38:496:38 | y | -| main.rs:501:9:501:9 | x | main.rs:496:22:496:22 | x | -| main.rs:507:27:507:27 | x | main.rs:505:13:505:13 | x | -| main.rs:508:6:508:6 | y | main.rs:506:9:506:9 | y | -| main.rs:511:15:511:15 | x | main.rs:505:13:505:13 | x | -| main.rs:515:19:515:19 | x | main.rs:505:13:505:13 | x | -| main.rs:517:14:517:14 | z | main.rs:513:13:513:13 | z | -| main.rs:518:9:518:9 | w | main.rs:514:9:514:9 | w | -| main.rs:520:7:520:7 | w | main.rs:514:9:514:9 | w | -| main.rs:523:15:523:15 | z | main.rs:513:13:513:13 | z | -| main.rs:529:14:529:14 | x | main.rs:527:13:527:13 | x | -| main.rs:530:6:530:6 | y | main.rs:528:9:528:9 | y | -| main.rs:531:15:531:15 | x | main.rs:527:13:527:13 | x | -| main.rs:539:19:539:19 | x | main.rs:535:9:535:9 | x | -| main.rs:541:5:541:7 | cap | main.rs:538:9:538:11 | cap | -| main.rs:542:15:542:15 | x | main.rs:535:9:535:9 | x | -| main.rs:550:19:550:19 | x | main.rs:546:13:546:13 | x | -| main.rs:552:5:552:12 | closure1 | main.rs:549:9:549:16 | closure1 | -| main.rs:553:15:553:15 | x | main.rs:546:13:546:13 | x | -| main.rs:559:9:559:9 | y | main.rs:555:13:555:13 | y | -| main.rs:561:5:561:12 | closure2 | main.rs:558:13:558:20 | closure2 | -| main.rs:562:15:562:15 | y | main.rs:555:13:555:13 | y | -| main.rs:568:9:568:9 | z | main.rs:564:13:564:13 | z | -| main.rs:570:5:570:12 | closure3 | main.rs:567:13:567:20 | closure3 | -| main.rs:571:15:571:15 | z | main.rs:564:13:564:13 | z | -| main.rs:577:9:577:9 | i | main.rs:575:13:575:13 | i | -| main.rs:580:5:580:9 | block | main.rs:576:9:576:13 | block | -| main.rs:581:15:581:15 | i | main.rs:575:13:575:13 | i | -| main.rs:586:15:586:15 | x | main.rs:585:13:585:13 | x | -| main.rs:587:15:587:15 | x | main.rs:585:13:585:13 | x | -| main.rs:589:16:589:16 | b | main.rs:584:8:584:8 | b | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | -| main.rs:592:19:592:19 | x | main.rs:585:13:585:13 | x | -| main.rs:593:19:593:19 | x | main.rs:585:13:585:13 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | -| main.rs:596:19:596:19 | x | main.rs:585:13:585:13 | x | -| main.rs:597:19:597:19 | x | main.rs:585:13:585:13 | x | -| main.rs:599:15:599:15 | x | main.rs:585:13:585:13 | x | -| main.rs:605:16:605:17 | b1 | main.rs:602:13:602:14 | b1 | -| main.rs:607:19:607:19 | x | main.rs:603:9:603:9 | x | -| main.rs:609:19:609:19 | x | main.rs:603:9:603:9 | x | -| main.rs:613:16:613:17 | b2 | main.rs:602:23:602:24 | b2 | -| main.rs:615:19:615:19 | x | main.rs:603:9:603:9 | x | -| main.rs:617:19:617:19 | x | main.rs:603:9:603:9 | x | -| main.rs:627:16:627:19 | self | main.rs:626:20:626:23 | self | -| main.rs:631:9:631:12 | self | main.rs:630:11:630:14 | self | -| main.rs:637:13:637:16 | self | main.rs:634:23:634:26 | self | -| main.rs:637:25:637:25 | n | main.rs:635:22:635:22 | n | -| main.rs:639:9:639:9 | f | main.rs:635:17:635:17 | f | -| main.rs:640:9:640:9 | f | main.rs:635:17:635:17 | f | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | -| main.rs:647:5:647:5 | a | main.rs:645:13:645:13 | a | -| main.rs:648:15:648:15 | a | main.rs:645:13:645:13 | a | -| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | -| main.rs:650:15:650:15 | a | main.rs:645:13:645:13 | a | -| main.rs:655:15:655:15 | a | main.rs:654:13:654:13 | a | -| main.rs:656:5:656:5 | a | main.rs:654:13:654:13 | a | -| main.rs:657:15:657:15 | a | main.rs:654:13:654:13 | a | -| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | -| main.rs:659:15:659:15 | a | main.rs:654:13:654:13 | a | -| main.rs:664:20:664:20 | x | main.rs:663:9:663:9 | x | -| main.rs:665:15:665:15 | x | main.rs:663:9:663:9 | x | -| main.rs:668:20:668:20 | z | main.rs:667:9:667:9 | z | -| main.rs:677:10:677:13 | self | main.rs:676:17:676:20 | self | -| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | -| main.rs:686:15:686:15 | a | main.rs:682:13:682:13 | a | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | -| main.rs:706:15:706:28 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | -| main.rs:712:30:712:41 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | -| main.rs:713:15:713:26 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | -| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | -| main.rs:719:15:719:15 | x | main.rs:717:9:717:9 | x | -| main.rs:726:20:726:20 | b | main.rs:724:20:724:20 | b | -| main.rs:727:13:727:13 | x | main.rs:723:13:723:13 | x | -| main.rs:730:5:730:7 | cap | main.rs:724:13:724:15 | cap | -| main.rs:731:15:731:15 | x | main.rs:723:13:723:13 | x | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:29:10:29:11 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:30:15:30:16 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:35:20:35:20 | x | main.rs:34:13:34:13 | x | +| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | +| main.rs:37:20:37:20 | x | main.rs:34:13:34:13 | x | +| main.rs:42:15:42:16 | x3 | main.rs:41:9:41:10 | x3 | +| main.rs:44:9:44:10 | x3 | main.rs:41:9:41:10 | x3 | +| main.rs:45:15:45:16 | x3 | main.rs:43:9:43:10 | x3 | +| main.rs:50:15:50:16 | x4 | main.rs:49:9:49:10 | x4 | +| main.rs:53:19:53:20 | x4 | main.rs:52:13:52:14 | x4 | +| main.rs:55:15:55:16 | x4 | main.rs:49:9:49:10 | x4 | +| main.rs:74:15:74:16 | a1 | main.rs:66:13:66:14 | a1 | +| main.rs:75:15:75:16 | b1 | main.rs:67:13:67:14 | b1 | +| main.rs:76:15:76:15 | x | main.rs:70:13:70:13 | x | +| main.rs:77:15:77:15 | y | main.rs:71:13:71:13 | y | +| main.rs:85:9:85:10 | p1 | main.rs:81:9:81:10 | p1 | +| main.rs:86:15:86:16 | a2 | main.rs:83:12:83:13 | a2 | +| main.rs:87:15:87:16 | b2 | main.rs:84:12:84:13 | b2 | +| main.rs:94:11:94:12 | s1 | main.rs:91:9:91:10 | s1 | +| main.rs:95:19:95:20 | s2 | main.rs:93:21:93:22 | s2 | +| main.rs:102:7:102:7 | x | main.rs:100:9:100:9 | x | +| main.rs:105:13:105:13 | x | main.rs:100:9:100:9 | x | +| main.rs:106:19:106:19 | x | main.rs:104:13:104:13 | x | +| main.rs:109:15:109:15 | x | main.rs:101:14:101:14 | x | +| main.rs:116:11:116:12 | s1 | main.rs:113:9:113:10 | s1 | +| main.rs:117:19:117:20 | s2 | main.rs:115:24:115:25 | s2 | +| main.rs:125:11:125:12 | x6 | main.rs:122:9:122:10 | x6 | +| main.rs:130:23:130:24 | y1 | main.rs:127:14:127:15 | y1 | +| main.rs:135:15:135:16 | y1 | main.rs:123:9:123:10 | y1 | +| main.rs:141:11:141:17 | numbers | main.rs:139:9:139:15 | numbers | +| main.rs:150:23:150:27 | first | main.rs:144:13:144:17 | first | +| main.rs:151:23:151:27 | third | main.rs:146:13:146:17 | third | +| main.rs:152:23:152:27 | fifth | main.rs:148:13:148:17 | fifth | +| main.rs:156:11:156:17 | numbers | main.rs:139:9:139:15 | numbers | +| main.rs:163:23:163:27 | first | main.rs:159:13:159:17 | first | +| main.rs:164:23:164:26 | last | main.rs:161:13:161:16 | last | +| main.rs:172:11:172:12 | p2 | main.rs:170:9:170:10 | p2 | +| main.rs:175:24:175:25 | x7 | main.rs:174:16:174:17 | x7 | +| main.rs:186:11:186:13 | msg | main.rs:184:9:184:11 | msg | +| main.rs:190:24:190:34 | id_variable | main.rs:189:17:189:27 | id_variable | +| main.rs:197:23:197:24 | id | main.rs:194:26:194:27 | id | +| main.rs:209:11:209:16 | either | main.rs:208:9:208:14 | either | +| main.rs:211:26:211:27 | a3 | main.rs:210:9:210:44 | a3 | +| main.rs:223:11:223:12 | tv | main.rs:222:9:222:10 | tv | +| main.rs:225:26:225:27 | a4 | main.rs:224:9:224:81 | a4 | +| main.rs:227:11:227:12 | tv | main.rs:222:9:222:10 | tv | +| main.rs:229:26:229:27 | a5 | main.rs:228:9:228:83 | a5 | +| main.rs:231:11:231:12 | tv | main.rs:222:9:222:10 | tv | +| main.rs:233:26:233:27 | a6 | main.rs:232:9:232:83 | a6 | +| main.rs:239:11:239:16 | either | main.rs:238:9:238:14 | either | +| main.rs:241:16:241:17 | a7 | main.rs:240:9:240:44 | a7 | +| main.rs:242:26:242:27 | a7 | main.rs:240:9:240:44 | a7 | +| main.rs:250:11:250:16 | either | main.rs:248:9:248:14 | either | +| main.rs:254:23:254:25 | a11 | main.rs:252:14:252:51 | a11 | +| main.rs:256:15:256:15 | e | main.rs:251:13:251:13 | e | +| main.rs:257:28:257:30 | a12 | main.rs:255:33:255:35 | a12 | +| main.rs:273:11:273:12 | fv | main.rs:272:9:272:10 | fv | +| main.rs:275:26:275:28 | a13 | main.rs:274:9:274:109 | a13 | +| main.rs:283:7:283:7 | x | main.rs:281:9:281:9 | x | +| main.rs:285:5:285:5 | x | main.rs:282:17:282:17 | x | +| main.rs:287:19:287:19 | x | main.rs:282:17:282:17 | x | +| main.rs:290:13:290:13 | x | main.rs:281:9:281:9 | x | +| main.rs:291:19:291:19 | x | main.rs:289:13:289:13 | x | +| main.rs:299:7:299:7 | x | main.rs:297:9:297:9 | x | +| main.rs:302:12:302:12 | x | main.rs:298:17:298:17 | x | +| main.rs:304:5:304:5 | x | main.rs:301:14:301:14 | x | +| main.rs:306:19:306:19 | x | main.rs:301:14:301:14 | x | +| main.rs:309:13:309:13 | x | main.rs:297:9:297:9 | x | +| main.rs:310:19:310:19 | x | main.rs:308:13:308:13 | x | +| main.rs:318:7:318:7 | x | main.rs:316:9:316:9 | x | +| main.rs:321:12:321:12 | x | main.rs:317:20:317:20 | x | +| main.rs:323:5:323:5 | x | main.rs:320:14:320:14 | x | +| main.rs:325:19:325:19 | x | main.rs:320:14:320:14 | x | +| main.rs:329:15:329:15 | x | main.rs:316:9:316:9 | x | +| main.rs:335:11:335:11 | x | main.rs:334:9:334:9 | x | +| main.rs:338:18:338:18 | x | main.rs:336:14:336:14 | x | +| main.rs:339:19:339:19 | x | main.rs:337:20:337:20 | x | +| main.rs:343:15:343:15 | x | main.rs:334:9:334:9 | x | +| main.rs:350:7:350:7 | x | main.rs:348:9:348:9 | x | +| main.rs:352:19:352:19 | x | main.rs:349:16:349:16 | x | +| main.rs:355:7:355:7 | x | main.rs:348:9:348:9 | x | +| main.rs:357:19:357:19 | x | main.rs:354:20:354:20 | x | +| main.rs:359:19:359:19 | x | main.rs:348:9:348:9 | x | +| main.rs:370:15:370:16 | a8 | main.rs:364:5:364:6 | a8 | +| main.rs:371:15:371:16 | b3 | main.rs:366:9:366:10 | b3 | +| main.rs:372:15:372:16 | c1 | main.rs:367:9:367:10 | c1 | +| main.rs:377:15:377:16 | a9 | main.rs:375:20:375:55 | a9 | +| main.rs:386:15:386:17 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:387:15:387:16 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:388:15:388:16 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:395:9:395:11 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:396:9:396:10 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:397:9:397:10 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:399:15:399:17 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:400:15:400:16 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:401:15:401:16 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:408:23:408:25 | a10 | main.rs:405:13:405:15 | a10 | +| main.rs:409:23:409:24 | b4 | main.rs:406:13:406:14 | b4 | +| main.rs:413:15:413:17 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:414:15:414:16 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:420:9:420:9 | x | main.rs:419:10:419:10 | x | +| main.rs:422:9:422:23 | example_closure | main.rs:418:9:418:23 | example_closure | +| main.rs:423:15:423:16 | n1 | main.rs:421:9:421:10 | n1 | +| main.rs:428:9:428:9 | x | main.rs:427:6:427:6 | x | +| main.rs:430:9:430:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | +| main.rs:431:15:431:16 | n2 | main.rs:429:9:429:10 | n2 | +| main.rs:438:9:438:9 | x | main.rs:437:10:437:10 | x | +| main.rs:439:15:439:15 | f | main.rs:436:9:436:9 | f | +| main.rs:443:9:443:9 | x | main.rs:441:10:441:10 | x | +| main.rs:446:15:446:15 | f | main.rs:436:9:436:9 | f | +| main.rs:452:17:452:17 | x | main.rs:450:14:450:14 | x | +| main.rs:461:13:461:13 | x | main.rs:460:14:460:14 | x | +| main.rs:462:19:462:19 | f | main.rs:459:13:459:13 | f | +| main.rs:470:12:470:12 | v | main.rs:467:9:467:9 | v | +| main.rs:471:19:471:22 | text | main.rs:469:9:469:12 | text | +| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | +| main.rs:478:15:478:15 | a | main.rs:476:13:476:13 | a | +| main.rs:479:11:479:11 | a | main.rs:476:13:476:13 | a | +| main.rs:480:15:480:15 | a | main.rs:476:13:476:13 | a | +| main.rs:486:14:486:14 | i | main.rs:484:13:484:13 | i | +| main.rs:487:6:487:10 | ref_i | main.rs:485:9:485:13 | ref_i | +| main.rs:488:15:488:15 | i | main.rs:484:13:484:13 | i | +| main.rs:492:6:492:6 | x | main.rs:491:17:491:17 | x | +| main.rs:493:10:493:10 | x | main.rs:491:17:491:17 | x | +| main.rs:494:10:494:10 | x | main.rs:491:17:491:17 | x | +| main.rs:495:12:495:12 | x | main.rs:491:17:491:17 | x | +| main.rs:499:6:499:6 | x | main.rs:498:22:498:22 | x | +| main.rs:500:10:500:10 | x | main.rs:498:22:498:22 | x | +| main.rs:501:10:501:10 | x | main.rs:498:22:498:22 | x | +| main.rs:502:6:502:6 | y | main.rs:498:38:498:38 | y | +| main.rs:503:9:503:9 | x | main.rs:498:22:498:22 | x | +| main.rs:509:27:509:27 | x | main.rs:507:13:507:13 | x | +| main.rs:510:6:510:6 | y | main.rs:508:9:508:9 | y | +| main.rs:513:15:513:15 | x | main.rs:507:13:507:13 | x | +| main.rs:517:19:517:19 | x | main.rs:507:13:507:13 | x | +| main.rs:519:14:519:14 | z | main.rs:515:13:515:13 | z | +| main.rs:520:9:520:9 | w | main.rs:516:9:516:9 | w | +| main.rs:522:7:522:7 | w | main.rs:516:9:516:9 | w | +| main.rs:525:15:525:15 | z | main.rs:515:13:515:13 | z | +| main.rs:531:14:531:14 | x | main.rs:529:13:529:13 | x | +| main.rs:532:6:532:6 | y | main.rs:530:9:530:9 | y | +| main.rs:533:15:533:15 | x | main.rs:529:13:529:13 | x | +| main.rs:541:19:541:19 | x | main.rs:537:9:537:9 | x | +| main.rs:543:5:543:7 | cap | main.rs:540:9:540:11 | cap | +| main.rs:544:15:544:15 | x | main.rs:537:9:537:9 | x | +| main.rs:552:19:552:19 | x | main.rs:548:13:548:13 | x | +| main.rs:554:5:554:12 | closure1 | main.rs:551:9:551:16 | closure1 | +| main.rs:555:15:555:15 | x | main.rs:548:13:548:13 | x | +| main.rs:561:9:561:9 | y | main.rs:557:13:557:13 | y | +| main.rs:563:5:563:12 | closure2 | main.rs:560:13:560:20 | closure2 | +| main.rs:564:15:564:15 | y | main.rs:557:13:557:13 | y | +| main.rs:570:9:570:9 | z | main.rs:566:13:566:13 | z | +| main.rs:572:5:572:12 | closure3 | main.rs:569:13:569:20 | closure3 | +| main.rs:573:15:573:15 | z | main.rs:566:13:566:13 | z | +| main.rs:579:9:579:9 | i | main.rs:577:13:577:13 | i | +| main.rs:582:5:582:9 | block | main.rs:578:9:578:13 | block | +| main.rs:583:15:583:15 | i | main.rs:577:13:577:13 | i | +| main.rs:588:15:588:15 | x | main.rs:587:13:587:13 | x | +| main.rs:589:15:589:15 | x | main.rs:587:13:587:13 | x | +| main.rs:591:16:591:16 | b | main.rs:586:8:586:8 | b | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | +| main.rs:594:19:594:19 | x | main.rs:587:13:587:13 | x | +| main.rs:595:19:595:19 | x | main.rs:587:13:587:13 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | +| main.rs:598:19:598:19 | x | main.rs:587:13:587:13 | x | +| main.rs:599:19:599:19 | x | main.rs:587:13:587:13 | x | +| main.rs:601:15:601:15 | x | main.rs:587:13:587:13 | x | +| main.rs:607:16:607:17 | b1 | main.rs:604:13:604:14 | b1 | +| main.rs:609:19:609:19 | x | main.rs:605:9:605:9 | x | +| main.rs:611:19:611:19 | x | main.rs:605:9:605:9 | x | +| main.rs:615:16:615:17 | b2 | main.rs:604:23:604:24 | b2 | +| main.rs:617:19:617:19 | x | main.rs:605:9:605:9 | x | +| main.rs:619:19:619:19 | x | main.rs:605:9:605:9 | x | +| main.rs:629:16:629:19 | self | main.rs:628:20:628:23 | self | +| main.rs:633:9:633:12 | self | main.rs:632:11:632:14 | self | +| main.rs:639:13:639:16 | self | main.rs:636:23:636:26 | self | +| main.rs:639:25:639:25 | n | main.rs:637:22:637:22 | n | +| main.rs:641:9:641:9 | f | main.rs:637:17:637:17 | f | +| main.rs:642:9:642:9 | f | main.rs:637:17:637:17 | f | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | +| main.rs:649:5:649:5 | a | main.rs:647:13:647:13 | a | +| main.rs:650:15:650:15 | a | main.rs:647:13:647:13 | a | +| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | +| main.rs:652:15:652:15 | a | main.rs:647:13:647:13 | a | +| main.rs:657:15:657:15 | a | main.rs:656:13:656:13 | a | +| main.rs:658:5:658:5 | a | main.rs:656:13:656:13 | a | +| main.rs:659:15:659:15 | a | main.rs:656:13:656:13 | a | +| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | +| main.rs:661:15:661:15 | a | main.rs:656:13:656:13 | a | +| main.rs:666:20:666:20 | x | main.rs:665:9:665:9 | x | +| main.rs:667:15:667:15 | x | main.rs:665:9:665:9 | x | +| main.rs:670:20:670:20 | z | main.rs:669:9:669:9 | z | +| main.rs:679:10:679:13 | self | main.rs:678:17:678:20 | self | +| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | +| main.rs:688:15:688:15 | a | main.rs:684:13:684:13 | a | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | +| main.rs:708:15:708:28 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | +| main.rs:714:30:714:41 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | +| main.rs:715:15:715:26 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | +| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | +| main.rs:721:15:721:15 | x | main.rs:719:9:719:9 | x | +| main.rs:728:20:728:20 | b | main.rs:726:20:726:20 | b | +| main.rs:729:13:729:13 | x | main.rs:725:13:725:13 | x | +| main.rs:732:5:732:7 | cap | main.rs:726:13:726:15 | cap | +| main.rs:733:15:733:15 | x | main.rs:725:13:725:13 | x | variableWriteAccess | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | -| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | -| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:559:9:559:9 | y | main.rs:555:13:555:13 | y | -| main.rs:577:9:577:9 | i | main.rs:575:13:575:13 | i | -| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | -| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | -| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | -| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | -| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | -| main.rs:727:13:727:13 | x | main.rs:723:13:723:13 | x | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:561:9:561:9 | y | main.rs:557:13:557:13 | y | +| main.rs:579:9:579:9 | i | main.rs:577:13:577:13 | i | +| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | +| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | +| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | +| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | +| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | +| main.rs:729:13:729:13 | x | main.rs:725:13:725:13 | x | variableReadAccess | main.rs:7:20:7:20 | s | main.rs:5:14:5:14 | s | | main.rs:12:20:12:20 | i | main.rs:10:14:10:14 | i | @@ -372,276 +376,278 @@ variableReadAccess | main.rs:21:15:21:16 | x1 | main.rs:20:9:20:10 | x1 | | main.rs:26:15:26:16 | x2 | main.rs:25:13:25:14 | x2 | | main.rs:28:15:28:16 | x2 | main.rs:25:13:25:14 | x2 | -| main.rs:40:15:40:16 | x3 | main.rs:39:9:39:10 | x3 | -| main.rs:42:9:42:10 | x3 | main.rs:39:9:39:10 | x3 | -| main.rs:43:15:43:16 | x3 | main.rs:41:9:41:10 | x3 | -| main.rs:48:15:48:16 | x4 | main.rs:47:9:47:10 | x4 | -| main.rs:51:19:51:20 | x4 | main.rs:50:13:50:14 | x4 | -| main.rs:53:15:53:16 | x4 | main.rs:47:9:47:10 | x4 | -| main.rs:72:15:72:16 | a1 | main.rs:64:13:64:14 | a1 | -| main.rs:73:15:73:16 | b1 | main.rs:65:13:65:14 | b1 | -| main.rs:74:15:74:15 | x | main.rs:68:13:68:13 | x | -| main.rs:75:15:75:15 | y | main.rs:69:13:69:13 | y | -| main.rs:83:9:83:10 | p1 | main.rs:79:9:79:10 | p1 | -| main.rs:84:15:84:16 | a2 | main.rs:81:12:81:13 | a2 | -| main.rs:85:15:85:16 | b2 | main.rs:82:12:82:13 | b2 | -| main.rs:92:11:92:12 | s1 | main.rs:89:9:89:10 | s1 | -| main.rs:93:19:93:20 | s2 | main.rs:91:21:91:22 | s2 | -| main.rs:100:7:100:7 | x | main.rs:98:9:98:9 | x | -| main.rs:103:13:103:13 | x | main.rs:98:9:98:9 | x | -| main.rs:104:19:104:19 | x | main.rs:102:13:102:13 | x | -| main.rs:107:15:107:15 | x | main.rs:99:14:99:14 | x | -| main.rs:114:11:114:12 | s1 | main.rs:111:9:111:10 | s1 | -| main.rs:115:19:115:20 | s2 | main.rs:113:24:113:25 | s2 | -| main.rs:123:11:123:12 | x6 | main.rs:120:9:120:10 | x6 | -| main.rs:128:23:128:24 | y1 | main.rs:125:14:125:15 | y1 | -| main.rs:133:15:133:16 | y1 | main.rs:121:9:121:10 | y1 | -| main.rs:139:11:139:17 | numbers | main.rs:137:9:137:15 | numbers | -| main.rs:148:23:148:27 | first | main.rs:142:13:142:17 | first | -| main.rs:149:23:149:27 | third | main.rs:144:13:144:17 | third | -| main.rs:150:23:150:27 | fifth | main.rs:146:13:146:17 | fifth | -| main.rs:154:11:154:17 | numbers | main.rs:137:9:137:15 | numbers | -| main.rs:161:23:161:27 | first | main.rs:157:13:157:17 | first | -| main.rs:162:23:162:26 | last | main.rs:159:13:159:16 | last | -| main.rs:170:11:170:12 | p2 | main.rs:168:9:168:10 | p2 | -| main.rs:173:24:173:25 | x7 | main.rs:172:16:172:17 | x7 | -| main.rs:184:11:184:13 | msg | main.rs:182:9:182:11 | msg | -| main.rs:188:24:188:34 | id_variable | main.rs:187:17:187:27 | id_variable | -| main.rs:195:23:195:24 | id | main.rs:192:26:192:27 | id | -| main.rs:207:11:207:16 | either | main.rs:206:9:206:14 | either | -| main.rs:209:26:209:27 | a3 | main.rs:208:9:208:44 | a3 | -| main.rs:221:11:221:12 | tv | main.rs:220:9:220:10 | tv | -| main.rs:223:26:223:27 | a4 | main.rs:222:9:222:81 | a4 | -| main.rs:225:11:225:12 | tv | main.rs:220:9:220:10 | tv | -| main.rs:227:26:227:27 | a5 | main.rs:226:9:226:83 | a5 | -| main.rs:229:11:229:12 | tv | main.rs:220:9:220:10 | tv | -| main.rs:231:26:231:27 | a6 | main.rs:230:9:230:83 | a6 | -| main.rs:237:11:237:16 | either | main.rs:236:9:236:14 | either | -| main.rs:239:16:239:17 | a7 | main.rs:238:9:238:44 | a7 | -| main.rs:240:26:240:27 | a7 | main.rs:238:9:238:44 | a7 | -| main.rs:248:11:248:16 | either | main.rs:246:9:246:14 | either | -| main.rs:252:23:252:25 | a11 | main.rs:250:14:250:51 | a11 | -| main.rs:254:15:254:15 | e | main.rs:249:13:249:13 | e | -| main.rs:255:28:255:30 | a12 | main.rs:253:33:253:35 | a12 | -| main.rs:271:11:271:12 | fv | main.rs:270:9:270:10 | fv | -| main.rs:273:26:273:28 | a13 | main.rs:272:9:272:109 | a13 | -| main.rs:281:7:281:7 | x | main.rs:279:9:279:9 | x | -| main.rs:283:5:283:5 | x | main.rs:280:17:280:17 | x | -| main.rs:285:19:285:19 | x | main.rs:280:17:280:17 | x | -| main.rs:288:13:288:13 | x | main.rs:279:9:279:9 | x | -| main.rs:289:19:289:19 | x | main.rs:287:13:287:13 | x | -| main.rs:297:7:297:7 | x | main.rs:295:9:295:9 | x | -| main.rs:300:12:300:12 | x | main.rs:296:17:296:17 | x | -| main.rs:302:5:302:5 | x | main.rs:299:14:299:14 | x | -| main.rs:304:19:304:19 | x | main.rs:299:14:299:14 | x | -| main.rs:307:13:307:13 | x | main.rs:295:9:295:9 | x | -| main.rs:308:19:308:19 | x | main.rs:306:13:306:13 | x | -| main.rs:316:7:316:7 | x | main.rs:314:9:314:9 | x | -| main.rs:319:12:319:12 | x | main.rs:315:20:315:20 | x | -| main.rs:321:5:321:5 | x | main.rs:318:14:318:14 | x | -| main.rs:323:19:323:19 | x | main.rs:318:14:318:14 | x | -| main.rs:327:15:327:15 | x | main.rs:314:9:314:9 | x | -| main.rs:333:11:333:11 | x | main.rs:332:9:332:9 | x | -| main.rs:336:18:336:18 | x | main.rs:334:14:334:14 | x | -| main.rs:337:19:337:19 | x | main.rs:335:20:335:20 | x | -| main.rs:341:15:341:15 | x | main.rs:332:9:332:9 | x | -| main.rs:348:7:348:7 | x | main.rs:346:9:346:9 | x | -| main.rs:350:19:350:19 | x | main.rs:347:16:347:16 | x | -| main.rs:353:7:353:7 | x | main.rs:346:9:346:9 | x | -| main.rs:355:19:355:19 | x | main.rs:352:20:352:20 | x | -| main.rs:357:19:357:19 | x | main.rs:346:9:346:9 | x | -| main.rs:368:15:368:16 | a8 | main.rs:362:5:362:6 | a8 | -| main.rs:369:15:369:16 | b3 | main.rs:364:9:364:10 | b3 | -| main.rs:370:15:370:16 | c1 | main.rs:365:9:365:10 | c1 | -| main.rs:375:15:375:16 | a9 | main.rs:373:20:373:55 | a9 | -| main.rs:384:15:384:17 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:385:15:385:16 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:386:15:386:16 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:393:9:393:11 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:394:9:394:10 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:395:9:395:10 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:397:15:397:17 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:398:15:398:16 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:399:15:399:16 | c2 | main.rs:382:13:382:14 | c2 | -| main.rs:406:23:406:25 | a10 | main.rs:403:13:403:15 | a10 | -| main.rs:407:23:407:24 | b4 | main.rs:404:13:404:14 | b4 | -| main.rs:411:15:411:17 | a10 | main.rs:380:13:380:15 | a10 | -| main.rs:412:15:412:16 | b4 | main.rs:381:13:381:14 | b4 | -| main.rs:418:9:418:9 | x | main.rs:417:10:417:10 | x | -| main.rs:420:9:420:23 | example_closure | main.rs:416:9:416:23 | example_closure | -| main.rs:421:15:421:16 | n1 | main.rs:419:9:419:10 | n1 | -| main.rs:426:9:426:9 | x | main.rs:425:6:425:6 | x | -| main.rs:428:9:428:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | -| main.rs:429:15:429:16 | n2 | main.rs:427:9:427:10 | n2 | -| main.rs:436:9:436:9 | x | main.rs:435:10:435:10 | x | -| main.rs:437:15:437:15 | f | main.rs:434:9:434:9 | f | -| main.rs:441:9:441:9 | x | main.rs:439:10:439:10 | x | -| main.rs:444:15:444:15 | f | main.rs:434:9:434:9 | f | -| main.rs:450:17:450:17 | x | main.rs:448:14:448:14 | x | -| main.rs:459:13:459:13 | x | main.rs:458:14:458:14 | x | -| main.rs:460:19:460:19 | f | main.rs:457:13:457:13 | f | -| main.rs:468:12:468:12 | v | main.rs:465:9:465:9 | v | -| main.rs:469:19:469:22 | text | main.rs:467:9:467:12 | text | -| main.rs:476:15:476:15 | a | main.rs:474:13:474:13 | a | -| main.rs:478:15:478:15 | a | main.rs:474:13:474:13 | a | -| main.rs:485:6:485:10 | ref_i | main.rs:483:9:483:13 | ref_i | -| main.rs:486:15:486:15 | i | main.rs:482:13:482:13 | i | -| main.rs:490:6:490:6 | x | main.rs:489:17:489:17 | x | -| main.rs:491:10:491:10 | x | main.rs:489:17:489:17 | x | -| main.rs:492:10:492:10 | x | main.rs:489:17:489:17 | x | -| main.rs:493:12:493:12 | x | main.rs:489:17:489:17 | x | -| main.rs:497:6:497:6 | x | main.rs:496:22:496:22 | x | -| main.rs:498:10:498:10 | x | main.rs:496:22:496:22 | x | -| main.rs:499:10:499:10 | x | main.rs:496:22:496:22 | x | -| main.rs:500:6:500:6 | y | main.rs:496:38:496:38 | y | -| main.rs:501:9:501:9 | x | main.rs:496:22:496:22 | x | -| main.rs:508:6:508:6 | y | main.rs:506:9:506:9 | y | -| main.rs:511:15:511:15 | x | main.rs:505:13:505:13 | x | -| main.rs:518:9:518:9 | w | main.rs:514:9:514:9 | w | -| main.rs:520:7:520:7 | w | main.rs:514:9:514:9 | w | -| main.rs:523:15:523:15 | z | main.rs:513:13:513:13 | z | -| main.rs:530:6:530:6 | y | main.rs:528:9:528:9 | y | -| main.rs:531:15:531:15 | x | main.rs:527:13:527:13 | x | -| main.rs:539:19:539:19 | x | main.rs:535:9:535:9 | x | -| main.rs:541:5:541:7 | cap | main.rs:538:9:538:11 | cap | -| main.rs:542:15:542:15 | x | main.rs:535:9:535:9 | x | -| main.rs:550:19:550:19 | x | main.rs:546:13:546:13 | x | -| main.rs:552:5:552:12 | closure1 | main.rs:549:9:549:16 | closure1 | -| main.rs:553:15:553:15 | x | main.rs:546:13:546:13 | x | -| main.rs:561:5:561:12 | closure2 | main.rs:558:13:558:20 | closure2 | -| main.rs:562:15:562:15 | y | main.rs:555:13:555:13 | y | -| main.rs:568:9:568:9 | z | main.rs:564:13:564:13 | z | -| main.rs:570:5:570:12 | closure3 | main.rs:567:13:567:20 | closure3 | -| main.rs:571:15:571:15 | z | main.rs:564:13:564:13 | z | -| main.rs:580:5:580:9 | block | main.rs:576:9:576:13 | block | -| main.rs:581:15:581:15 | i | main.rs:575:13:575:13 | i | -| main.rs:586:15:586:15 | x | main.rs:585:13:585:13 | x | -| main.rs:587:15:587:15 | x | main.rs:585:13:585:13 | x | -| main.rs:589:16:589:16 | b | main.rs:584:8:584:8 | b | -| main.rs:592:19:592:19 | x | main.rs:585:13:585:13 | x | -| main.rs:593:19:593:19 | x | main.rs:585:13:585:13 | x | -| main.rs:596:19:596:19 | x | main.rs:585:13:585:13 | x | -| main.rs:597:19:597:19 | x | main.rs:585:13:585:13 | x | -| main.rs:599:15:599:15 | x | main.rs:585:13:585:13 | x | -| main.rs:605:16:605:17 | b1 | main.rs:602:13:602:14 | b1 | -| main.rs:607:19:607:19 | x | main.rs:603:9:603:9 | x | -| main.rs:609:19:609:19 | x | main.rs:603:9:603:9 | x | -| main.rs:613:16:613:17 | b2 | main.rs:602:23:602:24 | b2 | -| main.rs:615:19:615:19 | x | main.rs:603:9:603:9 | x | -| main.rs:617:19:617:19 | x | main.rs:603:9:603:9 | x | -| main.rs:627:16:627:19 | self | main.rs:626:20:626:23 | self | -| main.rs:631:9:631:12 | self | main.rs:630:11:630:14 | self | -| main.rs:637:13:637:16 | self | main.rs:634:23:634:26 | self | -| main.rs:637:25:637:25 | n | main.rs:635:22:635:22 | n | -| main.rs:639:9:639:9 | f | main.rs:635:17:635:17 | f | -| main.rs:640:9:640:9 | f | main.rs:635:17:635:17 | f | -| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | -| main.rs:647:5:647:5 | a | main.rs:645:13:645:13 | a | -| main.rs:648:15:648:15 | a | main.rs:645:13:645:13 | a | -| main.rs:650:15:650:15 | a | main.rs:645:13:645:13 | a | -| main.rs:655:15:655:15 | a | main.rs:654:13:654:13 | a | -| main.rs:656:5:656:5 | a | main.rs:654:13:654:13 | a | -| main.rs:657:15:657:15 | a | main.rs:654:13:654:13 | a | -| main.rs:659:15:659:15 | a | main.rs:654:13:654:13 | a | -| main.rs:665:15:665:15 | x | main.rs:663:9:663:9 | x | -| main.rs:677:10:677:13 | self | main.rs:676:17:676:20 | self | -| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | -| main.rs:686:15:686:15 | a | main.rs:682:13:682:13 | a | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | -| main.rs:706:15:706:28 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | -| main.rs:712:30:712:41 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | -| main.rs:713:15:713:26 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | -| main.rs:719:15:719:15 | x | main.rs:717:9:717:9 | x | -| main.rs:726:20:726:20 | b | main.rs:724:20:724:20 | b | -| main.rs:730:5:730:7 | cap | main.rs:724:13:724:15 | cap | -| main.rs:731:15:731:15 | x | main.rs:723:13:723:13 | x | +| main.rs:29:10:29:11 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:30:15:30:16 | x2 | main.rs:25:13:25:14 | x2 | +| main.rs:42:15:42:16 | x3 | main.rs:41:9:41:10 | x3 | +| main.rs:44:9:44:10 | x3 | main.rs:41:9:41:10 | x3 | +| main.rs:45:15:45:16 | x3 | main.rs:43:9:43:10 | x3 | +| main.rs:50:15:50:16 | x4 | main.rs:49:9:49:10 | x4 | +| main.rs:53:19:53:20 | x4 | main.rs:52:13:52:14 | x4 | +| main.rs:55:15:55:16 | x4 | main.rs:49:9:49:10 | x4 | +| main.rs:74:15:74:16 | a1 | main.rs:66:13:66:14 | a1 | +| main.rs:75:15:75:16 | b1 | main.rs:67:13:67:14 | b1 | +| main.rs:76:15:76:15 | x | main.rs:70:13:70:13 | x | +| main.rs:77:15:77:15 | y | main.rs:71:13:71:13 | y | +| main.rs:85:9:85:10 | p1 | main.rs:81:9:81:10 | p1 | +| main.rs:86:15:86:16 | a2 | main.rs:83:12:83:13 | a2 | +| main.rs:87:15:87:16 | b2 | main.rs:84:12:84:13 | b2 | +| main.rs:94:11:94:12 | s1 | main.rs:91:9:91:10 | s1 | +| main.rs:95:19:95:20 | s2 | main.rs:93:21:93:22 | s2 | +| main.rs:102:7:102:7 | x | main.rs:100:9:100:9 | x | +| main.rs:105:13:105:13 | x | main.rs:100:9:100:9 | x | +| main.rs:106:19:106:19 | x | main.rs:104:13:104:13 | x | +| main.rs:109:15:109:15 | x | main.rs:101:14:101:14 | x | +| main.rs:116:11:116:12 | s1 | main.rs:113:9:113:10 | s1 | +| main.rs:117:19:117:20 | s2 | main.rs:115:24:115:25 | s2 | +| main.rs:125:11:125:12 | x6 | main.rs:122:9:122:10 | x6 | +| main.rs:130:23:130:24 | y1 | main.rs:127:14:127:15 | y1 | +| main.rs:135:15:135:16 | y1 | main.rs:123:9:123:10 | y1 | +| main.rs:141:11:141:17 | numbers | main.rs:139:9:139:15 | numbers | +| main.rs:150:23:150:27 | first | main.rs:144:13:144:17 | first | +| main.rs:151:23:151:27 | third | main.rs:146:13:146:17 | third | +| main.rs:152:23:152:27 | fifth | main.rs:148:13:148:17 | fifth | +| main.rs:156:11:156:17 | numbers | main.rs:139:9:139:15 | numbers | +| main.rs:163:23:163:27 | first | main.rs:159:13:159:17 | first | +| main.rs:164:23:164:26 | last | main.rs:161:13:161:16 | last | +| main.rs:172:11:172:12 | p2 | main.rs:170:9:170:10 | p2 | +| main.rs:175:24:175:25 | x7 | main.rs:174:16:174:17 | x7 | +| main.rs:186:11:186:13 | msg | main.rs:184:9:184:11 | msg | +| main.rs:190:24:190:34 | id_variable | main.rs:189:17:189:27 | id_variable | +| main.rs:197:23:197:24 | id | main.rs:194:26:194:27 | id | +| main.rs:209:11:209:16 | either | main.rs:208:9:208:14 | either | +| main.rs:211:26:211:27 | a3 | main.rs:210:9:210:44 | a3 | +| main.rs:223:11:223:12 | tv | main.rs:222:9:222:10 | tv | +| main.rs:225:26:225:27 | a4 | main.rs:224:9:224:81 | a4 | +| main.rs:227:11:227:12 | tv | main.rs:222:9:222:10 | tv | +| main.rs:229:26:229:27 | a5 | main.rs:228:9:228:83 | a5 | +| main.rs:231:11:231:12 | tv | main.rs:222:9:222:10 | tv | +| main.rs:233:26:233:27 | a6 | main.rs:232:9:232:83 | a6 | +| main.rs:239:11:239:16 | either | main.rs:238:9:238:14 | either | +| main.rs:241:16:241:17 | a7 | main.rs:240:9:240:44 | a7 | +| main.rs:242:26:242:27 | a7 | main.rs:240:9:240:44 | a7 | +| main.rs:250:11:250:16 | either | main.rs:248:9:248:14 | either | +| main.rs:254:23:254:25 | a11 | main.rs:252:14:252:51 | a11 | +| main.rs:256:15:256:15 | e | main.rs:251:13:251:13 | e | +| main.rs:257:28:257:30 | a12 | main.rs:255:33:255:35 | a12 | +| main.rs:273:11:273:12 | fv | main.rs:272:9:272:10 | fv | +| main.rs:275:26:275:28 | a13 | main.rs:274:9:274:109 | a13 | +| main.rs:283:7:283:7 | x | main.rs:281:9:281:9 | x | +| main.rs:285:5:285:5 | x | main.rs:282:17:282:17 | x | +| main.rs:287:19:287:19 | x | main.rs:282:17:282:17 | x | +| main.rs:290:13:290:13 | x | main.rs:281:9:281:9 | x | +| main.rs:291:19:291:19 | x | main.rs:289:13:289:13 | x | +| main.rs:299:7:299:7 | x | main.rs:297:9:297:9 | x | +| main.rs:302:12:302:12 | x | main.rs:298:17:298:17 | x | +| main.rs:304:5:304:5 | x | main.rs:301:14:301:14 | x | +| main.rs:306:19:306:19 | x | main.rs:301:14:301:14 | x | +| main.rs:309:13:309:13 | x | main.rs:297:9:297:9 | x | +| main.rs:310:19:310:19 | x | main.rs:308:13:308:13 | x | +| main.rs:318:7:318:7 | x | main.rs:316:9:316:9 | x | +| main.rs:321:12:321:12 | x | main.rs:317:20:317:20 | x | +| main.rs:323:5:323:5 | x | main.rs:320:14:320:14 | x | +| main.rs:325:19:325:19 | x | main.rs:320:14:320:14 | x | +| main.rs:329:15:329:15 | x | main.rs:316:9:316:9 | x | +| main.rs:335:11:335:11 | x | main.rs:334:9:334:9 | x | +| main.rs:338:18:338:18 | x | main.rs:336:14:336:14 | x | +| main.rs:339:19:339:19 | x | main.rs:337:20:337:20 | x | +| main.rs:343:15:343:15 | x | main.rs:334:9:334:9 | x | +| main.rs:350:7:350:7 | x | main.rs:348:9:348:9 | x | +| main.rs:352:19:352:19 | x | main.rs:349:16:349:16 | x | +| main.rs:355:7:355:7 | x | main.rs:348:9:348:9 | x | +| main.rs:357:19:357:19 | x | main.rs:354:20:354:20 | x | +| main.rs:359:19:359:19 | x | main.rs:348:9:348:9 | x | +| main.rs:370:15:370:16 | a8 | main.rs:364:5:364:6 | a8 | +| main.rs:371:15:371:16 | b3 | main.rs:366:9:366:10 | b3 | +| main.rs:372:15:372:16 | c1 | main.rs:367:9:367:10 | c1 | +| main.rs:377:15:377:16 | a9 | main.rs:375:20:375:55 | a9 | +| main.rs:386:15:386:17 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:387:15:387:16 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:388:15:388:16 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:395:9:395:11 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:396:9:396:10 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:397:9:397:10 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:399:15:399:17 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:400:15:400:16 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:401:15:401:16 | c2 | main.rs:384:13:384:14 | c2 | +| main.rs:408:23:408:25 | a10 | main.rs:405:13:405:15 | a10 | +| main.rs:409:23:409:24 | b4 | main.rs:406:13:406:14 | b4 | +| main.rs:413:15:413:17 | a10 | main.rs:382:13:382:15 | a10 | +| main.rs:414:15:414:16 | b4 | main.rs:383:13:383:14 | b4 | +| main.rs:420:9:420:9 | x | main.rs:419:10:419:10 | x | +| main.rs:422:9:422:23 | example_closure | main.rs:418:9:418:23 | example_closure | +| main.rs:423:15:423:16 | n1 | main.rs:421:9:421:10 | n1 | +| main.rs:428:9:428:9 | x | main.rs:427:6:427:6 | x | +| main.rs:430:9:430:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | +| main.rs:431:15:431:16 | n2 | main.rs:429:9:429:10 | n2 | +| main.rs:438:9:438:9 | x | main.rs:437:10:437:10 | x | +| main.rs:439:15:439:15 | f | main.rs:436:9:436:9 | f | +| main.rs:443:9:443:9 | x | main.rs:441:10:441:10 | x | +| main.rs:446:15:446:15 | f | main.rs:436:9:436:9 | f | +| main.rs:452:17:452:17 | x | main.rs:450:14:450:14 | x | +| main.rs:461:13:461:13 | x | main.rs:460:14:460:14 | x | +| main.rs:462:19:462:19 | f | main.rs:459:13:459:13 | f | +| main.rs:470:12:470:12 | v | main.rs:467:9:467:9 | v | +| main.rs:471:19:471:22 | text | main.rs:469:9:469:12 | text | +| main.rs:478:15:478:15 | a | main.rs:476:13:476:13 | a | +| main.rs:480:15:480:15 | a | main.rs:476:13:476:13 | a | +| main.rs:487:6:487:10 | ref_i | main.rs:485:9:485:13 | ref_i | +| main.rs:488:15:488:15 | i | main.rs:484:13:484:13 | i | +| main.rs:492:6:492:6 | x | main.rs:491:17:491:17 | x | +| main.rs:493:10:493:10 | x | main.rs:491:17:491:17 | x | +| main.rs:494:10:494:10 | x | main.rs:491:17:491:17 | x | +| main.rs:495:12:495:12 | x | main.rs:491:17:491:17 | x | +| main.rs:499:6:499:6 | x | main.rs:498:22:498:22 | x | +| main.rs:500:10:500:10 | x | main.rs:498:22:498:22 | x | +| main.rs:501:10:501:10 | x | main.rs:498:22:498:22 | x | +| main.rs:502:6:502:6 | y | main.rs:498:38:498:38 | y | +| main.rs:503:9:503:9 | x | main.rs:498:22:498:22 | x | +| main.rs:510:6:510:6 | y | main.rs:508:9:508:9 | y | +| main.rs:513:15:513:15 | x | main.rs:507:13:507:13 | x | +| main.rs:520:9:520:9 | w | main.rs:516:9:516:9 | w | +| main.rs:522:7:522:7 | w | main.rs:516:9:516:9 | w | +| main.rs:525:15:525:15 | z | main.rs:515:13:515:13 | z | +| main.rs:532:6:532:6 | y | main.rs:530:9:530:9 | y | +| main.rs:533:15:533:15 | x | main.rs:529:13:529:13 | x | +| main.rs:541:19:541:19 | x | main.rs:537:9:537:9 | x | +| main.rs:543:5:543:7 | cap | main.rs:540:9:540:11 | cap | +| main.rs:544:15:544:15 | x | main.rs:537:9:537:9 | x | +| main.rs:552:19:552:19 | x | main.rs:548:13:548:13 | x | +| main.rs:554:5:554:12 | closure1 | main.rs:551:9:551:16 | closure1 | +| main.rs:555:15:555:15 | x | main.rs:548:13:548:13 | x | +| main.rs:563:5:563:12 | closure2 | main.rs:560:13:560:20 | closure2 | +| main.rs:564:15:564:15 | y | main.rs:557:13:557:13 | y | +| main.rs:570:9:570:9 | z | main.rs:566:13:566:13 | z | +| main.rs:572:5:572:12 | closure3 | main.rs:569:13:569:20 | closure3 | +| main.rs:573:15:573:15 | z | main.rs:566:13:566:13 | z | +| main.rs:582:5:582:9 | block | main.rs:578:9:578:13 | block | +| main.rs:583:15:583:15 | i | main.rs:577:13:577:13 | i | +| main.rs:588:15:588:15 | x | main.rs:587:13:587:13 | x | +| main.rs:589:15:589:15 | x | main.rs:587:13:587:13 | x | +| main.rs:591:16:591:16 | b | main.rs:586:8:586:8 | b | +| main.rs:594:19:594:19 | x | main.rs:587:13:587:13 | x | +| main.rs:595:19:595:19 | x | main.rs:587:13:587:13 | x | +| main.rs:598:19:598:19 | x | main.rs:587:13:587:13 | x | +| main.rs:599:19:599:19 | x | main.rs:587:13:587:13 | x | +| main.rs:601:15:601:15 | x | main.rs:587:13:587:13 | x | +| main.rs:607:16:607:17 | b1 | main.rs:604:13:604:14 | b1 | +| main.rs:609:19:609:19 | x | main.rs:605:9:605:9 | x | +| main.rs:611:19:611:19 | x | main.rs:605:9:605:9 | x | +| main.rs:615:16:615:17 | b2 | main.rs:604:23:604:24 | b2 | +| main.rs:617:19:617:19 | x | main.rs:605:9:605:9 | x | +| main.rs:619:19:619:19 | x | main.rs:605:9:605:9 | x | +| main.rs:629:16:629:19 | self | main.rs:628:20:628:23 | self | +| main.rs:633:9:633:12 | self | main.rs:632:11:632:14 | self | +| main.rs:639:13:639:16 | self | main.rs:636:23:636:26 | self | +| main.rs:639:25:639:25 | n | main.rs:637:22:637:22 | n | +| main.rs:641:9:641:9 | f | main.rs:637:17:637:17 | f | +| main.rs:642:9:642:9 | f | main.rs:637:17:637:17 | f | +| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | +| main.rs:649:5:649:5 | a | main.rs:647:13:647:13 | a | +| main.rs:650:15:650:15 | a | main.rs:647:13:647:13 | a | +| main.rs:652:15:652:15 | a | main.rs:647:13:647:13 | a | +| main.rs:657:15:657:15 | a | main.rs:656:13:656:13 | a | +| main.rs:658:5:658:5 | a | main.rs:656:13:656:13 | a | +| main.rs:659:15:659:15 | a | main.rs:656:13:656:13 | a | +| main.rs:661:15:661:15 | a | main.rs:656:13:656:13 | a | +| main.rs:667:15:667:15 | x | main.rs:665:9:665:9 | x | +| main.rs:679:10:679:13 | self | main.rs:678:17:678:20 | self | +| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | +| main.rs:688:15:688:15 | a | main.rs:684:13:684:13 | a | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | +| main.rs:708:15:708:28 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | +| main.rs:714:30:714:41 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | +| main.rs:715:15:715:26 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | +| main.rs:721:15:721:15 | x | main.rs:719:9:719:9 | x | +| main.rs:728:20:728:20 | b | main.rs:726:20:726:20 | b | +| main.rs:732:5:732:7 | cap | main.rs:726:13:726:15 | cap | +| main.rs:733:15:733:15 | x | main.rs:725:13:725:13 | x | variableInitializer | main.rs:20:9:20:10 | x1 | main.rs:20:14:20:16 | "a" | | main.rs:25:13:25:14 | x2 | main.rs:25:18:25:18 | 4 | -| main.rs:32:13:32:13 | x | main.rs:32:17:32:17 | 1 | -| main.rs:39:9:39:10 | x3 | main.rs:39:14:39:14 | 1 | -| main.rs:41:9:41:10 | x3 | main.rs:42:9:42:14 | ... + ... | -| main.rs:47:9:47:10 | x4 | main.rs:47:14:47:16 | "a" | -| main.rs:50:13:50:14 | x4 | main.rs:50:18:50:20 | "b" | -| main.rs:79:9:79:10 | p1 | main.rs:79:14:79:37 | Point {...} | -| main.rs:89:9:89:10 | s1 | main.rs:89:14:89:41 | Some(...) | -| main.rs:98:9:98:9 | x | main.rs:98:13:98:22 | Some(...) | -| main.rs:102:13:102:13 | x | main.rs:103:13:103:13 | x | -| main.rs:111:9:111:10 | s1 | main.rs:111:14:111:41 | Some(...) | -| main.rs:120:9:120:10 | x6 | main.rs:120:14:120:20 | Some(...) | -| main.rs:121:9:121:10 | y1 | main.rs:121:14:121:15 | 10 | -| main.rs:137:9:137:15 | numbers | main.rs:137:19:137:35 | TupleExpr | -| main.rs:168:9:168:10 | p2 | main.rs:168:14:168:37 | Point {...} | -| main.rs:182:9:182:11 | msg | main.rs:182:15:182:38 | ...::Hello {...} | -| main.rs:206:9:206:14 | either | main.rs:206:18:206:33 | ...::Left(...) | -| main.rs:220:9:220:10 | tv | main.rs:220:14:220:36 | ...::Second(...) | -| main.rs:236:9:236:14 | either | main.rs:236:18:236:33 | ...::Left(...) | -| main.rs:246:9:246:14 | either | main.rs:246:18:246:33 | ...::Left(...) | -| main.rs:270:9:270:10 | fv | main.rs:270:14:270:35 | ...::Second(...) | -| main.rs:279:9:279:9 | x | main.rs:279:12:279:19 | Some(...) | -| main.rs:287:13:287:13 | x | main.rs:288:13:288:13 | x | -| main.rs:295:9:295:9 | x | main.rs:295:13:295:20 | Some(...) | -| main.rs:306:13:306:13 | x | main.rs:307:13:307:13 | x | -| main.rs:314:9:314:9 | x | main.rs:314:13:314:20 | Some(...) | -| main.rs:332:9:332:9 | x | main.rs:332:13:332:20 | Some(...) | -| main.rs:335:20:335:20 | x | main.rs:336:18:336:18 | x | -| main.rs:346:9:346:9 | x | main.rs:346:13:346:18 | Ok(...) | -| main.rs:416:9:416:23 | example_closure | main.rs:417:9:418:9 | \|...\| x | -| main.rs:419:9:419:10 | n1 | main.rs:420:9:420:26 | example_closure(...) | -| main.rs:424:9:424:26 | immutable_variable | main.rs:425:5:426:9 | \|...\| x | -| main.rs:427:9:427:10 | n2 | main.rs:428:9:428:29 | immutable_variable(...) | -| main.rs:434:9:434:9 | f | main.rs:435:9:436:9 | \|...\| x | -| main.rs:457:13:457:13 | f | main.rs:458:13:459:13 | \|...\| x | -| main.rs:465:9:465:9 | v | main.rs:465:13:465:41 | &... | -| main.rs:474:13:474:13 | a | main.rs:474:17:474:17 | 0 | -| main.rs:482:13:482:13 | i | main.rs:482:17:482:17 | 1 | -| main.rs:483:9:483:13 | ref_i | main.rs:484:9:484:14 | &mut i | -| main.rs:505:13:505:13 | x | main.rs:505:17:505:17 | 2 | -| main.rs:506:9:506:9 | y | main.rs:507:9:507:28 | mutate_param(...) | -| main.rs:513:13:513:13 | z | main.rs:513:17:513:17 | 4 | -| main.rs:514:9:514:9 | w | main.rs:515:9:515:19 | &mut ... | -| main.rs:527:13:527:13 | x | main.rs:527:17:527:17 | 1 | -| main.rs:528:9:528:9 | y | main.rs:529:9:529:14 | &mut x | -| main.rs:535:9:535:9 | x | main.rs:535:13:535:15 | 100 | -| main.rs:538:9:538:11 | cap | main.rs:538:15:540:5 | \|...\| ... | -| main.rs:546:13:546:13 | x | main.rs:546:17:546:17 | 1 | -| main.rs:549:9:549:16 | closure1 | main.rs:549:20:551:5 | \|...\| ... | -| main.rs:555:13:555:13 | y | main.rs:555:17:555:17 | 2 | -| main.rs:558:13:558:20 | closure2 | main.rs:558:24:560:5 | \|...\| ... | -| main.rs:564:13:564:13 | z | main.rs:564:17:564:17 | 2 | -| main.rs:567:13:567:20 | closure3 | main.rs:567:24:569:5 | \|...\| ... | -| main.rs:575:13:575:13 | i | main.rs:575:22:575:22 | 0 | -| main.rs:576:9:576:13 | block | main.rs:576:17:578:5 | { ... } | -| main.rs:585:13:585:13 | x | main.rs:585:17:585:17 | 1 | -| main.rs:603:9:603:9 | x | main.rs:603:13:603:13 | 1 | -| main.rs:635:17:635:17 | f | main.rs:635:21:638:9 | \|...\| ... | -| main.rs:645:13:645:13 | a | main.rs:645:17:645:35 | MyStruct {...} | -| main.rs:654:13:654:13 | a | main.rs:654:17:654:25 | [...] | -| main.rs:663:9:663:9 | x | main.rs:663:13:663:14 | 16 | -| main.rs:667:9:667:9 | z | main.rs:667:13:667:14 | 17 | -| main.rs:682:13:682:13 | a | main.rs:682:17:682:35 | MyStruct {...} | -| main.rs:704:9:704:22 | var_from_macro | main.rs:705:9:705:25 | MacroExpr | -| main.rs:705:9:705:21 | var_in_macro | main.rs:705:23:705:24 | 37 | -| main.rs:707:9:707:20 | var_in_macro | main.rs:707:24:707:25 | 33 | -| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | 0 | -| main.rs:723:13:723:13 | x | main.rs:723:17:723:19 | 100 | -| main.rs:724:13:724:15 | cap | main.rs:724:19:729:5 | \|...\| ... | +| main.rs:34:13:34:13 | x | main.rs:34:17:34:17 | 1 | +| main.rs:41:9:41:10 | x3 | main.rs:41:14:41:14 | 1 | +| main.rs:43:9:43:10 | x3 | main.rs:44:9:44:14 | ... + ... | +| main.rs:49:9:49:10 | x4 | main.rs:49:14:49:16 | "a" | +| main.rs:52:13:52:14 | x4 | main.rs:52:18:52:20 | "b" | +| main.rs:81:9:81:10 | p1 | main.rs:81:14:81:37 | Point {...} | +| main.rs:91:9:91:10 | s1 | main.rs:91:14:91:41 | Some(...) | +| main.rs:100:9:100:9 | x | main.rs:100:13:100:22 | Some(...) | +| main.rs:104:13:104:13 | x | main.rs:105:13:105:13 | x | +| main.rs:113:9:113:10 | s1 | main.rs:113:14:113:41 | Some(...) | +| main.rs:122:9:122:10 | x6 | main.rs:122:14:122:20 | Some(...) | +| main.rs:123:9:123:10 | y1 | main.rs:123:14:123:15 | 10 | +| main.rs:139:9:139:15 | numbers | main.rs:139:19:139:35 | TupleExpr | +| main.rs:170:9:170:10 | p2 | main.rs:170:14:170:37 | Point {...} | +| main.rs:184:9:184:11 | msg | main.rs:184:15:184:38 | ...::Hello {...} | +| main.rs:208:9:208:14 | either | main.rs:208:18:208:33 | ...::Left(...) | +| main.rs:222:9:222:10 | tv | main.rs:222:14:222:36 | ...::Second(...) | +| main.rs:238:9:238:14 | either | main.rs:238:18:238:33 | ...::Left(...) | +| main.rs:248:9:248:14 | either | main.rs:248:18:248:33 | ...::Left(...) | +| main.rs:272:9:272:10 | fv | main.rs:272:14:272:35 | ...::Second(...) | +| main.rs:281:9:281:9 | x | main.rs:281:12:281:19 | Some(...) | +| main.rs:289:13:289:13 | x | main.rs:290:13:290:13 | x | +| main.rs:297:9:297:9 | x | main.rs:297:13:297:20 | Some(...) | +| main.rs:308:13:308:13 | x | main.rs:309:13:309:13 | x | +| main.rs:316:9:316:9 | x | main.rs:316:13:316:20 | Some(...) | +| main.rs:334:9:334:9 | x | main.rs:334:13:334:20 | Some(...) | +| main.rs:337:20:337:20 | x | main.rs:338:18:338:18 | x | +| main.rs:348:9:348:9 | x | main.rs:348:13:348:18 | Ok(...) | +| main.rs:418:9:418:23 | example_closure | main.rs:419:9:420:9 | \|...\| x | +| main.rs:421:9:421:10 | n1 | main.rs:422:9:422:26 | example_closure(...) | +| main.rs:426:9:426:26 | immutable_variable | main.rs:427:5:428:9 | \|...\| x | +| main.rs:429:9:429:10 | n2 | main.rs:430:9:430:29 | immutable_variable(...) | +| main.rs:436:9:436:9 | f | main.rs:437:9:438:9 | \|...\| x | +| main.rs:459:13:459:13 | f | main.rs:460:13:461:13 | \|...\| x | +| main.rs:467:9:467:9 | v | main.rs:467:13:467:41 | &... | +| main.rs:476:13:476:13 | a | main.rs:476:17:476:17 | 0 | +| main.rs:484:13:484:13 | i | main.rs:484:17:484:17 | 1 | +| main.rs:485:9:485:13 | ref_i | main.rs:486:9:486:14 | &mut i | +| main.rs:507:13:507:13 | x | main.rs:507:17:507:17 | 2 | +| main.rs:508:9:508:9 | y | main.rs:509:9:509:28 | mutate_param(...) | +| main.rs:515:13:515:13 | z | main.rs:515:17:515:17 | 4 | +| main.rs:516:9:516:9 | w | main.rs:517:9:517:19 | &mut ... | +| main.rs:529:13:529:13 | x | main.rs:529:17:529:17 | 1 | +| main.rs:530:9:530:9 | y | main.rs:531:9:531:14 | &mut x | +| main.rs:537:9:537:9 | x | main.rs:537:13:537:15 | 100 | +| main.rs:540:9:540:11 | cap | main.rs:540:15:542:5 | \|...\| ... | +| main.rs:548:13:548:13 | x | main.rs:548:17:548:17 | 1 | +| main.rs:551:9:551:16 | closure1 | main.rs:551:20:553:5 | \|...\| ... | +| main.rs:557:13:557:13 | y | main.rs:557:17:557:17 | 2 | +| main.rs:560:13:560:20 | closure2 | main.rs:560:24:562:5 | \|...\| ... | +| main.rs:566:13:566:13 | z | main.rs:566:17:566:17 | 2 | +| main.rs:569:13:569:20 | closure3 | main.rs:569:24:571:5 | \|...\| ... | +| main.rs:577:13:577:13 | i | main.rs:577:22:577:22 | 0 | +| main.rs:578:9:578:13 | block | main.rs:578:17:580:5 | { ... } | +| main.rs:587:13:587:13 | x | main.rs:587:17:587:17 | 1 | +| main.rs:605:9:605:9 | x | main.rs:605:13:605:13 | 1 | +| main.rs:637:17:637:17 | f | main.rs:637:21:640:9 | \|...\| ... | +| main.rs:647:13:647:13 | a | main.rs:647:17:647:35 | MyStruct {...} | +| main.rs:656:13:656:13 | a | main.rs:656:17:656:25 | [...] | +| main.rs:665:9:665:9 | x | main.rs:665:13:665:14 | 16 | +| main.rs:669:9:669:9 | z | main.rs:669:13:669:14 | 17 | +| main.rs:684:13:684:13 | a | main.rs:684:17:684:35 | MyStruct {...} | +| main.rs:706:9:706:22 | var_from_macro | main.rs:707:9:707:25 | MacroExpr | +| main.rs:707:9:707:21 | var_in_macro | main.rs:707:23:707:24 | 37 | +| main.rs:709:9:709:20 | var_in_macro | main.rs:709:24:709:25 | 33 | +| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | 0 | +| main.rs:725:13:725:13 | x | main.rs:725:17:725:19 | 100 | +| main.rs:726:13:726:15 | cap | main.rs:726:19:731:5 | \|...\| ... | capturedVariable -| main.rs:535:9:535:9 | x | -| main.rs:546:13:546:13 | x | -| main.rs:555:13:555:13 | y | -| main.rs:564:13:564:13 | z | -| main.rs:575:13:575:13 | i | -| main.rs:634:23:634:26 | self | -| main.rs:723:13:723:13 | x | +| main.rs:537:9:537:9 | x | +| main.rs:548:13:548:13 | x | +| main.rs:557:13:557:13 | y | +| main.rs:566:13:566:13 | z | +| main.rs:577:13:577:13 | i | +| main.rs:636:23:636:26 | self | +| main.rs:725:13:725:13 | x | capturedAccess -| main.rs:539:19:539:19 | x | -| main.rs:550:19:550:19 | x | -| main.rs:559:9:559:9 | y | -| main.rs:568:9:568:9 | z | -| main.rs:577:9:577:9 | i | -| main.rs:637:13:637:16 | self | -| main.rs:727:13:727:13 | x | +| main.rs:541:19:541:19 | x | +| main.rs:552:19:552:19 | x | +| main.rs:561:9:561:9 | y | +| main.rs:570:9:570:9 | z | +| main.rs:579:9:579:9 | i | +| main.rs:639:13:639:16 | self | +| main.rs:729:13:729:13 | x | nestedFunctionAccess -| main.rs:447:19:447:19 | f | main.rs:448:9:451:9 | fn f | -| main.rs:454:23:454:23 | f | main.rs:448:9:451:9 | fn f | +| main.rs:449:19:449:19 | f | main.rs:450:9:453:9 | fn f | +| main.rs:456:23:456:23 | f | main.rs:450:9:453:9 | fn f | From 7cac226ad9e05f25984a8c3b8b170fab408b635a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 16 Sep 2025 12:46:03 +0200 Subject: [PATCH 065/219] Rust: Adjust SSA write node for (compound) assignments --- .../lib/codeql/rust/controlflow/CfgNodes.qll | 62 ++++++++++++++++++- .../rust/controlflow/internal/CfgNodes.qll | 6 ++ rust/ql/lib/codeql/rust/dataflow/Ssa.qll | 15 ++++- .../rust/dataflow/internal/DataFlowImpl.qll | 2 +- .../codeql/rust/dataflow/internal/SsaImpl.qll | 17 +++-- .../rust/elements/internal/VariableImpl.qll | 13 ++-- .../src/queries/unusedentities/UnusedValue.ql | 2 +- .../PathResolutionConsistency.expected | 4 +- .../test/library-tests/variables/Ssa.expected | 24 +++---- 9 files changed, 113 insertions(+), 32 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll index 1aed1cfa0265..96ae6f8fdbce 100644 --- a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll @@ -16,6 +16,36 @@ class ExitCfgNode = CfgImpl::ExitNode; class AnnotatedExitCfgNode = CfgImpl::AnnotatedExitNode; +/** A variable access. */ +final class VariableAccessCfgNode extends PathExprBaseCfgNode { + private VariableAccess a; + + VariableAccessCfgNode() { a = this.getAstNode() } + + /** Gets the underlying `VariableAccess`. */ + VariableAccess getAccess() { result = a } +} + +/** A variable write. */ +final class VariableWriteAccessCfgNode extends VariableAccessCfgNode { + private VariableWriteAccess a; + + VariableWriteAccessCfgNode() { a = this.getAstNode() } + + /** Gets the underlying `VariableWriteAccess`. */ + VariableWriteAccess getAccess() { result = a } +} + +/** A variable read. */ +final class VariableReadAccessCfgNode extends VariableAccessCfgNode { + private VariableReadAccess a; + + VariableReadAccessCfgNode() { a = this.getAstNode() } + + /** Gets the underlying `VariableReadAccess`. */ + VariableReadAccess getAccess() { result = a } +} + /** * An assignment expression, for example * @@ -24,12 +54,42 @@ class AnnotatedExitCfgNode = CfgImpl::AnnotatedExitNode; * ``` */ final class AssignmentExprCfgNode extends BinaryExprCfgNode { - AssignmentExpr a; + AssignmentExprChildMapping a; AssignmentExprCfgNode() { a = this.getBinaryExpr() } /** Gets the underlying `AssignmentExpr`. */ AssignmentExpr getAssignmentExpr() { result = a } + + /** + * Gets a write access that occurs in the left-hand side of this assignment expression. + */ + VariableWriteAccessCfgNode getAWriteAccess() { + a = result.getAccess().getAssignmentExpr() and + any(ChildMapping mapping).hasCfgChild(a, result.getAccess(), this, result) + } +} + +/** + * A compound assignment expression, for example: + * ```rust + * x += y; + * ``` + * + * Note that compound assignment expressions are syntatic sugar for + * trait invocations, i.e., the above actually means + * + * ```rust + * (&mut x).add_assign(y); + * ``` + */ +final class CompoundAssignmentExprCfgNode extends BinaryExprCfgNode { + CompoundAssignmentExpr a; + + CompoundAssignmentExprCfgNode() { a = this.getBinaryExpr() } + + /** Gets the underlying `CompoundAssignmentExpr`. */ + CompoundAssignmentExpr getCompoundAssignmentExpr() { result = a } } /** diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll index bb29047cb92a..eb4d665436e2 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll @@ -81,6 +81,12 @@ class FormatArgsExprChildMapping extends ParentAstNode, CfgImpl::ExprTrees::Form override predicate relevantChild(AstNode child) { child = this.getChildNode(_) } } +class AssignmentExprChildMapping extends ParentAstNode, AssignmentExpr { + override predicate relevantChild(AstNode child) { + child.(VariableWriteAccess).getAssignmentExpr() = this + } +} + private class ChildMappingImpl extends ChildMapping { /** Gets a CFG node for `child`, where `child` is a relevant child node of `parent`. */ private CfgNode getRelevantChildCfgNode(AstNode parent, AstNode child) { diff --git a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll index d2b97d7c2e7f..badbef9e4207 100644 --- a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll +++ b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll @@ -171,9 +171,20 @@ module Ssa { private CfgNode write; WriteDefinition() { - exists(BasicBlock bb, int i, Variable v | + exists(BasicBlock bb, int i, Variable v, CfgNode n | this.definesAt(v, bb, i) and - SsaImpl::variableWriteActual(bb, i, v, write) + SsaImpl::variableWriteActual(bb, i, v, n) + | + write.(VariableAccessCfgNode).getAccess().getVariable() = v and + ( + write = n.(AssignmentExprCfgNode).getAWriteAccess() + or + write = n.(CompoundAssignmentExprCfgNode).getLhs() + ) + or + not n instanceof AssignmentExprCfgNode and + not n instanceof CompoundAssignmentExprCfgNode and + write = n ) } diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index c63d2330ca24..1d7a3d49cf4d 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -263,7 +263,7 @@ module LocalFlow { or // An edge from a pattern/expression to its corresponding SSA definition. nodeFrom.(AstCfgFlowNode).getCfgNode() = - nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getControlFlowNode() + nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getWriteAccess() or nodeFrom.(SourceParameterNode).getParameter().(ParamCfgNode).getPat() = nodeTo.asPat() or diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index df0824fcdfc2..49b40474c987 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -18,23 +18,22 @@ private predicate isInUninitializedLet(Name name) { ) } -/** Holds if `write` writes to variable `v`. */ -predicate variableWrite(AstNode write, Variable v) { +/** Holds if `write` writes to variable `v` via `access`. */ +predicate variableWrite(AstNode write, AstNode access, Variable v) { exists(Name name | name = write and + access = write and name = v.getName() and not isInUninitializedLet(name) ) or - exists(VariableAccess access | - access = write and - access.getVariable() = v - | - access instanceof VariableWriteAccess + v = access.(VariableAccess).getVariable() and + ( + write = access.(VariableWriteAccess).getAssignmentExpr() or // Although compound assignments, like `x += y`, may in fact not update `x`, // it makes sense to treat them as such - access = any(CompoundAssignmentExpr cae).getLhs() + access = write.(CompoundAssignmentExpr).getLhs() ) } @@ -226,7 +225,7 @@ private module Cached { cached predicate variableWriteActual(BasicBlock bb, int i, Variable v, CfgNode write) { bb.getNode(i) = write and - variableWrite(write.getAstNode(), v) + variableWrite(write.getAstNode(), _, v) } cached diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index 02fe1f2ad7fa..eaced654b017 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -679,11 +679,11 @@ module Impl { } /** Holds if `e` occurs in the LHS of an assignment or compound assignment. */ - private predicate assignmentExprDescendant(Expr e) { - e = any(AssignmentExpr ae).getLhs() + private predicate assignmentExprDescendant(AssignmentExpr ae, Expr e) { + e = ae.getLhs() or exists(Expr mid | - assignmentExprDescendant(mid) and + assignmentExprDescendant(ae, mid) and getImmediateParentAdj(e) = mid and not mid instanceof DerefExpr and not mid instanceof FieldExpr and @@ -693,11 +693,16 @@ module Impl { /** A variable write. */ class VariableWriteAccess extends VariableAccess { + private AssignmentExpr ae; + cached VariableWriteAccess() { Cached::ref() and - assignmentExprDescendant(this) + assignmentExprDescendant(ae, this) } + + /** Gets the assignment expression that has this write access in the left-hand side. */ + AssignmentExpr getAssignmentExpr() { result = ae } } /** A variable read. */ diff --git a/rust/ql/src/queries/unusedentities/UnusedValue.ql b/rust/ql/src/queries/unusedentities/UnusedValue.ql index 11e29d475e49..14204a2273b7 100644 --- a/rust/ql/src/queries/unusedentities/UnusedValue.ql +++ b/rust/ql/src/queries/unusedentities/UnusedValue.ql @@ -16,7 +16,7 @@ import UnusedVariable from AstNode write, Ssa::Variable v where - variableWrite(write, v) and + variableWrite(_, write, v) and not v instanceof DiscardVariable and not write.isInMacroExpansion() and not isAllowableUnused(v) and diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected index ec1a29e40c87..6b4022b86e57 100644 --- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,3 @@ multipleCallTargets -| main.rs:89:19:89:40 | ...::from(...) | -| main.rs:111:19:111:40 | ...::from(...) | +| main.rs:91:19:91:40 | ...::from(...) | +| main.rs:113:19:113:40 | ...::from(...) | diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index 52f163088569..342fd0df20b9 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -198,7 +198,7 @@ read | main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | main.rs:21:15:21:16 | x1 | | main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | main.rs:26:15:26:16 | x2 | | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 | -| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | +| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | | main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:30:15:30:16 | x2 | | main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | main.rs:35:20:35:20 | x | | main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | main.rs:37:20:37:20 | x | @@ -285,14 +285,14 @@ read | main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | main.rs:372:15:372:16 | c1 | | main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:377:15:377:16 | a9 | | main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 | +| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | | main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 | +| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | | main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 | -| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | +| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | | main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:401:15:401:16 | c2 | -| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | | main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 | | main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:414:15:414:16 | b4 | -| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | | main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 | | main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:413:15:413:17 | a10 | | main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | main.rs:408:23:408:25 | a10 | @@ -401,7 +401,7 @@ firstRead | main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | main.rs:21:15:21:16 | x1 | | main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | main.rs:26:15:26:16 | x2 | | main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 | -| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | +| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:30:15:30:16 | x2 | | main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | main.rs:35:20:35:20 | x | | main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | main.rs:37:20:37:20 | x | | main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 | @@ -473,9 +473,9 @@ firstRead | main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 | | main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 | | main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 | -| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | -| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | -| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | +| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:401:15:401:16 | c2 | +| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 | +| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 | | main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | main.rs:408:23:408:25 | a10 | | main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | main.rs:409:23:409:24 | b4 | | main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | main.rs:422:9:422:23 | example_closure | @@ -556,7 +556,7 @@ firstRead | main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | main.rs:728:20:728:20 | b | | main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x | main.rs:733:15:733:15 | x | adjacentReads -| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 | main.rs:30:15:30:16 | x2 | +| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 | main.rs:29:10:29:11 | x2 | | main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 | main.rs:44:9:44:10 | x3 | | main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 | main.rs:55:15:55:16 | x4 | | main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x | main.rs:105:13:105:13 | x | @@ -574,10 +574,10 @@ adjacentReads | main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x | main.rs:343:15:343:15 | x | | main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | main.rs:355:7:355:7 | x | | main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:355:7:355:7 | x | main.rs:359:19:359:19 | x | -| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 | main.rs:401:15:401:16 | c2 | -| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 | main.rs:400:15:400:16 | b4 | +| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 | main.rs:395:9:395:11 | a10 | +| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 | main.rs:396:9:396:10 | b4 | +| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 | main.rs:397:9:397:10 | c2 | | main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 | main.rs:414:15:414:16 | b4 | -| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 | main.rs:399:15:399:17 | a10 | | main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 | main.rs:413:15:413:17 | a10 | | main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f | main.rs:446:15:446:15 | f | | main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a | main.rs:479:11:479:11 | a | From 7b04cf1a73ddb561738e31ba5b31348ced20c626 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:15:44 +0100 Subject: [PATCH 066/219] Rust: Fix up the test annotations. --- .../security/CWE-319/UseOfHttp.expected | 10 ------- .../test/query-tests/security/CWE-319/main.rs | 30 +++++++++---------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected index 53cc8606cc82..f2a2e7e05f43 100644 --- a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -66,13 +66,3 @@ nodes | main.rs:60:21:60:42 | ...::get | semmle.label | ...::get | | main.rs:60:44:60:46 | url | semmle.label | url | subpaths -testFailures -| main.rs:22:20:22:39 | "http://example.com" | Unexpected result: Source | -| main.rs:22:42:22:71 | //... | Missing result: Alert[rust/non-https-url] | -| main.rs:25:21:25:42 | ...::get | Unexpected result: Alert | -| main.rs:33:20:33:28 | "http://" | Unexpected result: Source | -| main.rs:33:31:33:60 | //... | Missing result: Alert[rust/non-https-url] | -| main.rs:36:30:36:51 | ...::get | Unexpected result: Alert | -| main.rs:59:15:59:49 | "http://example.com/sensitive-... | Unexpected result: Source | -| main.rs:59:52:59:81 | //... | Missing result: Alert[rust/non-https-url] | -| main.rs:60:21:60:42 | ...::get | Unexpected result: Alert | diff --git a/rust/ql/test/query-tests/security/CWE-319/main.rs b/rust/ql/test/query-tests/security/CWE-319/main.rs index ae58967a49bb..52f744e39a1a 100644 --- a/rust/ql/test/query-tests/security/CWE-319/main.rs +++ b/rust/ql/test/query-tests/security/CWE-319/main.rs @@ -11,30 +11,30 @@ fn test_direct_literals() { // BAD: Direct HTTP URLs that should be flagged let _response1 = reqwest::blocking::get("http://example.com/api").unwrap(); // $ Alert[rust/non-https-url] let _response2 = reqwest::blocking::get("http://api.example.com/data").unwrap(); // $ Alert[rust/non-https-url] - - // GOOD: HTTPS URLs that should not be flagged + + // GOOD: HTTPS URLs that should not be flagged let _response3 = reqwest::blocking::get("https://example.com/api").unwrap(); let _response4 = reqwest::blocking::get("https://api.example.com/data").unwrap(); } fn test_dynamic_urls() { // BAD: HTTP URLs constructed dynamically - let base_url = "http://example.com"; // $ Alert[rust/non-https-url] + let base_url = "http://example.com"; // $ Source let endpoint = "/api/users"; let full_url = format!("{}{}", base_url, endpoint); - let _response = reqwest::blocking::get(&full_url).unwrap(); - + let _response = reqwest::blocking::get(&full_url).unwrap(); // $ Alert[rust/non-https-url] + // GOOD: HTTPS URLs constructed dynamically let secure_base = "https://example.com"; let secure_full = format!("{}{}", secure_base, endpoint); let _secure_response = reqwest::blocking::get(&secure_full).unwrap(); - + // BAD: HTTP protocol string - let protocol = "http://"; // $ Alert[rust/non-https-url] + let protocol = "http://"; // $ Source let host = "api.example.com"; let insecure_url = format!("{}{}", protocol, host); - let _insecure_response = reqwest::blocking::get(&insecure_url).unwrap(); - + let _insecure_response = reqwest::blocking::get(&insecure_url).unwrap(); // $ Alert[rust/non-https-url] + // GOOD: HTTPS protocol string let secure_protocol = "https://"; let secure_url = format!("{}{}", secure_protocol, host); @@ -47,7 +47,7 @@ fn test_localhost_exemptions() { let _local2 = reqwest::blocking::get("http://127.0.0.1:3000/test").unwrap(); let _local3 = reqwest::blocking::get("http://192.168.1.100/internal").unwrap(); let _local4 = reqwest::blocking::get("http://10.0.0.1/admin").unwrap(); - + // Test IPv6 localhost variants let _local5 = reqwest::blocking::get("http://[::1]:8080/api").unwrap(); let _local6 = reqwest::blocking::get("http://[0:0:0:0:0:0:0:1]/test").unwrap(); @@ -56,10 +56,10 @@ fn test_localhost_exemptions() { // Additional test cases that mirror the Bad/Good examples fn test_examples() { // From UseOfHttpBad.rs - BAD case - let url = "http://example.com/sensitive-data"; // $ Alert[rust/non-https-url] - let _response = reqwest::blocking::get(url).unwrap(); - - // From UseOfHttpGood.rs - GOOD case + let url = "http://example.com/sensitive-data"; // $ Source + let _response = reqwest::blocking::get(url).unwrap(); // $ Alert[rust/non-https-url] + + // From UseOfHttpGood.rs - GOOD case let secure_url = "https://example.com/sensitive-data"; let _secure_response = reqwest::blocking::get(secure_url).unwrap(); -} \ No newline at end of file +} From 0924dec545a0eff7113574d629f4c5f2b99007be Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:21:57 +0100 Subject: [PATCH 067/219] Rust: Make the tests of the example code closer to the actual example code. --- .../security/CWE-319/UseOfHttp.expected | 16 ++++++++-------- .../test/query-tests/security/CWE-319/main.rs | 18 ++++++++++++++---- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected index f2a2e7e05f43..e8b7d3013359 100644 --- a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -3,7 +3,7 @@ | main.rs:13:22:13:43 | ...::get | main.rs:13:45:13:73 | "http://api.example.com/data" | main.rs:13:22:13:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:13:45:13:73 | "http://api.example.com/data" | this HTTP URL | | main.rs:25:21:25:42 | ...::get | main.rs:22:20:22:39 | "http://example.com" | main.rs:25:21:25:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:22:20:22:39 | "http://example.com" | this HTTP URL | | main.rs:36:30:36:51 | ...::get | main.rs:33:20:33:28 | "http://" | main.rs:36:30:36:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:33:20:33:28 | "http://" | this HTTP URL | -| main.rs:60:21:60:42 | ...::get | main.rs:59:15:59:49 | "http://example.com/sensitive-... | main.rs:60:21:60:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:59:15:59:49 | "http://example.com/sensitive-... | this HTTP URL | +| main.rs:63:24:63:45 | ...::get | main.rs:60:19:60:53 | "http://example.com/sensitive-... | main.rs:63:24:63:45 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:60:19:60:53 | "http://example.com/sensitive-... | this HTTP URL | edges | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:13:45:13:73 | "http://api.example.com/data" | main.rs:13:22:13:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | @@ -27,9 +27,9 @@ edges | main.rs:35:32:35:53 | { ... } | main.rs:35:32:35:53 | ...::must_use(...) | provenance | MaD:3 | | main.rs:36:53:36:65 | &insecure_url [&ref] | main.rs:36:30:36:51 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:36:54:36:65 | insecure_url | main.rs:36:53:36:65 | &insecure_url [&ref] | provenance | | -| main.rs:59:9:59:11 | url | main.rs:60:44:60:46 | url | provenance | | -| main.rs:59:15:59:49 | "http://example.com/sensitive-... | main.rs:59:9:59:11 | url | provenance | | -| main.rs:60:44:60:46 | url | main.rs:60:21:60:42 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:60:13:60:15 | url | main.rs:63:47:63:49 | url | provenance | | +| main.rs:60:19:60:53 | "http://example.com/sensitive-... | main.rs:60:13:60:15 | url | provenance | | +| main.rs:63:47:63:49 | url | main.rs:63:24:63:45 | ...::get | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: reqwest::blocking::get; Argument[0]; request-url | | 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | @@ -61,8 +61,8 @@ nodes | main.rs:36:30:36:51 | ...::get | semmle.label | ...::get | | main.rs:36:53:36:65 | &insecure_url [&ref] | semmle.label | &insecure_url [&ref] | | main.rs:36:54:36:65 | insecure_url | semmle.label | insecure_url | -| main.rs:59:9:59:11 | url | semmle.label | url | -| main.rs:59:15:59:49 | "http://example.com/sensitive-... | semmle.label | "http://example.com/sensitive-... | -| main.rs:60:21:60:42 | ...::get | semmle.label | ...::get | -| main.rs:60:44:60:46 | url | semmle.label | url | +| main.rs:60:13:60:15 | url | semmle.label | url | +| main.rs:60:19:60:53 | "http://example.com/sensitive-... | semmle.label | "http://example.com/sensitive-... | +| main.rs:63:24:63:45 | ...::get | semmle.label | ...::get | +| main.rs:63:47:63:49 | url | semmle.label | url | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-319/main.rs b/rust/ql/test/query-tests/security/CWE-319/main.rs index 52f744e39a1a..cec94840f297 100644 --- a/rust/ql/test/query-tests/security/CWE-319/main.rs +++ b/rust/ql/test/query-tests/security/CWE-319/main.rs @@ -56,10 +56,20 @@ fn test_localhost_exemptions() { // Additional test cases that mirror the Bad/Good examples fn test_examples() { // From UseOfHttpBad.rs - BAD case - let url = "http://example.com/sensitive-data"; // $ Source - let _response = reqwest::blocking::get(url).unwrap(); // $ Alert[rust/non-https-url] + { + let url = "http://example.com/sensitive-data"; // $ Source + + // This makes an insecure HTTP request that can be intercepted + let response = reqwest::blocking::get(url).unwrap(); // $ Alert[rust/non-https-url] + println!("Response: {}", response.text().unwrap()); + } // From UseOfHttpGood.rs - GOOD case - let secure_url = "https://example.com/sensitive-data"; - let _secure_response = reqwest::blocking::get(secure_url).unwrap(); + { + let url = "https://example.com/sensitive-data"; + + // This makes a secure HTTPS request that is encrypted + let response = reqwest::blocking::get(url).unwrap(); + println!("Response: {}", response.text().unwrap()); + } } From 9c7fc583373c353f5bf6cf35d055af3b6f28ad0e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:06:05 +0100 Subject: [PATCH 068/219] Rust: Add tests for a few more edge cases. --- .../security/CWE-319/UseOfHttp.expected | 120 ++++++++++-------- .../test/query-tests/security/CWE-319/main.rs | 22 +++- 2 files changed, 79 insertions(+), 63 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected index e8b7d3013359..216d11b36068 100644 --- a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -1,35 +1,39 @@ #select | main.rs:12:22:12:43 | ...::get | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:12:45:12:68 | "http://example.com/api" | this HTTP URL | -| main.rs:13:22:13:43 | ...::get | main.rs:13:45:13:73 | "http://api.example.com/data" | main.rs:13:22:13:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:13:45:13:73 | "http://api.example.com/data" | this HTTP URL | -| main.rs:25:21:25:42 | ...::get | main.rs:22:20:22:39 | "http://example.com" | main.rs:25:21:25:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:22:20:22:39 | "http://example.com" | this HTTP URL | -| main.rs:36:30:36:51 | ...::get | main.rs:33:20:33:28 | "http://" | main.rs:36:30:36:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:33:20:33:28 | "http://" | this HTTP URL | -| main.rs:63:24:63:45 | ...::get | main.rs:60:19:60:53 | "http://example.com/sensitive-... | main.rs:63:24:63:45 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:60:19:60:53 | "http://example.com/sensitive-... | this HTTP URL | +| main.rs:14:22:14:43 | ...::get | main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:14:45:14:73 | "http://api.example.com/data" | this HTTP URL | +| main.rs:26:21:26:42 | ...::get | main.rs:23:20:23:39 | "http://example.com" | main.rs:26:21:26:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:23:20:23:39 | "http://example.com" | this HTTP URL | +| main.rs:37:30:37:51 | ...::get | main.rs:34:20:34:28 | "http://" | main.rs:37:30:37:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:34:20:34:28 | "http://" | this HTTP URL | +| main.rs:53:19:53:40 | ...::get | main.rs:53:42:53:68 | "http://172.31.255.255/bar" | main.rs:53:19:53:40 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:53:42:53:68 | "http://172.31.255.255/bar" | this HTTP URL | +| main.rs:60:20:60:41 | ...::get | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:20:60:41 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | this HTTP URL | +| main.rs:71:24:71:45 | ...::get | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:71:24:71:45 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:68:19:68:53 | "http://example.com/sensitive-... | this HTTP URL | edges | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:13:45:13:73 | "http://api.example.com/data" | main.rs:13:22:13:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:22:9:22:16 | base_url | main.rs:24:28:24:53 | MacroExpr | provenance | | -| main.rs:22:20:22:39 | "http://example.com" | main.rs:22:9:22:16 | base_url | provenance | | -| main.rs:24:9:24:16 | full_url | main.rs:25:45:25:52 | full_url | provenance | | -| main.rs:24:20:24:26 | res | main.rs:24:28:24:53 | { ... } | provenance | | -| main.rs:24:28:24:53 | ...::format(...) | main.rs:24:20:24:26 | res | provenance | | -| main.rs:24:28:24:53 | ...::must_use(...) | main.rs:24:9:24:16 | full_url | provenance | | -| main.rs:24:28:24:53 | MacroExpr | main.rs:24:28:24:53 | ...::format(...) | provenance | MaD:2 | -| main.rs:24:28:24:53 | { ... } | main.rs:24:28:24:53 | ...::must_use(...) | provenance | MaD:3 | -| main.rs:25:44:25:52 | &full_url [&ref] | main.rs:25:21:25:42 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:25:45:25:52 | full_url | main.rs:25:44:25:52 | &full_url [&ref] | provenance | | -| main.rs:33:9:33:16 | protocol | main.rs:35:32:35:53 | MacroExpr | provenance | | -| main.rs:33:20:33:28 | "http://" | main.rs:33:9:33:16 | protocol | provenance | | -| main.rs:35:9:35:20 | insecure_url | main.rs:36:54:36:65 | insecure_url | provenance | | -| main.rs:35:24:35:30 | res | main.rs:35:32:35:53 | { ... } | provenance | | -| main.rs:35:32:35:53 | ...::format(...) | main.rs:35:24:35:30 | res | provenance | | -| main.rs:35:32:35:53 | ...::must_use(...) | main.rs:35:9:35:20 | insecure_url | provenance | | -| main.rs:35:32:35:53 | MacroExpr | main.rs:35:32:35:53 | ...::format(...) | provenance | MaD:2 | -| main.rs:35:32:35:53 | { ... } | main.rs:35:32:35:53 | ...::must_use(...) | provenance | MaD:3 | -| main.rs:36:53:36:65 | &insecure_url [&ref] | main.rs:36:30:36:51 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:36:54:36:65 | insecure_url | main.rs:36:53:36:65 | &insecure_url [&ref] | provenance | | -| main.rs:60:13:60:15 | url | main.rs:63:47:63:49 | url | provenance | | -| main.rs:60:19:60:53 | "http://example.com/sensitive-... | main.rs:60:13:60:15 | url | provenance | | -| main.rs:63:47:63:49 | url | main.rs:63:24:63:45 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:23:9:23:16 | base_url | main.rs:25:28:25:53 | MacroExpr | provenance | | +| main.rs:23:20:23:39 | "http://example.com" | main.rs:23:9:23:16 | base_url | provenance | | +| main.rs:25:9:25:16 | full_url | main.rs:26:45:26:52 | full_url | provenance | | +| main.rs:25:20:25:26 | res | main.rs:25:28:25:53 | { ... } | provenance | | +| main.rs:25:28:25:53 | ...::format(...) | main.rs:25:20:25:26 | res | provenance | | +| main.rs:25:28:25:53 | ...::must_use(...) | main.rs:25:9:25:16 | full_url | provenance | | +| main.rs:25:28:25:53 | MacroExpr | main.rs:25:28:25:53 | ...::format(...) | provenance | MaD:2 | +| main.rs:25:28:25:53 | { ... } | main.rs:25:28:25:53 | ...::must_use(...) | provenance | MaD:3 | +| main.rs:26:44:26:52 | &full_url [&ref] | main.rs:26:21:26:42 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:26:45:26:52 | full_url | main.rs:26:44:26:52 | &full_url [&ref] | provenance | | +| main.rs:34:9:34:16 | protocol | main.rs:36:32:36:53 | MacroExpr | provenance | | +| main.rs:34:20:34:28 | "http://" | main.rs:34:9:34:16 | protocol | provenance | | +| main.rs:36:9:36:20 | insecure_url | main.rs:37:54:37:65 | insecure_url | provenance | | +| main.rs:36:24:36:30 | res | main.rs:36:32:36:53 | { ... } | provenance | | +| main.rs:36:32:36:53 | ...::format(...) | main.rs:36:24:36:30 | res | provenance | | +| main.rs:36:32:36:53 | ...::must_use(...) | main.rs:36:9:36:20 | insecure_url | provenance | | +| main.rs:36:32:36:53 | MacroExpr | main.rs:36:32:36:53 | ...::format(...) | provenance | MaD:2 | +| main.rs:36:32:36:53 | { ... } | main.rs:36:32:36:53 | ...::must_use(...) | provenance | MaD:3 | +| main.rs:37:53:37:65 | &insecure_url [&ref] | main.rs:37:30:37:51 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:37:54:37:65 | insecure_url | main.rs:37:53:37:65 | &insecure_url [&ref] | provenance | | +| main.rs:53:42:53:68 | "http://172.31.255.255/bar" | main.rs:53:19:53:40 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:20:60:41 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:68:13:68:15 | url | main.rs:71:47:71:49 | url | provenance | | +| main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:68:13:68:15 | url | provenance | | +| main.rs:71:47:71:49 | url | main.rs:71:24:71:45 | ...::get | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: reqwest::blocking::get; Argument[0]; request-url | | 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | @@ -37,32 +41,36 @@ models nodes | main.rs:12:22:12:43 | ...::get | semmle.label | ...::get | | main.rs:12:45:12:68 | "http://example.com/api" | semmle.label | "http://example.com/api" | -| main.rs:13:22:13:43 | ...::get | semmle.label | ...::get | -| main.rs:13:45:13:73 | "http://api.example.com/data" | semmle.label | "http://api.example.com/data" | -| main.rs:22:9:22:16 | base_url | semmle.label | base_url | -| main.rs:22:20:22:39 | "http://example.com" | semmle.label | "http://example.com" | -| main.rs:24:9:24:16 | full_url | semmle.label | full_url | -| main.rs:24:20:24:26 | res | semmle.label | res | -| main.rs:24:28:24:53 | ...::format(...) | semmle.label | ...::format(...) | -| main.rs:24:28:24:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| main.rs:24:28:24:53 | MacroExpr | semmle.label | MacroExpr | -| main.rs:24:28:24:53 | { ... } | semmle.label | { ... } | -| main.rs:25:21:25:42 | ...::get | semmle.label | ...::get | -| main.rs:25:44:25:52 | &full_url [&ref] | semmle.label | &full_url [&ref] | -| main.rs:25:45:25:52 | full_url | semmle.label | full_url | -| main.rs:33:9:33:16 | protocol | semmle.label | protocol | -| main.rs:33:20:33:28 | "http://" | semmle.label | "http://" | -| main.rs:35:9:35:20 | insecure_url | semmle.label | insecure_url | -| main.rs:35:24:35:30 | res | semmle.label | res | -| main.rs:35:32:35:53 | ...::format(...) | semmle.label | ...::format(...) | -| main.rs:35:32:35:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| main.rs:35:32:35:53 | MacroExpr | semmle.label | MacroExpr | -| main.rs:35:32:35:53 | { ... } | semmle.label | { ... } | -| main.rs:36:30:36:51 | ...::get | semmle.label | ...::get | -| main.rs:36:53:36:65 | &insecure_url [&ref] | semmle.label | &insecure_url [&ref] | -| main.rs:36:54:36:65 | insecure_url | semmle.label | insecure_url | -| main.rs:60:13:60:15 | url | semmle.label | url | -| main.rs:60:19:60:53 | "http://example.com/sensitive-... | semmle.label | "http://example.com/sensitive-... | -| main.rs:63:24:63:45 | ...::get | semmle.label | ...::get | -| main.rs:63:47:63:49 | url | semmle.label | url | +| main.rs:14:22:14:43 | ...::get | semmle.label | ...::get | +| main.rs:14:45:14:73 | "http://api.example.com/data" | semmle.label | "http://api.example.com/data" | +| main.rs:23:9:23:16 | base_url | semmle.label | base_url | +| main.rs:23:20:23:39 | "http://example.com" | semmle.label | "http://example.com" | +| main.rs:25:9:25:16 | full_url | semmle.label | full_url | +| main.rs:25:20:25:26 | res | semmle.label | res | +| main.rs:25:28:25:53 | ...::format(...) | semmle.label | ...::format(...) | +| main.rs:25:28:25:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| main.rs:25:28:25:53 | MacroExpr | semmle.label | MacroExpr | +| main.rs:25:28:25:53 | { ... } | semmle.label | { ... } | +| main.rs:26:21:26:42 | ...::get | semmle.label | ...::get | +| main.rs:26:44:26:52 | &full_url [&ref] | semmle.label | &full_url [&ref] | +| main.rs:26:45:26:52 | full_url | semmle.label | full_url | +| main.rs:34:9:34:16 | protocol | semmle.label | protocol | +| main.rs:34:20:34:28 | "http://" | semmle.label | "http://" | +| main.rs:36:9:36:20 | insecure_url | semmle.label | insecure_url | +| main.rs:36:24:36:30 | res | semmle.label | res | +| main.rs:36:32:36:53 | ...::format(...) | semmle.label | ...::format(...) | +| main.rs:36:32:36:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| main.rs:36:32:36:53 | MacroExpr | semmle.label | MacroExpr | +| main.rs:36:32:36:53 | { ... } | semmle.label | { ... } | +| main.rs:37:30:37:51 | ...::get | semmle.label | ...::get | +| main.rs:37:53:37:65 | &insecure_url [&ref] | semmle.label | &insecure_url [&ref] | +| main.rs:37:54:37:65 | insecure_url | semmle.label | insecure_url | +| main.rs:53:19:53:40 | ...::get | semmle.label | ...::get | +| main.rs:53:42:53:68 | "http://172.31.255.255/bar" | semmle.label | "http://172.31.255.255/bar" | +| main.rs:60:20:60:41 | ...::get | semmle.label | ...::get | +| main.rs:60:43:60:65 | "http://172.32.0.0/baz" | semmle.label | "http://172.32.0.0/baz" | +| main.rs:68:13:68:15 | url | semmle.label | url | +| main.rs:68:19:68:53 | "http://example.com/sensitive-... | semmle.label | "http://example.com/sensitive-... | +| main.rs:71:24:71:45 | ...::get | semmle.label | ...::get | +| main.rs:71:47:71:49 | url | semmle.label | url | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-319/main.rs b/rust/ql/test/query-tests/security/CWE-319/main.rs index cec94840f297..0dd59ce0880e 100644 --- a/rust/ql/test/query-tests/security/CWE-319/main.rs +++ b/rust/ql/test/query-tests/security/CWE-319/main.rs @@ -10,7 +10,8 @@ fn main() { fn test_direct_literals() { // BAD: Direct HTTP URLs that should be flagged let _response1 = reqwest::blocking::get("http://example.com/api").unwrap(); // $ Alert[rust/non-https-url] - let _response2 = reqwest::blocking::get("http://api.example.com/data").unwrap(); // $ Alert[rust/non-https-url] + let _response2 = reqwest::blocking::get("HTTP://EXAMPLE.COM/API").unwrap(); // $ MISSING: Alert[rust/non-https-url] + let _response3 = reqwest::blocking::get("http://api.example.com/data").unwrap(); // $ Alert[rust/non-https-url] // GOOD: HTTPS URLs that should not be flagged let _response3 = reqwest::blocking::get("https://example.com/api").unwrap(); @@ -44,13 +45,20 @@ fn test_dynamic_urls() { fn test_localhost_exemptions() { // GOOD: localhost URLs should not be flagged (local development) let _local1 = reqwest::blocking::get("http://localhost:8080/api").unwrap(); - let _local2 = reqwest::blocking::get("http://127.0.0.1:3000/test").unwrap(); - let _local3 = reqwest::blocking::get("http://192.168.1.100/internal").unwrap(); - let _local4 = reqwest::blocking::get("http://10.0.0.1/admin").unwrap(); + let _local2 = reqwest::blocking::get("HTTP://LOCALHOST:8080/api").unwrap(); + let _local3 = reqwest::blocking::get("http://127.0.0.1:3000/test").unwrap(); + let _local4 = reqwest::blocking::get("http://192.168.1.100/internal").unwrap(); + let _local5 = reqwest::blocking::get("http://10.0.0.1/admin").unwrap(); + let _local6 = reqwest::blocking::get("http://172.16.0.0/foo").unwrap(); + let _local7 = reqwest::blocking::get("http://172.31.255.255/bar").unwrap(); // $ SPURIOUS: Alert[rust/non-https-url] + + // GOOD: test IPv6 localhost variants + let _local8 = reqwest::blocking::get("http://[::1]:8080/api").unwrap(); + let _local9 = reqwest::blocking::get("http://[0:0:0:0:0:0:0:1]/test").unwrap(); + + // BAD: non-private IP address + let _local10 = reqwest::blocking::get("http://172.32.0.0/baz").unwrap(); // $ Alert[rust/non-https-url] - // Test IPv6 localhost variants - let _local5 = reqwest::blocking::get("http://[::1]:8080/api").unwrap(); - let _local6 = reqwest::blocking::get("http://[0:0:0:0:0:0:0:1]/test").unwrap(); } // Additional test cases that mirror the Bad/Good examples From 0f5aa857b874b22bfb53b67b08be2336e14af351 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:32:52 +0100 Subject: [PATCH 069/219] Rust: Remove unnecessary import. --- rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll index 026880785b6c..8001e6270dd1 100644 --- a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -6,7 +6,6 @@ import rust private import codeql.rust.dataflow.DataFlow private import codeql.rust.dataflow.FlowSink -private import codeql.rust.elements.LiteralExprExt private import codeql.rust.Concepts /** From 0b900711bf1d3df6d5d16d7cd7688495b2ca60dd Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 16 Sep 2025 13:48:26 +0200 Subject: [PATCH 070/219] Update javascript/ql/lib/semmle/javascript/frameworks/Express.qll Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- javascript/ql/lib/semmle/javascript/frameworks/Express.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll index 41e4d1c860c1..be3cb7b1ccb8 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll @@ -803,7 +803,7 @@ module Express { } /** - * An argument passed to the `json` or `json` method of an HTTP response object. + * An argument passed to the `json` or `jsonp` method of an HTTP response object. */ private class ResponseJsonCallArgument extends Http::ResponseSendArgument { ResponseJsonCall call; From 80ce55ab1072fb534776fc7b02a93ca6a2b18ce2 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:58:23 +0100 Subject: [PATCH 071/219] Rust: Make the private address spaces URL more accurate. --- rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll | 2 +- rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected | 4 ---- rust/ql/test/query-tests/security/CWE-319/main.rs | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll index 8001e6270dd1..58466dd0a4fb 100644 --- a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -38,7 +38,7 @@ module UseOfHttp { exists(string s | this.getTextValue() = s | // Match HTTP URLs that are not private/local s.regexpMatch("\"http://.*\"") and - not s.regexpMatch("\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.16\\.[0-9]+\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]).*\"") + not s.regexpMatch("\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.(1[6-9]|2[0-9]|3[01])\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]).*\"") ) } } diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected index 216d11b36068..ef99b001fcf5 100644 --- a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -3,7 +3,6 @@ | main.rs:14:22:14:43 | ...::get | main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:14:45:14:73 | "http://api.example.com/data" | this HTTP URL | | main.rs:26:21:26:42 | ...::get | main.rs:23:20:23:39 | "http://example.com" | main.rs:26:21:26:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:23:20:23:39 | "http://example.com" | this HTTP URL | | main.rs:37:30:37:51 | ...::get | main.rs:34:20:34:28 | "http://" | main.rs:37:30:37:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:34:20:34:28 | "http://" | this HTTP URL | -| main.rs:53:19:53:40 | ...::get | main.rs:53:42:53:68 | "http://172.31.255.255/bar" | main.rs:53:19:53:40 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:53:42:53:68 | "http://172.31.255.255/bar" | this HTTP URL | | main.rs:60:20:60:41 | ...::get | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:20:60:41 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | this HTTP URL | | main.rs:71:24:71:45 | ...::get | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:71:24:71:45 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:68:19:68:53 | "http://example.com/sensitive-... | this HTTP URL | edges @@ -29,7 +28,6 @@ edges | main.rs:36:32:36:53 | { ... } | main.rs:36:32:36:53 | ...::must_use(...) | provenance | MaD:3 | | main.rs:37:53:37:65 | &insecure_url [&ref] | main.rs:37:30:37:51 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:37:54:37:65 | insecure_url | main.rs:37:53:37:65 | &insecure_url [&ref] | provenance | | -| main.rs:53:42:53:68 | "http://172.31.255.255/bar" | main.rs:53:19:53:40 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:20:60:41 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:68:13:68:15 | url | main.rs:71:47:71:49 | url | provenance | | | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:68:13:68:15 | url | provenance | | @@ -65,8 +63,6 @@ nodes | main.rs:37:30:37:51 | ...::get | semmle.label | ...::get | | main.rs:37:53:37:65 | &insecure_url [&ref] | semmle.label | &insecure_url [&ref] | | main.rs:37:54:37:65 | insecure_url | semmle.label | insecure_url | -| main.rs:53:19:53:40 | ...::get | semmle.label | ...::get | -| main.rs:53:42:53:68 | "http://172.31.255.255/bar" | semmle.label | "http://172.31.255.255/bar" | | main.rs:60:20:60:41 | ...::get | semmle.label | ...::get | | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | semmle.label | "http://172.32.0.0/baz" | | main.rs:68:13:68:15 | url | semmle.label | url | diff --git a/rust/ql/test/query-tests/security/CWE-319/main.rs b/rust/ql/test/query-tests/security/CWE-319/main.rs index 0dd59ce0880e..908e6c61c2c1 100644 --- a/rust/ql/test/query-tests/security/CWE-319/main.rs +++ b/rust/ql/test/query-tests/security/CWE-319/main.rs @@ -50,7 +50,7 @@ fn test_localhost_exemptions() { let _local4 = reqwest::blocking::get("http://192.168.1.100/internal").unwrap(); let _local5 = reqwest::blocking::get("http://10.0.0.1/admin").unwrap(); let _local6 = reqwest::blocking::get("http://172.16.0.0/foo").unwrap(); - let _local7 = reqwest::blocking::get("http://172.31.255.255/bar").unwrap(); // $ SPURIOUS: Alert[rust/non-https-url] + let _local7 = reqwest::blocking::get("http://172.31.255.255/bar").unwrap(); // GOOD: test IPv6 localhost variants let _local8 = reqwest::blocking::get("http://[::1]:8080/api").unwrap(); From 17735a9a432c9e1931bd426db1ba5e89a07ce527 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 5 Sep 2025 13:01:33 +0200 Subject: [PATCH 072/219] C#: Add queries medium precision queries to the code-quality-extended suite (and update tags). --- csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql | 5 +++-- csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql | 6 ++++-- csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql | 5 +++-- csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql | 5 +++-- csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql | 3 ++- csharp/ql/src/API Abuse/NonOverridingMethod.ql | 5 +++-- csharp/ql/src/ASP/SplitControlStructure.ql | 5 +++-- csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql | 6 +++--- csharp/ql/src/Bad Practices/Comments/TodoComments.ql | 3 ++- csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql | 5 +++-- csharp/ql/src/Bad Practices/ErroneousClassCompare.ql | 3 ++- .../Implementation Hiding/AbstractToConcreteCollection.ql | 6 +++--- .../src/Bad Practices/Implementation Hiding/StaticArray.ql | 6 +++--- .../Naming Conventions/ConfusingMethodNames.ql | 4 ++-- .../Naming Conventions/ConfusingOverridesNames.ql | 5 +++-- .../Bad Practices/Naming Conventions/ControlNamePrefixes.ql | 4 +++- .../Bad Practices/Naming Conventions/DefaultControlNames.ql | 5 +++-- csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql | 4 +++- .../Bad Practices/VirtualCallInConstructorOrDestructor.ql | 6 +++--- csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql | 4 +++- csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql | 3 ++- csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql | 4 +++- csharp/ql/src/Documentation/XmldocExtraParam.ql | 4 +++- csharp/ql/src/Documentation/XmldocExtraTypeParam.ql | 4 +++- csharp/ql/src/Documentation/XmldocMissing.ql | 4 +++- csharp/ql/src/Language Abuse/ForeachCapture.ql | 6 +++--- csharp/ql/src/Language Abuse/UselessCastToSelf.ql | 5 +++-- csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql | 5 +++-- .../src/Language Abuse/UselessNullCoalescingExpression.ql | 5 +++-- csharp/ql/src/Language Abuse/UselessTypeTest.ql | 5 +++-- csharp/ql/src/Language Abuse/UselessUpcast.ql | 5 +++-- csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql | 4 ++-- csharp/ql/src/Likely Bugs/EqualsUsesAs.ql | 5 +++-- csharp/ql/src/Likely Bugs/EqualsUsesIs.ql | 5 +++-- csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql | 5 +++-- .../ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql | 3 ++- csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql | 5 +++-- csharp/ql/src/Likely Bugs/ObjectComparison.ql | 3 ++- csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql | 5 +++-- csharp/ql/src/Likely Bugs/Statements/UseBraces.ql | 5 +++-- csharp/ql/src/Linq/BadMultipleIteration.ql | 6 +++--- csharp/ql/src/Useless code/PointlessForwardingMethod.ql | 3 ++- 42 files changed, 118 insertions(+), 76 deletions(-) diff --git a/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql b/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql index 0539cd27a667..dc6ce132c9a6 100644 --- a/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql +++ b/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql @@ -7,8 +7,9 @@ * @problem.severity error * @precision medium * @id cs/class-missing-equals - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql b/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql index 3349ee932510..989d2ecd499b 100644 --- a/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql +++ b/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql @@ -7,8 +7,10 @@ * @problem.severity warning * @precision medium * @id cs/dispose-not-called-on-throw - * @tags efficiency - * maintainability + * @tags quality + * reliability + * error-handling + * performance * external/cwe/cwe-404 * external/cwe/cwe-459 * external/cwe/cwe-460 diff --git a/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql b/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql index 569716b3bc0a..6ad43aad3a11 100644 --- a/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql +++ b/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id cs/inconsistent-equals-and-gethashcode - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-581 */ diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index 6f6c17566bfd..63d947e02c7d 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/wrong-compareto-signature - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql b/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql index 7103cae4906a..721b30bcf8c9 100644 --- a/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql @@ -5,7 +5,8 @@ * @problem.severity warning * @precision medium * @id cs/wrong-equals-signature - * @tags reliability + * @tags quality + * reliability * maintainability */ diff --git a/csharp/ql/src/API Abuse/NonOverridingMethod.ql b/csharp/ql/src/API Abuse/NonOverridingMethod.ql index 598ce670d9f4..bff2c17b3068 100644 --- a/csharp/ql/src/API Abuse/NonOverridingMethod.ql +++ b/csharp/ql/src/API Abuse/NonOverridingMethod.ql @@ -5,9 +5,10 @@ * @problem.severity recommendation * @precision medium * @id cs/nonoverriding-method - * @tags reliability + * @tags quality + * reliability + * correctness * readability - * naming */ import csharp diff --git a/csharp/ql/src/ASP/SplitControlStructure.ql b/csharp/ql/src/ASP/SplitControlStructure.ql index de7d44ccc1ea..701433c05608 100644 --- a/csharp/ql/src/ASP/SplitControlStructure.ql +++ b/csharp/ql/src/ASP/SplitControlStructure.ql @@ -5,8 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/asp/split-control-structure - * @tags maintainability - * frameworks/asp.net + * @tags quality + * maintainability + * readability */ import semmle.code.asp.AspNet diff --git a/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql b/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql index c079cc16a2ab..9da9e789e0c9 100644 --- a/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql +++ b/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql @@ -5,9 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/commented-out-code - * @tags maintainability - * statistical - * non-attributable + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/Comments/TodoComments.ql b/csharp/ql/src/Bad Practices/Comments/TodoComments.ql index 751c064bccf6..50104f55eb76 100644 --- a/csharp/ql/src/Bad Practices/Comments/TodoComments.ql +++ b/csharp/ql/src/Bad Practices/Comments/TodoComments.ql @@ -6,7 +6,8 @@ * @problem.severity recommendation * @precision medium * @id cs/todo-comment - * @tags maintainability + * @tags quality + * maintainability * external/cwe/cwe-546 */ diff --git a/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql b/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql index 896b78046629..8ae848feaebb 100644 --- a/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql +++ b/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql @@ -6,8 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/constants-only-interface - * @tags maintainability - * modularity + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql b/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql index 134d612979b5..658484c2ba73 100644 --- a/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql +++ b/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql @@ -5,7 +5,8 @@ * @problem.severity warning * @precision medium * @id cs/class-name-comparison - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-486 */ diff --git a/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql b/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql index 4becd8b58c35..80b108d2736e 100644 --- a/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql +++ b/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id cs/cast-from-abstract-to-concrete-collection - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness * external/cwe/cwe-485 */ diff --git a/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql b/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql index 0d00adb50519..086182b697ca 100644 --- a/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql +++ b/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql @@ -5,9 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/static-array - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness * external/cwe/cwe-582 */ diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql index 5e3f39d7a87a..199647b5f1f7 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql @@ -5,9 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/confusing-method-name - * @tags maintainability + * @tags quality + * maintainability * readability - * naming */ import csharp diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql index ae0853897298..1ef0ccad22a5 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql @@ -6,9 +6,10 @@ * @problem.severity recommendation * @precision medium * @id cs/confusing-override-name - * @tags reliability + * @tags quality + * maintainability * readability - * naming + * correctness */ import csharp diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql b/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql index 550385d68286..7e80d4334bd4 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/web/unprefixed-control-name - * @tags maintainability + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql b/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql index 92aa5e9e0c2d..e12bd2e6af30 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql @@ -6,8 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/forms/default-control-name - * @tags readability - * naming + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql b/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql index a5a9418bb157..b9a45126d3c6 100644 --- a/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql +++ b/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/console-output - * @tags maintainability + * @tags quality + * reliability + * error-handling */ import csharp diff --git a/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql b/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql index d754f1a03c59..a29b39d33a10 100644 --- a/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql +++ b/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql @@ -6,9 +6,9 @@ * @precision medium * @id cs/virtual-call-in-constructor * @alternate-ids cs/virtual-call-in-constructor-or-destructor - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql b/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql index 9c8bb72708cf..569aa1e53663 100644 --- a/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql +++ b/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql @@ -6,8 +6,10 @@ * @problem.severity error * @precision medium * @id cs/unsynchronized-getter - * @tags correctness + * @tags quality + * reliability * concurrency + * correctness * external/cwe/cwe-662 */ diff --git a/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql b/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql index 97b4fbdba8ee..db674d9c5c3f 100644 --- a/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql +++ b/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id cs/unsafe-double-checked-lock - * @tags correctness + * @tags quality + * reliability * concurrency * external/cwe/cwe-609 */ diff --git a/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql b/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql index 1ce94edee3d2..150ae78ae090 100644 --- a/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql +++ b/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql @@ -6,7 +6,9 @@ * @problem.severity error * @precision medium * @id cs/unsynchronized-static-access - * @tags concurrency + * @tags quality + * reliability + * concurrency * external/cwe/cwe-362 * external/cwe/cwe-567 */ diff --git a/csharp/ql/src/Documentation/XmldocExtraParam.ql b/csharp/ql/src/Documentation/XmldocExtraParam.ql index a745edfb6d8f..5c8536858530 100644 --- a/csharp/ql/src/Documentation/XmldocExtraParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraParam.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/xmldoc/unknown-parameter - * @tags maintainability + * @tags quality + * maintainability + * readability */ import Documentation diff --git a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql index 76c2039920dd..90b51569c3d4 100644 --- a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/xmldoc/unknown-type-parameter - * @tags maintainability + * @tags quality + * maintainability + * readability */ import Documentation diff --git a/csharp/ql/src/Documentation/XmldocMissing.ql b/csharp/ql/src/Documentation/XmldocMissing.ql index e0e05c4893bf..4ac6d86f9625 100644 --- a/csharp/ql/src/Documentation/XmldocMissing.ql +++ b/csharp/ql/src/Documentation/XmldocMissing.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/xmldoc/missing-xmldoc - * @tags maintainability + * @tags quality + * maintainability + * readability */ import Documentation diff --git a/csharp/ql/src/Language Abuse/ForeachCapture.ql b/csharp/ql/src/Language Abuse/ForeachCapture.ql index 2f8346817a6f..f04d99b93177 100644 --- a/csharp/ql/src/Language Abuse/ForeachCapture.ql +++ b/csharp/ql/src/Language Abuse/ForeachCapture.ql @@ -7,9 +7,9 @@ * @problem.severity recommendation * @precision medium * @id cs/captured-foreach-variable - * @tags portability - * maintainability - * language-features + * @tags quality + * reliability + * correctness * external/cwe/cwe-758 */ diff --git a/csharp/ql/src/Language Abuse/UselessCastToSelf.ql b/csharp/ql/src/Language Abuse/UselessCastToSelf.ql index a182009dfc2d..d1a08e1db1c5 100644 --- a/csharp/ql/src/Language Abuse/UselessCastToSelf.ql +++ b/csharp/ql/src/Language Abuse/UselessCastToSelf.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/useless-cast-to-self - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql b/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql index 6a82c40d8404..6b6d710bdf04 100644 --- a/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql +++ b/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql @@ -5,8 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/useless-is-before-as - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql index ec73df23741c..7790fc5ba4ab 100644 --- a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql +++ b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id cs/coalesce-of-identical-expressions - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessTypeTest.ql b/csharp/ql/src/Language Abuse/UselessTypeTest.ql index 11e7df050471..f89ffbdd637f 100644 --- a/csharp/ql/src/Language Abuse/UselessTypeTest.ql +++ b/csharp/ql/src/Language Abuse/UselessTypeTest.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/useless-type-test - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessUpcast.ql b/csharp/ql/src/Language Abuse/UselessUpcast.ql index a06dc60cc7ab..81ff2cfe253c 100644 --- a/csharp/ql/src/Language Abuse/UselessUpcast.ql +++ b/csharp/ql/src/Language Abuse/UselessUpcast.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/useless-upcast - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql b/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql index 2efac6773f72..75f152b38de1 100644 --- a/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql +++ b/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql @@ -5,9 +5,9 @@ * @problem.severity error * @precision medium * @id cs/invalid-dynamic-call - * @tags reliability + * @tags quality + * reliability * correctness - * logic * external/cwe/cwe-628 */ diff --git a/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql b/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql index 5c11e10c36b1..12a0802aa9f1 100644 --- a/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql +++ b/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/equals-uses-as - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql b/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql index 775a295a6cb0..1c209af4dfb4 100644 --- a/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql +++ b/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/equals-uses-is - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql b/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql index 2c4e69cb2060..5209cf6438bf 100644 --- a/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql +++ b/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/inconsistent-compareto-and-equals - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import semmle.code.csharp.frameworks.System diff --git a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql index 8da3a910b0da..72cc9b1908a5 100644 --- a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql +++ b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/unsafe-year-construction - * @tags date-time + * @tags quality * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql b/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql index a188fbe1b8ee..c8df36bf7bf2 100644 --- a/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql +++ b/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity warning * @precision medium - * @tags reliability - * date-time + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/ObjectComparison.ql b/csharp/ql/src/Likely Bugs/ObjectComparison.ql index eec1961fbf50..5479ff69b34c 100644 --- a/csharp/ql/src/Likely Bugs/ObjectComparison.ql +++ b/csharp/ql/src/Likely Bugs/ObjectComparison.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id cs/reference-equality-with-object - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-595 */ diff --git a/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql b/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql index fe01683578f0..2e4764965c96 100644 --- a/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql +++ b/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql @@ -5,8 +5,9 @@ * @problem.severity error * @precision medium * @id cs/recursive-operator-equals-call - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql b/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql index ba64dc1bf949..f639b060ac17 100644 --- a/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql +++ b/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql @@ -6,9 +6,10 @@ * @problem.severity warning * @precision medium * @id cs/misleading-indentation - * @tags changeability + * @tags quality + * maintainability + * readability * correctness - * logic */ import csharp diff --git a/csharp/ql/src/Linq/BadMultipleIteration.ql b/csharp/ql/src/Linq/BadMultipleIteration.ql index e07de273e63d..8146bbf167d8 100644 --- a/csharp/ql/src/Linq/BadMultipleIteration.ql +++ b/csharp/ql/src/Linq/BadMultipleIteration.ql @@ -5,9 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/linq/inconsistent-enumeration - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness * external/cwe/cwe-834 */ diff --git a/csharp/ql/src/Useless code/PointlessForwardingMethod.ql b/csharp/ql/src/Useless code/PointlessForwardingMethod.ql index 723c5b190a57..24a184b3274e 100644 --- a/csharp/ql/src/Useless code/PointlessForwardingMethod.ql +++ b/csharp/ql/src/Useless code/PointlessForwardingMethod.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id cs/useless-forwarding-method - * @tags maintainability + * @tags quality + * maintainability * useless-code */ From 906e9de5eebf117a1c098696145738a62be1fee1 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 28 Aug 2025 12:35:01 +0200 Subject: [PATCH 073/219] C#: Update query-suite integration tests expected output. --- .../csharp-code-quality-extended.qls.expected | 42 +++++++++++++++++++ .../query-suite/not_included_in_qls.expected | 17 -------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected index 53810418624d..d07c4c620aa7 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected @@ -1,20 +1,39 @@ ql/csharp/ql/src/API Abuse/CallToGCCollect.ql ql/csharp/ql/src/API Abuse/CallToObsoleteMethod.ql +ql/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql ql/csharp/ql/src/API Abuse/ClassImplementsICloneable.ql +ql/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql ql/csharp/ql/src/API Abuse/FormatInvalid.ql +ql/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql +ql/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +ql/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql ql/csharp/ql/src/API Abuse/NoDisposeCallOnLocalIDisposable.ql +ql/csharp/ql/src/API Abuse/NonOverridingMethod.ql ql/csharp/ql/src/API Abuse/NullArgumentToEquals.ql ql/csharp/ql/src/ASP/BlockCodeResponseWrite.ql +ql/csharp/ql/src/ASP/SplitControlStructure.ql ql/csharp/ql/src/Bad Practices/CallsUnmanagedCode.ql ql/csharp/ql/src/Bad Practices/CatchOfNullReferenceException.ql +ql/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql +ql/csharp/ql/src/Bad Practices/Comments/TodoComments.ql ql/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql ql/csharp/ql/src/Bad Practices/Declarations/LocalScopeVariableShadowsMember.ql +ql/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql ql/csharp/ql/src/Bad Practices/EmptyCatchBlock.ql +ql/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql +ql/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql ql/csharp/ql/src/Bad Practices/Implementation Hiding/ExposeRepresentation.ql +ql/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/FieldMasksSuperField.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/SameNameAsSuper.ql ql/csharp/ql/src/Bad Practices/PathCombine.ql ql/csharp/ql/src/Bad Practices/UnmanagedCodeCheck.ql +ql/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql +ql/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql ql/csharp/ql/src/CSI/CompareIdenticalValues.ql ql/csharp/ql/src/CSI/NullAlways.ql ql/csharp/ql/src/CSI/NullMaybe.ql @@ -22,12 +41,19 @@ ql/csharp/ql/src/Concurrency/FutileSyncOnField.ql ql/csharp/ql/src/Concurrency/LockOrder.ql ql/csharp/ql/src/Concurrency/LockThis.ql ql/csharp/ql/src/Concurrency/LockedWait.ql +ql/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql +ql/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql +ql/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql +ql/csharp/ql/src/Documentation/XmldocExtraParam.ql +ql/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql +ql/csharp/ql/src/Documentation/XmldocMissing.ql ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql ql/csharp/ql/src/Language Abuse/DubiousTypeTestOfThis.ql +ql/csharp/ql/src/Language Abuse/ForeachCapture.ql ql/csharp/ql/src/Language Abuse/MissedReadonlyOpportunity.ql ql/csharp/ql/src/Language Abuse/MissedTernaryOpportunity.ql ql/csharp/ql/src/Language Abuse/MissedUsingOpportunity.ql @@ -35,27 +61,42 @@ ql/csharp/ql/src/Language Abuse/NestedIf.ql ql/csharp/ql/src/Language Abuse/RethrowException.ql ql/csharp/ql/src/Language Abuse/SimplifyBoolExpr.ql ql/csharp/ql/src/Language Abuse/UnusedPropertyValue.ql +ql/csharp/ql/src/Language Abuse/UselessCastToSelf.ql +ql/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql +ql/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql +ql/csharp/ql/src/Language Abuse/UselessTypeTest.ql +ql/csharp/ql/src/Language Abuse/UselessUpcast.ql ql/csharp/ql/src/Likely Bugs/Collections/ContainerLengthCmpOffByOne.ql ql/csharp/ql/src/Likely Bugs/Collections/ContainerSizeCmpZero.ql ql/csharp/ql/src/Likely Bugs/Collections/ReadOnlyContainer.ql ql/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql ql/csharp/ql/src/Likely Bugs/ConstantComparison.ql ql/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql +ql/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql ql/csharp/ql/src/Likely Bugs/EqualityCheckOnFloats.ql ql/csharp/ql/src/Likely Bugs/EqualsArray.ql +ql/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql +ql/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql ql/csharp/ql/src/Likely Bugs/HashedButNoHash.ql ql/csharp/ql/src/Likely Bugs/ImpossibleArrayCast.ql ql/csharp/ql/src/Likely Bugs/IncomparableEquals.ql +ql/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql +ql/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql +ql/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql ql/csharp/ql/src/Likely Bugs/NestedLoopsSameVariable.ql +ql/csharp/ql/src/Likely Bugs/ObjectComparison.ql ql/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql ql/csharp/ql/src/Likely Bugs/RecursiveEquals.ql +ql/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql ql/csharp/ql/src/Likely Bugs/ReferenceEqualsOnValueTypes.ql ql/csharp/ql/src/Likely Bugs/SelfAssignment.ql ql/csharp/ql/src/Likely Bugs/Statements/EmptyBlock.ql ql/csharp/ql/src/Likely Bugs/Statements/EmptyLockStatement.ql +ql/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql ql/csharp/ql/src/Likely Bugs/StaticFieldWrittenByInstance.ql ql/csharp/ql/src/Likely Bugs/StringBuilderCharInit.ql ql/csharp/ql/src/Likely Bugs/UncheckedCastInEquals.ql +ql/csharp/ql/src/Linq/BadMultipleIteration.ql ql/csharp/ql/src/Linq/MissedAllOpportunity.ql ql/csharp/ql/src/Linq/MissedCastOpportunity.ql ql/csharp/ql/src/Linq/MissedOfTypeOpportunity.ql @@ -68,5 +109,6 @@ ql/csharp/ql/src/Performance/UseTryGetValue.ql ql/csharp/ql/src/Useless code/DefaultToString.ql ql/csharp/ql/src/Useless code/FutileConditional.ql ql/csharp/ql/src/Useless code/IntGetHashCode.ql +ql/csharp/ql/src/Useless code/PointlessForwardingMethod.ql ql/csharp/ql/src/Useless code/RedundantToStringCall.ql ql/csharp/ql/src/Useless code/UnusedLabel.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected index dff6574dddd0..310fb74bed62 100644 --- a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected @@ -1,45 +1,29 @@ ql/csharp/ql/src/API Abuse/MissingDisposeCall.ql ql/csharp/ql/src/API Abuse/MissingDisposeMethod.ql -ql/csharp/ql/src/API Abuse/NonOverridingMethod.ql ql/csharp/ql/src/API Abuse/UncheckedReturnValue.ql ql/csharp/ql/src/ASP/ComplexInlineCode.ql ql/csharp/ql/src/ASP/NonInternationalizedText.ql -ql/csharp/ql/src/ASP/SplitControlStructure.ql ql/csharp/ql/src/AlertSuppression.ql ql/csharp/ql/src/Architecture/Dependencies/MutualDependency.ql ql/csharp/ql/src/Architecture/Refactoring Opportunities/FeatureEnvy.ql -ql/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql -ql/csharp/ql/src/Bad Practices/Comments/TodoComments.ql ql/csharp/ql/src/Bad Practices/Declarations/EmptyInterface.ql -ql/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql -ql/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql ql/csharp/ql/src/Bad Practices/LeftoverDebugCode.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicConstantsNumbers.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicConstantsString.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicNumbersUseConstant.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicStringsUseConstant.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/ConstantNaming.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/VariableNameTooShort.ql ql/csharp/ql/src/Bad Practices/UseOfHtmlInputHidden.ql -ql/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql ql/csharp/ql/src/Configuration/PasswordInConfigurationFile.ql ql/csharp/ql/src/Dead Code/DeadRefTypes.ql ql/csharp/ql/src/Dead Code/NonAssignedFields.ql ql/csharp/ql/src/Dead Code/UnusedField.ql ql/csharp/ql/src/Dead Code/UnusedMethod.ql -ql/csharp/ql/src/Documentation/XmldocExtraParam.ql -ql/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql -ql/csharp/ql/src/Documentation/XmldocMissing.ql ql/csharp/ql/src/Documentation/XmldocMissingException.ql ql/csharp/ql/src/Documentation/XmldocMissingParam.ql ql/csharp/ql/src/Documentation/XmldocMissingReturn.ql ql/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql -ql/csharp/ql/src/Language Abuse/ForeachCapture.ql -ql/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql ql/csharp/ql/src/Likely Bugs/BadCheckOdd.ql ql/csharp/ql/src/Likely Bugs/RandomUsedOnce.ql ql/csharp/ql/src/Metrics/Callables/CCyclomaticComplexity.ql @@ -93,7 +77,6 @@ ql/csharp/ql/src/Security Features/CWE-611/UseXmlSecureResolver.ql ql/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql ql/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql ql/csharp/ql/src/Security Features/CWE-838/InappropriateEncoding.ql -ql/csharp/ql/src/Useless code/PointlessForwardingMethod.ql ql/csharp/ql/src/definitions.ql ql/csharp/ql/src/experimental/CWE-099/TaintedWebClient.ql ql/csharp/ql/src/experimental/CWE-918/RequestForgery.ql From c9a761f2022e3b10663959cff0b02bc69d03ff7e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 8 Sep 2025 09:00:34 +0200 Subject: [PATCH 074/219] C#: Remove the cs/xmldoc/missing-xmldoc from the code-quality-extended. --- .../query-suite/csharp-code-quality-extended.qls.expected | 1 - .../posix/query-suite/not_included_in_qls.expected | 1 + csharp/ql/src/Documentation/XmldocMissing.ql | 3 +-- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected index d07c4c620aa7..b3015b0838a4 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected @@ -47,7 +47,6 @@ ql/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql ql/csharp/ql/src/Documentation/XmldocExtraParam.ql ql/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql -ql/csharp/ql/src/Documentation/XmldocMissing.ql ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected index 310fb74bed62..8dac7e45fce4 100644 --- a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected @@ -20,6 +20,7 @@ ql/csharp/ql/src/Dead Code/DeadRefTypes.ql ql/csharp/ql/src/Dead Code/NonAssignedFields.ql ql/csharp/ql/src/Dead Code/UnusedField.ql ql/csharp/ql/src/Dead Code/UnusedMethod.ql +ql/csharp/ql/src/Documentation/XmldocMissing.ql ql/csharp/ql/src/Documentation/XmldocMissingException.ql ql/csharp/ql/src/Documentation/XmldocMissingParam.ql ql/csharp/ql/src/Documentation/XmldocMissingReturn.ql diff --git a/csharp/ql/src/Documentation/XmldocMissing.ql b/csharp/ql/src/Documentation/XmldocMissing.ql index 4ac6d86f9625..237e5224120c 100644 --- a/csharp/ql/src/Documentation/XmldocMissing.ql +++ b/csharp/ql/src/Documentation/XmldocMissing.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id cs/xmldoc/missing-xmldoc - * @tags quality - * maintainability + * @tags maintainability * readability */ From 47873c20de4e27587f682cfdb7c937acc32e6698 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 8 Sep 2025 10:58:00 +0200 Subject: [PATCH 075/219] C#: Fix incorrect tagging. --- csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql b/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql index 721b30bcf8c9..5367b0ac6049 100644 --- a/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql @@ -7,7 +7,7 @@ * @id cs/wrong-equals-signature * @tags quality * reliability - * maintainability + * correctness */ import csharp From cdd379113eb5676e059af988a04c8a374b921be7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 10 Sep 2025 13:45:02 +0200 Subject: [PATCH 076/219] C#: Remove cs/captured-foreach-variable from the code-quality-extended suite. --- csharp/ql/src/Language Abuse/ForeachCapture.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/csharp/ql/src/Language Abuse/ForeachCapture.ql b/csharp/ql/src/Language Abuse/ForeachCapture.ql index f04d99b93177..03f1f99a044c 100644 --- a/csharp/ql/src/Language Abuse/ForeachCapture.ql +++ b/csharp/ql/src/Language Abuse/ForeachCapture.ql @@ -7,8 +7,7 @@ * @problem.severity recommendation * @precision medium * @id cs/captured-foreach-variable - * @tags quality - * reliability + * @tags reliability * correctness * external/cwe/cwe-758 */ From 0ce0e834ed41a7522c03f358f757987a2849e929 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 10 Sep 2025 13:45:29 +0200 Subject: [PATCH 077/219] C#: Update integration tests expected output. --- .../posix/query-suite/csharp-code-quality-extended.qls.expected | 1 - .../posix/query-suite/not_included_in_qls.expected | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected index b3015b0838a4..f4128abf3213 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected @@ -52,7 +52,6 @@ ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql ql/csharp/ql/src/Language Abuse/DubiousTypeTestOfThis.ql -ql/csharp/ql/src/Language Abuse/ForeachCapture.ql ql/csharp/ql/src/Language Abuse/MissedReadonlyOpportunity.ql ql/csharp/ql/src/Language Abuse/MissedTernaryOpportunity.ql ql/csharp/ql/src/Language Abuse/MissedUsingOpportunity.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected index 8dac7e45fce4..2d923ab8ff7d 100644 --- a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected @@ -25,6 +25,7 @@ ql/csharp/ql/src/Documentation/XmldocMissingException.ql ql/csharp/ql/src/Documentation/XmldocMissingParam.ql ql/csharp/ql/src/Documentation/XmldocMissingReturn.ql ql/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql +ql/csharp/ql/src/Language Abuse/ForeachCapture.ql ql/csharp/ql/src/Likely Bugs/BadCheckOdd.ql ql/csharp/ql/src/Likely Bugs/RandomUsedOnce.ql ql/csharp/ql/src/Metrics/Callables/CCyclomaticComplexity.ql From 98a7cd24c0c1f5621a560de3d1467553b2f4ca65 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 11 Sep 2025 08:56:57 +0200 Subject: [PATCH 078/219] C#: Remove all cs/xmldoc/* queries from the code-quality-extended suite. --- csharp/ql/src/Documentation/XmldocExtraParam.ql | 3 +-- csharp/ql/src/Documentation/XmldocExtraTypeParam.ql | 3 +-- csharp/ql/src/Documentation/XmldocMissingSummary.ql | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/Documentation/XmldocExtraParam.ql b/csharp/ql/src/Documentation/XmldocExtraParam.ql index 5c8536858530..a7ff7eaec70c 100644 --- a/csharp/ql/src/Documentation/XmldocExtraParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraParam.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id cs/xmldoc/unknown-parameter - * @tags quality - * maintainability + * @tags maintainability * readability */ diff --git a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql index 90b51569c3d4..60ea1dd5a96d 100644 --- a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql @@ -6,8 +6,7 @@ * @problem.severity recommendation * @precision medium * @id cs/xmldoc/unknown-type-parameter - * @tags quality - * maintainability + * @tags maintainability * readability */ diff --git a/csharp/ql/src/Documentation/XmldocMissingSummary.ql b/csharp/ql/src/Documentation/XmldocMissingSummary.ql index 43b76d38017a..5d7d9c931adf 100644 --- a/csharp/ql/src/Documentation/XmldocMissingSummary.ql +++ b/csharp/ql/src/Documentation/XmldocMissingSummary.ql @@ -5,8 +5,7 @@ * @problem.severity recommendation * @precision high * @id cs/xmldoc/missing-summary - * @tags quality - * maintainability + * @tags maintainability * readability */ From f9cecfb666785fe62213ad19a108f8f62f58e9b1 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 11 Sep 2025 09:00:00 +0200 Subject: [PATCH 079/219] C#: Update integration test expected output. --- .../query-suite/csharp-code-quality-extended.qls.expected | 3 --- .../posix/query-suite/csharp-code-quality.qls.expected | 1 - .../posix/query-suite/not_included_in_qls.expected | 2 ++ 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected index f4128abf3213..fdc5e6eae9d1 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected @@ -45,9 +45,6 @@ ql/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql ql/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql ql/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql -ql/csharp/ql/src/Documentation/XmldocExtraParam.ql -ql/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql -ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected index 53810418624d..6694cc8461b8 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected @@ -23,7 +23,6 @@ ql/csharp/ql/src/Concurrency/LockOrder.ql ql/csharp/ql/src/Concurrency/LockThis.ql ql/csharp/ql/src/Concurrency/LockedWait.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql -ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected index 2d923ab8ff7d..4c8d4d42e98a 100644 --- a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected @@ -20,6 +20,8 @@ ql/csharp/ql/src/Dead Code/DeadRefTypes.ql ql/csharp/ql/src/Dead Code/NonAssignedFields.ql ql/csharp/ql/src/Dead Code/UnusedField.ql ql/csharp/ql/src/Dead Code/UnusedMethod.ql +ql/csharp/ql/src/Documentation/XmldocExtraParam.ql +ql/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql ql/csharp/ql/src/Documentation/XmldocMissing.ql ql/csharp/ql/src/Documentation/XmldocMissingException.ql ql/csharp/ql/src/Documentation/XmldocMissingParam.ql From d903448695c574b6ee2162aa5ef503470deab587 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 16 Sep 2025 13:58:28 +0200 Subject: [PATCH 080/219] C#: Add change note. --- .../ql/src/change-notes/2025-09-16-code-quality-doc-query.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md diff --git a/csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md b/csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md new file mode 100644 index 000000000000..8972be616b9a --- /dev/null +++ b/csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Remove the query `cs/xmldoc/missing-summary` from the `code-quality` suite (align with other languages). From 4b281fdf12fb8a64cd194aee324ded70855b4695 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 13:02:54 +0100 Subject: [PATCH 081/219] Rust: Use case insensitive regexps. --- rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll | 4 ++-- rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected | 4 ++++ rust/ql/test/query-tests/security/CWE-319/main.rs | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll index 58466dd0a4fb..5e0d534fb7d7 100644 --- a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -37,8 +37,8 @@ module UseOfHttp { HttpStringLiteral() { exists(string s | this.getTextValue() = s | // Match HTTP URLs that are not private/local - s.regexpMatch("\"http://.*\"") and - not s.regexpMatch("\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.(1[6-9]|2[0-9]|3[01])\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]).*\"") + s.regexpMatch("(?i)\"http://.*\"") and + not s.regexpMatch("(?i)\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.(1[6-9]|2[0-9]|3[01])\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]).*\"") ) } } diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected index ef99b001fcf5..952bd741d1c7 100644 --- a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -1,5 +1,6 @@ #select | main.rs:12:22:12:43 | ...::get | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:12:45:12:68 | "http://example.com/api" | this HTTP URL | +| main.rs:13:22:13:43 | ...::get | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:22:13:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | this HTTP URL | | main.rs:14:22:14:43 | ...::get | main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:14:45:14:73 | "http://api.example.com/data" | this HTTP URL | | main.rs:26:21:26:42 | ...::get | main.rs:23:20:23:39 | "http://example.com" | main.rs:26:21:26:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:23:20:23:39 | "http://example.com" | this HTTP URL | | main.rs:37:30:37:51 | ...::get | main.rs:34:20:34:28 | "http://" | main.rs:37:30:37:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:34:20:34:28 | "http://" | this HTTP URL | @@ -7,6 +8,7 @@ | main.rs:71:24:71:45 | ...::get | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:71:24:71:45 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:68:19:68:53 | "http://example.com/sensitive-... | this HTTP URL | edges | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:22:13:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | | main.rs:23:9:23:16 | base_url | main.rs:25:28:25:53 | MacroExpr | provenance | | | main.rs:23:20:23:39 | "http://example.com" | main.rs:23:9:23:16 | base_url | provenance | | @@ -39,6 +41,8 @@ models nodes | main.rs:12:22:12:43 | ...::get | semmle.label | ...::get | | main.rs:12:45:12:68 | "http://example.com/api" | semmle.label | "http://example.com/api" | +| main.rs:13:22:13:43 | ...::get | semmle.label | ...::get | +| main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | semmle.label | "HTTP://EXAMPLE.COM/API" | | main.rs:14:22:14:43 | ...::get | semmle.label | ...::get | | main.rs:14:45:14:73 | "http://api.example.com/data" | semmle.label | "http://api.example.com/data" | | main.rs:23:9:23:16 | base_url | semmle.label | base_url | diff --git a/rust/ql/test/query-tests/security/CWE-319/main.rs b/rust/ql/test/query-tests/security/CWE-319/main.rs index 908e6c61c2c1..0a3539923da6 100644 --- a/rust/ql/test/query-tests/security/CWE-319/main.rs +++ b/rust/ql/test/query-tests/security/CWE-319/main.rs @@ -10,7 +10,7 @@ fn main() { fn test_direct_literals() { // BAD: Direct HTTP URLs that should be flagged let _response1 = reqwest::blocking::get("http://example.com/api").unwrap(); // $ Alert[rust/non-https-url] - let _response2 = reqwest::blocking::get("HTTP://EXAMPLE.COM/API").unwrap(); // $ MISSING: Alert[rust/non-https-url] + let _response2 = reqwest::blocking::get("HTTP://EXAMPLE.COM/API").unwrap(); // $ Alert[rust/non-https-url] let _response3 = reqwest::blocking::get("http://api.example.com/data").unwrap(); // $ Alert[rust/non-https-url] // GOOD: HTTPS URLs that should not be flagged From 0eb602aad2991216268e79bbe5db05472f2156c0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:00:43 +0100 Subject: [PATCH 082/219] Rust: Update a redirected URL. --- .../src/queries/security/CWE-319/UseOfHttp.qhelp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp index a8ca1d9c7c7e..a1345b189bb2 100644 --- a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp @@ -6,21 +6,21 @@

    Constructing URLs with the HTTP protocol can lead to unsecured connections.

    -

    Furthermore, constructing URLs with the HTTP protocol can create problems if other parts of the -code expect HTTPS URLs. A typical pattern is to use libraries that expect secure connections, +

    Furthermore, constructing URLs with the HTTP protocol can create problems if other parts of the +code expect HTTPS URLs. A typical pattern is to use libraries that expect secure connections, which may fail or fall back to insecure behavior when provided with HTTP URLs instead of HTTPS URLs.

    -

    When you construct a URL for network requests, ensure that you use an HTTPS URL rather than an HTTP URL. +

    When you construct a URL for network requests, ensure that you use an HTTPS URL rather than an HTTP URL. Then, any connections that are made using that URL are secure SSL/TLS connections.

    -

    The following example shows two ways of making a network request using a URL. When the request is -made using an HTTP URL rather than an HTTPS URL, the connection is unsecured and can be intercepted +

    The following example shows two ways of making a network request using a URL. When the request is +made using an HTTP URL rather than an HTTPS URL, the connection is unsecured and can be intercepted by attackers. When the request is made using an HTTPS URL, the connection is a secure SSL/TLS connection.

    @@ -34,15 +34,15 @@ by attackers. When the request is made using an HTTPS URL, the connection is a s
  • OWASP: -Transport Layer Protection Cheat Sheet. +Transport Layer Security Cheat Sheet.
  • OWASP Top 10: A08:2021 - Software and Data Integrity Failures.
  • -
  • Rust reqwest documentation: +
  • Rust reqwest documentation: reqwest crate.
  • - \ No newline at end of file + From 31bf86fd1bcb60946c038d1329f132647bc60288 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:04:47 +0100 Subject: [PATCH 083/219] Rust: Improve the flow around the qhelp example. --- rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp index a1345b189bb2..e4e0fc5eaa90 100644 --- a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp @@ -19,13 +19,14 @@ Then, any connections that are made using that URL are secure SSL/TLS connection -

    The following example shows two ways of making a network request using a URL. When the request is +

    The following examples show two ways of making a network request using a URL. When the request is made using an HTTP URL rather than an HTTPS URL, the connection is unsecured and can be intercepted -by attackers. When the request is made using an HTTPS URL, the connection is a secure SSL/TLS connection.

    +by attackers:

    -

    A better approach is to use HTTPS:

    +

    A better approach is to use HTTPS. When the request is made using an HTTPS URL, the connection +is a secure SSL/TLS connection:

    From ffd32efba274f0b1400d592562f24cae4a286ddf Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:08:07 -0400 Subject: [PATCH 084/219] codeql query format --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 37 ++++++------------- .../library-tests/frameworks/grape/Grape.ql | 2 +- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index faf762f53a03..ea7bc8c576c4 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -52,9 +52,7 @@ class GrapeApiClass extends DataFlow::ClassNode { /** * Gets a `GrapeEndpoint` defined in this class. */ - GrapeEndpoint getAnEndpoint() { - result.getApiClass() = this - } + GrapeEndpoint getAnEndpoint() { result.getApiClass() = this } /** * Gets a `self` that possibly refers to an instance of this class. @@ -72,9 +70,7 @@ private DataFlow::ConstRef grapeApiBaseClass() { result = DataFlow::getConstant("Grape").getConstant("API") } -private API::Node grapeApiInstance() { - result = any(GrapeApiClass cls).getSelf().track() -} +private API::Node grapeApiInstance() { result = any(GrapeApiClass cls).getSelf().track() } /** * A Grape API endpoint (get, post, put, delete, etc.) call within a `Grape::API` class. @@ -83,15 +79,14 @@ class GrapeEndpoint extends DataFlow::CallNode { private GrapeApiClass apiClass; GrapeEndpoint() { - this = apiClass.getAModuleLevelCall(["get", "post", "put", "delete", "patch", "head", "options"]) + this = + apiClass.getAModuleLevelCall(["get", "post", "put", "delete", "patch", "head", "options"]) } /** * Gets the HTTP method for this endpoint (e.g., "GET", "POST", etc.) */ - string getHttpMethod() { - result = this.getMethodName().toUpperCase() - } + string getHttpMethod() { result = this.getMethodName().toUpperCase() } /** * Gets the API class containing this endpoint. @@ -106,9 +101,7 @@ class GrapeEndpoint extends DataFlow::CallNode { /** * Gets the path pattern for this endpoint, if specified. */ - string getPath() { - result = this.getArgument(0).getConstantValue().getString() - } + string getPath() { result = this.getArgument(0).getConstantValue().getString() } } /** @@ -116,9 +109,7 @@ class GrapeEndpoint extends DataFlow::CallNode { * Grape parameters available via the `params` method within an endpoint. */ class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { - GrapeParamsSource() { - this.asExpr().getExpr() instanceof GrapeParamsCall - } + GrapeParamsSource() { this.asExpr().getExpr() instanceof GrapeParamsCall } override string getSourceType() { result = "Grape::API#params" } @@ -174,9 +165,7 @@ private class GrapeHeadersCall extends MethodCall { * The request object can contain user input. */ class GrapeRequestSource extends Http::Server::RequestInputAccess::Range { - GrapeRequestSource() { - this.asExpr().getExpr() instanceof GrapeRequestCall - } + GrapeRequestSource() { this.asExpr().getExpr() instanceof GrapeRequestCall } override string getSourceType() { result = "Grape::API#request" } @@ -188,9 +177,7 @@ class GrapeRequestSource extends Http::Server::RequestInputAccess::Range { * Route parameters are extracted from the URL path and can be a source of user input. */ class GrapeRouteParamSource extends Http::Server::RequestInputAccess::Range { - GrapeRouteParamSource() { - this.asExpr().getExpr() instanceof GrapeRouteParamCall - } + GrapeRouteParamSource() { this.asExpr().getExpr() instanceof GrapeRouteParamCall } override string getSourceType() { result = "Grape::API#route_param" } @@ -316,12 +303,10 @@ private class GrapeHelperMethodTaintStep extends AdditionalTaintStep { exists(GrapeHelperMethod helperMethod, MethodCall call, int i | // Find calls to helper methods from within Grape endpoints call.getMethodName() = helperMethod.getName() and - exists(GrapeEndpoint endpoint | - call.getParent+() = endpoint.getBody().asExpr().getExpr() - ) and + exists(GrapeEndpoint endpoint | call.getParent+() = endpoint.getBody().asExpr().getExpr()) and // Map argument to parameter nodeFrom.asExpr().getExpr() = call.getArgument(i) and nodeTo.asParameter() = helperMethod.getParameter(i) ) } -} \ No newline at end of file +} diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql index ebfb304dbe7a..c9aa7c29082c 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -19,4 +19,4 @@ query predicate grapeRequest(GrapeRequestSource request) { any() } query predicate grapeRouteParam(GrapeRouteParamSource routeParam) { any() } -query predicate grapeCookies(GrapeCookiesSource cookies) { any() } \ No newline at end of file +query predicate grapeCookies(GrapeCookiesSource cookies) { any() } From 220197484489f80467cee4cfcb3e975ed018d0d2 Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Thu, 21 Aug 2025 19:48:21 +0100 Subject: [PATCH 085/219] Jave: Use force local to make parsing local after global regex finding. --- .../semmle/code/java/regex/RegexFlowConfigs.qll | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 6a934bdd5785..929fa2d6c912 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -163,6 +163,12 @@ private module RegexFlowConfig implements DataFlow::ConfigSig { private module RegexFlow = DataFlow::Global; +private predicate usedAsRegexImpl(StringLiteral regex, string mode, boolean match_full_string) { + RegexFlow::flow(DataFlow::exprNode(regex), _) and + mode = "None" and // TODO: proper mode detection + (if matchesFullString(regex) then match_full_string = true else match_full_string = false) +} + /** * Holds if `regex` is used as a regex, with the mode `mode` (if known). * If regex mode is not known, `mode` will be `"None"`. @@ -170,11 +176,9 @@ private module RegexFlow = DataFlow::Global; * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) * and therefore may be relevant for ReDoS queries are considered. */ -predicate usedAsRegex(StringLiteral regex, string mode, boolean match_full_string) { - RegexFlow::flow(DataFlow::exprNode(regex), _) and - mode = "None" and // TODO: proper mode detection - (if matchesFullString(regex) then match_full_string = true else match_full_string = false) -} +overlay[local] +predicate usedAsRegex(StringLiteral regex, string mode, boolean match_full_string) = + forceLocal(usedAsRegexImpl/3)(regex, mode, match_full_string) /** * Holds if `regex` is used as a regular expression that is matched against a full string, From f209e3a0fe28793483de88ba00943c5e3c828e13 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 4 Aug 2025 11:51:23 +0200 Subject: [PATCH 086/219] Python: Updated PathInjection tests to use inline test expectations --- .../DataflowQueryTest.expected | 2 - .../DataflowQueryTest.ql | 4 -- .../PathInjection.expected | 42 +++++++++---------- .../CWE-022-PathInjection/PathInjection.qlref | 3 +- .../flask_path_injection.py | 4 +- .../CWE-022-PathInjection/path_injection.py | 32 +++++++------- .../CWE-022-PathInjection/pathlib_use.py | 6 +-- .../Security/CWE-022-PathInjection/test.py | 10 ++--- 8 files changed, 49 insertions(+), 54 deletions(-) delete mode 100644 python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected delete mode 100644 python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected deleted file mode 100644 index 2fad7bb9a843..000000000000 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected +++ /dev/null @@ -1,2 +0,0 @@ -missingAnnotationOnSink -testFailures diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql b/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql deleted file mode 100644 index e4720596a37c..000000000000 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql +++ /dev/null @@ -1,4 +0,0 @@ -import python -import utils.test.dataflow.DataflowQueryTest -import semmle.python.security.dataflow.PathInjectionQuery -import FromTaintTrackingStateConfig diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected index 37e4dd927d89..368400d505d9 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected @@ -1,3 +1,24 @@ +#select +| flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | This path depends on a $@. | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:21:14:21:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:21:14:21:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:31:14:31:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:31:14:31:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:48:14:48:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:48:14:48:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:65:14:65:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:65:14:65:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:94:14:94:17 | ControlFlowNode for path | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:94:14:94:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | user-provided value | +| path_injection.py:102:14:102:17 | ControlFlowNode for path | path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:102:14:102:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:98:20:98:22 | ControlFlowNode for foo | user-provided value | +| path_injection.py:113:14:113:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:113:14:113:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:124:14:124:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:124:14:124:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:142:14:142:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:142:14:142:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| path_injection.py:152:18:152:21 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:152:18:152:21 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| pathlib_use.py:14:5:14:5 | ControlFlowNode for p | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| test.py:19:10:19:10 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:19:10:19:10 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| test.py:26:10:26:10 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:26:10:26:10 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| test.py:33:14:33:14 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:33:14:33:14 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | +| test.py:49:14:49:14 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:49:14:49:14 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | edges | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | provenance | | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | provenance | | @@ -252,24 +273,3 @@ nodes subpaths | test.py:25:19:25:19 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | test.py:25:9:25:20 | ControlFlowNode for normalize() | | test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | test.py:48:13:48:24 | ControlFlowNode for normalize() | -#select -| flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | This path depends on a $@. | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:21:14:21:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:21:14:21:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:31:14:31:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:31:14:31:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:48:14:48:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:48:14:48:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:65:14:65:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:65:14:65:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:94:14:94:17 | ControlFlowNode for path | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:94:14:94:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | user-provided value | -| path_injection.py:102:14:102:17 | ControlFlowNode for path | path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:102:14:102:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:98:20:98:22 | ControlFlowNode for foo | user-provided value | -| path_injection.py:113:14:113:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:113:14:113:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:124:14:124:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:124:14:124:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:142:14:142:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:142:14:142:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| path_injection.py:152:18:152:21 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:152:18:152:21 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| pathlib_use.py:14:5:14:5 | ControlFlowNode for p | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| test.py:19:10:19:10 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:19:10:19:10 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| test.py:26:10:26:10 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:26:10:26:10 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| test.py:33:14:33:14 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:33:14:33:14 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | -| test.py:49:14:49:14 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:49:14:49:14 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref index d43482cc509e..6a680f6d5ff5 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref @@ -1 +1,2 @@ -Security/CWE-022/PathInjection.ql +query: Security/CWE-022/PathInjection.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py index f64d76a3b4da..f289bcc94ec9 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py @@ -1,4 +1,4 @@ -from flask import Flask, request, send_from_directory +from flask import Flask, request, send_from_directory # $Source app = Flask(__name__) @@ -18,4 +18,4 @@ def download_file(): def download_file(): dirname = request.args.get('dirname', '') filename = request.args.get('filename', '') - return send_from_directory(dirname, filename) # $result=BAD result=OK(filename) + return send_from_directory(dirname, filename) # $ Alert diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py index 39c170374802..37ff20b7de13 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py @@ -1,6 +1,6 @@ import os -from flask import Flask, request +from flask import Flask, request # $ Source app = Flask(__name__) @@ -10,7 +10,7 @@ @app.route("/path1") def path_injection(): filename = request.args.get('filename', '') - f = open(os.path.join(STATIC_DIR, filename)) # $result=BAD + f = open(os.path.join(STATIC_DIR, filename)) # $ Alert @app.route("/path2") @@ -18,7 +18,7 @@ def path_injection(): # Normalized, but not checked filename = request.args.get('filename', '') npath = os.path.normpath(os.path.join(STATIC_DIR, filename)) - f = open(npath) # $result=BAD + f = open(npath) # $ Alert @app.route("/path3") @@ -28,7 +28,7 @@ def unsafe_path_normpath(): npath = os.path.normpath(os.path.join(STATIC_DIR, filename)) if npath.startswith(STATIC_DIR): pass - f = open(npath) # $result=BAD + f = open(npath) # $ Alert @app.route("/path4") @@ -45,7 +45,7 @@ def unsafe_path_realpath(): # Normalized (by `realpath` that also follows symlinks), but not checked properly filename = request.args.get('filename', '') npath = os.path.realpath(os.path.join(STATIC_DIR, filename)) - f = open(npath) # $result=BAD + f = open(npath) # $ Alert @app.route("/path6") @@ -62,7 +62,7 @@ def unsafe_path_abspath(): # Normalized (by `abspath`), but not checked properly filename = request.args.get('filename', '') npath = os.path.abspath(os.path.join(STATIC_DIR, filename)) - f = open(npath) # $result=BAD + f = open(npath) # $ Alert @app.route("/path7") @@ -84,22 +84,22 @@ def safe_path_abspath_tricky(): filename = request.args.get('filename', '') possibly_unsafe_path = os.path.join(STATIC_DIR, filename) if os.path.abspath(possibly_unsafe_path).startswith(STATIC_DIR): - f = open(possibly_unsafe_path) # $SPURIOUS: result=BAD + f = open(possibly_unsafe_path) # $ SPURIOUS: Alert @app.route("/int-only/") -def flask_int_only(foo_id): +def flask_int_only(foo_id): # $ SPURIOUS: Source # This is OK, since the flask routing ensures that `foo_id` MUST be an integer. path = os.path.join(STATIC_DIR, foo_id) - f = open(path) # $spurious: result=BAD + f = open(path) # $ SPURIOUS: Alert @app.route("/not-path/") -def flask_not_path(foo): +def flask_not_path(foo): # $ Source # On UNIX systems, this is OK, since without being marked as ``, flask # routing ensures that `foo` cannot contain forward slashes (not by using %2F either). path = os.path.join(STATIC_DIR, foo) - f = open(path) # $result=BAD // OK if only running on UNIX systems, NOT OK if could be running on windows + f = open(path) # $ Alert // OK if only running on UNIX systems, NOT OK if could be running on windows @app.route("/no-dot-dot") @@ -110,7 +110,7 @@ def no_dot_dot(): # handle if `filename` is an absolute path if '../' in path: return "not this time" - f = open(path) # $result=BAD + f = open(path) # $ Alert @app.route("/no-dot-dot-with-prefix") @@ -121,7 +121,7 @@ def no_dot_dot_with_prefix(): # Therefore, for UNIX-only programs, the `../` check is enough to stop path injections. if '../' in path: return "not this time" - f = open(path) # $result=BAD // OK if only running on UNIX systems, NOT OK if could be running on windows + f = open(path) # $ Alert // OK if only running on UNIX systems, NOT OK if could be running on windows @app.route("/replace-slash") @@ -129,7 +129,7 @@ def replace_slash(): filename = request.args.get('filename', '') path = os.path.join(STATIC_DIR, filename) sanitized = path.replace("/", "_") - f = open(sanitized) # $result=BAD // OK if only running on UNIX systems, NOT OK if could be running on windows + f = open(sanitized) # $ Alert // OK if only running on UNIX systems, NOT OK if could be running on windows @app.route("/stackoverflow-solution") @@ -139,7 +139,7 @@ def stackoverflow_solution(): path = os.path.join(STATIC_DIR, filename) if os.path.commonprefix((os.path.realpath(path), STATIC_DIR)) != STATIC_DIR: return "not this time" - f = open(path) # $SPURIOUS: result=BAD + f = open(path) # $ SPURIOUS: Alert SAFE_FILES = ['foo', 'bar', 'baz'] @@ -149,4 +149,4 @@ def safe_set_of_files(): filename = request.args.get('filename', '') if filename in SAFE_FILES: path = os.path.join(STATIC_DIR, filename) - f = open(path) # $SPURIOUS: result=BAD + f = open(path) # $ SPURIOUS: Alert diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py index 6f703f903dc5..76ce1d1cc99d 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py @@ -1,6 +1,6 @@ import pathlib -from flask import Flask, request +from flask import Flask, request # $ Source app = Flask(__name__) @@ -11,7 +11,7 @@ def path_injection(): filename = request.args.get('filename', '') p = STATIC_DIR / filename - p.open() # $ result=BAD + p.open() # $ Alert p2 = pathlib.Path(STATIC_DIR, filename) - p2.open() # $ result=BAD + p2.open() # $ Alert diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py index 7200cd78f454..c10c257dae53 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py @@ -1,6 +1,6 @@ import os.path -from flask import Flask, request +from flask import Flask, request # $ Source app = Flask(__name__) @@ -16,21 +16,21 @@ def normalize(x): @app.route("/path") def simple(): x = source() - open(x) # $result=BAD + open(x) # $ Alert @app.route("/path") def normalization(): x = source() y = normalize(x) - open(y) # $result=BAD + open(y) # $ Alert @app.route("/path") def check(): x = source() if x.startswith("subfolder/"): - open(x) # $result=BAD + open(x) # $ Alert @app.route("/path") @@ -46,4 +46,4 @@ def check_then_normalize(): x = source() if x.startswith("subfolder/"): y = normalize(x) - open(y) # $result=BAD + open(y) # $ Alert From 6c779c7fa50ec6c191c6109bafddcea61fa90b12 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 4 Aug 2025 11:59:09 +0200 Subject: [PATCH 087/219] Python: Added extra test cases for path injection with FastAPI --- .../PathInjection.expected | 18 +++++++ .../fastapi_path_injection.py | 49 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected index 368400d505d9..46b094e024fe 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected @@ -1,4 +1,7 @@ #select +| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | user-provided value | +| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | user-provided value | +| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | user-provided value | | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | This path depends on a $@. | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | | path_injection.py:21:14:21:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:21:14:21:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | @@ -20,6 +23,13 @@ | test.py:33:14:33:14 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:33:14:33:14 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | | test.py:49:14:49:14 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:49:14:49:14 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | edges +| fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | provenance | | +| fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | fastapi_path_injection.py:20:34:20:37 | ControlFlowNode for path | provenance | | +| fastapi_path_injection.py:20:34:20:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | | +| fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | provenance | | +| fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | | +| fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | provenance | | +| fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | provenance | | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | provenance | | | flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | provenance | | @@ -143,6 +153,14 @@ edges | test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | provenance | | | test.py:48:23:48:23 | ControlFlowNode for x | test.py:48:13:48:24 | ControlFlowNode for normalize() | provenance | Config | nodes +| fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | semmle.label | ControlFlowNode for filepath | +| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | semmle.label | ControlFlowNode for filepath | +| fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:20:34:20:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | semmle.label | ControlFlowNode for dirname | diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py new file mode 100644 index 000000000000..8e66bf3ed4c9 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py @@ -0,0 +1,49 @@ +from fastapi import FastAPI, Depends + +app = FastAPI() + +class FileHandler: + def get_data(self, filepath: str): + with open(filepath, "r") as f: # $ Alert + return f.readline() + +file_handler = None + +def init_file_handler(): + global file_handler + file_handler = FileHandler() + +@app.get("/file/") +async def read_item(path: str): # $ Source + if file_handler is None: + init_file_handler() + return file_handler.get_data(path) + +def init_file_handler(): + return FileHandler() + +@app.get("/file2/", dependencies=[Depends(init_file_handler)]) +async def read_item(path: str, file_handler: FileHandler = Depends()): # $ Source + return file_handler.get_data(path) + + +@app.get("/file3/", dependencies=[Depends(init_file_handler)]) +async def read_item(path: str): # $ Source + return file_handler.get_data(path) + + +@app.on_event("startup") +def init_file_handler(): + app.state.file_handler1 = FileHandler() + app.state.file_handler2 = FileHandler() + +def get_data_source(): + return app.state.file_handler1 + +@app.get("/file4/") +async def read_item(path: str, data_source=Depends(get_data_source)): # $ MISSING: Source + return data_source.get_data(path) + +@app.get("/file5/", dependencies=[Depends(init_file_handler)]) +async def read_item(path: str): # $ MISSING: Source + return app.state.file_handler2.get_data(path) From 9d4b1689779a8e7d00ccdb8f8f6874112dd70ca4 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 4 Aug 2025 14:58:19 +0200 Subject: [PATCH 088/219] Python: Added extra test for global variable nested attribute reads/writes. --- .../dataflow/fieldflow/test_global.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/python/ql/test/library-tests/dataflow/fieldflow/test_global.py b/python/ql/test/library-tests/dataflow/fieldflow/test_global.py index 0e96b37dc33c..57fcd274a33b 100644 --- a/python/ql/test/library-tests/dataflow/fieldflow/test_global.py +++ b/python/ql/test/library-tests/dataflow/fieldflow/test_global.py @@ -146,6 +146,7 @@ def fields_with_local_flow(x): class NestedObj(object): def __init__(self): self.obj = MyObj("OK") + self.obj.foo = "default" def getObj(self): return self.obj @@ -163,6 +164,20 @@ def getObj(self): a2 = NestedObj() a2.getObj().foo = x2 SINK(a2.obj.foo) # $ flow="SOURCE, l:-3 -> a2.obj.foo" + +# Global variable +app = NestedObj() + +def init_global(): + app.obj.foo = SOURCE + +def read_global(): + return app.obj.foo + +def test_global_nested_attributes(): + init_global() + result = read_global() + SINK(result) # $ MISSING: flow="SOURCE, l:-8 -> result" # ------------------------------------------------------------------------------ # Global scope interaction From e60d0c88f13415362526f26993ba487e0c0b91ea Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 4 Aug 2025 15:06:53 +0200 Subject: [PATCH 089/219] Python: Add global variable nested field jump steps --- .../dataflow/new/internal/DataFlowPrivate.qll | 55 +++++++++++++++++++ .../dataflow/fieldflow/test_global.py | 6 +- .../PathInjection.expected | 5 ++ .../fastapi_path_injection.py | 2 +- 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 724ae82aa0dd..40ec8d33502d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -556,6 +556,61 @@ predicate runtimeJumpStep(Node nodeFrom, Node nodeTo) { nodeFrom.asCfgNode() = param.getDefault() and nodeTo.asCfgNode() = param.getDefiningNode() ) + or + // Enhanced global variable field access tracking + globalVariableNestedFieldJumpStep(nodeFrom, nodeTo) +} + +/** + * Holds if there is a jump step from `nodeFrom` to `nodeTo` through global variable field access. + * This supports tracking nested object field access through global variables like `app.obj.foo`. + */ +predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { + exists(GlobalVariable globalVar, AttrWrite write, AttrRead read | + // Match writes and reads on the same global variable attribute path + globalVariableAttrPath(globalVar, write.getObject()) and + globalVariableAttrPath(globalVar, read.getObject()) and + write.getAttributeName() = read.getAttributeName() and + nodeFrom = write.getValue() and + nodeTo = read and + write.getEnclosingCallable() != read.getEnclosingCallable() + ) +} + +/** + * Maximum depth for global variable nested attribute access. + * Depth 0 = globalVar.foo, depth 1 = globalVar.foo.bar, depth 2 = globalVar.foo.bar.baz, etc. + */ +private int getMaxGlobalVariableDepth() { result = 1 } + +/** + * Holds if `node` is an attribute access path starting from global variable `globalVar`. + * Supports configurable nesting depth via getMaxGlobalVariableDepth(). + */ +predicate globalVariableAttrPath(GlobalVariable globalVar, Node node) { + globalVariableAttrPathAtDepth(globalVar, node, _) +} + +/** + * Holds if `node` is an attribute access path starting from global variable `globalVar` at specific `depth`. + */ +predicate globalVariableAttrPathAtDepth(GlobalVariable globalVar, Node node, int depth) { + // Base case: Direct global variable access (depth 0) + depth = 0 and + exists(NameNode name | + name.getId() = globalVar.getId() and + node.asCfgNode() = name and + name.getNode().(Name).getVariable() instanceof GlobalVariable and + not exists(ClassExpr cls | cls.getName() = globalVar.getId()) + ) + or + // Recursive case: Nested attribute access (depth > 0) + exists(AttrRead attr, int parentDepth | + globalVariableAttrPathAtDepth(globalVar, attr.getObject(), parentDepth) and + node = attr and + depth = parentDepth + 1 and + depth <= getMaxGlobalVariableDepth() + ) } //-------- diff --git a/python/ql/test/library-tests/dataflow/fieldflow/test_global.py b/python/ql/test/library-tests/dataflow/fieldflow/test_global.py index 57fcd274a33b..9970c47c962f 100644 --- a/python/ql/test/library-tests/dataflow/fieldflow/test_global.py +++ b/python/ql/test/library-tests/dataflow/fieldflow/test_global.py @@ -177,18 +177,18 @@ def read_global(): def test_global_nested_attributes(): init_global() result = read_global() - SINK(result) # $ MISSING: flow="SOURCE, l:-8 -> result" + SINK(result) # $ flow="SOURCE, l:-8 -> result" # ------------------------------------------------------------------------------ # Global scope interaction # ------------------------------------------------------------------------------ def func_defined_before(): - SINK(global_obj.foo) # $ MISSING: flow="SOURCE, l:+3 -> global_obj.foo" + SINK(global_obj.foo) # $ flow="SOURCE, l:+3 -> global_obj.foo" global_obj = MyObj(NONSOURCE) global_obj.foo = SOURCE SINK(global_obj.foo) # $ flow="SOURCE, l:-1 -> global_obj.foo" def func_defined_after(): - SINK(global_obj.foo) # $ MISSING: flow="SOURCE, l:-4 -> global_obj.foo" + SINK(global_obj.foo) # $ flow="SOURCE, l:-4 -> global_obj.foo" diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected index 46b094e024fe..79b36070c017 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected @@ -2,6 +2,7 @@ | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | user-provided value | | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | user-provided value | | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | user-provided value | +| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | user-provided value | | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | This path depends on a $@. | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | | path_injection.py:21:14:21:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:21:14:21:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value | @@ -30,6 +31,8 @@ edges | fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | | | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | provenance | | | fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | | +| fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | fastapi_path_injection.py:49:45:49:48 | ControlFlowNode for path | provenance | | +| fastapi_path_injection.py:49:45:49:48 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | provenance | | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | provenance | | | flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | provenance | | @@ -161,6 +164,8 @@ nodes | fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| fastapi_path_injection.py:49:45:49:48 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | semmle.label | ControlFlowNode for dirname | diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py index 8e66bf3ed4c9..e5d7cae762cb 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py @@ -45,5 +45,5 @@ async def read_item(path: str, data_source=Depends(get_data_source)): # $ MISSIN return data_source.get_data(path) @app.get("/file5/", dependencies=[Depends(init_file_handler)]) -async def read_item(path: str): # $ MISSING: Source +async def read_item(path: str): # $ Source return app.state.file_handler2.get_data(path) From 69b58534770c4e0158a97cb384e2327f8b1d9cdc Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 6 Aug 2025 14:36:47 +0000 Subject: [PATCH 090/219] Python: Keep track of access path --- .../dataflow/new/internal/DataFlowPrivate.qll | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 40ec8d33502d..0928aca33a66 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -566,10 +566,12 @@ predicate runtimeJumpStep(Node nodeFrom, Node nodeTo) { * This supports tracking nested object field access through global variables like `app.obj.foo`. */ predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { - exists(GlobalVariable globalVar, AttrWrite write, AttrRead read | + exists(ModuleVariableNode globalVar, AttrWrite write, AttrRead read | // Match writes and reads on the same global variable attribute path - globalVariableAttrPath(globalVar, write.getObject()) and - globalVariableAttrPath(globalVar, read.getObject()) and + exists(string accessPath | + globalVariableAttrPath(globalVar, accessPath, write.getObject()) and + globalVariableAttrPath(globalVar, accessPath, read.getObject()) + ) and write.getAttributeName() = read.getAttributeName() and nodeFrom = write.getValue() and nodeTo = read and @@ -587,29 +589,32 @@ private int getMaxGlobalVariableDepth() { result = 1 } * Holds if `node` is an attribute access path starting from global variable `globalVar`. * Supports configurable nesting depth via getMaxGlobalVariableDepth(). */ -predicate globalVariableAttrPath(GlobalVariable globalVar, Node node) { - globalVariableAttrPathAtDepth(globalVar, node, _) +predicate globalVariableAttrPath(ModuleVariableNode globalVar, string accessPath, Node node) { + exists(int depth | + globalVariableAttrPathAtDepth(globalVar, accessPath, node, depth) and + depth > 0 + ) } /** * Holds if `node` is an attribute access path starting from global variable `globalVar` at specific `depth`. */ -predicate globalVariableAttrPathAtDepth(GlobalVariable globalVar, Node node, int depth) { +predicate globalVariableAttrPathAtDepth( + ModuleVariableNode globalVar, string accessPath, Node node, int depth +) { // Base case: Direct global variable access (depth 0) depth = 0 and - exists(NameNode name | - name.getId() = globalVar.getId() and - node.asCfgNode() = name and - name.getNode().(Name).getVariable() instanceof GlobalVariable and - not exists(ClassExpr cls | cls.getName() = globalVar.getId()) - ) + node in [globalVar.getARead(), globalVar.getAWrite()] and + accessPath = "" or // Recursive case: Nested attribute access (depth > 0) - exists(AttrRead attr, int parentDepth | - globalVariableAttrPathAtDepth(globalVar, attr.getObject(), parentDepth) and + exists(AttrRef attr, Node n, string attrName, int parentDepth, string parentAccessPath | + attr.accesses(n, attrName) and + globalVariableAttrPathAtDepth(globalVar, parentAccessPath, n, parentDepth) and node = attr and depth = parentDepth + 1 and - depth <= getMaxGlobalVariableDepth() + depth <= getMaxGlobalVariableDepth() and + accessPath = parentAccessPath + "." + attrName ) } From 6133f01c81bc3ac0b61d2451d3732e5e1d3a3c0e Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 7 Aug 2025 13:17:33 +0000 Subject: [PATCH 091/219] Python: Rewrite access path computation --- .../dataflow/new/internal/DataFlowPrivate.qll | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 0928aca33a66..98a1658674c4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -574,8 +574,8 @@ predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { ) and write.getAttributeName() = read.getAttributeName() and nodeFrom = write.getValue() and - nodeTo = read and - write.getEnclosingCallable() != read.getEnclosingCallable() + nodeTo = read //and + //write.getEnclosingCallable() != read.getEnclosingCallable() ) } @@ -583,7 +583,7 @@ predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { * Maximum depth for global variable nested attribute access. * Depth 0 = globalVar.foo, depth 1 = globalVar.foo.bar, depth 2 = globalVar.foo.bar.baz, etc. */ -private int getMaxGlobalVariableDepth() { result = 1 } +private int getMaxGlobalVariableDepth() { result = 10 } /** * Holds if `node` is an attribute access path starting from global variable `globalVar`. @@ -592,7 +592,7 @@ private int getMaxGlobalVariableDepth() { result = 1 } predicate globalVariableAttrPath(ModuleVariableNode globalVar, string accessPath, Node node) { exists(int depth | globalVariableAttrPathAtDepth(globalVar, accessPath, node, depth) and - depth > 0 + depth >= 0 ) } @@ -607,14 +607,15 @@ predicate globalVariableAttrPathAtDepth( node in [globalVar.getARead(), globalVar.getAWrite()] and accessPath = "" or - // Recursive case: Nested attribute access (depth > 0) - exists(AttrRef attr, Node n, string attrName, int parentDepth, string parentAccessPath | - attr.accesses(n, attrName) and - globalVariableAttrPathAtDepth(globalVar, parentAccessPath, n, parentDepth) and - node = attr and + exists(Node obj, string attrName, string parentAccessPath, int parentDepth | + node.(AttrRead).accesses(obj, attrName) + or + exists(AttrWrite aw | aw.accesses(obj, attrName) and aw.getValue() = node) + | + globalVariableAttrPathAtDepth(globalVar, parentAccessPath, obj, parentDepth) and + accessPath = parentAccessPath + "." + attrName and depth = parentDepth + 1 and - depth <= getMaxGlobalVariableDepth() and - accessPath = parentAccessPath + "." + attrName + depth <= getMaxGlobalVariableDepth() ) } From 8393ccf39dd215a6ba5ac6caded6ad7b26e3c21b Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 7 Aug 2025 14:55:50 +0000 Subject: [PATCH 092/219] Python: Update `globalVariableAttrPathAtDepth` base case --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 2 +- python/ql/test/library-tests/dataflow/fieldflow/test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 98a1658674c4..22c1d22b87b5 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -604,7 +604,7 @@ predicate globalVariableAttrPathAtDepth( ) { // Base case: Direct global variable access (depth 0) depth = 0 and - node in [globalVar.getARead(), globalVar.getAWrite()] and + node in [globalVar.getARead(), globalVar.getAWrite(), globalVar] and accessPath = "" or exists(Node obj, string attrName, string parentAccessPath, int parentDepth | diff --git a/python/ql/test/library-tests/dataflow/fieldflow/test.py b/python/ql/test/library-tests/dataflow/fieldflow/test.py index 1ce049917f01..f0152ad38a84 100644 --- a/python/ql/test/library-tests/dataflow/fieldflow/test.py +++ b/python/ql/test/library-tests/dataflow/fieldflow/test.py @@ -301,12 +301,12 @@ def set_to_source(): @expects(4) # $ unresolved_call=expects(..) unresolved_call=expects(..)(..) def test_global_flow_to_class_attribute(): inst = WithTuple2() - SINK_F(WithTuple2.my_tuple[0]) + SINK_F(WithTuple2.my_tuple[0]) # $ SPURIOUS: flow="SOURCE, l:-5 -> WithTuple2.my_tuple[0]" SINK_F(inst.my_tuple[0]) set_to_source() - SINK(WithTuple2.my_tuple[0]) # $ MISSING: flow="SOURCE, l:-10 -> WithTuple2.my_tuple[0]" + SINK(WithTuple2.my_tuple[0]) # $ flow="SOURCE, l:-10 -> WithTuple2.my_tuple[0]" SINK(inst.my_tuple[0]) # $ MISSING: flow="SOURCE, l:-11 -> inst.my_tuple[0]" From 6f9e06c59e695d706dca0ddd443adc472ecea7cf Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 8 Aug 2025 12:56:28 +0000 Subject: [PATCH 093/219] Python: Add `AttrWrite.writes` and `AttrRead.reads` The latter of these is identical to `AttrRef.accesses`, but makes the API a bit more intuitive. --- .../dataflow/new/internal/Attributes.qll | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll index 51dccc29312c..58646448ed18 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll @@ -64,6 +64,15 @@ abstract class AttrRef extends Node { abstract class AttrWrite extends AttrRef { /** Gets the data flow node corresponding to the value that is written to the attribute. */ abstract Node getValue(); + + /** + * Holds if this attribute write writes the attribute named `attrName` on object `object` with + * value `value`. + */ + predicate writes(Node object, string attrName, Node value) { + this.accesses(object, attrName) and + this.getValue() = value + } } /** @@ -225,7 +234,14 @@ private class ClassDefinitionAsAttrWrite extends AttrWrite, CfgNode { * - Dynamic attribute reads using `getattr`: `getattr(object, attr)` * - Qualified imports: `from module import attr as name` */ -abstract class AttrRead extends AttrRef, Node, LocalSourceNode { } +abstract class AttrRead extends AttrRef, Node, LocalSourceNode { + + /** Holds if this attribute read reads the attribute named `attrName` on the object `object`. */ + predicate reads(Node object, string attrName) { + this.accesses(object, attrName) + } + + } /** A simple attribute read, e.g. `object.attr` */ private class AttributeReadAsAttrRead extends AttrRead, CfgNode { From e228aac61f5bb71bf2372e2d04a66772f8b52a67 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 8 Aug 2025 12:57:16 +0000 Subject: [PATCH 094/219] Python: Use `AttrWrite.writes` Also applies @napalys' fix to the base case. --- .../python/dataflow/new/internal/Attributes.qll | 8 ++------ .../dataflow/new/internal/DataFlowPrivate.qll | 13 +++++++------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll index 58646448ed18..42c0c862e89b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll @@ -235,13 +235,9 @@ private class ClassDefinitionAsAttrWrite extends AttrWrite, CfgNode { * - Qualified imports: `from module import attr as name` */ abstract class AttrRead extends AttrRef, Node, LocalSourceNode { - /** Holds if this attribute read reads the attribute named `attrName` on the object `object`. */ - predicate reads(Node object, string attrName) { - this.accesses(object, attrName) - } - - } + predicate reads(Node object, string attrName) { this.accesses(object, attrName) } +} /** A simple attribute read, e.g. `object.attr` */ private class AttributeReadAsAttrRead extends AttrRead, CfgNode { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 22c1d22b87b5..50e40995a05b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -574,8 +574,7 @@ predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { ) and write.getAttributeName() = read.getAttributeName() and nodeFrom = write.getValue() and - nodeTo = read //and - //write.getEnclosingCallable() != read.getEnclosingCallable() + nodeTo = read ) } @@ -583,7 +582,7 @@ predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { * Maximum depth for global variable nested attribute access. * Depth 0 = globalVar.foo, depth 1 = globalVar.foo.bar, depth 2 = globalVar.foo.bar.baz, etc. */ -private int getMaxGlobalVariableDepth() { result = 10 } +private int getMaxGlobalVariableDepth() { result = 2 } /** * Holds if `node` is an attribute access path starting from global variable `globalVar`. @@ -604,13 +603,15 @@ predicate globalVariableAttrPathAtDepth( ) { // Base case: Direct global variable access (depth 0) depth = 0 and - node in [globalVar.getARead(), globalVar.getAWrite(), globalVar] and + // We use `globalVar` instead of `globalVar.getAWrite()` due to some weirdness with how + // attribute writes are handled in the global scope (see `GlobalAttributeAssignmentAsAttrWrite`). + node in [globalVar.getARead(), globalVar] and accessPath = "" or exists(Node obj, string attrName, string parentAccessPath, int parentDepth | - node.(AttrRead).accesses(obj, attrName) + node.(AttrRead).reads(obj, attrName) or - exists(AttrWrite aw | aw.accesses(obj, attrName) and aw.getValue() = node) + any(AttrWrite aw).writes(obj, attrName, node) | globalVariableAttrPathAtDepth(globalVar, parentAccessPath, obj, parentDepth) and accessPath = parentAccessPath + "." + attrName and From e82fe9d919516b4d87676b419f8463f2e858dcb0 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 11 Aug 2025 06:45:50 +0000 Subject: [PATCH 095/219] Python: Updated doc string and removed redundant predicate. --- .../dataflow/new/internal/DataFlowPrivate.qll | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 50e40995a05b..e19a5a2ace83 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -565,12 +565,12 @@ predicate runtimeJumpStep(Node nodeFrom, Node nodeTo) { * Holds if there is a jump step from `nodeFrom` to `nodeTo` through global variable field access. * This supports tracking nested object field access through global variables like `app.obj.foo`. */ -predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { +private predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { exists(ModuleVariableNode globalVar, AttrWrite write, AttrRead read | // Match writes and reads on the same global variable attribute path exists(string accessPath | - globalVariableAttrPath(globalVar, accessPath, write.getObject()) and - globalVariableAttrPath(globalVar, accessPath, read.getObject()) + globalVariableAttrPathAtDepth(globalVar, accessPath, write.getObject(), _) and + globalVariableAttrPathAtDepth(globalVar, accessPath, read.getObject(), _) ) and write.getAttributeName() = read.getAttributeName() and nodeFrom = write.getValue() and @@ -580,25 +580,14 @@ predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { /** * Maximum depth for global variable nested attribute access. - * Depth 0 = globalVar.foo, depth 1 = globalVar.foo.bar, depth 2 = globalVar.foo.bar.baz, etc. + * Depth 1 = globalVar.foo, depth 2 = globalVar.foo.bar, depth 3 = globalVar.foo.bar.baz, etc. */ private int getMaxGlobalVariableDepth() { result = 2 } -/** - * Holds if `node` is an attribute access path starting from global variable `globalVar`. - * Supports configurable nesting depth via getMaxGlobalVariableDepth(). - */ -predicate globalVariableAttrPath(ModuleVariableNode globalVar, string accessPath, Node node) { - exists(int depth | - globalVariableAttrPathAtDepth(globalVar, accessPath, node, depth) and - depth >= 0 - ) -} - /** * Holds if `node` is an attribute access path starting from global variable `globalVar` at specific `depth`. */ -predicate globalVariableAttrPathAtDepth( +private predicate globalVariableAttrPathAtDepth( ModuleVariableNode globalVar, string accessPath, Node node, int depth ) { // Base case: Direct global variable access (depth 0) From 431fc8880ebf0857fdd9c6916a1a15d9e00eb55c Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 11 Aug 2025 09:42:44 +0000 Subject: [PATCH 096/219] Python: Add change note --- .../ql/lib/change-notes/2025-08-11-jump-step-global-nested.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md diff --git a/python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md b/python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md new file mode 100644 index 000000000000..4109bb788259 --- /dev/null +++ b/python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Data flow tracking through global variables now supports nested field access patterns such as `global_var.obj.field`. This improves the precision of taint tracking analysis when data flows through complex global variable structures. \ No newline at end of file From 8fd62252fd92df6af54378cd499a3c52544fa9d3 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 16 Sep 2025 15:13:31 +0000 Subject: [PATCH 097/219] Python: Fix bad join in `globalVariableNestedFieldJumpStep` --- .../dataflow/new/internal/DataFlowPrivate.qll | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index e19a5a2ace83..2322539995b6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -561,18 +561,36 @@ predicate runtimeJumpStep(Node nodeFrom, Node nodeTo) { globalVariableNestedFieldJumpStep(nodeFrom, nodeTo) } +/** Helper predicate for `globalVariableNestedFieldJumpStep`. */ +pragma[nomagic] +private predicate globalVariableAttrPathRead( + ModuleVariableNode globalVar, string accessPath, AttrRead r, string attrName +) { + globalVariableAttrPathAtDepth(globalVar, accessPath, r.getObject(), _) and + attrName = r.getAttributeName() +} + +/** Helper predicate for `globalVariableNestedFieldJumpStep`. */ +pragma[nomagic] +private predicate globalVariableAttrPathWrite( + ModuleVariableNode globalVar, string accessPath, AttrWrite w, string attrName +) { + globalVariableAttrPathAtDepth(globalVar, accessPath, w.getObject(), _) and + attrName = w.getAttributeName() +} + /** * Holds if there is a jump step from `nodeFrom` to `nodeTo` through global variable field access. * This supports tracking nested object field access through global variables like `app.obj.foo`. */ +pragma[nomagic] private predicate globalVariableNestedFieldJumpStep(Node nodeFrom, Node nodeTo) { exists(ModuleVariableNode globalVar, AttrWrite write, AttrRead read | // Match writes and reads on the same global variable attribute path - exists(string accessPath | - globalVariableAttrPathAtDepth(globalVar, accessPath, write.getObject(), _) and - globalVariableAttrPathAtDepth(globalVar, accessPath, read.getObject(), _) + exists(string accessPath, string attrName | + globalVariableAttrPathRead(globalVar, accessPath, read, attrName) and + globalVariableAttrPathWrite(globalVar, accessPath, write, attrName) ) and - write.getAttributeName() = read.getAttributeName() and nodeFrom = write.getValue() and nodeTo = read ) From 6f1fcbf41bf7484025a208af19a19630dc3a4df9 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:08:22 +0100 Subject: [PATCH 098/219] Rust: Add IPv6 private address range (and explanatory comments). --- rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll index 5e0d534fb7d7..bd91cde238f3 100644 --- a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -36,9 +36,12 @@ module UseOfHttp { class HttpStringLiteral extends StringLiteralExpr { HttpStringLiteral() { exists(string s | this.getTextValue() = s | - // Match HTTP URLs that are not private/local + // match HTTP URLs s.regexpMatch("(?i)\"http://.*\"") and - not s.regexpMatch("(?i)\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.(1[6-9]|2[0-9]|3[01])\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]).*\"") + // exclude private/local addresses: + // - IPv4: localhost / 127.0.0.1, 192.168.x.x, 10.x.x.x, 172.16.x.x -> 172.31.x.x + // - IPv6 (address inside []): ::1 (or 0:0:0:0:0:0:0:1), fc00::/7 (i.e. anything beginning `fcxx:` or `fdxx:`) + not s.regexpMatch("(?i)\"http://(localhost|127\\.0\\.0\\.1|192\\.168\\.[0-9]+\\.[0-9]+|10\\.[0-9]+\\.[0-9]+\\.[0-9]+|172\\.(1[6-9]|2[0-9]|3[01])\\.[0-9]+|\\[::1\\]|\\[0:0:0:0:0:0:0:1\\]|\\[f[cd][0-9a-f]{2}:.*\\]).*\"") ) } } From c5e3be2c4cc30b1d8b92dfde67097577d4867dc0 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:09:18 -0400 Subject: [PATCH 099/219] Grape - detect params calls inside helper methods - added unit tests for flow using inline format - removed grape from Arel tests (temporary) --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 28 ++++++- .../frameworks/grape/Flow.expected | 77 +++++++++++++++++++ .../library-tests/frameworks/grape/Flow.ql | 25 ++++++ .../frameworks/grape/Grape.expected | 16 ++++ .../library-tests/frameworks/grape/app.rb | 74 +++++++++++++++++- .../security/cwe-089/ArelInjection.rb | 64 +-------------- .../security/cwe-089/SqlInjection.expected | 66 ---------------- 7 files changed, 216 insertions(+), 134 deletions(-) create mode 100644 ruby/ql/test/library-tests/frameworks/grape/Flow.expected create mode 100644 ruby/ql/test/library-tests/frameworks/grape/Flow.ql diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index ea7bc8c576c4..a1646b8654c9 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -121,11 +121,18 @@ class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { */ private class GrapeParamsCall extends ParamsCallImpl { GrapeParamsCall() { - // Simplified approach: find params calls that are descendants of Grape API class methods + // Params calls within endpoint blocks exists(GrapeApiClass api | this.getMethodName() = "params" and this.getParent+() = api.getADeclaration() ) + or + // Params calls within helper methods (defined in helpers blocks) + exists(GrapeApiClass api, DataFlow::CallNode helpersCall | + helpersCall = api.getAModuleLevelCall("helpers") and + this.getMethodName() = "params" and + this.getParent+() = helpersCall.getBlock().asExpr().getExpr() + ) } } @@ -295,18 +302,31 @@ private class GrapeHelperMethod extends Method { /** * Additional taint step to model dataflow from method arguments to parameters - * for Grape helper methods defined in `helpers` blocks. + * and from return values back to call sites for Grape helper methods defined in `helpers` blocks. * This bridges the gap where standard dataflow doesn't recognize the Grape DSL semantics. */ private class GrapeHelperMethodTaintStep extends AdditionalTaintStep { override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + // Map arguments to parameters for helper method calls exists(GrapeHelperMethod helperMethod, MethodCall call, int i | - // Find calls to helper methods from within Grape endpoints + // Find calls to helper methods from within Grape endpoints or other helper methods call.getMethodName() = helperMethod.getName() and - exists(GrapeEndpoint endpoint | call.getParent+() = endpoint.getBody().asExpr().getExpr()) and + exists(GrapeApiClass api | call.getParent+() = api.getADeclaration()) and // Map argument to parameter nodeFrom.asExpr().getExpr() = call.getArgument(i) and nodeTo.asParameter() = helperMethod.getParameter(i) ) + or + // Model implicit return values: the last expression in a helper method flows to the call site + exists(GrapeHelperMethod helperMethod, MethodCall helperCall, Expr lastExpr | + // Find calls to helper methods from within Grape endpoints or other helper methods + helperCall.getMethodName() = helperMethod.getName() and + exists(GrapeApiClass api | helperCall.getParent+() = api.getADeclaration()) and + // Get the last expression in the helper method (Ruby's implicit return) + lastExpr = helperMethod.getLastStmt() and + // Flow from the last expression in the helper method to the call site + nodeFrom.asExpr().getExpr() = lastExpr and + nodeTo.asExpr().getExpr() = helperCall + ) } } diff --git a/ruby/ql/test/library-tests/frameworks/grape/Flow.expected b/ruby/ql/test/library-tests/frameworks/grape/Flow.expected new file mode 100644 index 000000000000..0fd19d4eaced --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/grape/Flow.expected @@ -0,0 +1,77 @@ +models +edges +| app.rb:103:13:103:18 | call to params | app.rb:103:13:103:70 | call to select | provenance | | +| app.rb:103:13:103:70 | call to select | app.rb:149:21:149:31 | call to user_params | provenance | AdditionalTaintStep | +| app.rb:103:13:103:70 | call to select | app.rb:165:21:165:31 | call to user_params | provenance | AdditionalTaintStep | +| app.rb:107:13:107:32 | call to source | app.rb:143:18:143:43 | call to vulnerable_helper | provenance | AdditionalTaintStep | +| app.rb:111:13:111:33 | call to source | app.rb:150:25:150:37 | call to simple_helper | provenance | AdditionalTaintStep | +| app.rb:126:9:126:15 | user_id | app.rb:133:14:133:20 | user_id | provenance | | +| app.rb:126:19:126:24 | call to params | app.rb:126:19:126:34 | ...[...] | provenance | | +| app.rb:126:19:126:34 | ...[...] | app.rb:126:9:126:15 | user_id | provenance | | +| app.rb:127:9:127:16 | route_id | app.rb:134:14:134:21 | route_id | provenance | | +| app.rb:127:20:127:40 | call to route_param | app.rb:127:9:127:16 | route_id | provenance | | +| app.rb:128:9:128:12 | auth | app.rb:135:14:135:17 | auth | provenance | | +| app.rb:128:16:128:22 | call to headers | app.rb:128:16:128:38 | ...[...] | provenance | | +| app.rb:128:16:128:38 | ...[...] | app.rb:128:9:128:12 | auth | provenance | | +| app.rb:129:9:129:15 | session | app.rb:136:14:136:20 | session | provenance | | +| app.rb:129:19:129:25 | call to cookies | app.rb:129:19:129:38 | ...[...] | provenance | | +| app.rb:129:19:129:38 | ...[...] | app.rb:129:9:129:15 | session | provenance | | +| app.rb:143:9:143:14 | result | app.rb:144:14:144:19 | result | provenance | | +| app.rb:143:18:143:43 | call to vulnerable_helper | app.rb:143:9:143:14 | result | provenance | | +| app.rb:149:9:149:17 | user_data | app.rb:151:14:151:22 | user_data | provenance | | +| app.rb:149:21:149:31 | call to user_params | app.rb:149:9:149:17 | user_data | provenance | | +| app.rb:150:9:150:21 | simple_result | app.rb:152:14:152:26 | simple_result | provenance | | +| app.rb:150:25:150:37 | call to simple_helper | app.rb:150:9:150:21 | simple_result | provenance | | +| app.rb:159:13:159:19 | user_id | app.rb:160:18:160:24 | user_id | provenance | | +| app.rb:159:23:159:28 | call to params | app.rb:159:23:159:33 | ...[...] | provenance | | +| app.rb:159:23:159:33 | ...[...] | app.rb:159:13:159:19 | user_id | provenance | | +| app.rb:165:9:165:17 | user_data | app.rb:166:14:166:22 | user_data | provenance | | +| app.rb:165:21:165:31 | call to user_params | app.rb:165:9:165:17 | user_data | provenance | | +nodes +| app.rb:103:13:103:18 | call to params | semmle.label | call to params | +| app.rb:103:13:103:70 | call to select | semmle.label | call to select | +| app.rb:107:13:107:32 | call to source | semmle.label | call to source | +| app.rb:111:13:111:33 | call to source | semmle.label | call to source | +| app.rb:126:9:126:15 | user_id | semmle.label | user_id | +| app.rb:126:19:126:24 | call to params | semmle.label | call to params | +| app.rb:126:19:126:34 | ...[...] | semmle.label | ...[...] | +| app.rb:127:9:127:16 | route_id | semmle.label | route_id | +| app.rb:127:20:127:40 | call to route_param | semmle.label | call to route_param | +| app.rb:128:9:128:12 | auth | semmle.label | auth | +| app.rb:128:16:128:22 | call to headers | semmle.label | call to headers | +| app.rb:128:16:128:38 | ...[...] | semmle.label | ...[...] | +| app.rb:129:9:129:15 | session | semmle.label | session | +| app.rb:129:19:129:25 | call to cookies | semmle.label | call to cookies | +| app.rb:129:19:129:38 | ...[...] | semmle.label | ...[...] | +| app.rb:133:14:133:20 | user_id | semmle.label | user_id | +| app.rb:134:14:134:21 | route_id | semmle.label | route_id | +| app.rb:135:14:135:17 | auth | semmle.label | auth | +| app.rb:136:14:136:20 | session | semmle.label | session | +| app.rb:143:9:143:14 | result | semmle.label | result | +| app.rb:143:18:143:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | +| app.rb:144:14:144:19 | result | semmle.label | result | +| app.rb:149:9:149:17 | user_data | semmle.label | user_data | +| app.rb:149:21:149:31 | call to user_params | semmle.label | call to user_params | +| app.rb:150:9:150:21 | simple_result | semmle.label | simple_result | +| app.rb:150:25:150:37 | call to simple_helper | semmle.label | call to simple_helper | +| app.rb:151:14:151:22 | user_data | semmle.label | user_data | +| app.rb:152:14:152:26 | simple_result | semmle.label | simple_result | +| app.rb:159:13:159:19 | user_id | semmle.label | user_id | +| app.rb:159:23:159:28 | call to params | semmle.label | call to params | +| app.rb:159:23:159:33 | ...[...] | semmle.label | ...[...] | +| app.rb:160:18:160:24 | user_id | semmle.label | user_id | +| app.rb:165:9:165:17 | user_data | semmle.label | user_data | +| app.rb:165:21:165:31 | call to user_params | semmle.label | call to user_params | +| app.rb:166:14:166:22 | user_data | semmle.label | user_data | +subpaths +testFailures +#select +| app.rb:133:14:133:20 | user_id | app.rb:126:19:126:24 | call to params | app.rb:133:14:133:20 | user_id | $@ | app.rb:126:19:126:24 | call to params | call to params | +| app.rb:134:14:134:21 | route_id | app.rb:127:20:127:40 | call to route_param | app.rb:134:14:134:21 | route_id | $@ | app.rb:127:20:127:40 | call to route_param | call to route_param | +| app.rb:135:14:135:17 | auth | app.rb:128:16:128:22 | call to headers | app.rb:135:14:135:17 | auth | $@ | app.rb:128:16:128:22 | call to headers | call to headers | +| app.rb:136:14:136:20 | session | app.rb:129:19:129:25 | call to cookies | app.rb:136:14:136:20 | session | $@ | app.rb:129:19:129:25 | call to cookies | call to cookies | +| app.rb:144:14:144:19 | result | app.rb:107:13:107:32 | call to source | app.rb:144:14:144:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | +| app.rb:151:14:151:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:151:14:151:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | +| app.rb:152:14:152:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:152:14:152:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | +| app.rb:160:18:160:24 | user_id | app.rb:159:23:159:28 | call to params | app.rb:160:18:160:24 | user_id | $@ | app.rb:159:23:159:28 | call to params | call to params | +| app.rb:166:14:166:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:166:14:166:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | diff --git a/ruby/ql/test/library-tests/frameworks/grape/Flow.ql b/ruby/ql/test/library-tests/frameworks/grape/Flow.ql new file mode 100644 index 000000000000..baa3fa4307fb --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/grape/Flow.ql @@ -0,0 +1,25 @@ +/** + * @kind path-problem + */ + +import ruby +import utils.test.InlineFlowTest +import PathGraph +import codeql.ruby.frameworks.Grape +import codeql.ruby.Concepts + +module GrapeConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof Http::Server::RequestInputAccess::Range + or + DefaultFlowConfig::isSource(source) + } + + predicate isSink(DataFlow::Node sink) { DefaultFlowConfig::isSink(sink) } +} + +import FlowTest + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected index af4d936e88d1..d39d9430f926 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected @@ -1,6 +1,7 @@ grapeApiClasses | app.rb:1:1:90:3 | MyAPI | | app.rb:92:1:96:3 | AdminAPI | +| app.rb:98:1:168:3 | UserAPI | grapeEndpoints | app.rb:1:1:90:3 | MyAPI | app.rb:7:3:11:5 | call to get | GET | /hello/:name | | app.rb:1:1:90:3 | MyAPI | app.rb:17:3:20:5 | call to post | POST | /messages | @@ -13,6 +14,10 @@ grapeEndpoints | app.rb:1:1:90:3 | MyAPI | app.rb:78:3:82:5 | call to get | GET | /cookie_test | | app.rb:1:1:90:3 | MyAPI | app.rb:85:3:89:5 | call to get | GET | /header_test | | app.rb:92:1:96:3 | AdminAPI | app.rb:93:3:95:5 | call to get | GET | /admin | +| app.rb:98:1:168:3 | UserAPI | app.rb:124:5:138:7 | call to get | GET | /comprehensive_test/:user_id | +| app.rb:98:1:168:3 | UserAPI | app.rb:140:5:145:7 | call to get | GET | /helper_test/:user_id | +| app.rb:98:1:168:3 | UserAPI | app.rb:147:5:153:7 | call to post | POST | /users | +| app.rb:98:1:168:3 | UserAPI | app.rb:164:5:167:7 | call to post | POST | /users | grapeParams | app.rb:8:12:8:17 | call to params | | app.rb:14:3:16:5 | call to params | @@ -22,19 +27,30 @@ grapeParams | app.rb:36:5:36:10 | call to params | | app.rb:60:12:60:17 | call to params | | app.rb:94:5:94:10 | call to params | +| app.rb:103:13:103:18 | call to params | +| app.rb:126:19:126:24 | call to params | +| app.rb:142:19:142:24 | call to params | +| app.rb:159:23:159:28 | call to params | grapeHeaders | app.rb:9:18:9:24 | call to headers | | app.rb:46:5:46:11 | call to headers | | app.rb:66:3:69:5 | call to headers | | app.rb:86:12:86:18 | call to headers | | app.rb:87:14:87:20 | call to headers | +| app.rb:116:5:118:7 | call to headers | +| app.rb:128:16:128:22 | call to headers | grapeRequest | app.rb:25:12:25:18 | call to request | +| app.rb:130:21:130:27 | call to request | grapeRouteParam | app.rb:51:15:51:35 | call to route_param | | app.rb:52:15:52:36 | call to route_param | | app.rb:57:3:63:5 | call to route_param | +| app.rb:127:20:127:40 | call to route_param | +| app.rb:156:5:162:7 | call to route_param | grapeCookies | app.rb:72:3:75:5 | call to cookies | | app.rb:79:15:79:21 | call to cookies | | app.rb:80:16:80:22 | call to cookies | +| app.rb:120:5:122:7 | call to cookies | +| app.rb:129:19:129:25 | call to cookies | diff --git a/ruby/ql/test/library-tests/frameworks/grape/app.rb b/ruby/ql/test/library-tests/frameworks/grape/app.rb index a034f325f7b3..6fbb184cab98 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/app.rb +++ b/ruby/ql/test/library-tests/frameworks/grape/app.rb @@ -93,4 +93,76 @@ class AdminAPI < Grape::API get '/admin' do params[:token] end -end \ No newline at end of file +end + +class UserAPI < Grape::API + VALID_PARAMS = %w(name email password password_confirmation) + + helpers do + def user_params + params.select{|key,value| VALID_PARAMS.include?(key.to_s)} # Real helper implementation + end + + def vulnerable_helper(user_id) + source "paramHelper" # Test parameter passing to helper + end + + def simple_helper + source "simpleHelper" # Test simple helper return + end + end + + # Headers and cookies blocks for DSL testing + headers do + requires :Authorization, type: String + end + + cookies do + requires :session_id, type: String + end + + get '/comprehensive_test/:user_id' do + # Test all Grape input sources + user_id = params[:user_id] # params taint source + route_id = route_param(:user_id) # route_param taint source + auth = headers[:Authorization] # headers taint source + session = cookies[:session_id] # cookies taint source + body_data = request.body.read # request taint source + + # Test sinks for all sources + sink user_id # $ hasTaintFlow + sink route_id # $ hasTaintFlow + sink auth # $ hasTaintFlow + sink session # $ hasTaintFlow + # Note: request.body.read may not be detected by this flow test config + end + + get '/helper_test/:user_id' do + # Test helper method parameter passing dataflow + user_id = params[:user_id] + result = vulnerable_helper(user_id) + sink result # $ hasTaintFlow=paramHelper + end + + post '/users' do + # Test helper method return dataflow + user_data = user_params + simple_result = simple_helper + sink user_data # $ hasTaintFlow + sink simple_result # $ hasTaintFlow=simpleHelper + end + + # Test route_param block pattern + route_param :id do + get do + # params[:id] should be user input from the path + user_id = params[:id] + sink user_id # $ hasTaintFlow + end + end + + post '/users' do + user_data = user_params + sink user_data # $ hasTaintFlow + end +end diff --git a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb index 8c9c3bff4fbb..1cd6782b2416 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ArelInjection.rb @@ -6,66 +6,4 @@ def unsafe_action sql = Arel.sql("SELECT * FROM users WHERE name = #{name}") sql = Arel::Nodes::SqlLiteral.new("SELECT * FROM users WHERE name = #{name}") end -end - -class PotatoAPI < Grape::API - get '/unsafe_endpoint' do - name = params[:user_name] - # BAD: SQL statement constructed from user input - sql = Arel.sql("SELECT * FROM users WHERE name = #{name}") - sql = Arel::Nodes::SqlLiteral.new("SELECT * FROM users WHERE name = #{name}") - end -end - -class SimpleAPI < Grape::API - get '/test' do - x = params[:name] - Arel.sql("SELECT * FROM users WHERE name = #{x}") - end -end - - # Test helper method pattern in Grape helpers block - class TestAPI < Grape::API - helpers do - def vulnerable_helper(user_id) - # BAD: SQL statement constructed from user input passed as parameter - Arel.sql("SELECT * FROM users WHERE id = #{user_id}") - end - end - - # Headers and cookies blocks for DSL testing - headers do - requires :Authorization, type: String - end - - cookies do - requires :session_id, type: String - end - - get '/comprehensive_test/:user_id' do - # BAD: Comprehensive test using all Grape input sources in one SQL query - user_id = params[:user_id] # params taint source - route_id = route_param(:user_id) # route_param taint source - auth = headers[:Authorization] # headers taint source - session = cookies[:session_id] # cookies taint source - body_data = request.body.read # request taint source - - # All sources flow to SQL injection - Arel.sql("SELECT * FROM users WHERE id = #{user_id} AND route_id = #{route_id} AND auth = #{auth} AND session = #{session} AND data = #{body_data}") - end - - get '/helper_test' do - # BAD: Test helper method dataflow - user_id = params[:user_id] - vulnerable_helper(user_id) - end - - # Test route_param block pattern - route_param :id do - get do - # BAD: params[:id] should be user input from the path - user_id = params[:id] - Arel.sql("SELECT * FROM users WHERE id = #{user_id}") - end - end - end \ No newline at end of file +end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index 34128474cb93..069cb34810fc 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -81,32 +81,6 @@ edges | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | provenance | | | ArelInjection.rb:4:12:4:29 | ...[...] | ArelInjection.rb:4:5:4:8 | name | provenance | | -| ArelInjection.rb:13:5:13:8 | name | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:13:5:13:8 | name | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:13:12:13:29 | ...[...] | provenance | | -| ArelInjection.rb:13:12:13:29 | ...[...] | ArelInjection.rb:13:5:13:8 | name | provenance | | -| ArelInjection.rb:22:5:22:5 | x | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:22:9:22:14 | call to params | ArelInjection.rb:22:9:22:21 | ...[...] | provenance | | -| ArelInjection.rb:22:9:22:21 | ...[...] | ArelInjection.rb:22:5:22:5 | x | provenance | | -| ArelInjection.rb:30:29:30:35 | user_id | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:47:7:47:13 | user_id | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:47:17:47:22 | call to params | ArelInjection.rb:47:17:47:32 | ...[...] | provenance | | -| ArelInjection.rb:47:17:47:32 | ...[...] | ArelInjection.rb:47:7:47:13 | user_id | provenance | | -| ArelInjection.rb:48:7:48:14 | route_id | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:48:18:48:38 | call to route_param | ArelInjection.rb:48:7:48:14 | route_id | provenance | | -| ArelInjection.rb:49:7:49:10 | auth | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:49:14:49:20 | call to headers | ArelInjection.rb:49:14:49:36 | ...[...] | provenance | | -| ArelInjection.rb:49:14:49:36 | ...[...] | ArelInjection.rb:49:7:49:10 | auth | provenance | | -| ArelInjection.rb:50:7:50:13 | session | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:50:17:50:23 | call to cookies | ArelInjection.rb:50:17:50:36 | ...[...] | provenance | | -| ArelInjection.rb:50:17:50:36 | ...[...] | ArelInjection.rb:50:7:50:13 | session | provenance | | -| ArelInjection.rb:59:7:59:13 | user_id | ArelInjection.rb:60:25:60:31 | user_id | provenance | | -| ArelInjection.rb:59:17:59:22 | call to params | ArelInjection.rb:59:17:59:32 | ...[...] | provenance | | -| ArelInjection.rb:59:17:59:32 | ...[...] | ArelInjection.rb:59:7:59:13 | user_id | provenance | | -| ArelInjection.rb:60:25:60:31 | user_id | ArelInjection.rb:30:29:30:35 | user_id | provenance | AdditionalTaintStep | -| ArelInjection.rb:67:9:67:15 | user_id | ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | provenance | AdditionalTaintStep | -| ArelInjection.rb:67:19:67:24 | call to params | ArelInjection.rb:67:19:67:29 | ...[...] | provenance | | -| ArelInjection.rb:67:19:67:29 | ...[...] | ArelInjection.rb:67:9:67:15 | user_id | provenance | | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:13:5:13:8 | qry1 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:19:5:19:8 | qry2 : String | provenance | AdditionalTaintStep | | PgInjection.rb:6:5:6:8 | name | PgInjection.rb:31:5:31:8 | qry3 : String | provenance | AdditionalTaintStep | @@ -235,37 +209,6 @@ nodes | ArelInjection.rb:4:12:4:29 | ...[...] | semmle.label | ...[...] | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | -| ArelInjection.rb:13:5:13:8 | name | semmle.label | name | -| ArelInjection.rb:13:12:13:17 | call to params | semmle.label | call to params | -| ArelInjection.rb:13:12:13:29 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | -| ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | -| ArelInjection.rb:22:5:22:5 | x | semmle.label | x | -| ArelInjection.rb:22:9:22:14 | call to params | semmle.label | call to params | -| ArelInjection.rb:22:9:22:21 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | semmle.label | "SELECT * FROM users WHERE nam..." | -| ArelInjection.rb:30:29:30:35 | user_id | semmle.label | user_id | -| ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | -| ArelInjection.rb:47:7:47:13 | user_id | semmle.label | user_id | -| ArelInjection.rb:47:17:47:22 | call to params | semmle.label | call to params | -| ArelInjection.rb:47:17:47:32 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:48:7:48:14 | route_id | semmle.label | route_id | -| ArelInjection.rb:48:18:48:38 | call to route_param | semmle.label | call to route_param | -| ArelInjection.rb:49:7:49:10 | auth | semmle.label | auth | -| ArelInjection.rb:49:14:49:20 | call to headers | semmle.label | call to headers | -| ArelInjection.rb:49:14:49:36 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:50:7:50:13 | session | semmle.label | session | -| ArelInjection.rb:50:17:50:23 | call to cookies | semmle.label | call to cookies | -| ArelInjection.rb:50:17:50:36 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | -| ArelInjection.rb:59:7:59:13 | user_id | semmle.label | user_id | -| ArelInjection.rb:59:17:59:22 | call to params | semmle.label | call to params | -| ArelInjection.rb:59:17:59:32 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:60:25:60:31 | user_id | semmle.label | user_id | -| ArelInjection.rb:67:9:67:15 | user_id | semmle.label | user_id | -| ArelInjection.rb:67:19:67:24 | call to params | semmle.label | call to params | -| ArelInjection.rb:67:19:67:29 | ...[...] | semmle.label | ...[...] | -| ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | | PgInjection.rb:6:5:6:8 | name | semmle.label | name | | PgInjection.rb:6:12:6:17 | call to params | semmle.label | call to params | | PgInjection.rb:6:12:6:24 | ...[...] | semmle.label | ...[...] | @@ -323,15 +266,6 @@ subpaths | ActiveRecordInjection.rb:216:38:216:53 | "role = #{...}" | ActiveRecordInjection.rb:222:29:222:34 | call to params | ActiveRecordInjection.rb:216:38:216:53 | "role = #{...}" | This SQL query depends on a $@. | ActiveRecordInjection.rb:222:29:222:34 | call to params | user-provided value | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | -| ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:15:20:15:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | -| ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:13:12:13:17 | call to params | ArelInjection.rb:16:39:16:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:13:12:13:17 | call to params | user-provided value | -| ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:22:9:22:14 | call to params | ArelInjection.rb:23:14:23:52 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:22:9:22:14 | call to params | user-provided value | -| ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:59:17:59:22 | call to params | ArelInjection.rb:32:18:32:60 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:59:17:59:22 | call to params | user-provided value | -| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:47:17:47:22 | call to params | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:47:17:47:22 | call to params | user-provided value | -| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:48:18:48:38 | call to route_param | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:48:18:48:38 | call to route_param | user-provided value | -| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:49:14:49:20 | call to headers | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:49:14:49:20 | call to headers | user-provided value | -| ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:50:17:50:23 | call to cookies | ArelInjection.rb:54:16:54:153 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:50:17:50:23 | call to cookies | user-provided value | -| ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | ArelInjection.rb:67:19:67:24 | call to params | ArelInjection.rb:68:18:68:60 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ArelInjection.rb:67:19:67:24 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:15:21:15:24 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:15:21:15:24 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | | PgInjection.rb:20:22:20:25 | qry2 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:20:22:20:25 | qry2 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | From bfe934118d6767c2b6cf69fc2fe44a20f09f213b Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 9 Sep 2025 15:11:17 +0200 Subject: [PATCH 100/219] Rust: Add web framework tests for Warp --- .../library-tests/dataflow/sources/Cargo.lock | 72 +++++++++++++++++++ .../dataflow/sources/options.yml | 1 + .../dataflow/sources/web_frameworks.rs | 58 +++++++++++++++ 3 files changed, 131 insertions(+) diff --git a/rust/ql/test/library-tests/dataflow/sources/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/Cargo.lock index 5bdbe2c0ebbf..887f9016bc7d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/Cargo.lock +++ b/rust/ql/test/library-tests/dataflow/sources/Cargo.lock @@ -1514,6 +1514,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1680,6 +1690,26 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -2069,6 +2099,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -2297,6 +2333,7 @@ dependencies = [ "serde", "serde_json", "tokio", + "warp", ] [[package]] @@ -2538,6 +2575,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-ident" version = "1.0.18" @@ -2600,6 +2643,35 @@ dependencies = [ "try-lock", ] +[[package]] +name = "warp" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0" +dependencies = [ + "bytes", + "futures-util", + "headers", + "http 1.3.1", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" diff --git a/rust/ql/test/library-tests/dataflow/sources/options.yml b/rust/ql/test/library-tests/dataflow/sources/options.yml index a05a970f7b87..1fc6475170a3 100644 --- a/rust/ql/test/library-tests/dataflow/sources/options.yml +++ b/rust/ql/test/library-tests/dataflow/sources/options.yml @@ -16,3 +16,4 @@ qltest_dependencies: - rustls = { version = "0.23.27" } - futures-rustls = { version = "0.26.0" } - async-std = { version = "1.13.1" } + - warp = { version = "0.4.2", features = ["server"] } diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs index 32cae626593b..757ef3371e13 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs @@ -229,3 +229,61 @@ mod axum_test { // ... } } + +mod warp_test { + use super::sink; + use warp::Filter; + + #[tokio::main] + #[rustfmt::skip] + async fn test_warp() { + // A route with parameter and `map` + let map_route = + warp::path::param().map(|a: String| // $ MISSING: Alert[rust/summary/taint-sources] + { + sink(a); // $ MISSING: hasTaintFlow + + "".to_string() + }); + + // A route with parameter and `then` + let then_route = warp::path::param().then( // $ MISSING: Alert[rust/summary/taint-sources] + |a: String| async move { + sink(a); // $ MISSING: hasTaintFlow + + "".to_string() + }, + ); + + // A route with parameter and `and_then` + let and_then_route = warp::path::param().and_then( // $ MISSING: Alert[rust/summary/taint-sources] + | id: u64 | + async move { + if id != 0 { + sink(id); // $ MISSING: hasTaintFlow + Ok("".to_string()) + } else { + Err(warp::reject::not_found()) + } + }, + ); + + // A route with path, parameter, and `and_then` + let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ MISSING: Alert[rust/summary/taint-sources] + | a: String | + { + sink(a); // $ MISSING: hasTaintFlow + + "".to_string() + }, + ); + + let routes = warp::get().and( + map_route + .or(then_route) + .or(and_then_route) + .or(path_and_map_route), + ); + warp::serve(routes).run(([127, 0, 0, 1], 3030)).await; + } +} From 1af6b37fc4da5b2fbaac504cbaa063de0162950e Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 10 Sep 2025 11:47:32 +0200 Subject: [PATCH 101/219] Rust: Add models for Warp --- .../lib/codeql/rust/frameworks/warp.model.yml | 20 +++++++++++++ .../dataflow/sources/TaintSources.expected | 30 +++++++++++++++++++ .../dataflow/sources/web_frameworks.rs | 6 ++-- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/frameworks/warp.model.yml diff --git a/rust/ql/lib/codeql/rust/frameworks/warp.model.yml b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml new file mode 100644 index 000000000000..c44e58274d1d --- /dev/null +++ b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml @@ -0,0 +1,20 @@ +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[0]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[1]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[2]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[3]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[4]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[0]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[1]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[2]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[3]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[4]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[0]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[1]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[2]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[3]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[4]", "remote", "manual"] \ No newline at end of file diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index 59f1e9b4e0c4..7182c231ba1b 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -100,3 +100,33 @@ | web_frameworks.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs index 757ef3371e13..19df053b0b6d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs @@ -239,7 +239,7 @@ mod warp_test { async fn test_warp() { // A route with parameter and `map` let map_route = - warp::path::param().map(|a: String| // $ MISSING: Alert[rust/summary/taint-sources] + warp::path::param().map(|a: String| // $ Alert[rust/summary/taint-sources] { sink(a); // $ MISSING: hasTaintFlow @@ -247,7 +247,7 @@ mod warp_test { }); // A route with parameter and `then` - let then_route = warp::path::param().then( // $ MISSING: Alert[rust/summary/taint-sources] + let then_route = warp::path::param().then( // $ Alert[rust/summary/taint-sources] |a: String| async move { sink(a); // $ MISSING: hasTaintFlow @@ -256,7 +256,7 @@ mod warp_test { ); // A route with parameter and `and_then` - let and_then_route = warp::path::param().and_then( // $ MISSING: Alert[rust/summary/taint-sources] + let and_then_route = warp::path::param().and_then( // $ Alert[rust/summary/taint-sources] | id: u64 | async move { if id != 0 { From f432498574fe9f7a8e9297957a56c938729b30c7 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 15 Sep 2025 09:38:17 +0200 Subject: [PATCH 102/219] Rust: Use comma notation in Warp model --- .../lib/codeql/rust/frameworks/warp.model.yml | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/warp.model.yml b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml index c44e58274d1d..716f81d4852b 100644 --- a/rust/ql/lib/codeql/rust/frameworks/warp.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml @@ -3,18 +3,6 @@ extensions: pack: codeql/rust-all extensible: sourceModel data: - - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[0]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[1]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[2]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[3]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[4]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[0]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[1]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[2]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[3]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[4]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[0]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[1]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[2]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[3]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[4]", "remote", "manual"] \ No newline at end of file + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[0,1,2,3,4,5,6]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[0,1,2,3,4,5,6]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[0,1,2,3,4,5,6]", "remote", "manual"] \ No newline at end of file From 46cd62bd516a0cc41a2b05d6bd103575890b9443 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 09:17:35 +0200 Subject: [PATCH 103/219] Rust: Use `..` notation in model --- rust/ql/lib/codeql/rust/frameworks/warp.model.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/warp.model.yml b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml index 716f81d4852b..5071b4dea868 100644 --- a/rust/ql/lib/codeql/rust/frameworks/warp.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml @@ -3,6 +3,6 @@ extensions: pack: codeql/rust-all extensible: sourceModel data: - - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[0,1,2,3,4,5,6]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[0,1,2,3,4,5,6]", "remote", "manual"] - - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[0,1,2,3,4,5,6]", "remote", "manual"] \ No newline at end of file + - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[0..7]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[0..7]", "remote", "manual"] + - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[0..7]", "remote", "manual"] \ No newline at end of file From 62c8f28e74562bdfd3fea8713dbd3edeb1f10ee5 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 17 Sep 2025 09:28:54 +0200 Subject: [PATCH 104/219] C#: Bugfix for nullguards for complex patterns. --- .../semmle/code/csharp/controlflow/Guards.qll | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 82ab4b638126..077e95613e68 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -273,6 +273,31 @@ module AbstractValues { private import AbstractValues +/** Gets the value resulting from matching `null` against `pat`. */ +private boolean patternContainsNull(PatternExpr pat) { + pat instanceof NullLiteral and result = true + or + not pat instanceof NullLiteral and + not pat instanceof NotPatternExpr and + not pat instanceof OrPatternExpr and + not pat instanceof AndPatternExpr and + result = false + or + result = patternContainsNull(pat.(NotPatternExpr).getPattern()).booleanNot() + or + exists(OrPatternExpr ope | pat = ope | + result = + patternContainsNull(ope.getLeftOperand()) + .booleanOr(patternContainsNull(ope.getRightOperand())) + ) + or + exists(AndPatternExpr ape | pat = ape | + result = + patternContainsNull(ape.getLeftOperand()) + .booleanAnd(patternContainsNull(ape.getRightOperand())) + ) +} + pragma[nomagic] private predicate typePattern(PatternMatch pm, TypePatternExpr tpe, Type t) { tpe = pm.getPattern() and @@ -362,8 +387,7 @@ class DereferenceableExpr extends Expr { isNull = branch or // E.g. `x is string` or `x is ""` - not pm.getPattern() instanceof NullLiteral and - branch = true and + branch.booleanNot() = patternContainsNull(pm.getPattern()) and isNull = false or exists(TypePatternExpr tpe | From e80c192cf22f5da075f08e9512c2e71fa4806b11 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 10:01:51 +0200 Subject: [PATCH 105/219] Rust: Use async closure instead of async block --- .../test/library-tests/dataflow/sources/web_frameworks.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs index 19df053b0b6d..2489ac2ee238 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs @@ -248,7 +248,7 @@ mod warp_test { // A route with parameter and `then` let then_route = warp::path::param().then( // $ Alert[rust/summary/taint-sources] - |a: String| async move { + async move |a: String| { sink(a); // $ MISSING: hasTaintFlow "".to_string() @@ -257,8 +257,8 @@ mod warp_test { // A route with parameter and `and_then` let and_then_route = warp::path::param().and_then( // $ Alert[rust/summary/taint-sources] - | id: u64 | - async move { + async move | id: u64 | + { if id != 0 { sink(id); // $ MISSING: hasTaintFlow Ok("".to_string()) From 0a3343a07d78bb1c3e5d1cbf2ee01b633247da92 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 28 Jul 2025 17:35:29 +0200 Subject: [PATCH 106/219] Added test cases for v2 and v3 sql injection of dynamodb --- .../Security/CWE-089/untyped/dynamodb.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js new file mode 100644 index 000000000000..0f2d4bbd5fc5 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js @@ -0,0 +1,73 @@ +import {DynamoDBClient, ExecuteStatementCommand, BatchExecuteStatementCommand, DynamoDB} from "@aws-sdk/client-dynamodb"; +const express = require('express'); + +const app = express(); +const region = 'us-east-1'; + +app.post('/partiql/v3/execute', async (req, res) => { + const client = new DynamoDBClient({}); + let maliciousInput = req.body.data; // $ MISSING: Source + + const statement = `SELECT * FROM Users WHERE username = '${maliciousInput}'`; + const command = new ExecuteStatementCommand({ + Statement: statement + }); + await client.send(command); // $ MISSING: Alert + + const updateStatement = "UPDATE Users SET status = 'active' WHERE id = " + maliciousInput; + const updateCommand = new ExecuteStatementCommand({ + Statement: updateStatement + }); + await client.send(updateCommand); // $ MISSING: Alert + + + const batchInput = { + Statements: [{ + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + }, + { + Statement: "UPDATE Users SET role = 'user' WHERE username = bob" + } + ] + }; + + const batchCommand = new BatchExecuteStatementCommand(batchInput); + await client.send(batchCommand); // $ MISSING: Alert + + const batchInput2 = { + Statements: maliciousInput.map(input => ({ + Statement: `SELECT * FROM SensitiveData WHERE username = '${input}'` + })) + }; + + const batchCommand2 = new BatchExecuteStatementCommand(batchInput2); + await client.send(batchCommand2); // $ MISSING: Alert + + const client2 = new DynamoDB({}); + await client2.send(command); // $ MISSING: Alert + await client2.send(batchCommand); // $ MISSING: Alert +}); + +app.post('/partiql/v2/execute', async (req, res) => { + const AWS = require('aws-sdk'); + const dynamodb = new AWS.DynamoDB({ + region: 'us-east-1' + }); + let maliciousInput = req.body.data; // $ MISSING: Source + const params = { + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + }; + + dynamodb.executeStatement(params, function(err, data) {}); // $ MISSING: Alert + const params2 = { + Statements: [{ + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + }, + { + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + } + ] + }; + + dynamodb.batchExecuteStatement(params2, function(err, data) {}); // $ MISSING: Alert +}); From ae2e8b129205b19d76fd560f07ac1ee5a75c825b Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 28 Jul 2025 17:41:34 +0200 Subject: [PATCH 107/219] Added modeling of dynamodb v3 for sql injections --- javascript/ql/lib/ext/dynamodb.model.yml | 19 ++++++++++ .../CWE-089/untyped/SqlInjection.expected | 36 +++++++++++++++++++ .../Security/CWE-089/untyped/dynamodb.js | 8 ++--- 3 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 javascript/ql/lib/ext/dynamodb.model.yml diff --git a/javascript/ql/lib/ext/dynamodb.model.yml b/javascript/ql/lib/ext/dynamodb.model.yml new file mode 100644 index 000000000000..218ae7f217e3 --- /dev/null +++ b/javascript/ql/lib/ext/dynamodb.model.yml @@ -0,0 +1,19 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["DynamoDBClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"] + - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"] + + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["DynamoDBClientV3", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 9405e075e332..880be7d4383a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -1,4 +1,7 @@ #select +| dynamodb.js:15:23:15:29 | command | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:15:23:15:29 | command | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | +| dynamodb.js:21:23:21:35 | updateCommand | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:21:23:21:35 | updateCommand | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | +| dynamodb.js:47:24:47:30 | command | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:47:24:47:30 | command | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | | graphql.js:9:34:19:5 | `\\n ... }\\n ` | graphql.js:8:16:8:28 | req.params.id | graphql.js:9:34:19:5 | `\\n ... }\\n ` | This query string depends on a $@. | graphql.js:8:16:8:28 | req.params.id | user-provided value | | graphql.js:26:30:26:40 | `foo ${id}` | graphql.js:25:16:25:28 | req.params.id | graphql.js:26:30:26:40 | `foo ${id}` | This query string depends on a $@. | graphql.js:25:16:25:28 | req.params.id | user-provided value | | graphql.js:29:32:29:42 | `foo ${id}` | graphql.js:25:16:25:28 | req.params.id | graphql.js:29:32:29:42 | `foo ${id}` | This query string depends on a $@. | graphql.js:25:16:25:28 | req.params.id | user-provided value | @@ -137,6 +140,22 @@ | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | This query string depends on a $@. | tst4.js:8:46:8:60 | $routeParams.id | user-provided value | | tst.js:10:10:10:64 | 'SELECT ... d + '"' | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | This query string depends on a $@. | tst.js:10:46:10:58 | req.params.id | user-provided value | edges +| dynamodb.js:9:9:9:22 | maliciousInput | dynamodb.js:11:64:11:77 | maliciousInput | provenance | | +| dynamodb.js:9:9:9:22 | maliciousInput | dynamodb.js:17:80:17:93 | maliciousInput | provenance | | +| dynamodb.js:9:26:9:33 | req.body | dynamodb.js:9:9:9:22 | maliciousInput | provenance | | +| dynamodb.js:11:11:11:19 | statement | dynamodb.js:13:20:13:28 | statement | provenance | | +| dynamodb.js:11:64:11:77 | maliciousInput | dynamodb.js:11:11:11:19 | statement | provenance | | +| dynamodb.js:12:11:12:17 | command | dynamodb.js:15:23:15:29 | command | provenance | | +| dynamodb.js:12:11:12:17 | command | dynamodb.js:47:24:47:30 | command | provenance | | +| dynamodb.js:12:21:14:6 | new Exe ... \\n }) | dynamodb.js:12:11:12:17 | command | provenance | | +| dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | dynamodb.js:12:21:14:6 | new Exe ... \\n }) | provenance | | +| dynamodb.js:13:20:13:28 | statement | dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | provenance | | +| dynamodb.js:17:11:17:25 | updateStatement | dynamodb.js:19:20:19:34 | updateStatement | provenance | | +| dynamodb.js:17:80:17:93 | maliciousInput | dynamodb.js:17:11:17:25 | updateStatement | provenance | | +| dynamodb.js:18:11:18:23 | updateCommand | dynamodb.js:21:23:21:35 | updateCommand | provenance | | +| dynamodb.js:18:27:20:6 | new Exe ... \\n }) | dynamodb.js:18:11:18:23 | updateCommand | provenance | | +| dynamodb.js:18:55:20:5 | {\\n ... t\\n } [Statement] | dynamodb.js:18:27:20:6 | new Exe ... \\n }) | provenance | | +| dynamodb.js:19:20:19:34 | updateStatement | dynamodb.js:18:55:20:5 | {\\n ... t\\n } [Statement] | provenance | | | graphql.js:8:11:8:12 | id | graphql.js:11:46:11:47 | id | provenance | | | graphql.js:8:16:8:28 | req.params.id | graphql.js:8:11:8:12 | id | provenance | | | graphql.js:11:46:11:47 | id | graphql.js:9:34:19:5 | `\\n ... }\\n ` | provenance | | @@ -518,6 +537,23 @@ edges | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | provenance | | | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | provenance | | nodes +| dynamodb.js:9:9:9:22 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:9:26:9:33 | req.body | semmle.label | req.body | +| dynamodb.js:11:11:11:19 | statement | semmle.label | statement | +| dynamodb.js:11:64:11:77 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:12:11:12:17 | command | semmle.label | command | +| dynamodb.js:12:21:14:6 | new Exe ... \\n }) | semmle.label | new Exe ... \\n }) | +| dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | semmle.label | {\\n ... t\\n } [Statement] | +| dynamodb.js:13:20:13:28 | statement | semmle.label | statement | +| dynamodb.js:15:23:15:29 | command | semmle.label | command | +| dynamodb.js:17:11:17:25 | updateStatement | semmle.label | updateStatement | +| dynamodb.js:17:80:17:93 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:18:11:18:23 | updateCommand | semmle.label | updateCommand | +| dynamodb.js:18:27:20:6 | new Exe ... \\n }) | semmle.label | new Exe ... \\n }) | +| dynamodb.js:18:55:20:5 | {\\n ... t\\n } [Statement] | semmle.label | {\\n ... t\\n } [Statement] | +| dynamodb.js:19:20:19:34 | updateStatement | semmle.label | updateStatement | +| dynamodb.js:21:23:21:35 | updateCommand | semmle.label | updateCommand | +| dynamodb.js:47:24:47:30 | command | semmle.label | command | | graphql.js:8:11:8:12 | id | semmle.label | id | | graphql.js:8:16:8:28 | req.params.id | semmle.label | req.params.id | | graphql.js:9:34:19:5 | `\\n ... }\\n ` | semmle.label | `\\n ... }\\n ` | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js index 0f2d4bbd5fc5..8b4eddc4bd76 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js @@ -6,19 +6,19 @@ const region = 'us-east-1'; app.post('/partiql/v3/execute', async (req, res) => { const client = new DynamoDBClient({}); - let maliciousInput = req.body.data; // $ MISSING: Source + let maliciousInput = req.body.data; // $ Source const statement = `SELECT * FROM Users WHERE username = '${maliciousInput}'`; const command = new ExecuteStatementCommand({ Statement: statement }); - await client.send(command); // $ MISSING: Alert + await client.send(command); // $ Alert const updateStatement = "UPDATE Users SET status = 'active' WHERE id = " + maliciousInput; const updateCommand = new ExecuteStatementCommand({ Statement: updateStatement }); - await client.send(updateCommand); // $ MISSING: Alert + await client.send(updateCommand); // $ Alert const batchInput = { @@ -44,7 +44,7 @@ app.post('/partiql/v3/execute', async (req, res) => { await client.send(batchCommand2); // $ MISSING: Alert const client2 = new DynamoDB({}); - await client2.send(command); // $ MISSING: Alert + await client2.send(command); // $ Alert await client2.send(batchCommand); // $ MISSING: Alert }); From 06ab918985399b154fc0ad40ab4834d4c8ae742f Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 28 Jul 2025 17:53:16 +0200 Subject: [PATCH 108/219] Added modeling for V2 of dynamoDB --- javascript/ql/lib/ext/dynamodb.model.yml | 3 +++ .../CWE-089/untyped/SqlInjection.expected | 18 ++++++++++++++++++ .../Security/CWE-089/untyped/dynamodb.js | 12 ++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/ext/dynamodb.model.yml b/javascript/ql/lib/ext/dynamodb.model.yml index 218ae7f217e3..ddbf6cc3eee1 100644 --- a/javascript/ql/lib/ext/dynamodb.model.yml +++ b/javascript/ql/lib/ext/dynamodb.model.yml @@ -4,6 +4,8 @@ extensions: extensible: sinkModel data: - ["DynamoDBClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"] + - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"] - addsTo: pack: codeql/javascript-all @@ -17,3 +19,4 @@ extensions: extensible: typeModel data: - ["DynamoDBClientV3", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] + - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 880be7d4383a..87445c661626 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -2,6 +2,9 @@ | dynamodb.js:15:23:15:29 | command | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:15:23:15:29 | command | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | | dynamodb.js:21:23:21:35 | updateCommand | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:21:23:21:35 | updateCommand | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | | dynamodb.js:47:24:47:30 | command | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:47:24:47:30 | command | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | +| dynamodb.js:58:20:58:77 | `SELECT ... nput}'` | dynamodb.js:56:26:56:33 | req.body | dynamodb.js:58:20:58:77 | `SELECT ... nput}'` | This query string depends on a $@. | dynamodb.js:56:26:56:33 | req.body | user-provided value | +| dynamodb.js:64:28:64:85 | `SELECT ... nput}'` | dynamodb.js:56:26:56:33 | req.body | dynamodb.js:64:28:64:85 | `SELECT ... nput}'` | This query string depends on a $@. | dynamodb.js:56:26:56:33 | req.body | user-provided value | +| dynamodb.js:67:28:67:85 | `SELECT ... nput}'` | dynamodb.js:56:26:56:33 | req.body | dynamodb.js:67:28:67:85 | `SELECT ... nput}'` | This query string depends on a $@. | dynamodb.js:56:26:56:33 | req.body | user-provided value | | graphql.js:9:34:19:5 | `\\n ... }\\n ` | graphql.js:8:16:8:28 | req.params.id | graphql.js:9:34:19:5 | `\\n ... }\\n ` | This query string depends on a $@. | graphql.js:8:16:8:28 | req.params.id | user-provided value | | graphql.js:26:30:26:40 | `foo ${id}` | graphql.js:25:16:25:28 | req.params.id | graphql.js:26:30:26:40 | `foo ${id}` | This query string depends on a $@. | graphql.js:25:16:25:28 | req.params.id | user-provided value | | graphql.js:29:32:29:42 | `foo ${id}` | graphql.js:25:16:25:28 | req.params.id | graphql.js:29:32:29:42 | `foo ${id}` | This query string depends on a $@. | graphql.js:25:16:25:28 | req.params.id | user-provided value | @@ -156,6 +159,13 @@ edges | dynamodb.js:18:27:20:6 | new Exe ... \\n }) | dynamodb.js:18:11:18:23 | updateCommand | provenance | | | dynamodb.js:18:55:20:5 | {\\n ... t\\n } [Statement] | dynamodb.js:18:27:20:6 | new Exe ... \\n }) | provenance | | | dynamodb.js:19:20:19:34 | updateStatement | dynamodb.js:18:55:20:5 | {\\n ... t\\n } [Statement] | provenance | | +| dynamodb.js:56:9:56:22 | maliciousInput | dynamodb.js:58:61:58:74 | maliciousInput | provenance | | +| dynamodb.js:56:9:56:22 | maliciousInput | dynamodb.js:64:69:64:82 | maliciousInput | provenance | | +| dynamodb.js:56:9:56:22 | maliciousInput | dynamodb.js:67:69:67:82 | maliciousInput | provenance | | +| dynamodb.js:56:26:56:33 | req.body | dynamodb.js:56:9:56:22 | maliciousInput | provenance | | +| dynamodb.js:58:61:58:74 | maliciousInput | dynamodb.js:58:20:58:77 | `SELECT ... nput}'` | provenance | | +| dynamodb.js:64:69:64:82 | maliciousInput | dynamodb.js:64:28:64:85 | `SELECT ... nput}'` | provenance | | +| dynamodb.js:67:69:67:82 | maliciousInput | dynamodb.js:67:28:67:85 | `SELECT ... nput}'` | provenance | | | graphql.js:8:11:8:12 | id | graphql.js:11:46:11:47 | id | provenance | | | graphql.js:8:16:8:28 | req.params.id | graphql.js:8:11:8:12 | id | provenance | | | graphql.js:11:46:11:47 | id | graphql.js:9:34:19:5 | `\\n ... }\\n ` | provenance | | @@ -554,6 +564,14 @@ nodes | dynamodb.js:19:20:19:34 | updateStatement | semmle.label | updateStatement | | dynamodb.js:21:23:21:35 | updateCommand | semmle.label | updateCommand | | dynamodb.js:47:24:47:30 | command | semmle.label | command | +| dynamodb.js:56:9:56:22 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:56:26:56:33 | req.body | semmle.label | req.body | +| dynamodb.js:58:20:58:77 | `SELECT ... nput}'` | semmle.label | `SELECT ... nput}'` | +| dynamodb.js:58:61:58:74 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:64:28:64:85 | `SELECT ... nput}'` | semmle.label | `SELECT ... nput}'` | +| dynamodb.js:64:69:64:82 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:67:28:67:85 | `SELECT ... nput}'` | semmle.label | `SELECT ... nput}'` | +| dynamodb.js:67:69:67:82 | maliciousInput | semmle.label | maliciousInput | | graphql.js:8:11:8:12 | id | semmle.label | id | | graphql.js:8:16:8:28 | req.params.id | semmle.label | req.params.id | | graphql.js:9:34:19:5 | `\\n ... }\\n ` | semmle.label | `\\n ... }\\n ` | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js index 8b4eddc4bd76..ef9e3c3005ce 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/dynamodb.js @@ -53,21 +53,21 @@ app.post('/partiql/v2/execute', async (req, res) => { const dynamodb = new AWS.DynamoDB({ region: 'us-east-1' }); - let maliciousInput = req.body.data; // $ MISSING: Source + let maliciousInput = req.body.data; // $ Source const params = { - Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` // $ Alert }; - dynamodb.executeStatement(params, function(err, data) {}); // $ MISSING: Alert + dynamodb.executeStatement(params, function(err, data) {}); const params2 = { Statements: [{ - Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` // $ Alert }, { - Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` + Statement: `SELECT * FROM Users WHERE username = '${maliciousInput}'` // $ Alert } ] }; - dynamodb.batchExecuteStatement(params2, function(err, data) {}); // $ MISSING: Alert + dynamodb.batchExecuteStatement(params2, function(err, data) {}); }); From 1149617f7b3f0760ceab4c41d8425695206cd6c9 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 28 Jul 2025 17:58:05 +0200 Subject: [PATCH 109/219] Added change note --- javascript/ql/lib/change-notes/2025-07-28-dynamodb.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2025-07-28-dynamodb.md diff --git a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md new file mode 100644 index 000000000000..8cef0a4ec0f6 --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb` packages for DynamoDB PartiQL operations. From 5e6118ef3f95c13a86c43cfe5cb9a6093e76d2be Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 09:50:46 +0200 Subject: [PATCH 110/219] Added test cases for client-s v2 and v3 sql injection --- .../Security/CWE-089/untyped/clients3.js | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js new file mode 100644 index 000000000000..58cada55e721 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js @@ -0,0 +1,44 @@ +const { S3Client, SelectObjectContentCommand } = require("@aws-sdk/client-s3"); +const AWS = require('aws-sdk'); +const express = require('express'); +const bodyParser = require('body-parser'); + +const app = express(); +app.use(bodyParser.json()); + +app.post('/client/v3/execute', async (req, res) => { + let maliciousInput = req.body.filter; // $ MISSING: Source + const client = new S3Client({ region: "us-east-1" }); + const params = { + Bucket: "my-bucket", + Key: "data.csv", + ExpressionType: "SQL", + Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, + }; + await client.send(new SelectObjectContentCommand(params)); // $ MISSING: Alert + res.end(); +}); + +app.post('/client/v2/execute', async (req, res) => { + let maliciousInput = req.body.filter; // $ MISSING: Source + const s3 = new AWS.S3({ region: "us-east-1" }); + const params = { + Bucket: "my-bucket", + Key: "data.csv", + ExpressionType: "SQL", + Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, // $ MISSING: Alert + }; + await s3.selectObjectContent(params).promise(); + res.end(); + + const params1 = { + Bucket: "my-bucket", + Key: "data.csv", + ExpressionType: "SQL", + Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, // $ MISSING: Alert + }; + + s3.selectObjectContent(params1, (err, data) => { + res.end(); + }); +}); From ee1af432fe2a62a99f91918faa95a2c28836023b Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 09:52:49 +0200 Subject: [PATCH 111/219] Added modeling of client-s3 v2 and v3 --- javascript/ql/lib/ext/client-s3.model.yml | 20 +++++++++ .../CWE-089/untyped/SqlInjection.expected | 44 +++++++++++++++++++ .../Security/CWE-089/untyped/clients3.js | 10 ++--- 3 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 javascript/ql/lib/ext/client-s3.model.yml diff --git a/javascript/ql/lib/ext/client-s3.model.yml b/javascript/ql/lib/ext/client-s3.model.yml new file mode 100644 index 000000000000..2d81b3040e97 --- /dev/null +++ b/javascript/ql/lib/ext/client-s3.model.yml @@ -0,0 +1,20 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["S3ClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] + + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"] + + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["S3ClientV3", "@aws-sdk/client-s3", "Member[S3Client]"] + - ["S3ClientV2", "aws-sdk", "Member[S3]"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 87445c661626..7f357c671149 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -1,4 +1,7 @@ #select +| clients3.js:18:23:18:60 | new Sel ... params) | clients3.js:10:26:10:33 | req.body | clients3.js:18:23:18:60 | new Sel ... params) | This query string depends on a $@. | clients3.js:10:26:10:33 | req.body | user-provided value | +| clients3.js:29:21:29:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:29:21:29:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value | +| clients3.js:38:21:38:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:38:21:38:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value | | dynamodb.js:15:23:15:29 | command | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:15:23:15:29 | command | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | | dynamodb.js:21:23:21:35 | updateCommand | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:21:23:21:35 | updateCommand | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | | dynamodb.js:47:24:47:30 | command | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:47:24:47:30 | command | This query string depends on a $@. | dynamodb.js:9:26:9:33 | req.body | user-provided value | @@ -143,6 +146,7 @@ | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | This query string depends on a $@. | tst4.js:8:46:8:60 | $routeParams.id | user-provided value | | tst.js:10:10:10:64 | 'SELECT ... d + '"' | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | This query string depends on a $@. | tst.js:10:46:10:58 | req.params.id | user-provided value | edges +<<<<<<< HEAD | dynamodb.js:9:9:9:22 | maliciousInput | dynamodb.js:11:64:11:77 | maliciousInput | provenance | | | dynamodb.js:9:9:9:22 | maliciousInput | dynamodb.js:17:80:17:93 | maliciousInput | provenance | | | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:9:9:9:22 | maliciousInput | provenance | | @@ -151,6 +155,28 @@ edges | dynamodb.js:12:11:12:17 | command | dynamodb.js:15:23:15:29 | command | provenance | | | dynamodb.js:12:11:12:17 | command | dynamodb.js:47:24:47:30 | command | provenance | | | dynamodb.js:12:21:14:6 | new Exe ... \\n }) | dynamodb.js:12:11:12:17 | command | provenance | | +======= +| clients3.js:10:9:10:40 | maliciousInput | clients3.js:16:55:16:68 | maliciousInput | provenance | | +| clients3.js:10:26:10:33 | req.body | clients3.js:10:9:10:40 | maliciousInput | provenance | | +| clients3.js:12:11:17:5 | params [Expression] | clients3.js:18:54:18:59 | params [Expression] | provenance | | +| clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | clients3.js:12:11:17:5 | params [Expression] | provenance | | +| clients3.js:16:21:16:68 | "SELECT ... usInput | clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | provenance | | +| clients3.js:16:55:16:68 | maliciousInput | clients3.js:16:21:16:68 | "SELECT ... usInput | provenance | | +| clients3.js:18:54:18:59 | params [Expression] | clients3.js:18:23:18:60 | new Sel ... params) | provenance | | +| clients3.js:23:9:23:40 | maliciousInput | clients3.js:29:55:29:68 | maliciousInput | provenance | | +| clients3.js:23:9:23:40 | maliciousInput | clients3.js:38:55:38:68 | maliciousInput | provenance | | +| clients3.js:23:26:23:33 | req.body | clients3.js:23:9:23:40 | maliciousInput | provenance | | +| clients3.js:29:55:29:68 | maliciousInput | clients3.js:29:21:29:68 | "SELECT ... usInput | provenance | | +| clients3.js:38:55:38:68 | maliciousInput | clients3.js:38:21:38:68 | "SELECT ... usInput | provenance | | +| dynamodb.js:9:9:9:38 | maliciousInput | dynamodb.js:11:64:11:77 | maliciousInput | provenance | | +| dynamodb.js:9:9:9:38 | maliciousInput | dynamodb.js:17:80:17:93 | maliciousInput | provenance | | +| dynamodb.js:9:26:9:33 | req.body | dynamodb.js:9:9:9:38 | maliciousInput | provenance | | +| dynamodb.js:11:11:11:80 | statement | dynamodb.js:13:20:13:28 | statement | provenance | | +| dynamodb.js:11:64:11:77 | maliciousInput | dynamodb.js:11:11:11:80 | statement | provenance | | +| dynamodb.js:12:11:14:6 | command | dynamodb.js:15:23:15:29 | command | provenance | | +| dynamodb.js:12:11:14:6 | command | dynamodb.js:47:24:47:30 | command | provenance | | +| dynamodb.js:12:21:14:6 | new Exe ... \\n }) | dynamodb.js:12:11:14:6 | command | provenance | | +>>>>>>> 1af289cd7d4 (Added modeling of client-s3 v2 and v3) | dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | dynamodb.js:12:21:14:6 | new Exe ... \\n }) | provenance | | | dynamodb.js:13:20:13:28 | statement | dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | provenance | | | dynamodb.js:17:11:17:25 | updateStatement | dynamodb.js:19:20:19:34 | updateStatement | provenance | | @@ -547,7 +573,25 @@ edges | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | provenance | | | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | provenance | | nodes +<<<<<<< HEAD | dynamodb.js:9:9:9:22 | maliciousInput | semmle.label | maliciousInput | +======= +| clients3.js:10:9:10:40 | maliciousInput | semmle.label | maliciousInput | +| clients3.js:10:26:10:33 | req.body | semmle.label | req.body | +| clients3.js:12:11:17:5 | params [Expression] | semmle.label | params [Expression] | +| clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | semmle.label | {\\n ... ,\\n } [Expression] | +| clients3.js:16:21:16:68 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | +| clients3.js:16:55:16:68 | maliciousInput | semmle.label | maliciousInput | +| clients3.js:18:23:18:60 | new Sel ... params) | semmle.label | new Sel ... params) | +| clients3.js:18:54:18:59 | params [Expression] | semmle.label | params [Expression] | +| clients3.js:23:9:23:40 | maliciousInput | semmle.label | maliciousInput | +| clients3.js:23:26:23:33 | req.body | semmle.label | req.body | +| clients3.js:29:21:29:68 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | +| clients3.js:29:55:29:68 | maliciousInput | semmle.label | maliciousInput | +| clients3.js:38:21:38:68 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | +| clients3.js:38:55:38:68 | maliciousInput | semmle.label | maliciousInput | +| dynamodb.js:9:9:9:38 | maliciousInput | semmle.label | maliciousInput | +>>>>>>> 1af289cd7d4 (Added modeling of client-s3 v2 and v3) | dynamodb.js:9:26:9:33 | req.body | semmle.label | req.body | | dynamodb.js:11:11:11:19 | statement | semmle.label | statement | | dynamodb.js:11:64:11:77 | maliciousInput | semmle.label | maliciousInput | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js index 58cada55e721..9c6bce426575 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/clients3.js @@ -7,7 +7,7 @@ const app = express(); app.use(bodyParser.json()); app.post('/client/v3/execute', async (req, res) => { - let maliciousInput = req.body.filter; // $ MISSING: Source + let maliciousInput = req.body.filter; // $ Source const client = new S3Client({ region: "us-east-1" }); const params = { Bucket: "my-bucket", @@ -15,18 +15,18 @@ app.post('/client/v3/execute', async (req, res) => { ExpressionType: "SQL", Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, }; - await client.send(new SelectObjectContentCommand(params)); // $ MISSING: Alert + await client.send(new SelectObjectContentCommand(params)); // $ Alert res.end(); }); app.post('/client/v2/execute', async (req, res) => { - let maliciousInput = req.body.filter; // $ MISSING: Source + let maliciousInput = req.body.filter; // $ Source const s3 = new AWS.S3({ region: "us-east-1" }); const params = { Bucket: "my-bucket", Key: "data.csv", ExpressionType: "SQL", - Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, // $ MISSING: Alert + Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, // $ Alert }; await s3.selectObjectContent(params).promise(); res.end(); @@ -35,7 +35,7 @@ app.post('/client/v2/execute', async (req, res) => { Bucket: "my-bucket", Key: "data.csv", ExpressionType: "SQL", - Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, // $ MISSING: Alert + Expression: "SELECT * FROM S3Object WHERE " + maliciousInput, // $ Alert }; s3.selectObjectContent(params1, (err, data) => { From af97b0edc2274a7c86bce65775de29fdb0c0952e Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 13:13:45 +0200 Subject: [PATCH 112/219] Added test cases for athena v2 and v3 for sql injections --- .../Security/CWE-089/untyped/athena.js | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js new file mode 100644 index 000000000000..00ef4a9f86fa --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js @@ -0,0 +1,72 @@ +const { AthenaClient, StartQueryExecutionCommand, CreateNamedQueryCommand, UpdateNamedQueryCommand } = require("@aws-sdk/client-athena"); +const AWS = require('aws-sdk'); +const express = require('express'); +const bodyParser = require('body-parser'); +const app = express(); +app.use(bodyParser.json()); + +app.post('/v3/athena/all', async (req, res) => { + const userQuery = req.body.query; // $ MISSING: Source + + const client = new AthenaClient({ region: "us-east-1" }); + + const params1 = { + QueryString: "SQL" + userQuery, + QueryExecutionContext: { Database: "default" }, + ResultConfiguration: { OutputLocation: "s3://my-results/" } + }; + const p = new StartQueryExecutionCommand(params1); + await client.send(p); // $ MISSING: Alert + + const params2 = { + Name: "user_query", + Database: "default", + QueryString: userQuery, + Description: "User-provided query" + }; + await client.send(new CreateNamedQueryCommand(params2)); // $ MISSING: Alert -- This only stores query to database, not executed + + const params3 = { + NamedQueryId: "namedQueryId", + Name: "user_query_updated", + Database: "default", + QueryString: userQuery, + Description: "Updated user-provided query" + }; + await client.send(new UpdateNamedQueryCommand(params3)); // $ MISSING: Alert -- This only stores query to database, not executed + + res.end(); +}); + + +app.post('/v2/athena/all', async (req, res) => { + const userQuery = req.body.query; // $ MISSING: Source + + const athena = new AWS.Athena({ region: "us-east-1" }); + + const params1 = { + QueryString: userQuery, // $ MISSING: Alert + QueryExecutionContext: { Database: "default" }, + ResultConfiguration: { OutputLocation: "s3://my-results/" } + }; + await athena.startQueryExecution(params1).promise(); + + const params2 = { + Name: "user_query", + Database: "default", + QueryString: userQuery, // $ MISSING: Alert -- This only stores query to database, not executed + Description: "User-provided query" + }; + await athena.createNamedQuery(params2).promise(); + + const params3 = { + NamedQueryId: "namedQueryId", + Name: "user_query_updated", + Database: "default", + QueryString: userQuery, // $ MISSING: Alert -- This only stores query to database, not executed + Description: "Updated user-provided query" + }; + await athena.updateNamedQuery(params3).promise(); + + res.end(); +}); From 0e6bac73a70d9fd0423cbf72621d9091085b394c Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 13:45:11 +0200 Subject: [PATCH 113/219] Added modeling of athena v2 and v3 for sql injections --- javascript/ql/lib/ext/athena.model.yml | 21 ++++ .../CWE-089/untyped/SqlInjection.expected | 101 ++++++++++++------ .../Security/CWE-089/untyped/athena.js | 16 +-- 3 files changed, 99 insertions(+), 39 deletions(-) create mode 100644 javascript/ql/lib/ext/athena.model.yml diff --git a/javascript/ql/lib/ext/athena.model.yml b/javascript/ql/lib/ext/athena.model.yml new file mode 100644 index 000000000000..5101d7047e3e --- /dev/null +++ b/javascript/ql/lib/ext/athena.model.yml @@ -0,0 +1,21 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["AthenaClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] + + + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"] + + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["AthenaClientV3", "@aws-sdk/client-athena", "Member[AthenaClient]"] + - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 7f357c671149..edbb27bc84bd 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -1,4 +1,10 @@ #select +| athena.js:19:23:19:23 | p | athena.js:9:23:9:30 | req.body | athena.js:19:23:19:23 | p | This query string depends on a $@. | athena.js:9:23:9:30 | req.body | user-provided value | +| athena.js:27:23:27:58 | new Cre ... arams2) | athena.js:9:23:9:30 | req.body | athena.js:27:23:27:58 | new Cre ... arams2) | This query string depends on a $@. | athena.js:9:23:9:30 | req.body | user-provided value | +| athena.js:36:23:36:58 | new Upd ... arams3) | athena.js:9:23:9:30 | req.body | athena.js:36:23:36:58 | new Upd ... arams3) | This query string depends on a $@. | athena.js:9:23:9:30 | req.body | user-provided value | +| athena.js:48:22:48:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:48:22:48:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value | +| athena.js:57:22:57:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:57:22:57:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value | +| athena.js:66:22:66:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:66:22:66:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value | | clients3.js:18:23:18:60 | new Sel ... params) | clients3.js:10:26:10:33 | req.body | clients3.js:18:23:18:60 | new Sel ... params) | This query string depends on a $@. | clients3.js:10:26:10:33 | req.body | user-provided value | | clients3.js:29:21:29:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:29:21:29:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value | | clients3.js:38:21:38:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:38:21:38:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value | @@ -146,7 +152,41 @@ | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | This query string depends on a $@. | tst4.js:8:46:8:60 | $routeParams.id | user-provided value | | tst.js:10:10:10:64 | 'SELECT ... d + '"' | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | This query string depends on a $@. | tst.js:10:46:10:58 | req.params.id | user-provided value | edges -<<<<<<< HEAD +| athena.js:9:11:9:19 | userQuery | athena.js:14:30:14:38 | userQuery | provenance | | +| athena.js:9:11:9:19 | userQuery | athena.js:24:22:24:30 | userQuery | provenance | | +| athena.js:9:11:9:19 | userQuery | athena.js:33:22:33:30 | userQuery | provenance | | +| athena.js:9:23:9:30 | req.body | athena.js:9:11:9:19 | userQuery | provenance | | +| athena.js:13:11:13:17 | params1 [QueryString] | athena.js:18:46:18:52 | params1 [QueryString] | provenance | | +| athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | athena.js:13:11:13:17 | params1 [QueryString] | provenance | | +| athena.js:14:22:14:38 | "SQL" + userQuery | athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | provenance | | +| athena.js:14:30:14:38 | userQuery | athena.js:14:22:14:38 | "SQL" + userQuery | provenance | | +| athena.js:18:11:18:11 | p | athena.js:19:23:19:23 | p | provenance | | +| athena.js:18:15:18:53 | new Sta ... arams1) | athena.js:18:11:18:11 | p | provenance | | +| athena.js:18:46:18:52 | params1 [QueryString] | athena.js:18:15:18:53 | new Sta ... arams1) | provenance | | +| athena.js:21:11:21:17 | params2 [QueryString] | athena.js:27:51:27:57 | params2 [QueryString] | provenance | | +| athena.js:21:21:26:5 | {\\n ... "\\n } [QueryString] | athena.js:21:11:21:17 | params2 [QueryString] | provenance | | +| athena.js:24:22:24:30 | userQuery | athena.js:21:21:26:5 | {\\n ... "\\n } [QueryString] | provenance | | +| athena.js:27:51:27:57 | params2 [QueryString] | athena.js:27:23:27:58 | new Cre ... arams2) | provenance | | +| athena.js:29:11:29:17 | params3 [QueryString] | athena.js:36:51:36:57 | params3 [QueryString] | provenance | | +| athena.js:29:21:35:5 | {\\n ... "\\n } [QueryString] | athena.js:29:11:29:17 | params3 [QueryString] | provenance | | +| athena.js:33:22:33:30 | userQuery | athena.js:29:21:35:5 | {\\n ... "\\n } [QueryString] | provenance | | +| athena.js:36:51:36:57 | params3 [QueryString] | athena.js:36:23:36:58 | new Upd ... arams3) | provenance | | +| athena.js:43:11:43:19 | userQuery | athena.js:48:22:48:30 | userQuery | provenance | | +| athena.js:43:11:43:19 | userQuery | athena.js:57:22:57:30 | userQuery | provenance | | +| athena.js:43:11:43:19 | userQuery | athena.js:66:22:66:30 | userQuery | provenance | | +| athena.js:43:23:43:30 | req.body | athena.js:43:11:43:19 | userQuery | provenance | | +| clients3.js:10:9:10:22 | maliciousInput | clients3.js:16:55:16:68 | maliciousInput | provenance | | +| clients3.js:10:26:10:33 | req.body | clients3.js:10:9:10:22 | maliciousInput | provenance | | +| clients3.js:12:11:12:16 | params [Expression] | clients3.js:18:54:18:59 | params [Expression] | provenance | | +| clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | clients3.js:12:11:12:16 | params [Expression] | provenance | | +| clients3.js:16:21:16:68 | "SELECT ... usInput | clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | provenance | | +| clients3.js:16:55:16:68 | maliciousInput | clients3.js:16:21:16:68 | "SELECT ... usInput | provenance | | +| clients3.js:18:54:18:59 | params [Expression] | clients3.js:18:23:18:60 | new Sel ... params) | provenance | | +| clients3.js:23:9:23:22 | maliciousInput | clients3.js:29:55:29:68 | maliciousInput | provenance | | +| clients3.js:23:9:23:22 | maliciousInput | clients3.js:38:55:38:68 | maliciousInput | provenance | | +| clients3.js:23:26:23:33 | req.body | clients3.js:23:9:23:22 | maliciousInput | provenance | | +| clients3.js:29:55:29:68 | maliciousInput | clients3.js:29:21:29:68 | "SELECT ... usInput | provenance | | +| clients3.js:38:55:38:68 | maliciousInput | clients3.js:38:21:38:68 | "SELECT ... usInput | provenance | | | dynamodb.js:9:9:9:22 | maliciousInput | dynamodb.js:11:64:11:77 | maliciousInput | provenance | | | dynamodb.js:9:9:9:22 | maliciousInput | dynamodb.js:17:80:17:93 | maliciousInput | provenance | | | dynamodb.js:9:26:9:33 | req.body | dynamodb.js:9:9:9:22 | maliciousInput | provenance | | @@ -155,28 +195,6 @@ edges | dynamodb.js:12:11:12:17 | command | dynamodb.js:15:23:15:29 | command | provenance | | | dynamodb.js:12:11:12:17 | command | dynamodb.js:47:24:47:30 | command | provenance | | | dynamodb.js:12:21:14:6 | new Exe ... \\n }) | dynamodb.js:12:11:12:17 | command | provenance | | -======= -| clients3.js:10:9:10:40 | maliciousInput | clients3.js:16:55:16:68 | maliciousInput | provenance | | -| clients3.js:10:26:10:33 | req.body | clients3.js:10:9:10:40 | maliciousInput | provenance | | -| clients3.js:12:11:17:5 | params [Expression] | clients3.js:18:54:18:59 | params [Expression] | provenance | | -| clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | clients3.js:12:11:17:5 | params [Expression] | provenance | | -| clients3.js:16:21:16:68 | "SELECT ... usInput | clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | provenance | | -| clients3.js:16:55:16:68 | maliciousInput | clients3.js:16:21:16:68 | "SELECT ... usInput | provenance | | -| clients3.js:18:54:18:59 | params [Expression] | clients3.js:18:23:18:60 | new Sel ... params) | provenance | | -| clients3.js:23:9:23:40 | maliciousInput | clients3.js:29:55:29:68 | maliciousInput | provenance | | -| clients3.js:23:9:23:40 | maliciousInput | clients3.js:38:55:38:68 | maliciousInput | provenance | | -| clients3.js:23:26:23:33 | req.body | clients3.js:23:9:23:40 | maliciousInput | provenance | | -| clients3.js:29:55:29:68 | maliciousInput | clients3.js:29:21:29:68 | "SELECT ... usInput | provenance | | -| clients3.js:38:55:38:68 | maliciousInput | clients3.js:38:21:38:68 | "SELECT ... usInput | provenance | | -| dynamodb.js:9:9:9:38 | maliciousInput | dynamodb.js:11:64:11:77 | maliciousInput | provenance | | -| dynamodb.js:9:9:9:38 | maliciousInput | dynamodb.js:17:80:17:93 | maliciousInput | provenance | | -| dynamodb.js:9:26:9:33 | req.body | dynamodb.js:9:9:9:38 | maliciousInput | provenance | | -| dynamodb.js:11:11:11:80 | statement | dynamodb.js:13:20:13:28 | statement | provenance | | -| dynamodb.js:11:64:11:77 | maliciousInput | dynamodb.js:11:11:11:80 | statement | provenance | | -| dynamodb.js:12:11:14:6 | command | dynamodb.js:15:23:15:29 | command | provenance | | -| dynamodb.js:12:11:14:6 | command | dynamodb.js:47:24:47:30 | command | provenance | | -| dynamodb.js:12:21:14:6 | new Exe ... \\n }) | dynamodb.js:12:11:14:6 | command | provenance | | ->>>>>>> 1af289cd7d4 (Added modeling of client-s3 v2 and v3) | dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | dynamodb.js:12:21:14:6 | new Exe ... \\n }) | provenance | | | dynamodb.js:13:20:13:28 | statement | dynamodb.js:12:49:14:5 | {\\n ... t\\n } [Statement] | provenance | | | dynamodb.js:17:11:17:25 | updateStatement | dynamodb.js:19:20:19:34 | updateStatement | provenance | | @@ -573,25 +591,46 @@ edges | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | provenance | | | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | provenance | | nodes -<<<<<<< HEAD -| dynamodb.js:9:9:9:22 | maliciousInput | semmle.label | maliciousInput | -======= -| clients3.js:10:9:10:40 | maliciousInput | semmle.label | maliciousInput | +| athena.js:9:11:9:19 | userQuery | semmle.label | userQuery | +| athena.js:9:23:9:30 | req.body | semmle.label | req.body | +| athena.js:13:11:13:17 | params1 [QueryString] | semmle.label | params1 [QueryString] | +| athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | semmle.label | {\\n ... }\\n } [QueryString] | +| athena.js:14:22:14:38 | "SQL" + userQuery | semmle.label | "SQL" + userQuery | +| athena.js:14:30:14:38 | userQuery | semmle.label | userQuery | +| athena.js:18:11:18:11 | p | semmle.label | p | +| athena.js:18:15:18:53 | new Sta ... arams1) | semmle.label | new Sta ... arams1) | +| athena.js:18:46:18:52 | params1 [QueryString] | semmle.label | params1 [QueryString] | +| athena.js:19:23:19:23 | p | semmle.label | p | +| athena.js:21:11:21:17 | params2 [QueryString] | semmle.label | params2 [QueryString] | +| athena.js:21:21:26:5 | {\\n ... "\\n } [QueryString] | semmle.label | {\\n ... "\\n } [QueryString] | +| athena.js:24:22:24:30 | userQuery | semmle.label | userQuery | +| athena.js:27:23:27:58 | new Cre ... arams2) | semmle.label | new Cre ... arams2) | +| athena.js:27:51:27:57 | params2 [QueryString] | semmle.label | params2 [QueryString] | +| athena.js:29:11:29:17 | params3 [QueryString] | semmle.label | params3 [QueryString] | +| athena.js:29:21:35:5 | {\\n ... "\\n } [QueryString] | semmle.label | {\\n ... "\\n } [QueryString] | +| athena.js:33:22:33:30 | userQuery | semmle.label | userQuery | +| athena.js:36:23:36:58 | new Upd ... arams3) | semmle.label | new Upd ... arams3) | +| athena.js:36:51:36:57 | params3 [QueryString] | semmle.label | params3 [QueryString] | +| athena.js:43:11:43:19 | userQuery | semmle.label | userQuery | +| athena.js:43:23:43:30 | req.body | semmle.label | req.body | +| athena.js:48:22:48:30 | userQuery | semmle.label | userQuery | +| athena.js:57:22:57:30 | userQuery | semmle.label | userQuery | +| athena.js:66:22:66:30 | userQuery | semmle.label | userQuery | +| clients3.js:10:9:10:22 | maliciousInput | semmle.label | maliciousInput | | clients3.js:10:26:10:33 | req.body | semmle.label | req.body | -| clients3.js:12:11:17:5 | params [Expression] | semmle.label | params [Expression] | +| clients3.js:12:11:12:16 | params [Expression] | semmle.label | params [Expression] | | clients3.js:12:20:17:5 | {\\n ... ,\\n } [Expression] | semmle.label | {\\n ... ,\\n } [Expression] | | clients3.js:16:21:16:68 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | | clients3.js:16:55:16:68 | maliciousInput | semmle.label | maliciousInput | | clients3.js:18:23:18:60 | new Sel ... params) | semmle.label | new Sel ... params) | | clients3.js:18:54:18:59 | params [Expression] | semmle.label | params [Expression] | -| clients3.js:23:9:23:40 | maliciousInput | semmle.label | maliciousInput | +| clients3.js:23:9:23:22 | maliciousInput | semmle.label | maliciousInput | | clients3.js:23:26:23:33 | req.body | semmle.label | req.body | | clients3.js:29:21:29:68 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | | clients3.js:29:55:29:68 | maliciousInput | semmle.label | maliciousInput | | clients3.js:38:21:38:68 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | | clients3.js:38:55:38:68 | maliciousInput | semmle.label | maliciousInput | -| dynamodb.js:9:9:9:38 | maliciousInput | semmle.label | maliciousInput | ->>>>>>> 1af289cd7d4 (Added modeling of client-s3 v2 and v3) +| dynamodb.js:9:9:9:22 | maliciousInput | semmle.label | maliciousInput | | dynamodb.js:9:26:9:33 | req.body | semmle.label | req.body | | dynamodb.js:11:11:11:19 | statement | semmle.label | statement | | dynamodb.js:11:64:11:77 | maliciousInput | semmle.label | maliciousInput | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js index 00ef4a9f86fa..2b661d5d4aea 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js @@ -6,7 +6,7 @@ const app = express(); app.use(bodyParser.json()); app.post('/v3/athena/all', async (req, res) => { - const userQuery = req.body.query; // $ MISSING: Source + const userQuery = req.body.query; // $ Source const client = new AthenaClient({ region: "us-east-1" }); @@ -16,7 +16,7 @@ app.post('/v3/athena/all', async (req, res) => { ResultConfiguration: { OutputLocation: "s3://my-results/" } }; const p = new StartQueryExecutionCommand(params1); - await client.send(p); // $ MISSING: Alert + await client.send(p); // $ Alert const params2 = { Name: "user_query", @@ -24,7 +24,7 @@ app.post('/v3/athena/all', async (req, res) => { QueryString: userQuery, Description: "User-provided query" }; - await client.send(new CreateNamedQueryCommand(params2)); // $ MISSING: Alert -- This only stores query to database, not executed + await client.send(new CreateNamedQueryCommand(params2)); // $ Alert -- This only stores query to database, not executed const params3 = { NamedQueryId: "namedQueryId", @@ -33,19 +33,19 @@ app.post('/v3/athena/all', async (req, res) => { QueryString: userQuery, Description: "Updated user-provided query" }; - await client.send(new UpdateNamedQueryCommand(params3)); // $ MISSING: Alert -- This only stores query to database, not executed + await client.send(new UpdateNamedQueryCommand(params3)); // $ Alert -- This only stores query to database, not executed res.end(); }); app.post('/v2/athena/all', async (req, res) => { - const userQuery = req.body.query; // $ MISSING: Source + const userQuery = req.body.query; // $ Source const athena = new AWS.Athena({ region: "us-east-1" }); const params1 = { - QueryString: userQuery, // $ MISSING: Alert + QueryString: userQuery, // $ Alert QueryExecutionContext: { Database: "default" }, ResultConfiguration: { OutputLocation: "s3://my-results/" } }; @@ -54,7 +54,7 @@ app.post('/v2/athena/all', async (req, res) => { const params2 = { Name: "user_query", Database: "default", - QueryString: userQuery, // $ MISSING: Alert -- This only stores query to database, not executed + QueryString: userQuery, // $ Alert -- This only stores query to database, not executed Description: "User-provided query" }; await athena.createNamedQuery(params2).promise(); @@ -63,7 +63,7 @@ app.post('/v2/athena/all', async (req, res) => { NamedQueryId: "namedQueryId", Name: "user_query_updated", Database: "default", - QueryString: userQuery, // $ MISSING: Alert -- This only stores query to database, not executed + QueryString: userQuery, // $ Alert -- This only stores query to database, not executed Description: "Updated user-provided query" }; await athena.updateNamedQuery(params3).promise(); From 5b5c17100ce26df72bbed0568083402439353c90 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 14:34:51 +0200 Subject: [PATCH 114/219] Added test cases for client-rds-data for sql injections --- .../Security/CWE-089/untyped/rds-client.js | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js new file mode 100644 index 000000000000..6899ed0338f3 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js @@ -0,0 +1,68 @@ +const { RDSDataClient, BatchExecuteStatementCommand, ExecuteStatementCommand, ExecuteSqlCommand } = require("@aws-sdk/client-rds-data"); +const express = require('express'); +const bodyParser = require('body-parser'); +const app = express(); +app.use(bodyParser.json()); + +app.post('/v3/rds/all', async (req, res) => { + const userQuery = req.body.query; // $ MISSING: Source + const userQueries = req.body.queries; // $ MISSING: Source + + const client = new RDSDataClient({ region: "us-east-1" }); + + const params1 = { + resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", + secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret", + database: "userDatabase", + sql: userQuery + }; + await client.send(new ExecuteStatementCommand(params1)); // $ MISSING: Alert + + const params2 = { + resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", + secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret", + database: "userDatabase", + parameterSets: userQueries.map(sql => ({ sql })) + }; + await client.send(new BatchExecuteStatementCommand(params2)); // $ MISSING: Alert + + const params = { + resourceArn: "...", + secretArn: "...", + database: "userDatabase", + sqlStatements: userQuery + }; + + await client.send(new ExecuteSqlCommand(params)); // $ MISSING: Alert + + res.end(); +}); + +const AWS = require('aws-sdk'); + +app.post('/v2/rds/all', async (req, res) => { + const userQuery = req.body.query; // $ MISSING: Source + const userQueries = req.body.queries; // $ MISSING: Source + + const rdsData = new AWS.RDSDataService({ region: "us-east-1" }); + + const params1 = { + resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", + secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret", + database: "userDatabase", + sql: userQuery // $ MISSING: Alert + }; + await rdsData.executeStatement(params1).promise(); + + const params2 = { + resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", + secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret", + database: "userDatabase", + parameterSets: userQueries.map(sql => ({ sql })) // $ MISSING: Alert + }; + await rdsData.batchExecuteStatement(params2).promise(); + + res.end(); +}); + +app.listen(3000); From e5f02852e15923892937b4073a54370d3d43a021 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 14:50:19 +0200 Subject: [PATCH 115/219] Added modeling of rds v2 and v3 for sql injections --- javascript/ql/lib/ext/rds-client.model.yml | 23 +++++++++++ .../CWE-089/untyped/SqlInjection.expected | 41 +++++++++++++++++++ .../Security/CWE-089/untyped/rds-client.js | 14 +++---- 3 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 javascript/ql/lib/ext/rds-client.model.yml diff --git a/javascript/ql/lib/ext/rds-client.model.yml b/javascript/ql/lib/ext/rds-client.model.yml new file mode 100644 index 000000000000..7f10fc92c9f1 --- /dev/null +++ b/javascript/ql/lib/ext/rds-client.model.yml @@ -0,0 +1,23 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["RDSDataClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] + - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"] + + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"] + + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["RDSDataClientV3", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] + - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index edbb27bc84bd..623ea18de74c 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -137,6 +137,10 @@ | pg-promise.js:60:20:60:24 | query | pg-promise.js:7:16:7:34 | req.params.category | pg-promise.js:60:20:60:24 | query | This query string depends on a $@. | pg-promise.js:7:16:7:34 | req.params.category | user-provided value | | pg-promise.js:63:23:63:27 | query | pg-promise.js:7:16:7:34 | req.params.category | pg-promise.js:63:23:63:27 | query | This query string depends on a $@. | pg-promise.js:7:16:7:34 | req.params.category | user-provided value | | pg-promise.js:64:16:64:20 | query | pg-promise.js:7:16:7:34 | req.params.category | pg-promise.js:64:16:64:20 | query | This query string depends on a $@. | pg-promise.js:7:16:7:34 | req.params.category | user-provided value | +| rds-client.js:19:23:19:58 | new Exe ... arams1) | rds-client.js:8:23:8:30 | req.body | rds-client.js:19:23:19:58 | new Exe ... arams1) | This query string depends on a $@. | rds-client.js:8:23:8:30 | req.body | user-provided value | +| rds-client.js:36:23:36:51 | new Exe ... params) | rds-client.js:8:23:8:30 | req.body | rds-client.js:36:23:36:51 | new Exe ... params) | This query string depends on a $@. | rds-client.js:8:23:8:30 | req.body | user-provided value | +| rds-client.js:53:14:53:22 | userQuery | rds-client.js:44:23:44:30 | req.body | rds-client.js:53:14:53:22 | userQuery | This query string depends on a $@. | rds-client.js:44:23:44:30 | req.body | user-provided value | +| rds-client.js:61:50:61:52 | sql | rds-client.js:45:25:45:32 | req.body | rds-client.js:61:50:61:52 | sql | This query string depends on a $@. | rds-client.js:45:25:45:32 | req.body | user-provided value | | redis.js:10:16:10:27 | req.body.key | redis.js:10:16:10:23 | req.body | redis.js:10:16:10:27 | req.body.key | This query object depends on a $@. | redis.js:10:16:10:23 | req.body | user-provided value | | redis.js:18:16:18:18 | key | redis.js:12:15:12:22 | req.body | redis.js:18:16:18:18 | key | This query object depends on a $@. | redis.js:12:15:12:22 | req.body | user-provided value | | redis.js:19:43:19:45 | key | redis.js:12:15:12:22 | req.body | redis.js:19:43:19:45 | key | This query object depends on a $@. | redis.js:12:15:12:22 | req.body | user-provided value | @@ -563,6 +567,23 @@ edges | pg-promise.js:22:11:22:15 | query | pg-promise.js:60:20:60:24 | query | provenance | | | pg-promise.js:22:11:22:15 | query | pg-promise.js:63:23:63:27 | query | provenance | | | pg-promise.js:22:11:22:15 | query | pg-promise.js:64:16:64:20 | query | provenance | | +| rds-client.js:8:11:8:36 | userQuery | rds-client.js:17:14:17:22 | userQuery | provenance | | +| rds-client.js:8:11:8:36 | userQuery | rds-client.js:33:24:33:32 | userQuery | provenance | | +| rds-client.js:8:23:8:30 | req.body | rds-client.js:8:11:8:36 | userQuery | provenance | | +| rds-client.js:13:11:18:5 | params1 [sql] | rds-client.js:19:51:19:57 | params1 [sql] | provenance | | +| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | rds-client.js:13:11:18:5 | params1 [sql] | provenance | | +| rds-client.js:17:14:17:22 | userQuery | rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | provenance | | +| rds-client.js:19:51:19:57 | params1 [sql] | rds-client.js:19:23:19:58 | new Exe ... arams1) | provenance | | +| rds-client.js:29:11:34:5 | params [sqlStatements] | rds-client.js:36:45:36:50 | params [sqlStatements] | provenance | | +| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | rds-client.js:29:11:34:5 | params [sqlStatements] | provenance | | +| rds-client.js:33:24:33:32 | userQuery | rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | provenance | | +| rds-client.js:36:45:36:50 | params [sqlStatements] | rds-client.js:36:23:36:51 | new Exe ... params) | provenance | | +| rds-client.js:44:11:44:36 | userQuery | rds-client.js:53:14:53:22 | userQuery | provenance | | +| rds-client.js:44:23:44:30 | req.body | rds-client.js:44:11:44:36 | userQuery | provenance | | +| rds-client.js:45:11:45:40 | userQueries | rds-client.js:61:24:61:34 | userQueries | provenance | | +| rds-client.js:45:25:45:32 | req.body | rds-client.js:45:11:45:40 | userQueries | provenance | | +| rds-client.js:61:24:61:34 | userQueries | rds-client.js:61:40:61:42 | sql | provenance | | +| rds-client.js:61:40:61:42 | sql | rds-client.js:61:50:61:52 | sql | provenance | | | redis.js:10:16:10:23 | req.body | redis.js:10:16:10:27 | req.body.key | provenance | Config | | redis.js:12:9:12:11 | key | redis.js:13:16:13:18 | key | provenance | | | redis.js:12:9:12:11 | key | redis.js:18:16:18:18 | key | provenance | | @@ -940,6 +961,26 @@ nodes | pg-promise.js:60:20:60:24 | query | semmle.label | query | | pg-promise.js:63:23:63:27 | query | semmle.label | query | | pg-promise.js:64:16:64:20 | query | semmle.label | query | +| rds-client.js:8:11:8:36 | userQuery | semmle.label | userQuery | +| rds-client.js:8:23:8:30 | req.body | semmle.label | req.body | +| rds-client.js:13:11:18:5 | params1 [sql] | semmle.label | params1 [sql] | +| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | semmle.label | {\\n ... y\\n } [sql] | +| rds-client.js:17:14:17:22 | userQuery | semmle.label | userQuery | +| rds-client.js:19:23:19:58 | new Exe ... arams1) | semmle.label | new Exe ... arams1) | +| rds-client.js:19:51:19:57 | params1 [sql] | semmle.label | params1 [sql] | +| rds-client.js:29:11:34:5 | params [sqlStatements] | semmle.label | params [sqlStatements] | +| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | semmle.label | {\\n ... y\\n } [sqlStatements] | +| rds-client.js:33:24:33:32 | userQuery | semmle.label | userQuery | +| rds-client.js:36:23:36:51 | new Exe ... params) | semmle.label | new Exe ... params) | +| rds-client.js:36:45:36:50 | params [sqlStatements] | semmle.label | params [sqlStatements] | +| rds-client.js:44:11:44:36 | userQuery | semmle.label | userQuery | +| rds-client.js:44:23:44:30 | req.body | semmle.label | req.body | +| rds-client.js:45:11:45:40 | userQueries | semmle.label | userQueries | +| rds-client.js:45:25:45:32 | req.body | semmle.label | req.body | +| rds-client.js:53:14:53:22 | userQuery | semmle.label | userQuery | +| rds-client.js:61:24:61:34 | userQueries | semmle.label | userQueries | +| rds-client.js:61:40:61:42 | sql | semmle.label | sql | +| rds-client.js:61:50:61:52 | sql | semmle.label | sql | | redis.js:10:16:10:23 | req.body | semmle.label | req.body | | redis.js:10:16:10:27 | req.body.key | semmle.label | req.body.key | | redis.js:12:9:12:11 | key | semmle.label | key | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js index 6899ed0338f3..35d41e145f98 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/rds-client.js @@ -5,7 +5,7 @@ const app = express(); app.use(bodyParser.json()); app.post('/v3/rds/all', async (req, res) => { - const userQuery = req.body.query; // $ MISSING: Source + const userQuery = req.body.query; // $ Source const userQueries = req.body.queries; // $ MISSING: Source const client = new RDSDataClient({ region: "us-east-1" }); @@ -16,7 +16,7 @@ app.post('/v3/rds/all', async (req, res) => { database: "userDatabase", sql: userQuery }; - await client.send(new ExecuteStatementCommand(params1)); // $ MISSING: Alert + await client.send(new ExecuteStatementCommand(params1)); // $ Alert const params2 = { resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", @@ -33,7 +33,7 @@ app.post('/v3/rds/all', async (req, res) => { sqlStatements: userQuery }; - await client.send(new ExecuteSqlCommand(params)); // $ MISSING: Alert + await client.send(new ExecuteSqlCommand(params)); // $ Alert res.end(); }); @@ -41,8 +41,8 @@ app.post('/v3/rds/all', async (req, res) => { const AWS = require('aws-sdk'); app.post('/v2/rds/all', async (req, res) => { - const userQuery = req.body.query; // $ MISSING: Source - const userQueries = req.body.queries; // $ MISSING: Source + const userQuery = req.body.query; // $ Source + const userQueries = req.body.queries; // $ Source const rdsData = new AWS.RDSDataService({ region: "us-east-1" }); @@ -50,7 +50,7 @@ app.post('/v2/rds/all', async (req, res) => { resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret", database: "userDatabase", - sql: userQuery // $ MISSING: Alert + sql: userQuery // $ Alert }; await rdsData.executeStatement(params1).promise(); @@ -58,7 +58,7 @@ app.post('/v2/rds/all', async (req, res) => { resourceArn: "arn:aws:rds:us-east-1:123456789012:cluster:my-aurora-cluster", secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret", database: "userDatabase", - parameterSets: userQueries.map(sql => ({ sql })) // $ MISSING: Alert + parameterSets: userQueries.map(sql => ({ sql })) // $ Alert }; await rdsData.batchExecuteStatement(params2).promise(); From 93d9ae73b71b7530c99a8c3d723b257ca08c5b24 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 14:56:28 +0200 Subject: [PATCH 116/219] Updated change note --- javascript/ql/lib/change-notes/2025-07-28-dynamodb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md index 8cef0a4ec0f6..6d247a4fa5cb 100644 --- a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md +++ b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb` packages for DynamoDB PartiQL operations. +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. This enables detection of SQL injection vulnerabilities in DynamoDB PartiQL operations, Athena queries, S3 select expressions, and RDS Data API calls. From 5b31350e8321e8c273383deb6a41a6080c6e609b Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 16:28:35 +0200 Subject: [PATCH 117/219] Added tests and modeling of database-access-result --- .../lib/change-notes/2025-07-28-dynamodb.md | 2 +- javascript/ql/lib/ext/athena.model.yml | 8 ++ javascript/ql/lib/ext/client-s3.model.yml | 8 ++ javascript/ql/lib/ext/dynamodb.model.yml | 8 ++ javascript/ql/lib/ext/rds-client.model.yml | 8 ++ .../XssWithAdditionalSources.expected | 56 +++++++++++++ .../Security/CWE-079/DomBasedXss/aws-db.js | 79 +++++++++++++++++++ 7 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js diff --git a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md index 6d247a4fa5cb..bbf5d57163ae 100644 --- a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md +++ b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. This enables detection of SQL injection vulnerabilities in DynamoDB PartiQL operations, Athena queries, S3 select expressions, and RDS Data API calls. +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. diff --git a/javascript/ql/lib/ext/athena.model.yml b/javascript/ql/lib/ext/athena.model.yml index 5101d7047e3e..225d0926988a 100644 --- a/javascript/ql/lib/ext/athena.model.yml +++ b/javascript/ql/lib/ext/athena.model.yml @@ -19,3 +19,11 @@ extensions: data: - ["AthenaClientV3", "@aws-sdk/client-athena", "Member[AthenaClient]"] - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] + + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["AthenaClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/client-s3.model.yml b/javascript/ql/lib/ext/client-s3.model.yml index 2d81b3040e97..4deb2d6b7054 100644 --- a/javascript/ql/lib/ext/client-s3.model.yml +++ b/javascript/ql/lib/ext/client-s3.model.yml @@ -18,3 +18,11 @@ extensions: data: - ["S3ClientV3", "@aws-sdk/client-s3", "Member[S3Client]"] - ["S3ClientV2", "aws-sdk", "Member[S3]"] + + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["S3ClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/dynamodb.model.yml b/javascript/ql/lib/ext/dynamodb.model.yml index ddbf6cc3eee1..0efba4d4bc45 100644 --- a/javascript/ql/lib/ext/dynamodb.model.yml +++ b/javascript/ql/lib/ext/dynamodb.model.yml @@ -20,3 +20,11 @@ extensions: data: - ["DynamoDBClientV3", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] + + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["DynamoDBClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/rds-client.model.yml b/javascript/ql/lib/ext/rds-client.model.yml index 7f10fc92c9f1..2535c88a02c8 100644 --- a/javascript/ql/lib/ext/rds-client.model.yml +++ b/javascript/ql/lib/ext/rds-client.model.yml @@ -21,3 +21,11 @@ extensions: data: - ["RDSDataClientV3", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] + + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["RDSDataClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 4f27cd94835c..3393efc34499 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -32,6 +32,34 @@ nodes | angular-tempate-url.js:13:30:13:31 | ev | semmle.label | ev | | angular-tempate-url.js:14:26:14:27 | ev | semmle.label | ev | | angular-tempate-url.js:14:26:14:32 | ev.data | semmle.label | ev.data | +| aws-db.js:15:31:15:37 | results | semmle.label | results | +| aws-db.js:15:31:15:76 | results ... arValue | semmle.label | results ... arValue | +| aws-db.js:20:31:20:38 | response | semmle.label | response | +| aws-db.js:20:31:20:54 | respons ... tring() | semmle.label | respons ... tring() | +| aws-db.js:24:31:24:39 | response2 | semmle.label | response2 | +| aws-db.js:24:31:24:47 | response2.records | semmle.label | response2.records | +| aws-db.js:28:31:28:39 | response3 | semmle.label | response3 | +| aws-db.js:28:31:28:44 | response3.Item | semmle.label | response3.Item | +| aws-db.js:43:31:43:37 | results | semmle.label | results | +| aws-db.js:43:31:43:76 | results ... arValue | semmle.label | results ... arValue | +| aws-db.js:46:35:46:38 | data | semmle.label | data | +| aws-db.js:46:35:46:77 | data.Re ... arValue | semmle.label | data.Re ... arValue | +| aws-db.js:51:31:51:38 | response | semmle.label | response | +| aws-db.js:51:31:51:54 | respons ... tring() | semmle.label | respons ... tring() | +| aws-db.js:54:35:54:38 | data | semmle.label | data | +| aws-db.js:54:35:54:54 | data.Body.toString() | semmle.label | data.Body.toString() | +| aws-db.js:59:31:59:39 | response1 | semmle.label | response1 | +| aws-db.js:59:31:59:47 | response1.records | semmle.label | response1.records | +| aws-db.js:62:35:62:38 | data | semmle.label | data | +| aws-db.js:62:35:62:46 | data.records | semmle.label | data.records | +| aws-db.js:66:31:66:39 | response2 | semmle.label | response2 | +| aws-db.js:66:31:66:53 | respons ... Results | semmle.label | respons ... Results | +| aws-db.js:69:35:69:38 | data | semmle.label | data | +| aws-db.js:69:35:69:52 | data.updateResults | semmle.label | data.updateResults | +| aws-db.js:74:35:74:38 | data | semmle.label | data | +| aws-db.js:74:35:74:43 | data.Item | semmle.label | data.Item | +| aws-db.js:77:35:77:38 | data | semmle.label | data | +| aws-db.js:77:35:77:43 | data.Item | semmle.label | data.Item | | classnames.js:7:31:7:84 | `` | semmle.label | `` | | classnames.js:7:47:7:69 | classNa ... w.name) | semmle.label | classNa ... w.name) | | classnames.js:7:58:7:68 | window.name | semmle.label | window.name | @@ -724,6 +752,20 @@ edges | angular-tempate-url.js:13:30:13:31 | ev | angular-tempate-url.js:14:26:14:27 | ev | provenance | | | angular-tempate-url.js:14:26:14:27 | ev | angular-tempate-url.js:14:26:14:32 | ev.data | provenance | | | angular-tempate-url.js:14:26:14:32 | ev.data | angular-tempate-url.js:9:26:9:45 | Cookie.get("unsafe") | provenance | | +| aws-db.js:15:31:15:37 | results | aws-db.js:15:31:15:76 | results ... arValue | provenance | | +| aws-db.js:20:31:20:38 | response | aws-db.js:20:31:20:54 | respons ... tring() | provenance | | +| aws-db.js:24:31:24:39 | response2 | aws-db.js:24:31:24:47 | response2.records | provenance | | +| aws-db.js:28:31:28:39 | response3 | aws-db.js:28:31:28:44 | response3.Item | provenance | | +| aws-db.js:43:31:43:37 | results | aws-db.js:43:31:43:76 | results ... arValue | provenance | | +| aws-db.js:46:35:46:38 | data | aws-db.js:46:35:46:77 | data.Re ... arValue | provenance | | +| aws-db.js:51:31:51:38 | response | aws-db.js:51:31:51:54 | respons ... tring() | provenance | | +| aws-db.js:54:35:54:38 | data | aws-db.js:54:35:54:54 | data.Body.toString() | provenance | | +| aws-db.js:59:31:59:39 | response1 | aws-db.js:59:31:59:47 | response1.records | provenance | | +| aws-db.js:62:35:62:38 | data | aws-db.js:62:35:62:46 | data.records | provenance | | +| aws-db.js:66:31:66:39 | response2 | aws-db.js:66:31:66:53 | respons ... Results | provenance | | +| aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | provenance | | +| aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | provenance | | +| aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | provenance | | | classnames.js:7:47:7:69 | classNa ... w.name) | classnames.js:7:31:7:84 | `` | provenance | | | classnames.js:7:58:7:68 | window.name | classnames.js:7:47:7:69 | classNa ... w.name) | provenance | | | classnames.js:8:47:8:70 | classNa ... w.name) | classnames.js:8:31:8:85 | `` | provenance | | @@ -1319,6 +1361,20 @@ subpaths | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | various-concat-obfuscations.js:18:10:18:105 | '
    ') | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | various-concat-obfuscations.js:18:10:18:105 | '
    ') [ArrayElement] | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | #select +| aws-db.js:15:31:15:76 | results ... arValue | aws-db.js:15:31:15:37 | results | aws-db.js:15:31:15:76 | results ... arValue | Cross-site scripting vulnerability due to $@. | aws-db.js:15:31:15:37 | results | user-provided value | +| aws-db.js:20:31:20:54 | respons ... tring() | aws-db.js:20:31:20:38 | response | aws-db.js:20:31:20:54 | respons ... tring() | Cross-site scripting vulnerability due to $@. | aws-db.js:20:31:20:38 | response | user-provided value | +| aws-db.js:24:31:24:47 | response2.records | aws-db.js:24:31:24:39 | response2 | aws-db.js:24:31:24:47 | response2.records | Cross-site scripting vulnerability due to $@. | aws-db.js:24:31:24:39 | response2 | user-provided value | +| aws-db.js:28:31:28:44 | response3.Item | aws-db.js:28:31:28:39 | response3 | aws-db.js:28:31:28:44 | response3.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:28:31:28:39 | response3 | user-provided value | +| aws-db.js:43:31:43:76 | results ... arValue | aws-db.js:43:31:43:37 | results | aws-db.js:43:31:43:76 | results ... arValue | Cross-site scripting vulnerability due to $@. | aws-db.js:43:31:43:37 | results | user-provided value | +| aws-db.js:46:35:46:77 | data.Re ... arValue | aws-db.js:46:35:46:38 | data | aws-db.js:46:35:46:77 | data.Re ... arValue | Cross-site scripting vulnerability due to $@. | aws-db.js:46:35:46:38 | data | user-provided value | +| aws-db.js:51:31:51:54 | respons ... tring() | aws-db.js:51:31:51:38 | response | aws-db.js:51:31:51:54 | respons ... tring() | Cross-site scripting vulnerability due to $@. | aws-db.js:51:31:51:38 | response | user-provided value | +| aws-db.js:54:35:54:54 | data.Body.toString() | aws-db.js:54:35:54:38 | data | aws-db.js:54:35:54:54 | data.Body.toString() | Cross-site scripting vulnerability due to $@. | aws-db.js:54:35:54:38 | data | user-provided value | +| aws-db.js:59:31:59:47 | response1.records | aws-db.js:59:31:59:39 | response1 | aws-db.js:59:31:59:47 | response1.records | Cross-site scripting vulnerability due to $@. | aws-db.js:59:31:59:39 | response1 | user-provided value | +| aws-db.js:62:35:62:46 | data.records | aws-db.js:62:35:62:38 | data | aws-db.js:62:35:62:46 | data.records | Cross-site scripting vulnerability due to $@. | aws-db.js:62:35:62:38 | data | user-provided value | +| aws-db.js:66:31:66:53 | respons ... Results | aws-db.js:66:31:66:39 | response2 | aws-db.js:66:31:66:53 | respons ... Results | Cross-site scripting vulnerability due to $@. | aws-db.js:66:31:66:39 | response2 | user-provided value | +| aws-db.js:69:35:69:52 | data.updateResults | aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | Cross-site scripting vulnerability due to $@. | aws-db.js:69:35:69:38 | data | user-provided value | +| aws-db.js:74:35:74:43 | data.Item | aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:74:35:74:38 | data | user-provided value | +| aws-db.js:77:35:77:43 | data.Item | aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:77:35:77:38 | data | user-provided value | | hana.js:11:37:11:51 | rows[0].comment | hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:11:37:11:40 | rows | user-provided value | | hana.js:16:37:16:51 | rows[0].comment | hana.js:16:37:16:40 | rows | hana.js:16:37:16:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:16:37:16:40 | rows | user-provided value | | hana.js:19:37:19:51 | rows[0].comment | hana.js:19:37:19:40 | rows | hana.js:19:37:19:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:19:37:19:40 | rows | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js new file mode 100644 index 000000000000..0f345f7172e0 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js @@ -0,0 +1,79 @@ +const { AthenaClient, GetQueryResultsCommand } = require('@aws-sdk/client-athena'); +const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3"); +const { RDSDataClient, ExecuteStatementCommand } = require("@aws-sdk/client-rds-data"); +const { DynamoDBClient, GetItemCommand } = require("@aws-sdk/client-dynamodb"); + + +const express = require('express'); +const bodyParser = require('body-parser'); +const app = express(); +app.use(bodyParser.json()); + +app.post('/v3/all', async (req, res) => { + const client = new AthenaClient({ region: "us-east-1" }); + const results = await client.send(new GetQueryResultsCommand({ QueryExecutionId })); + document.body.innerHTML = results.ResultSet.Rows[0].Data[0].VarCharValue; // $ Alert[js/xss-additional-sources-dom-test] + + const s3 = new S3Client({ region: "us-east-1" }); + const command = new GetObjectCommand({ Bucket: bucket, Key: key }); + const response = await s3.send(command); + document.body.innerHTML = response.Body.toString(); // $ Alert[js/xss-additional-sources-dom-test] + + const clientRDS = new RDSDataClient({ region: "us-east-1" }); + const response2 = await clientRDS.send(new ExecuteStatementCommand(command)); + document.body.innerHTML = response2.records; // $ Alert[js/xss-additional-sources-dom-test] + + const clientDyamo = new DynamoDBClient({ region: "us-east-1" }); + const response3 = await clientDyamo.send(new GetItemCommand(command)); + document.body.innerHTML = response3.Item; // $ Alert[js/xss-additional-sources-dom-test] + +}); + + +app.post('/v2/all', async (req, res) => { + const AWS = require('aws-sdk'); + const athena = new AWS.Athena(); + const params = { + QueryString: 'SELECT * FROM my_table', + ResultConfiguration: { OutputLocation: 's3://bucket/prefix/' } + }; + const { QueryExecutionId } = await athena.startQueryExecution(params).promise(); + + const results = await athena.getQueryResults({ QueryExecutionId }).promise(); + document.body.innerHTML = results.ResultSet.Rows[0].Data[0].VarCharValue; // $ Alert[js/xss-additional-sources-dom-test] + + athena.getQueryResults({ QueryExecutionId }, (err, data) => { + document.body.innerHTML = data.ResultSet.Rows[0].Data[0].VarCharValue; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const s3 = new AWS.S3({ region: "us-east-1" }); + const response = await s3.getObject({ Bucket: "bucket", Key: "key" }).promise(); + document.body.innerHTML = response.Body.toString(); // $ Alert[js/xss-additional-sources-dom-test] + + s3.getObject({ Bucket: "bucket", Key: "key" }, (err, data) => { + document.body.innerHTML = data.Body.toString(); // $ Alert[js/xss-additional-sources-dom-test] + }); + + const rdsData = new AWS.RDSDataService({ region: "us-east-1" }); + const response1 = await rdsData.executeStatement(params).promise(); + document.body.innerHTML = response1.records; // $ Alert[js/xss-additional-sources-dom-test] + + rdsData.executeStatement(params, function(err, data) { + document.body.innerHTML = data.records; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const response2 = await rdsData.batchExecuteStatement(params).promise(); + document.body.innerHTML = response2.updateResults; // $ Alert[js/xss-additional-sources-dom-test] + + rdsData.batchExecuteStatement(params, function(err, data) { + document.body.innerHTML = data.updateResults; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const dynamodb = new AWS.DynamoDB({ region: "us-east-1" }); + dynamodb.executeStatement(params, (err, data) => { + document.body.innerHTML = data.Item; // $ Alert[js/xss-additional-sources-dom-test] + }); + dynamodb.executeStatement(params).promise().then(data => { + document.body.innerHTML = data.Item; // $ Alert[js/xss-additional-sources-dom-test] + }); +}); From 9beac51586c1f8253b969d0be75905fa2fde19ef Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 29 Jul 2025 16:50:42 +0200 Subject: [PATCH 118/219] Unified aws-db modeling into singular file --- javascript/ql/lib/ext/athena.model.yml | 29 ------------- javascript/ql/lib/ext/aws-sdk.model.yml | 49 ++++++++++++++++++++-- javascript/ql/lib/ext/client-s3.model.yml | 28 ------------- javascript/ql/lib/ext/dynamodb.model.yml | 30 ------------- javascript/ql/lib/ext/rds-client.model.yml | 31 -------------- 5 files changed, 46 insertions(+), 121 deletions(-) delete mode 100644 javascript/ql/lib/ext/athena.model.yml delete mode 100644 javascript/ql/lib/ext/client-s3.model.yml delete mode 100644 javascript/ql/lib/ext/dynamodb.model.yml delete mode 100644 javascript/ql/lib/ext/rds-client.model.yml diff --git a/javascript/ql/lib/ext/athena.model.yml b/javascript/ql/lib/ext/athena.model.yml deleted file mode 100644 index 225d0926988a..000000000000 --- a/javascript/ql/lib/ext/athena.model.yml +++ /dev/null @@ -1,29 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: sinkModel - data: - - ["AthenaClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] - - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] - - - - addsTo: - pack: codeql/javascript-all - extensible: summaryModel - data: - - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"] - - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["AthenaClientV3", "@aws-sdk/client-athena", "Member[AthenaClient]"] - - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] - - - addsTo: - pack: codeql/javascript-all - extensible: sourceModel - data: - - ["AthenaClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] - - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml index eefa87fbe613..d850fec7371c 100644 --- a/javascript/ql/lib/ext/aws-sdk.model.yml +++ b/javascript/ql/lib/ext/aws-sdk.model.yml @@ -3,6 +3,49 @@ extensions: pack: codeql/javascript-all extensible: sinkModel data: - - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"] - - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"] - - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"] + - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"] + - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"] + - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"] + - ["AWS-V3-Common", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] + - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] + - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] + - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"] + - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"] + - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"] + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"] + - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"] + - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"] + - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"] + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] + - ["S3ClientV2", "aws-sdk", "Member[S3]"] + - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] + - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] + - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"] + - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"] + - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] + - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["AWS-V3-Common", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] + - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"] + - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] + - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/client-s3.model.yml b/javascript/ql/lib/ext/client-s3.model.yml deleted file mode 100644 index 4deb2d6b7054..000000000000 --- a/javascript/ql/lib/ext/client-s3.model.yml +++ /dev/null @@ -1,28 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: sinkModel - data: - - ["S3ClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] - - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] - - - addsTo: - pack: codeql/javascript-all - extensible: summaryModel - data: - - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"] - - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["S3ClientV3", "@aws-sdk/client-s3", "Member[S3Client]"] - - ["S3ClientV2", "aws-sdk", "Member[S3]"] - - - addsTo: - pack: codeql/javascript-all - extensible: sourceModel - data: - - ["S3ClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] - - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/dynamodb.model.yml b/javascript/ql/lib/ext/dynamodb.model.yml deleted file mode 100644 index 0efba4d4bc45..000000000000 --- a/javascript/ql/lib/ext/dynamodb.model.yml +++ /dev/null @@ -1,30 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: sinkModel - data: - - ["DynamoDBClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] - - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"] - - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"] - - - addsTo: - pack: codeql/javascript-all - extensible: summaryModel - data: - - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"] - - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"] - - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["DynamoDBClientV3", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] - - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] - - - addsTo: - pack: codeql/javascript-all - extensible: sourceModel - data: - - ["DynamoDBClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] - - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/rds-client.model.yml b/javascript/ql/lib/ext/rds-client.model.yml deleted file mode 100644 index 2535c88a02c8..000000000000 --- a/javascript/ql/lib/ext/rds-client.model.yml +++ /dev/null @@ -1,31 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: sinkModel - data: - - ["RDSDataClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"] - - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] - - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"] - - - addsTo: - pack: codeql/javascript-all - extensible: summaryModel - data: - - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"] - - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"] - - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"] - - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["RDSDataClientV3", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] - - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] - - - addsTo: - pack: codeql/javascript-all - extensible: sourceModel - data: - - ["RDSDataClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] - - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] From 801a34f6a1d3a34cdc512502675fbd3716a6b019 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 4 Sep 2025 11:05:42 +0200 Subject: [PATCH 119/219] Moved typeModel at the start of the file --- javascript/ql/lib/ext/aws-sdk.model.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml index d850fec7371c..17164c18298d 100644 --- a/javascript/ql/lib/ext/aws-sdk.model.yml +++ b/javascript/ql/lib/ext/aws-sdk.model.yml @@ -1,4 +1,16 @@ extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] + - ["S3ClientV2", "aws-sdk", "Member[S3]"] + - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] + - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] + - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"] + - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"] + - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] + - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] - addsTo: pack: codeql/javascript-all extensible: sinkModel @@ -24,18 +36,6 @@ extensions: - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"] - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"] - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"] - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] - - ["S3ClientV2", "aws-sdk", "Member[S3]"] - - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] - - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] - - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"] - - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"] - - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] - - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] - addsTo: pack: codeql/javascript-all extensible: sourceModel From b89e70b5a0e46ab4abe7f21ad653edb37422de36 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 4 Sep 2025 12:07:28 +0200 Subject: [PATCH 120/219] Added test cases for aws sources --- .../XssWithAdditionalSources.expected | 96 ++++++++++++++ .../Security/CWE-079/DomBasedXss/aws.js | 118 ++++++++++++++++++ 2 files changed, 214 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 3393efc34499..f8781e6741b9 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -60,6 +60,54 @@ nodes | aws-db.js:74:35:74:43 | data.Item | semmle.label | data.Item | | aws-db.js:77:35:77:38 | data | semmle.label | data | | aws-db.js:77:35:77:43 | data.Item | semmle.label | data.Item | +| aws.js:14:31:14:36 | result | semmle.label | result | +| aws.js:14:31:14:44 | result.comment | semmle.label | result.comment | +| aws.js:18:31:18:37 | result2 | semmle.label | result2 | +| aws.js:18:31:18:45 | result2.comment | semmle.label | result2.comment | +| aws.js:22:31:22:37 | result3 | semmle.label | result3 | +| aws.js:22:31:22:45 | result3.comment | semmle.label | result3.comment | +| aws.js:26:31:26:37 | result4 | semmle.label | result4 | +| aws.js:26:31:26:45 | result4.comment | semmle.label | result4.comment | +| aws.js:34:31:34:34 | data | semmle.label | data | +| aws.js:34:31:34:42 | data.comment | semmle.label | data.comment | +| aws.js:37:35:37:38 | data | semmle.label | data | +| aws.js:37:35:37:46 | data.comment | semmle.label | data.comment | +| aws.js:47:31:47:34 | data | semmle.label | data | +| aws.js:47:31:47:42 | data.comment | semmle.label | data.comment | +| aws.js:50:35:50:38 | data | semmle.label | data | +| aws.js:50:35:50:46 | data.comment | semmle.label | data.comment | +| aws.js:59:31:59:34 | data | semmle.label | data | +| aws.js:59:31:59:42 | data.comment | semmle.label | data.comment | +| aws.js:62:35:62:38 | data | semmle.label | data | +| aws.js:62:35:62:46 | data.comment | semmle.label | data.comment | +| aws.js:66:31:66:35 | data2 | semmle.label | data2 | +| aws.js:66:31:66:43 | data2.comment | semmle.label | data2.comment | +| aws.js:69:35:69:38 | data | semmle.label | data | +| aws.js:69:35:69:46 | data.comment | semmle.label | data.comment | +| aws.js:78:31:78:34 | data | semmle.label | data | +| aws.js:78:31:78:42 | data.comment | semmle.label | data.comment | +| aws.js:81:35:81:38 | data | semmle.label | data | +| aws.js:81:35:81:46 | data.comment | semmle.label | data.comment | +| aws.js:85:31:85:35 | data2 | semmle.label | data2 | +| aws.js:85:31:85:43 | data2.comment | semmle.label | data2.comment | +| aws.js:88:35:88:38 | data | semmle.label | data | +| aws.js:88:35:88:46 | data.comment | semmle.label | data.comment | +| aws.js:92:31:92:35 | data3 | semmle.label | data3 | +| aws.js:92:31:92:43 | data3.comment | semmle.label | data3.comment | +| aws.js:95:35:95:38 | data | semmle.label | data | +| aws.js:95:35:95:46 | data.comment | semmle.label | data.comment | +| aws.js:99:31:99:35 | data4 | semmle.label | data4 | +| aws.js:99:31:99:43 | data4.comment | semmle.label | data4.comment | +| aws.js:102:35:102:38 | data | semmle.label | data | +| aws.js:102:35:102:46 | data.comment | semmle.label | data.comment | +| aws.js:106:31:106:35 | data5 | semmle.label | data5 | +| aws.js:106:31:106:43 | data5.comment | semmle.label | data5.comment | +| aws.js:109:35:109:38 | data | semmle.label | data | +| aws.js:109:35:109:46 | data.comment | semmle.label | data.comment | +| aws.js:113:31:113:35 | data6 | semmle.label | data6 | +| aws.js:113:31:113:43 | data6.comment | semmle.label | data6.comment | +| aws.js:116:35:116:38 | data | semmle.label | data | +| aws.js:116:35:116:46 | data.comment | semmle.label | data.comment | | classnames.js:7:31:7:84 | `` | semmle.label | `` | | classnames.js:7:47:7:69 | classNa ... w.name) | semmle.label | classNa ... w.name) | | classnames.js:7:58:7:68 | window.name | semmle.label | window.name | @@ -766,6 +814,30 @@ edges | aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | provenance | | | aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | provenance | | | aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | provenance | | +| aws.js:14:31:14:36 | result | aws.js:14:31:14:44 | result.comment | provenance | | +| aws.js:18:31:18:37 | result2 | aws.js:18:31:18:45 | result2.comment | provenance | | +| aws.js:22:31:22:37 | result3 | aws.js:22:31:22:45 | result3.comment | provenance | | +| aws.js:26:31:26:37 | result4 | aws.js:26:31:26:45 | result4.comment | provenance | | +| aws.js:34:31:34:34 | data | aws.js:34:31:34:42 | data.comment | provenance | | +| aws.js:37:35:37:38 | data | aws.js:37:35:37:46 | data.comment | provenance | | +| aws.js:47:31:47:34 | data | aws.js:47:31:47:42 | data.comment | provenance | | +| aws.js:50:35:50:38 | data | aws.js:50:35:50:46 | data.comment | provenance | | +| aws.js:59:31:59:34 | data | aws.js:59:31:59:42 | data.comment | provenance | | +| aws.js:62:35:62:38 | data | aws.js:62:35:62:46 | data.comment | provenance | | +| aws.js:66:31:66:35 | data2 | aws.js:66:31:66:43 | data2.comment | provenance | | +| aws.js:69:35:69:38 | data | aws.js:69:35:69:46 | data.comment | provenance | | +| aws.js:78:31:78:34 | data | aws.js:78:31:78:42 | data.comment | provenance | | +| aws.js:81:35:81:38 | data | aws.js:81:35:81:46 | data.comment | provenance | | +| aws.js:85:31:85:35 | data2 | aws.js:85:31:85:43 | data2.comment | provenance | | +| aws.js:88:35:88:38 | data | aws.js:88:35:88:46 | data.comment | provenance | | +| aws.js:92:31:92:35 | data3 | aws.js:92:31:92:43 | data3.comment | provenance | | +| aws.js:95:35:95:38 | data | aws.js:95:35:95:46 | data.comment | provenance | | +| aws.js:99:31:99:35 | data4 | aws.js:99:31:99:43 | data4.comment | provenance | | +| aws.js:102:35:102:38 | data | aws.js:102:35:102:46 | data.comment | provenance | | +| aws.js:106:31:106:35 | data5 | aws.js:106:31:106:43 | data5.comment | provenance | | +| aws.js:109:35:109:38 | data | aws.js:109:35:109:46 | data.comment | provenance | | +| aws.js:113:31:113:35 | data6 | aws.js:113:31:113:43 | data6.comment | provenance | | +| aws.js:116:35:116:38 | data | aws.js:116:35:116:46 | data.comment | provenance | | | classnames.js:7:47:7:69 | classNa ... w.name) | classnames.js:7:31:7:84 | `` | provenance | | | classnames.js:7:58:7:68 | window.name | classnames.js:7:47:7:69 | classNa ... w.name) | provenance | | | classnames.js:8:47:8:70 | classNa ... w.name) | classnames.js:8:31:8:85 | `` | provenance | | @@ -1375,6 +1447,30 @@ subpaths | aws-db.js:69:35:69:52 | data.updateResults | aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | Cross-site scripting vulnerability due to $@. | aws-db.js:69:35:69:38 | data | user-provided value | | aws-db.js:74:35:74:43 | data.Item | aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:74:35:74:38 | data | user-provided value | | aws-db.js:77:35:77:43 | data.Item | aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:77:35:77:38 | data | user-provided value | +| aws.js:14:31:14:44 | result.comment | aws.js:14:31:14:36 | result | aws.js:14:31:14:44 | result.comment | Cross-site scripting vulnerability due to $@. | aws.js:14:31:14:36 | result | user-provided value | +| aws.js:18:31:18:45 | result2.comment | aws.js:18:31:18:37 | result2 | aws.js:18:31:18:45 | result2.comment | Cross-site scripting vulnerability due to $@. | aws.js:18:31:18:37 | result2 | user-provided value | +| aws.js:22:31:22:45 | result3.comment | aws.js:22:31:22:37 | result3 | aws.js:22:31:22:45 | result3.comment | Cross-site scripting vulnerability due to $@. | aws.js:22:31:22:37 | result3 | user-provided value | +| aws.js:26:31:26:45 | result4.comment | aws.js:26:31:26:37 | result4 | aws.js:26:31:26:45 | result4.comment | Cross-site scripting vulnerability due to $@. | aws.js:26:31:26:37 | result4 | user-provided value | +| aws.js:34:31:34:42 | data.comment | aws.js:34:31:34:34 | data | aws.js:34:31:34:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:34:31:34:34 | data | user-provided value | +| aws.js:37:35:37:46 | data.comment | aws.js:37:35:37:38 | data | aws.js:37:35:37:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:37:35:37:38 | data | user-provided value | +| aws.js:47:31:47:42 | data.comment | aws.js:47:31:47:34 | data | aws.js:47:31:47:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:47:31:47:34 | data | user-provided value | +| aws.js:50:35:50:46 | data.comment | aws.js:50:35:50:38 | data | aws.js:50:35:50:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:50:35:50:38 | data | user-provided value | +| aws.js:59:31:59:42 | data.comment | aws.js:59:31:59:34 | data | aws.js:59:31:59:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:59:31:59:34 | data | user-provided value | +| aws.js:62:35:62:46 | data.comment | aws.js:62:35:62:38 | data | aws.js:62:35:62:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:62:35:62:38 | data | user-provided value | +| aws.js:66:31:66:43 | data2.comment | aws.js:66:31:66:35 | data2 | aws.js:66:31:66:43 | data2.comment | Cross-site scripting vulnerability due to $@. | aws.js:66:31:66:35 | data2 | user-provided value | +| aws.js:69:35:69:46 | data.comment | aws.js:69:35:69:38 | data | aws.js:69:35:69:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:69:35:69:38 | data | user-provided value | +| aws.js:78:31:78:42 | data.comment | aws.js:78:31:78:34 | data | aws.js:78:31:78:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:78:31:78:34 | data | user-provided value | +| aws.js:81:35:81:46 | data.comment | aws.js:81:35:81:38 | data | aws.js:81:35:81:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:81:35:81:38 | data | user-provided value | +| aws.js:85:31:85:43 | data2.comment | aws.js:85:31:85:35 | data2 | aws.js:85:31:85:43 | data2.comment | Cross-site scripting vulnerability due to $@. | aws.js:85:31:85:35 | data2 | user-provided value | +| aws.js:88:35:88:46 | data.comment | aws.js:88:35:88:38 | data | aws.js:88:35:88:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:88:35:88:38 | data | user-provided value | +| aws.js:92:31:92:43 | data3.comment | aws.js:92:31:92:35 | data3 | aws.js:92:31:92:43 | data3.comment | Cross-site scripting vulnerability due to $@. | aws.js:92:31:92:35 | data3 | user-provided value | +| aws.js:95:35:95:46 | data.comment | aws.js:95:35:95:38 | data | aws.js:95:35:95:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:95:35:95:38 | data | user-provided value | +| aws.js:99:31:99:43 | data4.comment | aws.js:99:31:99:35 | data4 | aws.js:99:31:99:43 | data4.comment | Cross-site scripting vulnerability due to $@. | aws.js:99:31:99:35 | data4 | user-provided value | +| aws.js:102:35:102:46 | data.comment | aws.js:102:35:102:38 | data | aws.js:102:35:102:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:102:35:102:38 | data | user-provided value | +| aws.js:106:31:106:43 | data5.comment | aws.js:106:31:106:35 | data5 | aws.js:106:31:106:43 | data5.comment | Cross-site scripting vulnerability due to $@. | aws.js:106:31:106:35 | data5 | user-provided value | +| aws.js:109:35:109:46 | data.comment | aws.js:109:35:109:38 | data | aws.js:109:35:109:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:109:35:109:38 | data | user-provided value | +| aws.js:113:31:113:43 | data6.comment | aws.js:113:31:113:35 | data6 | aws.js:113:31:113:43 | data6.comment | Cross-site scripting vulnerability due to $@. | aws.js:113:31:113:35 | data6 | user-provided value | +| aws.js:116:35:116:46 | data.comment | aws.js:116:35:116:38 | data | aws.js:116:35:116:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:116:35:116:38 | data | user-provided value | | hana.js:11:37:11:51 | rows[0].comment | hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:11:37:11:40 | rows | user-provided value | | hana.js:16:37:16:51 | rows[0].comment | hana.js:16:37:16:40 | rows | hana.js:16:37:16:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:16:37:16:40 | rows | user-provided value | | hana.js:19:37:19:51 | rows[0].comment | hana.js:19:37:19:40 | rows | hana.js:19:37:19:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:19:37:19:40 | rows | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js new file mode 100644 index 000000000000..103689c078f2 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js @@ -0,0 +1,118 @@ +const AWS = require('aws-sdk'); +const { AthenaClient } = require('@aws-sdk/client-athena'); +const { S3Client } = require('@aws-sdk/client-s3'); +const { RDSDataClient } = require('@aws-sdk/client-rds-data'); +const { DynamoDBClient } = require('@aws-sdk/client-dynamodb'); +const express = require('express'); + +const app = express(); + +// AWS V3 Common tests +app.post('/aws-v3-common', async (req, res) => { + const athenaClient = new AthenaClient({}); + const result = await athenaClient.send({}); + document.body.innerHTML = result.comment; // $ Alert[js/xss-additional-sources-dom-test] + + const s3Client = new S3Client({}); + const result2 = await s3Client.send({}); + document.body.innerHTML = result2.comment; // $ Alert[js/xss-additional-sources-dom-test] + + const rdsDataClient = new RDSDataClient({}); + const result3 = await rdsDataClient.send({}); + document.body.innerHTML = result3.comment; // $ Alert[js/xss-additional-sources-dom-test] + + const dynamoClient = new DynamoDBClient({}); + const result4 = await dynamoClient.send({}); + document.body.innerHTML = result4.comment; // $ Alert[js/xss-additional-sources-dom-test] +}); + +// Athena Client V2 tests +app.post('/athena-v2', async (req, res) => { + const athena = new AWS.Athena(); + + const data = await athena.getQueryResults({}).promise(); + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + + athena.getQueryResults({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); +}); + +// S3 Client V2 tests +app.post('/s3-v2', async (req, res) => { + const s3 = new AWS.S3(); + + + const data = await s3.getObject({}).promise(); + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + + s3.getObject({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); +}); + +// RDS Data Client V2 tests +app.post('/rds-data-v2', async (req, res) => { + const rdsData = new AWS.RDSDataService(); + + const data = await rdsData.executeStatement({}).promise(); + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + + rdsData.executeStatement({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const data2 = await rdsData.batchExecuteStatement({}).promise(); + document.body.innerHTML = data2.comment; // $ Alert[js/xss-additional-sources-dom-test] + + rdsData.batchExecuteStatement({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); +}); + +// DynamoDB Client V2 tests +app.post('/dynamodb-v2', async (req, res) => { + const dynamodb = new AWS.DynamoDB(); + + const data = await dynamodb.executeStatement({}).promise(); + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + + dynamodb.executeStatement({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const data2 = await dynamodb.batchExecuteStatement({}).promise(); + document.body.innerHTML = data2.comment; // $ Alert[js/xss-additional-sources-dom-test] + + dynamodb.batchExecuteStatement({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const data3 = await dynamodb.query({}).promise(); + document.body.innerHTML = data3.comment; // $ Alert[js/xss-additional-sources-dom-test] + + dynamodb.query({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const data4 = await dynamodb.scan({}).promise(); + document.body.innerHTML = data4.comment; // $ Alert[js/xss-additional-sources-dom-test] + + dynamodb.scan({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const data5 = await dynamodb.getItem({}).promise(); + document.body.innerHTML = data5.comment; // $ Alert[js/xss-additional-sources-dom-test] + + dynamodb.getItem({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const data6 = await dynamodb.batchGetItem({}).promise(); + document.body.innerHTML = data6.comment; // $ Alert[js/xss-additional-sources-dom-test] + + dynamodb.batchGetItem({}, function(err, data) { + document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test] + }); +}); From 872b6d8bee6cd3b456539f48fb889a96e08fe5cc Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 4 Sep 2025 12:28:55 +0200 Subject: [PATCH 121/219] Added test case for `CreatePreparedStatementCommand` --- .../Security/CWE-089/untyped/athena.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js index 2b661d5d4aea..0c6e5e1d8a74 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js @@ -1,4 +1,4 @@ -const { AthenaClient, StartQueryExecutionCommand, CreateNamedQueryCommand, UpdateNamedQueryCommand } = require("@aws-sdk/client-athena"); +const { AthenaClient, StartQueryExecutionCommand, CreateNamedQueryCommand, UpdateNamedQueryCommand, CreatePreparedStatementCommand } = require("@aws-sdk/client-athena"); const AWS = require('aws-sdk'); const express = require('express'); const bodyParser = require('body-parser'); @@ -10,7 +10,7 @@ app.post('/v3/athena/all', async (req, res) => { const client = new AthenaClient({ region: "us-east-1" }); - const params1 = { + const params1 = { QueryString: "SQL" + userQuery, QueryExecutionContext: { Database: "default" }, ResultConfiguration: { OutputLocation: "s3://my-results/" } @@ -70,3 +70,16 @@ app.post('/v2/athena/all', async (req, res) => { res.end(); }); + +app.post('/dynamodb-v3', async (req, res) => { + const userQueryStatement = req.body.query; // $ MISSING: Source + const client = new AthenaClient({ region: "us-east-1" }); + const input = { + StatementName: "STRING_VALUE", + WorkGroup: "STRING_VALUE", + QueryStatement: userQueryStatement, + Description: "STRING_VALUE", + }; + const command = new CreatePreparedStatementCommand(input); + await client.send(command); // $ MISSING: Alert +}); From 9ca4773227a2ade0f2148b47574869a87f6d6e65 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 4 Sep 2025 12:31:08 +0200 Subject: [PATCH 122/219] Added modeling for `CreatePreparedStatementCommand` --- javascript/ql/lib/ext/aws-sdk.model.yml | 1 + .../CWE-089/untyped/SqlInjection.expected | 24 ++++++++++++++++--- .../Security/CWE-089/untyped/athena.js | 4 ++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml index 17164c18298d..dfda93d2d3f8 100644 --- a/javascript/ql/lib/ext/aws-sdk.model.yml +++ b/javascript/ql/lib/ext/aws-sdk.model.yml @@ -30,6 +30,7 @@ extensions: extensible: summaryModel data: - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"] + - ["@aws-sdk/client-athena", "Member[CreatePreparedStatementCommand]", "Argument[0].Member[QueryStatement]", "ReturnValue", "taint"] - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"] - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"] - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 623ea18de74c..d6b000b03c25 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -5,6 +5,7 @@ | athena.js:48:22:48:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:48:22:48:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value | | athena.js:57:22:57:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:57:22:57:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value | | athena.js:66:22:66:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:66:22:66:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value | +| athena.js:84:23:84:29 | command | athena.js:75:32:75:39 | req.body | athena.js:84:23:84:29 | command | This query string depends on a $@. | athena.js:75:32:75:39 | req.body | user-provided value | | clients3.js:18:23:18:60 | new Sel ... params) | clients3.js:10:26:10:33 | req.body | clients3.js:18:23:18:60 | new Sel ... params) | This query string depends on a $@. | clients3.js:10:26:10:33 | req.body | user-provided value | | clients3.js:29:21:29:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:29:21:29:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value | | clients3.js:38:21:38:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:38:21:38:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value | @@ -161,8 +162,8 @@ edges | athena.js:9:11:9:19 | userQuery | athena.js:33:22:33:30 | userQuery | provenance | | | athena.js:9:23:9:30 | req.body | athena.js:9:11:9:19 | userQuery | provenance | | | athena.js:13:11:13:17 | params1 [QueryString] | athena.js:18:46:18:52 | params1 [QueryString] | provenance | | -| athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | athena.js:13:11:13:17 | params1 [QueryString] | provenance | | -| athena.js:14:22:14:38 | "SQL" + userQuery | athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | provenance | | +| athena.js:13:21:17:5 | { \\n ... }\\n } [QueryString] | athena.js:13:11:13:17 | params1 [QueryString] | provenance | | +| athena.js:14:22:14:38 | "SQL" + userQuery | athena.js:13:21:17:5 | { \\n ... }\\n } [QueryString] | provenance | | | athena.js:14:30:14:38 | userQuery | athena.js:14:22:14:38 | "SQL" + userQuery | provenance | | | athena.js:18:11:18:11 | p | athena.js:19:23:19:23 | p | provenance | | | athena.js:18:15:18:53 | new Sta ... arams1) | athena.js:18:11:18:11 | p | provenance | | @@ -179,6 +180,14 @@ edges | athena.js:43:11:43:19 | userQuery | athena.js:57:22:57:30 | userQuery | provenance | | | athena.js:43:11:43:19 | userQuery | athena.js:66:22:66:30 | userQuery | provenance | | | athena.js:43:23:43:30 | req.body | athena.js:43:11:43:19 | userQuery | provenance | | +| athena.js:75:11:75:28 | userQueryStatement | athena.js:80:25:80:42 | userQueryStatement | provenance | | +| athena.js:75:32:75:39 | req.body | athena.js:75:11:75:28 | userQueryStatement | provenance | | +| athena.js:77:11:77:15 | input [QueryStatement] | athena.js:83:56:83:60 | input [QueryStatement] | provenance | | +| athena.js:77:19:82:5 | {\\n ... ,\\n } [QueryStatement] | athena.js:77:11:77:15 | input [QueryStatement] | provenance | | +| athena.js:80:25:80:42 | userQueryStatement | athena.js:77:19:82:5 | {\\n ... ,\\n } [QueryStatement] | provenance | | +| athena.js:83:11:83:17 | command | athena.js:84:23:84:29 | command | provenance | | +| athena.js:83:21:83:61 | new Cre ... (input) | athena.js:83:11:83:17 | command | provenance | | +| athena.js:83:56:83:60 | input [QueryStatement] | athena.js:83:21:83:61 | new Cre ... (input) | provenance | | | clients3.js:10:9:10:22 | maliciousInput | clients3.js:16:55:16:68 | maliciousInput | provenance | | | clients3.js:10:26:10:33 | req.body | clients3.js:10:9:10:22 | maliciousInput | provenance | | | clients3.js:12:11:12:16 | params [Expression] | clients3.js:18:54:18:59 | params [Expression] | provenance | | @@ -615,7 +624,7 @@ nodes | athena.js:9:11:9:19 | userQuery | semmle.label | userQuery | | athena.js:9:23:9:30 | req.body | semmle.label | req.body | | athena.js:13:11:13:17 | params1 [QueryString] | semmle.label | params1 [QueryString] | -| athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | semmle.label | {\\n ... }\\n } [QueryString] | +| athena.js:13:21:17:5 | { \\n ... }\\n } [QueryString] | semmle.label | { \\n ... }\\n } [QueryString] | | athena.js:14:22:14:38 | "SQL" + userQuery | semmle.label | "SQL" + userQuery | | athena.js:14:30:14:38 | userQuery | semmle.label | userQuery | | athena.js:18:11:18:11 | p | semmle.label | p | @@ -637,6 +646,15 @@ nodes | athena.js:48:22:48:30 | userQuery | semmle.label | userQuery | | athena.js:57:22:57:30 | userQuery | semmle.label | userQuery | | athena.js:66:22:66:30 | userQuery | semmle.label | userQuery | +| athena.js:75:11:75:28 | userQueryStatement | semmle.label | userQueryStatement | +| athena.js:75:32:75:39 | req.body | semmle.label | req.body | +| athena.js:77:11:77:15 | input [QueryStatement] | semmle.label | input [QueryStatement] | +| athena.js:77:19:82:5 | {\\n ... ,\\n } [QueryStatement] | semmle.label | {\\n ... ,\\n } [QueryStatement] | +| athena.js:80:25:80:42 | userQueryStatement | semmle.label | userQueryStatement | +| athena.js:83:11:83:17 | command | semmle.label | command | +| athena.js:83:21:83:61 | new Cre ... (input) | semmle.label | new Cre ... (input) | +| athena.js:83:56:83:60 | input [QueryStatement] | semmle.label | input [QueryStatement] | +| athena.js:84:23:84:29 | command | semmle.label | command | | clients3.js:10:9:10:22 | maliciousInput | semmle.label | maliciousInput | | clients3.js:10:26:10:33 | req.body | semmle.label | req.body | | clients3.js:12:11:12:16 | params [Expression] | semmle.label | params [Expression] | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js index 0c6e5e1d8a74..a671fdc53567 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js @@ -72,7 +72,7 @@ app.post('/v2/athena/all', async (req, res) => { }); app.post('/dynamodb-v3', async (req, res) => { - const userQueryStatement = req.body.query; // $ MISSING: Source + const userQueryStatement = req.body.query; // $ Source const client = new AthenaClient({ region: "us-east-1" }); const input = { StatementName: "STRING_VALUE", @@ -81,5 +81,5 @@ app.post('/dynamodb-v3', async (req, res) => { Description: "STRING_VALUE", }; const command = new CreatePreparedStatementCommand(input); - await client.send(command); // $ MISSING: Alert + await client.send(command); // $ Alert }); From 10f3a83fcb1df4652355b1d0f06db3e06694e6f9 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 16 Sep 2025 14:50:49 +0200 Subject: [PATCH 123/219] Fixed model type names Co-authored-by: asgerf --- javascript/ql/lib/ext/aws-sdk.model.yml | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml index dfda93d2d3f8..0598669006cf 100644 --- a/javascript/ql/lib/ext/aws-sdk.model.yml +++ b/javascript/ql/lib/ext/aws-sdk.model.yml @@ -3,10 +3,10 @@ extensions: pack: codeql/javascript-all extensible: typeModel data: - - ["AthenaClientV2", "aws-sdk", "Member[Athena]"] - - ["S3ClientV2", "aws-sdk", "Member[S3]"] - - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"] - - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"] + - ["aws-sdk.Athena", "aws-sdk", "Member[Athena]"] + - ["aws-sdk.S3", "aws-sdk", "Member[S3]"] + - ["aws-sdk.RDSDataService", "aws-sdk", "Member[RDSDataService]"] + - ["aws-sdk.DynamoDB", "aws-sdk", "Member[DynamoDB]"] - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"] - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"] - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] @@ -19,12 +19,12 @@ extensions: - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"] - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"] - ["AWS-V3-Common", "ReturnValue.Member[send].Argument[0]", "sql-injection"] - - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] - - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] - - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] - - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"] - - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"] - - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"] + - ["aws-sdk.Athena", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] + - ["aws-sdk.S3", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"] - addsTo: pack: codeql/javascript-all extensible: summaryModel @@ -42,11 +42,11 @@ extensions: extensible: sourceModel data: - ["AWS-V3-Common", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] - - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] - - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"] - - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] - - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.S3", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.S3", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"] From 4df8db0d7e2df76d50d9a97b6fe0dc800a87e1eb Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 16 Sep 2025 14:51:53 +0200 Subject: [PATCH 124/219] Renamed `AWS-V3-Common` to `@aws-sdk/client.Client` --- javascript/ql/lib/ext/aws-sdk.model.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml index 0598669006cf..40fa4b8b703a 100644 --- a/javascript/ql/lib/ext/aws-sdk.model.yml +++ b/javascript/ql/lib/ext/aws-sdk.model.yml @@ -7,10 +7,10 @@ extensions: - ["aws-sdk.S3", "aws-sdk", "Member[S3]"] - ["aws-sdk.RDSDataService", "aws-sdk", "Member[RDSDataService]"] - ["aws-sdk.DynamoDB", "aws-sdk", "Member[DynamoDB]"] - - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"] - - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"] - - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] - - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-athena", "Member[AthenaClient]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-s3", "Member[S3Client]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] - addsTo: pack: codeql/javascript-all extensible: sinkModel @@ -18,7 +18,7 @@ extensions: - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"] - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"] - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"] - - ["AWS-V3-Common", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["@aws-sdk/client.Client", "ReturnValue.Member[send].Argument[0]", "sql-injection"] - ["aws-sdk.Athena", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] - ["aws-sdk.S3", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] @@ -41,7 +41,7 @@ extensions: pack: codeql/javascript-all extensible: sourceModel data: - - ["AWS-V3-Common", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["@aws-sdk/client.Client", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] - ["aws-sdk.S3", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] From ca667b51319a86d7e83477cb4d5caf9c1309e592 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 17 Sep 2025 10:24:45 +0200 Subject: [PATCH 125/219] JS: fix test expectations from rebasing --- .../CWE-089/untyped/SqlInjection.expected | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index d6b000b03c25..f28fb93238d9 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -576,21 +576,21 @@ edges | pg-promise.js:22:11:22:15 | query | pg-promise.js:60:20:60:24 | query | provenance | | | pg-promise.js:22:11:22:15 | query | pg-promise.js:63:23:63:27 | query | provenance | | | pg-promise.js:22:11:22:15 | query | pg-promise.js:64:16:64:20 | query | provenance | | -| rds-client.js:8:11:8:36 | userQuery | rds-client.js:17:14:17:22 | userQuery | provenance | | -| rds-client.js:8:11:8:36 | userQuery | rds-client.js:33:24:33:32 | userQuery | provenance | | -| rds-client.js:8:23:8:30 | req.body | rds-client.js:8:11:8:36 | userQuery | provenance | | -| rds-client.js:13:11:18:5 | params1 [sql] | rds-client.js:19:51:19:57 | params1 [sql] | provenance | | -| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | rds-client.js:13:11:18:5 | params1 [sql] | provenance | | +| rds-client.js:8:11:8:19 | userQuery | rds-client.js:17:14:17:22 | userQuery | provenance | | +| rds-client.js:8:11:8:19 | userQuery | rds-client.js:33:24:33:32 | userQuery | provenance | | +| rds-client.js:8:23:8:30 | req.body | rds-client.js:8:11:8:19 | userQuery | provenance | | +| rds-client.js:13:11:13:17 | params1 [sql] | rds-client.js:19:51:19:57 | params1 [sql] | provenance | | +| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | rds-client.js:13:11:13:17 | params1 [sql] | provenance | | | rds-client.js:17:14:17:22 | userQuery | rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | provenance | | | rds-client.js:19:51:19:57 | params1 [sql] | rds-client.js:19:23:19:58 | new Exe ... arams1) | provenance | | -| rds-client.js:29:11:34:5 | params [sqlStatements] | rds-client.js:36:45:36:50 | params [sqlStatements] | provenance | | -| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | rds-client.js:29:11:34:5 | params [sqlStatements] | provenance | | +| rds-client.js:29:11:29:16 | params [sqlStatements] | rds-client.js:36:45:36:50 | params [sqlStatements] | provenance | | +| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | rds-client.js:29:11:29:16 | params [sqlStatements] | provenance | | | rds-client.js:33:24:33:32 | userQuery | rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | provenance | | | rds-client.js:36:45:36:50 | params [sqlStatements] | rds-client.js:36:23:36:51 | new Exe ... params) | provenance | | -| rds-client.js:44:11:44:36 | userQuery | rds-client.js:53:14:53:22 | userQuery | provenance | | -| rds-client.js:44:23:44:30 | req.body | rds-client.js:44:11:44:36 | userQuery | provenance | | -| rds-client.js:45:11:45:40 | userQueries | rds-client.js:61:24:61:34 | userQueries | provenance | | -| rds-client.js:45:25:45:32 | req.body | rds-client.js:45:11:45:40 | userQueries | provenance | | +| rds-client.js:44:11:44:19 | userQuery | rds-client.js:53:14:53:22 | userQuery | provenance | | +| rds-client.js:44:23:44:30 | req.body | rds-client.js:44:11:44:19 | userQuery | provenance | | +| rds-client.js:45:11:45:21 | userQueries | rds-client.js:61:24:61:34 | userQueries | provenance | | +| rds-client.js:45:25:45:32 | req.body | rds-client.js:45:11:45:21 | userQueries | provenance | | | rds-client.js:61:24:61:34 | userQueries | rds-client.js:61:40:61:42 | sql | provenance | | | rds-client.js:61:40:61:42 | sql | rds-client.js:61:50:61:52 | sql | provenance | | | redis.js:10:16:10:23 | req.body | redis.js:10:16:10:27 | req.body.key | provenance | Config | @@ -979,21 +979,21 @@ nodes | pg-promise.js:60:20:60:24 | query | semmle.label | query | | pg-promise.js:63:23:63:27 | query | semmle.label | query | | pg-promise.js:64:16:64:20 | query | semmle.label | query | -| rds-client.js:8:11:8:36 | userQuery | semmle.label | userQuery | +| rds-client.js:8:11:8:19 | userQuery | semmle.label | userQuery | | rds-client.js:8:23:8:30 | req.body | semmle.label | req.body | -| rds-client.js:13:11:18:5 | params1 [sql] | semmle.label | params1 [sql] | +| rds-client.js:13:11:13:17 | params1 [sql] | semmle.label | params1 [sql] | | rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | semmle.label | {\\n ... y\\n } [sql] | | rds-client.js:17:14:17:22 | userQuery | semmle.label | userQuery | | rds-client.js:19:23:19:58 | new Exe ... arams1) | semmle.label | new Exe ... arams1) | | rds-client.js:19:51:19:57 | params1 [sql] | semmle.label | params1 [sql] | -| rds-client.js:29:11:34:5 | params [sqlStatements] | semmle.label | params [sqlStatements] | +| rds-client.js:29:11:29:16 | params [sqlStatements] | semmle.label | params [sqlStatements] | | rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | semmle.label | {\\n ... y\\n } [sqlStatements] | | rds-client.js:33:24:33:32 | userQuery | semmle.label | userQuery | | rds-client.js:36:23:36:51 | new Exe ... params) | semmle.label | new Exe ... params) | | rds-client.js:36:45:36:50 | params [sqlStatements] | semmle.label | params [sqlStatements] | -| rds-client.js:44:11:44:36 | userQuery | semmle.label | userQuery | +| rds-client.js:44:11:44:19 | userQuery | semmle.label | userQuery | | rds-client.js:44:23:44:30 | req.body | semmle.label | req.body | -| rds-client.js:45:11:45:40 | userQueries | semmle.label | userQueries | +| rds-client.js:45:11:45:21 | userQueries | semmle.label | userQueries | | rds-client.js:45:25:45:32 | req.body | semmle.label | req.body | | rds-client.js:53:14:53:22 | userQuery | semmle.label | userQuery | | rds-client.js:61:24:61:34 | userQueries | semmle.label | userQueries | From c1ebe920a1dd140df56696a70a7643ea5478a07f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 10:07:44 +0200 Subject: [PATCH 126/219] Rust: Update expected file --- .../dataflow/sources/TaintSources.expected | 34 +++++++++++++++++++ .../dataflow/sources/web_frameworks.rs | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index 7182c231ba1b..96b6426baf41 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -110,6 +110,15 @@ | web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | @@ -120,6 +129,15 @@ | web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | @@ -130,3 +148,19 @@ | web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs index 2489ac2ee238..857fc3b479e8 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs @@ -269,7 +269,7 @@ mod warp_test { ); // A route with path, parameter, and `and_then` - let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ MISSING: Alert[rust/summary/taint-sources] + let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ Alert[rust/summary/taint-sources] | a: String | { sink(a); // $ MISSING: hasTaintFlow From a6d728a66d54c61b66edf1376d7eb09cb690e64a Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 17 Sep 2025 11:19:33 +0200 Subject: [PATCH 127/219] JS: Add test case with missing alert using `graphql` --- .../CWE-094/CodeInjection/graph-ql.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js new file mode 100644 index 000000000000..e0cd0dd56096 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js @@ -0,0 +1,36 @@ +const express = require('express'); +const { graphql, buildSchema } = require('graphql'); + +const app = express(); +app.use(express.json()); + +const schema = buildSchema(` + type Query { + greet(name: String!): String + calc(expr: String!): String + } +`); + +const root = { + greet: ({ name }) => { + return `Hello, ${name}!`; + }, + calc: ({ expr }) => { + try { + return eval(expr).toString(); // $ MISSING: Alert[js/code-injection] + } catch (e) { + return `Error: ${e.message}`; + } + } +}; + +app.post('/graphql', async (req, res) => { + const { query, variables } = req.body; // $ MISSING: Source[js/code-injection] + const result = await graphql({ + schema, + source: query, + rootValue: root, + variableValues: variables + }); + res.json(result); +}); From 4282005e3289bac344f2cc0f3dd431e63351c403 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 17 Sep 2025 11:25:31 +0200 Subject: [PATCH 128/219] JS: Add summary model for `graphql`'s `rootValue` --- javascript/ql/lib/ext/graph-ql.model.yml | 6 ++++++ .../CWE-094/CodeInjection/CodeInjection.expected | 14 ++++++++++++++ .../HeuristicSourceCodeInjection.expected | 13 +++++++++++++ .../Security/CWE-094/CodeInjection/graph-ql.js | 4 ++-- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 javascript/ql/lib/ext/graph-ql.model.yml diff --git a/javascript/ql/lib/ext/graph-ql.model.yml b/javascript/ql/lib/ext/graph-ql.model.yml new file mode 100644 index 000000000000..4b441579e56d --- /dev/null +++ b/javascript/ql/lib/ext/graph-ql.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["graphql", "Member[graphql]", "Argument[0].Member[source]", "Argument[0].Member[rootValue].AnyMember.Parameter[0].AnyMember", "taint"] diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected index 8ddaba30fc8c..140e0295d43f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected @@ -61,6 +61,7 @@ | fastify.js:107:23:107:31 | userInput | fastify.js:106:21:106:38 | request.query.code | fastify.js:107:23:107:31 | userInput | This code execution depends on a $@. | fastify.js:106:21:106:38 | request.query.code | user-provided value | | fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:41 | request.query | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:41 | request.query | user-provided value | | fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:51 | request ... plyCode | user-provided value | +| graph-ql.js:20:19:20:22 | expr | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:20:19:20:22 | expr | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value | | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value | | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value | | react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | @@ -154,6 +155,12 @@ edges | fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | | fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | | | fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | | +| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | | +| graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | | +| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | | +| graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | | +| graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | | +| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | @@ -288,6 +295,13 @@ nodes | fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code | | fastify.js:107:23:107:31 | userInput | semmle.label | userInput | | fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | +| graph-ql.js:18:12:18:15 | expr | semmle.label | expr | +| graph-ql.js:18:12:18:15 | expr | semmle.label | expr | +| graph-ql.js:20:19:20:22 | expr | semmle.label | expr | +| graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } | +| graph-ql.js:28:11:28:15 | query | semmle.label | query | +| graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body | +| graph-ql.js:31:13:31:17 | query | semmle.label | query | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | | react-native.js:7:7:7:13 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected index db39855c5e5c..5acafe121672 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected @@ -55,6 +55,12 @@ edges | fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | | fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | | | fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | | +| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | | +| graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | | +| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | | +| graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | | +| graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | | +| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | @@ -191,6 +197,13 @@ nodes | fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code | | fastify.js:107:23:107:31 | userInput | semmle.label | userInput | | fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | +| graph-ql.js:18:12:18:15 | expr | semmle.label | expr | +| graph-ql.js:18:12:18:15 | expr | semmle.label | expr | +| graph-ql.js:20:19:20:22 | expr | semmle.label | expr | +| graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } | +| graph-ql.js:28:11:28:15 | query | semmle.label | query | +| graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body | +| graph-ql.js:31:13:31:17 | query | semmle.label | query | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | | react-native.js:7:7:7:13 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js index e0cd0dd56096..46e4ea20e95c 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js @@ -17,7 +17,7 @@ const root = { }, calc: ({ expr }) => { try { - return eval(expr).toString(); // $ MISSING: Alert[js/code-injection] + return eval(expr).toString(); // $ Alert[js/code-injection] } catch (e) { return `Error: ${e.message}`; } @@ -25,7 +25,7 @@ const root = { }; app.post('/graphql', async (req, res) => { - const { query, variables } = req.body; // $ MISSING: Source[js/code-injection] + const { query, variables } = req.body; // $ Source[js/code-injection] const result = await graphql({ schema, source: query, From 6d461d6b506ea09ca458126f2b54d6cefd8fd77a Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 17 Sep 2025 11:29:26 +0200 Subject: [PATCH 129/219] JS: Add change note --- javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md diff --git a/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md b/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md new file mode 100644 index 000000000000..cb0b886a6f75 --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. From 5e76d5ff3fff2183700ab6e1805166f090de664f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 17 Sep 2025 11:58:39 +0200 Subject: [PATCH 130/219] C#: Rename predicate as per review, and fixup qltest. --- .../semmle/code/csharp/controlflow/Guards.qll | 12 +++---- csharp/ql/test/query-tests/Nullness/E.cs | 13 +++++-- .../Nullness/Implications.expected | 3 +- .../query-tests/Nullness/NullCheck.expected | 3 +- .../query-tests/Nullness/NullMaybe.expected | 34 +++++++++++++++++++ 5 files changed, 54 insertions(+), 11 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 077e95613e68..7185e39a45b2 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -274,7 +274,7 @@ module AbstractValues { private import AbstractValues /** Gets the value resulting from matching `null` against `pat`. */ -private boolean patternContainsNull(PatternExpr pat) { +private boolean patternMatchesNull(PatternExpr pat) { pat instanceof NullLiteral and result = true or not pat instanceof NullLiteral and @@ -283,18 +283,16 @@ private boolean patternContainsNull(PatternExpr pat) { not pat instanceof AndPatternExpr and result = false or - result = patternContainsNull(pat.(NotPatternExpr).getPattern()).booleanNot() + result = patternMatchesNull(pat.(NotPatternExpr).getPattern()).booleanNot() or exists(OrPatternExpr ope | pat = ope | result = - patternContainsNull(ope.getLeftOperand()) - .booleanOr(patternContainsNull(ope.getRightOperand())) + patternMatchesNull(ope.getLeftOperand()).booleanOr(patternMatchesNull(ope.getRightOperand())) ) or exists(AndPatternExpr ape | pat = ape | result = - patternContainsNull(ape.getLeftOperand()) - .booleanAnd(patternContainsNull(ape.getRightOperand())) + patternMatchesNull(ape.getLeftOperand()).booleanAnd(patternMatchesNull(ape.getRightOperand())) ) } @@ -387,7 +385,7 @@ class DereferenceableExpr extends Expr { isNull = branch or // E.g. `x is string` or `x is ""` - branch.booleanNot() = patternContainsNull(pm.getPattern()) and + branch.booleanNot() = patternMatchesNull(pm.getPattern()) and isNull = false or exists(TypePatternExpr tpe | diff --git a/csharp/ql/test/query-tests/Nullness/E.cs b/csharp/ql/test/query-tests/Nullness/E.cs index f8264523b687..ef5886997801 100644 --- a/csharp/ql/test/query-tests/Nullness/E.cs +++ b/csharp/ql/test/query-tests/Nullness/E.cs @@ -432,7 +432,7 @@ static bool Ex44(int? i, IEnumerable @is) return @is.Any(); } - static void Ex45(string s) + static void Ex45(string s) // $ Source[cs/dereferenced-value-may-be-null] { if (s is null) { @@ -441,7 +441,7 @@ static void Ex45(string s) if (s is not not null) { - s.ToString(); // $ MISSING: Alert[cs/dereferenced-value-is-always-null] + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] MISSING: Alert[cs/dereferenced-value-is-always-null] } if (s is not null) @@ -453,6 +453,15 @@ static void Ex45(string s) { s.ToString(); // GOOD } + + if (s is not object) + { + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] + } + else + { + s.ToString(); // GOOD + } } } diff --git a/csharp/ql/test/query-tests/Nullness/Implications.expected b/csharp/ql/test/query-tests/Nullness/Implications.expected index ec660dd44a42..584b4e3ad1a6 100644 --- a/csharp/ql/test/query-tests/Nullness/Implications.expected +++ b/csharp/ql/test/query-tests/Nullness/Implications.expected @@ -1302,9 +1302,10 @@ | E.cs:432:16:432:24 | call to method Any | true | E.cs:432:16:432:18 | access to parameter is | non-empty | | E.cs:437:13:437:21 | ... is ... | false | E.cs:437:13:437:13 | access to parameter s | non-null | | E.cs:437:13:437:21 | ... is ... | true | E.cs:437:13:437:13 | access to parameter s | null | -| E.cs:442:13:442:29 | ... is ... | true | E.cs:442:13:442:13 | access to parameter s | non-null | +| E.cs:442:13:442:29 | ... is ... | false | E.cs:442:13:442:13 | access to parameter s | non-null | | E.cs:447:13:447:25 | ... is ... | true | E.cs:447:13:447:13 | access to parameter s | non-null | | E.cs:452:13:452:23 | ... is ... | true | E.cs:452:13:452:13 | access to parameter s | non-null | +| E.cs:457:13:457:27 | ... is ... | false | E.cs:457:13:457:13 | access to parameter s | non-null | | F.cs:8:9:8:9 | access to local variable o | non-null | F.cs:7:20:7:23 | null | non-null | | F.cs:8:9:8:9 | access to local variable o | null | F.cs:7:20:7:23 | null | null | | F.cs:14:9:14:9 | access to local variable o | non-null | F.cs:13:21:13:24 | null | non-null | diff --git a/csharp/ql/test/query-tests/Nullness/NullCheck.expected b/csharp/ql/test/query-tests/Nullness/NullCheck.expected index 600699b6156c..7b4c89a0b219 100644 --- a/csharp/ql/test/query-tests/Nullness/NullCheck.expected +++ b/csharp/ql/test/query-tests/Nullness/NullCheck.expected @@ -300,9 +300,10 @@ | E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | true | false | | E.cs:437:13:437:21 | ... is ... | E.cs:437:13:437:13 | access to parameter s | false | false | | E.cs:437:13:437:21 | ... is ... | E.cs:437:13:437:13 | access to parameter s | true | true | -| E.cs:442:13:442:29 | ... is ... | E.cs:442:13:442:13 | access to parameter s | true | false | +| E.cs:442:13:442:29 | ... is ... | E.cs:442:13:442:13 | access to parameter s | false | false | | E.cs:447:13:447:25 | ... is ... | E.cs:447:13:447:13 | access to parameter s | true | false | | E.cs:452:13:452:23 | ... is ... | E.cs:452:13:452:13 | access to parameter s | true | false | +| E.cs:457:13:457:27 | ... is ... | E.cs:457:13:457:13 | access to parameter s | false | false | | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | Forwarding.cs:9:14:9:14 | access to local variable s | false | false | | Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | Forwarding.cs:14:13:14:13 | access to local variable s | true | false | | Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | false | false | diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 876cde548b6a..816a8b3b4404 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -83,6 +83,8 @@ | E.cs:417:34:417:34 | access to parameter i | E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | | E.cs:423:38:423:38 | access to parameter i | E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this | | E.cs:430:39:430:39 | access to parameter i | E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:427:27:427:27 | i | i | E.cs:427:27:427:27 | i | this | +| E.cs:444:13:444:13 | access to parameter s | E.cs:435:29:435:29 | SSA param(s) | E.cs:444:13:444:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:437:13:437:21 | ... is ... | this | +| E.cs:459:13:459:13 | access to parameter s | E.cs:435:29:435:29 | SSA param(s) | E.cs:459:13:459:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:437:13:437:21 | ... is ... | this | | GuardedString.cs:35:31:35:31 | access to local variable s | GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this | | NullMaybeBad.cs:7:27:7:27 | access to parameter o | NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null at this access because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this | | Params.cs:14:17:14:20 | access to parameter args | Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | Variable $@ may be null at this access because of $@ null argument. | Params.cs:12:36:12:39 | args | args | Params.cs:20:12:20:15 | null | this | @@ -445,7 +447,23 @@ edges | E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | | E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | | E.cs:435:29:435:29 | SSA param(s) | E.cs:437:13:437:21 | [true] ... is ... | +| E.cs:437:13:437:21 | [true] ... is ... | E.cs:438:9:440:9 | {...} | | E.cs:437:13:437:21 | [true] ... is ... | E.cs:439:13:439:13 | access to parameter s | +| E.cs:438:9:440:9 | {...} | E.cs:442:9:445:9 | if (...) ... | +| E.cs:442:9:445:9 | if (...) ... | E.cs:442:22:442:29 | [no-match] not ... | +| E.cs:442:13:442:29 | [true] ... is ... | E.cs:443:9:445:9 | {...} | +| E.cs:442:13:442:29 | [true] ... is ... | E.cs:444:13:444:13 | access to parameter s | +| E.cs:442:18:442:29 | [match] not ... | E.cs:442:13:442:29 | [true] ... is ... | +| E.cs:442:22:442:29 | [no-match] not ... | E.cs:442:18:442:29 | [match] not ... | +| E.cs:443:9:445:9 | {...} | E.cs:447:9:450:9 | if (...) ... | +| E.cs:447:9:450:9 | if (...) ... | E.cs:447:18:447:25 | [no-match] not ... | +| E.cs:447:13:447:25 | [false] ... is ... | E.cs:452:9:455:9 | if (...) ... | +| E.cs:447:18:447:25 | [no-match] not ... | E.cs:447:13:447:25 | [false] ... is ... | +| E.cs:452:9:455:9 | if (...) ... | E.cs:452:13:452:23 | [false] ... is ... | +| E.cs:452:13:452:23 | [false] ... is ... | E.cs:457:9:464:9 | if (...) ... | +| E.cs:457:9:464:9 | if (...) ... | E.cs:457:18:457:27 | [match] not ... | +| E.cs:457:13:457:27 | [true] ... is ... | E.cs:459:13:459:13 | access to parameter s | +| E.cs:457:18:457:27 | [match] not ... | E.cs:457:13:457:27 | [true] ... is ... | | F.cs:7:16:7:23 | SSA def(o) | F.cs:8:9:8:9 | access to local variable o | | Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... | | Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... | @@ -894,7 +912,23 @@ nodes | E.cs:430:39:430:39 | access to parameter i | | E.cs:435:29:435:29 | SSA param(s) | | E.cs:437:13:437:21 | [true] ... is ... | +| E.cs:438:9:440:9 | {...} | | E.cs:439:13:439:13 | access to parameter s | +| E.cs:442:9:445:9 | if (...) ... | +| E.cs:442:13:442:29 | [true] ... is ... | +| E.cs:442:18:442:29 | [match] not ... | +| E.cs:442:22:442:29 | [no-match] not ... | +| E.cs:443:9:445:9 | {...} | +| E.cs:444:13:444:13 | access to parameter s | +| E.cs:447:9:450:9 | if (...) ... | +| E.cs:447:13:447:25 | [false] ... is ... | +| E.cs:447:18:447:25 | [no-match] not ... | +| E.cs:452:9:455:9 | if (...) ... | +| E.cs:452:13:452:23 | [false] ... is ... | +| E.cs:457:9:464:9 | if (...) ... | +| E.cs:457:13:457:27 | [true] ... is ... | +| E.cs:457:18:457:27 | [match] not ... | +| E.cs:459:13:459:13 | access to parameter s | | F.cs:7:16:7:23 | SSA def(o) | | F.cs:8:9:8:9 | access to local variable o | | Forwarding.cs:7:16:7:23 | SSA def(s) | From 4e8343664fd083f6777d7930f13cb530e1ddc297 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 17 Sep 2025 10:13:40 +0000 Subject: [PATCH 131/219] Post-release preparation for codeql-cli-2.23.1 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 55e8a97e16bb..266007af096c 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.17 +version: 0.4.18-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index ea42e41ebb88..e4a69c7cd61c 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.9 +version: 0.6.10-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 6e1a13317a02..63500a12a2f9 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.6.0 +version: 5.6.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 5a74eac8d615..8b6b27302cc9 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.0 +version: 1.5.1-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 8b069392a0b3..bc2dd9a229ce 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.48 +version: 1.7.49-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 197f3182a634..82cad1a64729 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.48 +version: 1.7.49-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 13982fd50da9..f5795e125581 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.2.4 +version: 5.2.5-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 88dd741a89d0..724ec4c0097a 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.4.0 +version: 1.4.1-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 365c82cf84c4..3a3f60920be8 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.31 +version: 1.0.32-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 77b35bffac24..1e8bdd280f7b 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.3.4 +version: 4.3.5-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 8060d5f6b3db..9320b29d8e88 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.4.5 +version: 1.4.6-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 77416e899dcb..3009b1b327f1 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.7.0 +version: 7.7.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 947cfcb6d134..01bf070bb074 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.8.0 +version: 1.8.1-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 3656daac7b72..1d05d1003f35 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.11 +version: 2.6.12-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 0b379a03d5bb..916ad1339b2e 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.1.0 +version: 2.1.1-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index a0249432210d..72c2f165759a 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.31 +version: 1.0.32-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index a3e40c6586e4..61875fc7f4e7 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.15 +version: 4.0.16-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index ec238b337987..edf6366c64ba 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.6.5 +version: 1.6.6-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index a76c7d0b90af..a2288bd3799f 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.0.4 +version: 5.0.5-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index cea6e01dce68..084d64e8b029 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.4.5 +version: 1.4.6-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index d0e9a11ec16f..421a604aa3df 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.16 +version: 0.1.17-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 8debbae1f51a..3c122e1853b9 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.16 +version: 0.1.17-dev groups: - rust - queries diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 5bd473ce43bc..8b0fc6c6f7ae 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.5 +version: 0.0.6-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index ab574bfdbac6..56945c0709d4 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.15 +version: 2.0.16-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 9799550c8361..4c0a9bdfe8c2 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.15 +version: 2.0.16-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index e974c131a88b..b6f4e8c2bc11 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 8f5a9260f27a..3741ff55855d 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.9 +version: 0.0.10-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index bea42fd1b619..e67c274bf518 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 28cdc4285882..5aebaf9bffb1 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index a944c9d7ab4c..8337226f574d 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.7 +version: 2.0.8-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 005cbadd38b1..8f72fd8ad3fc 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.31 +version: 1.0.32-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 09f9013ac103..aabb0356b861 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index b777138b0008..98566858903b 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 5fd940634b31..954a850cf0f5 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.12 +version: 0.0.13-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index f982bade08da..2bf6f01d218c 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.15 +version: 2.0.16-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 8885de0dbd06..b01883668b7d 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 703dee01cba4..1c1f5670d3e0 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.18 +version: 2.0.19-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 6b8d051c622a..0908201b1822 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index b443b23dac2d..cbbdd8963410 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.31 +version: 1.0.32-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 6069c9b7ab1a..88950de258f4 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.7 +version: 5.0.8-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 61d22677b832..f49b81cec754 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.5 +version: 1.2.6-dev groups: - swift - queries From 6c18b4de40a5caad9cc80395604f96e9522106e6 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 17 Sep 2025 12:21:21 +0200 Subject: [PATCH 132/219] JS: Add test case for graph ql variableValues injection --- .../CWE-094/CodeInjection/graph-ql.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js index 46e4ea20e95c..f33d6c7f4d00 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js @@ -33,4 +33,24 @@ app.post('/graphql', async (req, res) => { variableValues: variables }); res.json(result); + + const root1 = { + greet: ({ name, title }) => { + return eval(name + title).toString(); // $ MISSING: Alert[js/code-injection] + } + }; + graphql({ + schema: buildSchema(` + type Query { + greet(name: String!, title: String): String + } + `), + source: ` + query GreetUser($name: String!, $title: String) { + greet(name: $name, title: $title) + } + `, + rootValue: root1, + variableValues: variables + }); }); From 7affcf40c29fc98f75301c0b6313af505eff1a54 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 17 Sep 2025 12:24:14 +0200 Subject: [PATCH 133/219] JS: Add `variableValues` to the previous summaryModel to enchance the flow. --- javascript/ql/lib/ext/graph-ql.model.yml | 2 +- .../CodeInjection/CodeInjection.expected | 27 ++++++++++++++++--- .../HeuristicSourceCodeInjection.expected | 26 +++++++++++++++--- .../CWE-094/CodeInjection/graph-ql.js | 2 +- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/ext/graph-ql.model.yml b/javascript/ql/lib/ext/graph-ql.model.yml index 4b441579e56d..08233d1135da 100644 --- a/javascript/ql/lib/ext/graph-ql.model.yml +++ b/javascript/ql/lib/ext/graph-ql.model.yml @@ -3,4 +3,4 @@ extensions: pack: codeql/javascript-all extensible: summaryModel data: - - ["graphql", "Member[graphql]", "Argument[0].Member[source]", "Argument[0].Member[rootValue].AnyMember.Parameter[0].AnyMember", "taint"] + - ["graphql", "Member[graphql]", "Argument[0].Member[source,variableValues]", "Argument[0].Member[rootValue].AnyMember.Parameter[0]", "taint"] diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected index 140e0295d43f..3f5d8abed8a4 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected @@ -62,6 +62,7 @@ | fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:41 | request.query | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:41 | request.query | user-provided value | | fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:51 | request ... plyCode | user-provided value | | graph-ql.js:20:19:20:22 | expr | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:20:19:20:22 | expr | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value | +| graph-ql.js:39:19:39:30 | name + title | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:39:19:39:30 | name + title | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value | | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value | | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value | | react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | @@ -155,12 +156,23 @@ edges | fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | | fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | | | fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | | -| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | | +| graph-ql.js:18:10:18:17 | { expr } | graph-ql.js:18:12:18:15 | expr | provenance | | | graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | | | graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | | +| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:18:28:26 | variables | provenance | | | graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | | +| graph-ql.js:28:18:28:26 | variables | graph-ql.js:33:21:33:29 | variables | provenance | | +| graph-ql.js:28:18:28:26 | variables | graph-ql.js:54:21:54:29 | variables | provenance | | | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | | -| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | | +| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:10:18:17 | { expr } | provenance | | +| graph-ql.js:33:21:33:29 | variables | graph-ql.js:18:10:18:17 | { expr } | provenance | | +| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:15:38:18 | name | provenance | | +| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:21:38:25 | title | provenance | | +| graph-ql.js:38:15:38:18 | name | graph-ql.js:39:19:39:22 | name | provenance | | +| graph-ql.js:38:21:38:25 | title | graph-ql.js:39:26:39:30 | title | provenance | | +| graph-ql.js:39:19:39:22 | name | graph-ql.js:39:19:39:30 | name + title | provenance | | +| graph-ql.js:39:26:39:30 | title | graph-ql.js:39:19:39:30 | name + title | provenance | | +| graph-ql.js:54:21:54:29 | variables | graph-ql.js:38:13:38:27 | { name, title } | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | @@ -295,13 +307,22 @@ nodes | fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code | | fastify.js:107:23:107:31 | userInput | semmle.label | userInput | | fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | -| graph-ql.js:18:12:18:15 | expr | semmle.label | expr | +| graph-ql.js:18:10:18:17 | { expr } | semmle.label | { expr } | | graph-ql.js:18:12:18:15 | expr | semmle.label | expr | | graph-ql.js:20:19:20:22 | expr | semmle.label | expr | | graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } | | graph-ql.js:28:11:28:15 | query | semmle.label | query | +| graph-ql.js:28:18:28:26 | variables | semmle.label | variables | | graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body | | graph-ql.js:31:13:31:17 | query | semmle.label | query | +| graph-ql.js:33:21:33:29 | variables | semmle.label | variables | +| graph-ql.js:38:13:38:27 | { name, title } | semmle.label | { name, title } | +| graph-ql.js:38:15:38:18 | name | semmle.label | name | +| graph-ql.js:38:21:38:25 | title | semmle.label | title | +| graph-ql.js:39:19:39:22 | name | semmle.label | name | +| graph-ql.js:39:19:39:30 | name + title | semmle.label | name + title | +| graph-ql.js:39:26:39:30 | title | semmle.label | title | +| graph-ql.js:54:21:54:29 | variables | semmle.label | variables | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | | react-native.js:7:7:7:13 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected index 5acafe121672..3d4022d8fb6a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected @@ -55,12 +55,23 @@ edges | fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | | fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | | | fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | | -| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | | +| graph-ql.js:18:10:18:17 | { expr } | graph-ql.js:18:12:18:15 | expr | provenance | | | graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | | | graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | | +| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:18:28:26 | variables | provenance | | | graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | | +| graph-ql.js:28:18:28:26 | variables | graph-ql.js:33:21:33:29 | variables | provenance | | +| graph-ql.js:28:18:28:26 | variables | graph-ql.js:54:21:54:29 | variables | provenance | | | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | | -| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | | +| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:10:18:17 | { expr } | provenance | | +| graph-ql.js:33:21:33:29 | variables | graph-ql.js:18:10:18:17 | { expr } | provenance | | +| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:15:38:18 | name | provenance | | +| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:21:38:25 | title | provenance | | +| graph-ql.js:38:15:38:18 | name | graph-ql.js:39:19:39:22 | name | provenance | | +| graph-ql.js:38:21:38:25 | title | graph-ql.js:39:26:39:30 | title | provenance | | +| graph-ql.js:39:19:39:22 | name | graph-ql.js:39:19:39:30 | name + title | provenance | | +| graph-ql.js:39:26:39:30 | title | graph-ql.js:39:19:39:30 | name + title | provenance | | +| graph-ql.js:54:21:54:29 | variables | graph-ql.js:38:13:38:27 | { name, title } | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | @@ -197,13 +208,22 @@ nodes | fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code | | fastify.js:107:23:107:31 | userInput | semmle.label | userInput | | fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | -| graph-ql.js:18:12:18:15 | expr | semmle.label | expr | +| graph-ql.js:18:10:18:17 | { expr } | semmle.label | { expr } | | graph-ql.js:18:12:18:15 | expr | semmle.label | expr | | graph-ql.js:20:19:20:22 | expr | semmle.label | expr | | graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } | | graph-ql.js:28:11:28:15 | query | semmle.label | query | +| graph-ql.js:28:18:28:26 | variables | semmle.label | variables | | graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body | | graph-ql.js:31:13:31:17 | query | semmle.label | query | +| graph-ql.js:33:21:33:29 | variables | semmle.label | variables | +| graph-ql.js:38:13:38:27 | { name, title } | semmle.label | { name, title } | +| graph-ql.js:38:15:38:18 | name | semmle.label | name | +| graph-ql.js:38:21:38:25 | title | semmle.label | title | +| graph-ql.js:39:19:39:22 | name | semmle.label | name | +| graph-ql.js:39:19:39:30 | name + title | semmle.label | name + title | +| graph-ql.js:39:26:39:30 | title | semmle.label | title | +| graph-ql.js:54:21:54:29 | variables | semmle.label | variables | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | | react-native.js:7:7:7:13 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js index f33d6c7f4d00..f68f47cf3acd 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js @@ -36,7 +36,7 @@ app.post('/graphql', async (req, res) => { const root1 = { greet: ({ name, title }) => { - return eval(name + title).toString(); // $ MISSING: Alert[js/code-injection] + return eval(name + title).toString(); // $ Alert[js/code-injection] } }; graphql({ From afc98cacbedf7952f6e3c61683e1a10121ba5fc5 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 17 Sep 2025 12:49:25 +0200 Subject: [PATCH 134/219] C#: Add change note. --- csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md diff --git a/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md b/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md new file mode 100644 index 000000000000..49b76c25b0bc --- /dev/null +++ b/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. From 1bccf42556fa214a6e7d44e3f0322cc09d008b09 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 17 Sep 2025 13:59:54 +0100 Subject: [PATCH 135/219] Rust: Update test results following fix on main. --- .../library-tests/dataflow/local/DataFlowStep.expected | 5 +++-- .../library-tests/dataflow/local/inline-flow.expected | 8 ++++++++ rust/ql/test/library-tests/dataflow/local/main.rs | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 0af30149e749..b2fc845081cd 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -111,11 +111,12 @@ localStep | main.rs:77:9:77:9 | k | main.rs:77:5:77:5 | j | | main.rs:77:9:77:9 | k | main.rs:79:10:79:10 | k | | main.rs:81:9:81:13 | mut l | main.rs:81:13:81:13 | l | +| main.rs:81:13:81:13 | [SSA] l | main.rs:82:9:82:9 | l | +| main.rs:81:13:81:13 | l | main.rs:81:13:81:13 | [SSA] l | | main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l | -| main.rs:82:5:82:5 | [SSA] l | main.rs:82:9:82:9 | l | +| main.rs:82:5:82:5 | [SSA] l | main.rs:83:10:83:10 | l | | main.rs:82:5:82:5 | l | main.rs:82:5:82:5 | [SSA] l | | main.rs:82:9:82:9 | l | main.rs:82:5:82:5 | l | -| main.rs:82:9:82:9 | l | main.rs:83:10:83:10 | l | | main.rs:87:9:87:9 | [SSA] a | main.rs:88:5:88:5 | a | | main.rs:87:9:87:9 | a | main.rs:87:9:87:9 | [SSA] a | | main.rs:87:9:87:9 | a | main.rs:87:9:87:9 | a | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index eafe3a7452eb..00640ed9aa47 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -31,6 +31,9 @@ edges | main.rs:76:9:76:9 | k | main.rs:79:10:79:10 | k | provenance | | | main.rs:76:13:76:21 | source(...) | main.rs:76:9:76:9 | k | provenance | | | main.rs:77:5:77:5 | j | main.rs:78:10:78:10 | j | provenance | | +| main.rs:81:9:81:13 | mut l | main.rs:82:5:82:5 | l | provenance | | +| main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l | provenance | | +| main.rs:82:5:82:5 | l | main.rs:83:10:83:10 | l | provenance | | | main.rs:115:9:115:9 | i [&ref] | main.rs:116:11:116:11 | i [&ref] | provenance | | | main.rs:115:13:115:31 | ...::new(...) [&ref] | main.rs:115:9:115:9 | i [&ref] | provenance | | | main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [&ref] | provenance | MaD:1 | @@ -279,6 +282,10 @@ nodes | main.rs:77:5:77:5 | j | semmle.label | j | | main.rs:78:10:78:10 | j | semmle.label | j | | main.rs:79:10:79:10 | k | semmle.label | k | +| main.rs:81:9:81:13 | mut l | semmle.label | mut l | +| main.rs:81:17:81:25 | source(...) | semmle.label | source(...) | +| main.rs:82:5:82:5 | l | semmle.label | l | +| main.rs:83:10:83:10 | l | semmle.label | l | | main.rs:115:9:115:9 | i [&ref] | semmle.label | i [&ref] | | main.rs:115:13:115:31 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | | main.rs:115:22:115:30 | source(...) | semmle.label | source(...) | @@ -553,6 +560,7 @@ testFailures | main.rs:71:10:71:10 | i | main.rs:70:9:70:17 | source(...) | main.rs:71:10:71:10 | i | $@ | main.rs:70:9:70:17 | source(...) | source(...) | | main.rs:78:10:78:10 | j | main.rs:76:13:76:21 | source(...) | main.rs:78:10:78:10 | j | $@ | main.rs:76:13:76:21 | source(...) | source(...) | | main.rs:79:10:79:10 | k | main.rs:76:13:76:21 | source(...) | main.rs:79:10:79:10 | k | $@ | main.rs:76:13:76:21 | source(...) | source(...) | +| main.rs:83:10:83:10 | l | main.rs:81:17:81:25 | source(...) | main.rs:83:10:83:10 | l | $@ | main.rs:81:17:81:25 | source(...) | source(...) | | main.rs:116:10:116:11 | * ... | main.rs:115:22:115:30 | source(...) | main.rs:116:10:116:11 | * ... | $@ | main.rs:115:22:115:30 | source(...) | source(...) | | main.rs:124:10:124:12 | a.0 | main.rs:123:14:123:22 | source(...) | main.rs:124:10:124:12 | a.0 | $@ | main.rs:123:14:123:22 | source(...) | source(...) | | main.rs:132:10:132:11 | a1 | main.rs:129:17:129:26 | source(...) | main.rs:132:10:132:11 | a1 | $@ | main.rs:129:17:129:26 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs index d352eb0cbf19..7cab42da52b4 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -80,7 +80,7 @@ fn assignment() { let mut l = source(8); l = l; - sink(l); // $ MISSING: hasValueFlow=8 + sink(l); // $ hasValueFlow=8 } fn block_expression1() -> i64 { From d5a238768c6c232620dbc8912fd2e60f62029668 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 17 Sep 2025 16:37:23 +0200 Subject: [PATCH 136/219] Shared/Cfg: Fix missing JoinBlockPredecessor. --- shared/controlflow/codeql/controlflow/Cfg.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/shared/controlflow/codeql/controlflow/Cfg.qll b/shared/controlflow/codeql/controlflow/Cfg.qll index 4945c8da9cfa..9e0943854057 100644 --- a/shared/controlflow/codeql/controlflow/Cfg.qll +++ b/shared/controlflow/codeql/controlflow/Cfg.qll @@ -1020,6 +1020,12 @@ module MakeWithSplitting< not jbp instanceof BasicBlocks::EntryBasicBlock and id = idOfAstNode(jbp.getFirstNode().(AstCfgNode).getAstNode()) and kind = 1 + or + exists(AnnotatedExitNode aen | + jbp.getFirstNode() = aen and + id = idOfCfgScope(aen.getScope()) and + if aen.isNormal() then kind = 2 else kind = 3 + ) } string getSplitString(BasicBlocks::JoinPredecessorBasicBlock jbp) { From 34b40a14e876481909726ce811663a9683d1d62a Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Wed, 17 Sep 2025 16:22:22 +0100 Subject: [PATCH 137/219] Java: Make a TC overlay caller. --- java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 4b436edc6aa6..23e9f680c974 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -83,6 +83,7 @@ overlay[caller?] pragma[inline] predicate localFlow(Node node1, Node node2) { node1 = node2 or localFlowStepPlus(node1, node2) } +overlay[caller?] private predicate localFlowStepPlus(Node node1, Node node2) = fastTC(localFlowStep/2)(node1, node2) /** From aba2cb487e7ef76dee681c2af85f789091e09670 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 17 Sep 2025 20:27:10 +0200 Subject: [PATCH 138/219] Rust: Convert data flow test to `@kind path-problem` --- .../dataflow/sources/InlineFlow.expected | 1779 +++++++++++++++++ .../dataflow/sources/InlineFlow.ql | 9 + 2 files changed, 1788 insertions(+) diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index e69de29bb2d1..88a728253d80 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -0,0 +1,1779 @@ +models +| 1 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 2 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 3 | Source: ::file_name; ReturnValue; file | +| 4 | Source: ::path; ReturnValue; file | +| 5 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 6 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 7 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 8 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 9 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 10 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 11 | Source: ::file_name; ReturnValue; file | +| 12 | Source: ::path; ReturnValue; file | +| 13 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 14 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 15 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 16 | Source: std::env::args; ReturnValue.Element; commandargs | +| 17 | Source: std::env::args_os; ReturnValue.Element; commandargs | +| 18 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 19 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 20 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | +| 21 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | +| 22 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | +| 23 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 24 | Source: std::fs::read; ReturnValue; file | +| 25 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 26 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 27 | Source: std::fs::read_to_string; ReturnValue; file | +| 28 | Source: std::io::stdio::stdin; ReturnValue; stdin | +| 29 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 30 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 31 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 32 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | +| 33 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 34 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | +| 35 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 36 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 37 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 38 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 42 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 43 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 46 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | +| 47 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | +| 48 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | +| 49 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | +| 50 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 51 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | +| 52 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | +| 53 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 54 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 55 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 56 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 57 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 58 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 59 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | +| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | +| 63 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 64 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | +| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 72 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 73 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 74 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 75 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 76 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 77 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | +| 78 | Summary: ::new; Argument[0]; ReturnValue; value | +| 79 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 80 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 81 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 82 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 83 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 84 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 85 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 86 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 87 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 88 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 89 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 90 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 91 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 92 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 93 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 94 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 95 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | +| 96 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 97 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 98 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | +| 99 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 100 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 101 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 102 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 103 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 104 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | +| 105 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | +| 106 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 107 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 108 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 109 | Summary: ::lock; Argument[self]; ReturnValue; taint | +| 110 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 111 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 112 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 113 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 114 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 115 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 116 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 117 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | +| 118 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | +| 119 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +edges +| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:21 | +| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:22 | +| test.rs:11:9:11:12 | var1 | test.rs:14:10:14:13 | var1 | provenance | | +| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:21 | +| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:79 | +| test.rs:11:16:11:59 | ... .expect(...) | test.rs:11:9:11:12 | var1 | provenance | | +| test.rs:12:9:12:12 | var2 | test.rs:15:10:15:13 | var2 | provenance | | +| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:22 | +| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:75 | +| test.rs:12:16:12:48 | ... .unwrap() | test.rs:12:9:12:12 | var2 | provenance | | +| test.rs:29:9:29:12 | args [element] | test.rs:30:20:30:23 | args [element] | provenance | | +| test.rs:29:9:29:12 | args [element] | test.rs:31:17:31:20 | args [element] | provenance | | +| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:16 | +| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:34 | +| test.rs:29:29:29:54 | ... .collect() [element] | test.rs:29:9:29:12 | args [element] | provenance | | +| test.rs:30:9:30:15 | my_path [&ref] | test.rs:36:10:36:16 | my_path | provenance | | +| test.rs:30:19:30:26 | &... [&ref] | test.rs:30:9:30:15 | my_path [&ref] | provenance | | +| test.rs:30:20:30:23 | args [element] | test.rs:30:20:30:26 | args[0] | provenance | | +| test.rs:30:20:30:26 | args[0] | test.rs:30:19:30:26 | &... [&ref] | provenance | | +| test.rs:31:9:31:12 | arg1 [&ref] | test.rs:37:10:37:13 | arg1 | provenance | | +| test.rs:31:16:31:23 | &... [&ref] | test.rs:31:9:31:12 | arg1 [&ref] | provenance | | +| test.rs:31:17:31:20 | args [element] | test.rs:31:17:31:23 | args[1] | provenance | | +| test.rs:31:17:31:23 | args[1] | test.rs:31:16:31:23 | &... [&ref] | provenance | | +| test.rs:32:9:32:12 | arg2 | test.rs:38:10:38:13 | arg2 | provenance | | +| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:16 | +| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:35 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:75 | +| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:9:32:12 | arg2 | provenance | | +| test.rs:33:9:33:12 | arg3 | test.rs:39:10:39:13 | arg3 | provenance | | +| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:17 | +| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:35 | +| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:75 | +| test.rs:33:16:33:50 | ... .unwrap() | test.rs:33:9:33:12 | arg3 | provenance | | +| test.rs:34:9:34:12 | arg4 | test.rs:40:10:40:13 | arg4 | provenance | | +| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:16 | +| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:35 | +| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:75 | +| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:83 | +| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:80 | +| test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | | +| test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | | +| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:16 | +| test.rs:42:16:42:31 | ...::args(...) [element] | test.rs:42:9:42:11 | arg | provenance | | +| test.rs:46:9:46:11 | arg | test.rs:47:14:47:16 | arg | provenance | | +| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:17 | +| test.rs:46:16:46:34 | ...::args_os(...) [element] | test.rs:46:9:46:11 | arg | provenance | | +| test.rs:52:9:52:11 | dir | test.rs:56:10:56:12 | dir | provenance | | +| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:18 | +| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:79 | +| test.rs:52:15:52:54 | ... .expect(...) | test.rs:52:9:52:11 | dir | provenance | | +| test.rs:53:9:53:11 | exe | test.rs:57:10:57:12 | exe | provenance | | +| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:19 | +| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:79 | +| test.rs:53:15:53:54 | ... .expect(...) | test.rs:53:9:53:11 | exe | provenance | | +| test.rs:54:9:54:12 | home | test.rs:58:10:58:13 | home | provenance | | +| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:20 | +| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:74 | +| test.rs:54:16:54:52 | ... .expect(...) | test.rs:54:9:54:12 | home | provenance | | +| test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | | +| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | +| test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | | +| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:90 | +| test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | | +| test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | | +| test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | | +| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | +| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:80 | +| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:90 | +| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:80 | +| test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | | +| test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | | +| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | +| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:80 | +| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:91 | +| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:80 | +| test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | | +| test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | | +| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | +| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:80 | +| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:89 | +| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:80 | +| test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | | +| test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | | +| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | | +| test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | | +| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:88 | +| test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | | +| test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | | +| test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | | +| test.rs:77:9:77:22 | remote_string6 | test.rs:78:10:78:23 | remote_string6 | provenance | | +| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | | +| test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | | +| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:86 | +| test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | | +| test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | | +| test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | | +| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:87 | +| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:87 | +| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | | +| test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | | +| test.rs:80:24:80:57 | TryExpr | test.rs:80:9:80:20 | mut request1 | provenance | | +| test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | test.rs:81:10:81:31 | await ... [Ok, Some] | provenance | | +| test.rs:81:10:81:31 | await ... [Ok, Some] | test.rs:81:10:81:32 | TryExpr [Some] | provenance | | +| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:75 | +| test.rs:82:15:82:25 | Some(...) [Some] | test.rs:82:20:82:24 | chunk | provenance | | +| test.rs:82:20:82:24 | chunk | test.rs:83:14:83:18 | chunk | provenance | | +| test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | test.rs:82:29:82:50 | await ... [Ok, Some] | provenance | | +| test.rs:82:29:82:50 | await ... [Ok, Some] | test.rs:82:29:82:51 | TryExpr [Some] | provenance | | +| test.rs:82:29:82:51 | TryExpr [Some] | test.rs:82:15:82:25 | Some(...) [Some] | provenance | | +| test.rs:114:13:114:20 | response | test.rs:115:15:115:22 | response | provenance | | +| test.rs:114:13:114:20 | response | test.rs:116:14:116:21 | response | provenance | | +| test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | test.rs:114:24:114:57 | await ... [Ok] | provenance | | +| test.rs:114:24:114:57 | await ... [Ok] | test.rs:114:24:114:58 | TryExpr | provenance | | +| test.rs:114:24:114:58 | TryExpr | test.rs:114:13:114:20 | response | provenance | | +| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:115:15:115:22 | response | test.rs:115:14:115:22 | &response | provenance | | +| test.rs:121:9:121:20 | mut response | test.rs:122:11:122:18 | response | provenance | | +| test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | test.rs:121:24:121:57 | await ... [Ok] | provenance | | +| test.rs:121:24:121:57 | await ... [Ok] | test.rs:121:24:121:58 | TryExpr | provenance | | +| test.rs:121:24:121:58 | TryExpr | test.rs:121:9:121:20 | mut response | provenance | | +| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | | +| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:103 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:53 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:102 | +| test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | | +| test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | | +| test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | | +| test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | | +| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:106 | +| test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | | +| test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | | +| test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | | +| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:108 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:107 | +| test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | | +| test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | | +| test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | | +| test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | | +| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:109 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:110 | +| test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | | +| test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | | +| test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | | +| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:105 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:54 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:104 | +| test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | | +| test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | | +| test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | | +| test.rs:236:15:236:20 | buffer | test.rs:236:14:236:20 | &buffer | provenance | | +| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:50 | +| test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | | +| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:99 | +| test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | | +| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:101 | +| test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | | +| test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | | +| test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | | +| test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | | +| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:100 | +| test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | | +| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:101 | +| test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | | +| test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | | +| test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | | +| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:47 | +| test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | | +| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:101 | +| test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | | +| test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | | +| test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | | +| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:48 | +| test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | | +| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:101 | +| test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | | +| test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | | +| test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | | +| test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | | +| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:98 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:98 | +| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:49 | +| test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | | +| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:101 | +| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:75 | +| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:80 | +| test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | | +| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:80 | +| test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | test.rs:275:19:275:29 | Some(...) [Some, Ok] | provenance | | +| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:46 | +| test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | | +| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | +| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:101 | +| test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | | +| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:309:25:309:42 | ...::stdin(...) | test.rs:309:13:309:21 | mut stdin | provenance | | +| test.rs:311:33:311:43 | [post] &mut buffer [&ref] | test.rs:311:38:311:43 | [post] buffer | provenance | | +| test.rs:311:38:311:43 | [post] buffer | test.rs:312:15:312:20 | buffer | provenance | | +| test.rs:312:15:312:20 | buffer | test.rs:312:14:312:20 | &buffer | provenance | | +| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:69 | +| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:316:25:316:42 | ...::stdin(...) | test.rs:316:13:316:21 | mut stdin | provenance | | +| test.rs:318:40:318:50 | [post] &mut buffer [&ref] | test.rs:318:45:318:50 | [post] buffer | provenance | | +| test.rs:318:45:318:50 | [post] buffer | test.rs:319:15:319:20 | buffer | provenance | | +| test.rs:319:15:319:20 | buffer | test.rs:319:14:319:20 | &buffer | provenance | | +| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:70 | +| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:323:25:323:42 | ...::stdin(...) | test.rs:323:13:323:21 | mut stdin | provenance | | +| test.rs:325:43:325:53 | [post] &mut buffer [&ref] | test.rs:325:48:325:53 | [post] buffer | provenance | | +| test.rs:325:48:325:53 | [post] buffer | test.rs:326:15:326:20 | buffer | provenance | | +| test.rs:326:15:326:20 | buffer | test.rs:326:14:326:20 | &buffer | provenance | | +| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:330:25:330:42 | ...::stdin(...) | test.rs:330:13:330:21 | mut stdin | provenance | | +| test.rs:332:26:332:36 | [post] &mut buffer [&ref] | test.rs:332:31:332:36 | [post] buffer | provenance | | +| test.rs:332:31:332:36 | [post] buffer | test.rs:333:15:333:20 | buffer | provenance | | +| test.rs:333:15:333:20 | buffer | test.rs:333:14:333:20 | &buffer | provenance | | +| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:71 | +| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:67 | +| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:66 | +| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:68 | +| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:337:25:337:42 | ...::stdin(...) | test.rs:337:13:337:21 | mut stdin | provenance | | +| test.rs:338:13:338:14 | v1 | test.rs:342:14:342:15 | v1 | provenance | | +| test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | test.rs:338:18:338:38 | await ... [Ok] | provenance | | +| test.rs:338:18:338:38 | await ... [Ok] | test.rs:338:18:338:39 | TryExpr | provenance | | +| test.rs:338:18:338:39 | TryExpr | test.rs:338:13:338:14 | v1 | provenance | | +| test.rs:339:13:339:14 | v2 | test.rs:343:14:343:15 | v2 | provenance | | +| test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | test.rs:339:18:339:39 | await ... [Ok] | provenance | | +| test.rs:339:18:339:39 | await ... [Ok] | test.rs:339:18:339:40 | TryExpr | provenance | | +| test.rs:339:18:339:40 | TryExpr | test.rs:339:13:339:14 | v2 | provenance | | +| test.rs:340:13:340:14 | v3 | test.rs:344:14:344:15 | v3 | provenance | | +| test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | test.rs:340:18:340:39 | await ... [Ok] | provenance | | +| test.rs:340:18:340:39 | await ... [Ok] | test.rs:340:18:340:40 | TryExpr | provenance | | +| test.rs:340:18:340:40 | TryExpr | test.rs:340:13:340:14 | v3 | provenance | | +| test.rs:341:13:341:14 | v4 | test.rs:345:14:345:15 | v4 | provenance | | +| test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | test.rs:341:18:341:42 | await ... [Ok] | provenance | | +| test.rs:341:18:341:42 | await ... [Ok] | test.rs:341:18:341:43 | TryExpr | provenance | | +| test.rs:341:18:341:43 | TryExpr | test.rs:341:13:341:14 | v4 | provenance | | +| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:64 | +| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:349:25:349:42 | ...::stdin(...) | test.rs:349:13:349:21 | mut stdin | provenance | | +| test.rs:351:24:351:34 | [post] &mut buffer [&ref] | test.rs:351:29:351:34 | [post] buffer | provenance | | +| test.rs:351:29:351:34 | [post] buffer | test.rs:352:15:352:20 | buffer | provenance | | +| test.rs:352:15:352:20 | buffer | test.rs:352:14:352:20 | &buffer | provenance | | +| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:58 | +| test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | | +| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:114 | +| test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | | +| test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | | +| test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | | +| test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | | +| test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | | +| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:113 | +| test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | | +| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:114 | +| test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | | +| test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | | +| test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | | +| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | | +| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:114 | +| test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | | +| test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | | +| test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | | +| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:61 | +| test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | | +| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:114 | +| test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | | +| test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | | +| test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | | +| test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | | +| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:116 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:116 | +| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:62 | +| test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | | +| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:114 | +| test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | | +| test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | | +| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:75 | +| test.rs:387:19:387:29 | Some(...) [Some] | test.rs:387:24:387:28 | chunk | provenance | | +| test.rs:387:24:387:28 | chunk | test.rs:388:18:388:22 | chunk | provenance | | +| test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:387:33:387:65 | await ... [Ok, Some] | provenance | | +| test.rs:387:33:387:65 | await ... [Ok, Some] | test.rs:387:33:387:66 | TryExpr [Some] | provenance | | +| test.rs:387:33:387:66 | TryExpr [Some] | test.rs:387:19:387:29 | Some(...) [Some] | provenance | | +| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:59 | +| test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | | +| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:114 | +| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:115 | +| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:115 | +| test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | | +| test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | | +| test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | | +| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:75 | +| test.rs:396:19:396:28 | Some(...) [Some] | test.rs:396:24:396:27 | line | provenance | | +| test.rs:396:24:396:27 | line | test.rs:397:18:397:21 | line | provenance | | +| test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | test.rs:396:32:396:54 | await ... [Ok, Some] | provenance | | +| test.rs:396:32:396:54 | await ... [Ok, Some] | test.rs:396:32:396:55 | TryExpr [Some] | provenance | | +| test.rs:396:32:396:55 | TryExpr [Some] | test.rs:396:19:396:28 | Some(...) [Some] | provenance | | +| test.rs:408:13:408:18 | buffer | test.rs:409:14:409:19 | buffer | provenance | | +| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:23 | +| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:23 | +| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:24 | +| test.rs:408:31:408:55 | ...::read(...) [Ok] | test.rs:408:31:408:56 | TryExpr | provenance | | +| test.rs:408:31:408:56 | TryExpr | test.rs:408:13:408:18 | buffer | provenance | | +| test.rs:413:13:413:18 | buffer | test.rs:414:14:414:19 | buffer | provenance | | +| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:23 | +| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:23 | +| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:24 | +| test.rs:413:31:413:50 | ...::read(...) [Ok] | test.rs:413:31:413:51 | TryExpr | provenance | | +| test.rs:413:31:413:51 | TryExpr | test.rs:413:13:413:18 | buffer | provenance | | +| test.rs:418:13:418:18 | buffer | test.rs:419:14:419:19 | buffer | provenance | | +| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:26 | +| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:26 | +| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:27 | +| test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | test.rs:418:22:418:52 | TryExpr | provenance | | +| test.rs:418:22:418:52 | TryExpr | test.rs:418:13:418:18 | buffer | provenance | | +| test.rs:425:13:425:16 | path | test.rs:426:14:426:17 | path | provenance | | +| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:33 | +| test.rs:425:13:425:16 | path | test.rs:427:14:427:17 | path | provenance | | +| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:33 | +| test.rs:425:13:425:16 | path | test.rs:437:14:437:17 | path | provenance | | +| test.rs:425:20:425:27 | e.path() | test.rs:425:13:425:16 | path | provenance | | +| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:4 MaD:4 | +| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:33 | +| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:33 | +| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:112 | +| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | | +| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:33 | +| test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | | +| test.rs:439:25:439:37 | e.file_name() | test.rs:439:13:439:21 | file_name | provenance | | +| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:3 MaD:3 | +| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:33 | +| test.rs:461:13:461:18 | target | test.rs:462:14:462:19 | target | provenance | | +| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:25 | +| test.rs:461:22:461:49 | ...::read_link(...) [Ok] | test.rs:461:22:461:50 | TryExpr | provenance | | +| test.rs:461:22:461:50 | TryExpr | test.rs:461:13:461:18 | target | provenance | | +| test.rs:470:13:470:18 | buffer | test.rs:471:14:471:19 | buffer | provenance | | +| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:29 | +| test.rs:470:31:470:57 | ...::read(...) [future, Ok] | test.rs:470:31:470:63 | await ... [Ok] | provenance | | +| test.rs:470:31:470:63 | await ... [Ok] | test.rs:470:31:470:64 | TryExpr | provenance | | +| test.rs:470:31:470:64 | TryExpr | test.rs:470:13:470:18 | buffer | provenance | | +| test.rs:475:13:475:18 | buffer | test.rs:476:14:476:19 | buffer | provenance | | +| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:29 | +| test.rs:475:31:475:57 | ...::read(...) [future, Ok] | test.rs:475:31:475:63 | await ... [Ok] | provenance | | +| test.rs:475:31:475:63 | await ... [Ok] | test.rs:475:31:475:64 | TryExpr | provenance | | +| test.rs:475:31:475:64 | TryExpr | test.rs:475:13:475:18 | buffer | provenance | | +| test.rs:480:13:480:18 | buffer | test.rs:481:14:481:19 | buffer | provenance | | +| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:31 | +| test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | test.rs:480:22:480:64 | await ... [Ok] | provenance | | +| test.rs:480:22:480:64 | await ... [Ok] | test.rs:480:22:480:65 | TryExpr | provenance | | +| test.rs:480:22:480:65 | TryExpr | test.rs:480:13:480:18 | buffer | provenance | | +| test.rs:486:13:486:16 | path | test.rs:488:14:488:17 | path | provenance | | +| test.rs:486:20:486:31 | entry.path() | test.rs:486:13:486:16 | path | provenance | | +| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:12 MaD:12 | +| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:12 MaD:12 | +| test.rs:487:13:487:21 | file_name | test.rs:489:14:489:22 | file_name | provenance | | +| test.rs:487:25:487:41 | entry.file_name() | test.rs:487:13:487:21 | file_name | provenance | | +| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:11 MaD:11 | +| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:11 MaD:11 | +| test.rs:493:13:493:18 | target | test.rs:494:14:494:19 | target | provenance | | +| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:30 | +| test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | | +| test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | | +| test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:93 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:53 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:92 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:95 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:94 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:97 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:96 | +| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:54 | +| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:50 | +| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:503:20:503:50 | ...::open(...) [Ok] | test.rs:503:20:503:51 | TryExpr | provenance | | +| test.rs:503:20:503:51 | TryExpr | test.rs:503:9:503:16 | mut file | provenance | | +| test.rs:507:32:507:42 | [post] &mut buffer | test.rs:508:15:508:20 | buffer | provenance | | +| test.rs:507:32:507:42 | [post] &mut buffer [&ref] | test.rs:507:37:507:42 | [post] buffer | provenance | | +| test.rs:507:37:507:42 | [post] buffer | test.rs:508:15:508:20 | buffer | provenance | | +| test.rs:508:15:508:20 | buffer | test.rs:508:14:508:20 | &buffer | provenance | | +| test.rs:513:39:513:49 | [post] &mut buffer | test.rs:514:15:514:20 | buffer | provenance | | +| test.rs:513:39:513:49 | [post] &mut buffer [&ref] | test.rs:513:44:513:49 | [post] buffer | provenance | | +| test.rs:513:44:513:49 | [post] buffer | test.rs:514:15:514:20 | buffer | provenance | | +| test.rs:514:15:514:20 | buffer | test.rs:514:14:514:20 | &buffer | provenance | | +| test.rs:519:42:519:52 | [post] &mut buffer | test.rs:520:15:520:20 | buffer | provenance | | +| test.rs:519:42:519:52 | [post] &mut buffer [&ref] | test.rs:519:47:519:52 | [post] buffer | provenance | | +| test.rs:519:47:519:52 | [post] buffer | test.rs:520:15:520:20 | buffer | provenance | | +| test.rs:520:15:520:20 | buffer | test.rs:520:14:520:20 | &buffer | provenance | | +| test.rs:525:25:525:35 | [post] &mut buffer [&ref] | test.rs:525:30:525:35 | [post] buffer | provenance | | +| test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | | +| test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | | +| test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:93 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:53 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:92 | +| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:80 | +| test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | | +| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:538:30:538:40 | [post] &mut buffer | test.rs:539:15:539:20 | buffer | provenance | | +| test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | | +| test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | | +| test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:93 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:53 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:92 | +| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:80 | +| test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | | +| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:545:30:545:40 | [post] &mut buffer | test.rs:546:15:546:20 | buffer | provenance | | +| test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | | +| test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | | +| test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:93 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:53 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:92 | +| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:80 | +| test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | | +| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:552:30:552:40 | [post] &mut buffer | test.rs:553:15:553:20 | buffer | provenance | | +| test.rs:552:30:552:40 | [post] &mut buffer [&ref] | test.rs:552:35:552:40 | [post] buffer | provenance | | +| test.rs:552:35:552:40 | [post] buffer | test.rs:553:15:553:20 | buffer | provenance | | +| test.rs:553:15:553:20 | buffer | test.rs:553:14:553:20 | &buffer | provenance | | +| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:52 | +| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:560:21:560:51 | ...::open(...) [Ok] | test.rs:560:21:560:52 | TryExpr | provenance | | +| test.rs:560:21:560:52 | TryExpr | test.rs:560:13:560:17 | file1 | provenance | | +| test.rs:561:13:561:17 | file2 | test.rs:562:38:562:42 | file2 | provenance | | +| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:561:21:561:59 | ...::open(...) [Ok] | test.rs:561:21:561:60 | TryExpr | provenance | | +| test.rs:561:21:561:60 | TryExpr | test.rs:561:13:561:17 | file2 | provenance | | +| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:562:26:562:43 | file1.chain(...) | test.rs:562:13:562:22 | mut reader | provenance | | +| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:51 | +| test.rs:563:31:563:41 | [post] &mut buffer [&ref] | test.rs:563:36:563:41 | [post] buffer | provenance | | +| test.rs:563:36:563:41 | [post] buffer | test.rs:564:15:564:20 | buffer | provenance | | +| test.rs:564:15:564:20 | buffer | test.rs:564:14:564:20 | &buffer | provenance | | +| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:57 | +| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:569:21:569:51 | ...::open(...) [Ok] | test.rs:569:21:569:52 | TryExpr | provenance | | +| test.rs:569:21:569:52 | TryExpr | test.rs:569:13:569:17 | file1 | provenance | | +| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:570:26:570:40 | file1.take(...) | test.rs:570:13:570:22 | mut reader | provenance | | +| test.rs:571:31:571:41 | [post] &mut buffer [&ref] | test.rs:571:36:571:41 | [post] buffer | provenance | | +| test.rs:571:36:571:41 | [post] buffer | test.rs:572:15:572:20 | buffer | provenance | | +| test.rs:572:15:572:20 | buffer | test.rs:572:14:572:20 | &buffer | provenance | | +| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:69 | +| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:70 | +| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:71 | +| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:67 | +| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:66 | +| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:68 | +| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:64 | +| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:9 | +| test.rs:581:20:581:52 | ...::open(...) [future, Ok] | test.rs:581:20:581:58 | await ... [Ok] | provenance | | +| test.rs:581:20:581:58 | await ... [Ok] | test.rs:581:20:581:59 | TryExpr | provenance | | +| test.rs:581:20:581:59 | TryExpr | test.rs:581:9:581:16 | mut file | provenance | | +| test.rs:585:32:585:42 | [post] &mut buffer [&ref] | test.rs:585:37:585:42 | [post] buffer | provenance | | +| test.rs:585:37:585:42 | [post] buffer | test.rs:586:15:586:20 | buffer | provenance | | +| test.rs:586:15:586:20 | buffer | test.rs:586:14:586:20 | &buffer | provenance | | +| test.rs:591:39:591:49 | [post] &mut buffer [&ref] | test.rs:591:44:591:49 | [post] buffer | provenance | | +| test.rs:591:44:591:49 | [post] buffer | test.rs:592:15:592:20 | buffer | provenance | | +| test.rs:592:15:592:20 | buffer | test.rs:592:14:592:20 | &buffer | provenance | | +| test.rs:597:42:597:52 | [post] &mut buffer [&ref] | test.rs:597:47:597:52 | [post] buffer | provenance | | +| test.rs:597:47:597:52 | [post] buffer | test.rs:598:15:598:20 | buffer | provenance | | +| test.rs:598:15:598:20 | buffer | test.rs:598:14:598:20 | &buffer | provenance | | +| test.rs:603:25:603:35 | [post] &mut buffer [&ref] | test.rs:603:30:603:35 | [post] buffer | provenance | | +| test.rs:603:30:603:35 | [post] buffer | test.rs:604:15:604:20 | buffer | provenance | | +| test.rs:604:15:604:20 | buffer | test.rs:604:14:604:20 | &buffer | provenance | | +| test.rs:608:13:608:14 | v1 | test.rs:612:14:612:15 | v1 | provenance | | +| test.rs:608:18:608:31 | file.read_u8() [future, Ok] | test.rs:608:18:608:37 | await ... [Ok] | provenance | | +| test.rs:608:18:608:37 | await ... [Ok] | test.rs:608:18:608:38 | TryExpr | provenance | | +| test.rs:608:18:608:38 | TryExpr | test.rs:608:13:608:14 | v1 | provenance | | +| test.rs:609:13:609:14 | v2 | test.rs:613:14:613:15 | v2 | provenance | | +| test.rs:609:18:609:32 | file.read_i16() [future, Ok] | test.rs:609:18:609:38 | await ... [Ok] | provenance | | +| test.rs:609:18:609:38 | await ... [Ok] | test.rs:609:18:609:39 | TryExpr | provenance | | +| test.rs:609:18:609:39 | TryExpr | test.rs:609:13:609:14 | v2 | provenance | | +| test.rs:610:13:610:14 | v3 | test.rs:614:14:614:15 | v3 | provenance | | +| test.rs:610:18:610:32 | file.read_f32() [future, Ok] | test.rs:610:18:610:38 | await ... [Ok] | provenance | | +| test.rs:610:18:610:38 | await ... [Ok] | test.rs:610:18:610:39 | TryExpr | provenance | | +| test.rs:610:18:610:39 | TryExpr | test.rs:610:13:610:14 | v3 | provenance | | +| test.rs:611:13:611:14 | v4 | test.rs:615:14:615:15 | v4 | provenance | | +| test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | test.rs:611:18:611:41 | await ... [Ok] | provenance | | +| test.rs:611:18:611:41 | await ... [Ok] | test.rs:611:18:611:42 | TryExpr | provenance | | +| test.rs:611:18:611:42 | TryExpr | test.rs:611:13:611:14 | v4 | provenance | | +| test.rs:620:23:620:33 | [post] &mut buffer [&ref] | test.rs:620:28:620:33 | [post] buffer | provenance | | +| test.rs:620:28:620:33 | [post] buffer | test.rs:621:15:621:20 | buffer | provenance | | +| test.rs:621:15:621:20 | buffer | test.rs:621:14:621:20 | &buffer | provenance | | +| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:627:22:627:65 | ... .open(...) [future, Ok] | test.rs:627:22:627:71 | await ... [Ok] | provenance | | +| test.rs:627:22:627:71 | await ... [Ok] | test.rs:627:22:627:72 | TryExpr | provenance | | +| test.rs:627:22:627:72 | TryExpr | test.rs:627:13:627:18 | mut f1 | provenance | | +| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:10 | +| test.rs:629:30:629:40 | [post] &mut buffer [&ref] | test.rs:629:35:629:40 | [post] buffer | provenance | | +| test.rs:629:35:629:40 | [post] buffer | test.rs:630:15:630:20 | buffer | provenance | | +| test.rs:630:15:630:20 | buffer | test.rs:630:14:630:20 | &buffer | provenance | | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:53 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:111 | +| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | | +| test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | | +| test.rs:695:29:695:39 | [post] &mut buffer [&ref] | test.rs:695:34:695:39 | [post] buffer | provenance | | +| test.rs:695:34:695:39 | [post] buffer | test.rs:698:15:698:20 | buffer | provenance | | +| test.rs:695:34:695:39 | [post] buffer | test.rs:699:14:699:22 | buffer[0] | provenance | | +| test.rs:698:15:698:20 | buffer | test.rs:698:14:698:20 | &buffer | provenance | | +| test.rs:707:13:707:22 | mut stream | test.rs:715:58:715:63 | stream | provenance | | +| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:8 | +| test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | test.rs:707:26:707:106 | TryExpr | provenance | | +| test.rs:707:26:707:106 | TryExpr | test.rs:707:13:707:22 | mut stream | provenance | | +| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:47 | +| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:57 | +| test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | | +| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:101 | +| test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | | +| test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | | +| test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:117 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:63 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:118 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:119 | +| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:13 | +| test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | | +| test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | | +| test.rs:759:28:759:73 | TryExpr | test.rs:759:9:759:24 | mut tokio_stream | provenance | | +| test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | test.rs:767:40:767:46 | [post] buffer1 | provenance | | +| test.rs:767:40:767:46 | [post] buffer1 | test.rs:774:15:774:21 | buffer1 | provenance | | +| test.rs:767:40:767:46 | [post] buffer1 | test.rs:775:14:775:23 | buffer1[0] | provenance | | +| test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | test.rs:771:41:771:47 | [post] buffer2 | provenance | | +| test.rs:771:41:771:47 | [post] buffer2 | test.rs:778:15:778:21 | buffer2 | provenance | | +| test.rs:771:41:771:47 | [post] buffer2 | test.rs:779:14:779:23 | buffer2[0] | provenance | | +| test.rs:774:15:774:21 | buffer1 | test.rs:774:14:774:21 | &buffer1 | provenance | | +| test.rs:778:15:778:21 | buffer2 | test.rs:778:14:778:21 | &buffer2 | provenance | | +| test.rs:787:41:787:51 | [post] &mut buffer [&ref] | test.rs:787:46:787:51 | [post] buffer | provenance | | +| test.rs:787:46:787:51 | [post] buffer | test.rs:794:27:794:32 | buffer | provenance | | +| test.rs:794:27:794:32 | buffer | test.rs:794:26:794:32 | &buffer | provenance | | +| test.rs:810:45:810:55 | [post] &mut buffer [&ref] | test.rs:810:50:810:55 | [post] buffer | provenance | | +| test.rs:810:50:810:55 | [post] buffer | test.rs:817:27:817:32 | buffer | provenance | | +| test.rs:817:27:817:32 | buffer | test.rs:817:26:817:32 | &buffer | provenance | | +| test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:20:11:20:13 | tcp | provenance | | +| test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:26:53:26:55 | tcp | provenance | | +| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | +| test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | test_futures_io.rs:19:15:19:43 | await ... [Ok] | provenance | | +| test_futures_io.rs:19:15:19:43 | await ... [Ok] | test_futures_io.rs:19:15:19:44 | TryExpr | provenance | | +| test_futures_io.rs:19:15:19:44 | TryExpr | test_futures_io.rs:19:9:19:11 | tcp | provenance | | +| test_futures_io.rs:20:11:20:13 | tcp | test_futures_io.rs:20:10:20:13 | &tcp | provenance | | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:27:11:27:16 | reader | provenance | | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:43 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | | +| test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | | +| test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | | +| test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | | +| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:84 | +| test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | | +| test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | | +| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | | +| test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | | +| test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | | +| test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:76 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:78 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | | +| test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | +| test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | +| test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | | +| test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | | +| test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | | +| test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | | +| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | | +| test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | | +| test_futures_io.rs:51:15:51:36 | buffer2[...] | test_futures_io.rs:51:14:51:36 | &... | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:55:11:55:17 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:59:40:59:46 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:69:37:69:43 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:37 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:43 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:37 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:27:132:33 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:40 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:41 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:27:139:33 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:38 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:39 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:27:146:33 | reader2 | provenance | | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:45 | +| test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | | +| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:85 | +| test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | | +| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | | +| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:60:15:60:20 | pinned [&ref] | provenance | | +| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:59:26:59:47 | ...::new(...) | test_futures_io.rs:59:13:59:22 | mut pinned | provenance | | +| test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | provenance | | +| test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:76 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:78 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:59:40:59:46 | reader2 | test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | provenance | | +| test_futures_io.rs:60:15:60:20 | pinned | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | +| test_futures_io.rs:60:15:60:20 | pinned [&ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | +| test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | +| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | provenance | | +| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | provenance | | +| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | provenance | | +| test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | provenance | | +| test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | test_futures_io.rs:63:31:63:33 | buf | provenance | | +| test_futures_io.rs:63:31:63:33 | buf | test_futures_io.rs:65:18:65:20 | buf | provenance | | +| test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | test_futures_io.rs:64:18:64:24 | &buffer | provenance | | +| test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | provenance | | +| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | provenance | | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:76 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:78 | +| test_futures_io.rs:69:37:69:43 | reader2 | test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | provenance | | +| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | provenance | | +| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | provenance | | +| test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | provenance | | +| test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | test_futures_io.rs:71:28:71:30 | buf | provenance | | +| test_futures_io.rs:71:28:71:30 | buf | test_futures_io.rs:73:22:73:24 | buf | provenance | | +| test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | test_futures_io.rs:72:22:72:29 | &buffer2 | provenance | | +| test_futures_io.rs:83:13:83:18 | buffer | test_futures_io.rs:84:14:84:19 | buffer | provenance | | +| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:83:22:83:45 | await ... [Ok] | provenance | | +| test_futures_io.rs:83:22:83:45 | await ... [Ok] | test_futures_io.rs:83:22:83:46 | TryExpr | provenance | | +| test_futures_io.rs:83:22:83:46 | TryExpr | test_futures_io.rs:83:13:83:18 | buffer | provenance | | +| test_futures_io.rs:90:13:90:22 | mut pinned | test_futures_io.rs:91:15:91:20 | pinned | provenance | | +| test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | test_futures_io.rs:91:15:91:20 | pinned [&ref] | provenance | | +| test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:90:26:90:47 | ...::new(...) | test_futures_io.rs:90:13:90:22 | mut pinned | provenance | | +| test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | provenance | | +| test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:76 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:78 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | | +| test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | +| test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | +| test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | | +| test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | | +| test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | | +| test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | | +| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | | +| test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | | +| test_futures_io.rs:108:15:108:36 | buffer2[...] | test_futures_io.rs:108:14:108:36 | &... | provenance | | +| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:114:15:114:20 | pinned | provenance | | +| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:114:15:114:20 | pinned [&ref] | provenance | | +| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:113:26:113:47 | ...::new(...) | test_futures_io.rs:113:13:113:22 | mut pinned | provenance | | +| test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | provenance | | +| test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | provenance | | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:76 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:78 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:113:40:113:46 | reader2 | test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | provenance | | +| test_futures_io.rs:114:15:114:20 | pinned | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | +| test_futures_io.rs:114:15:114:20 | pinned [&ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | +| test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | +| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | provenance | | +| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | provenance | | +| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | provenance | | +| test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | test_futures_io.rs:117:14:117:20 | &buffer | provenance | | +| test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | provenance | | +| test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | test_futures_io.rs:118:31:118:33 | buf | provenance | | +| test_futures_io.rs:118:31:118:33 | buf | test_futures_io.rs:119:18:119:20 | buf | provenance | | +| test_futures_io.rs:125:13:125:18 | buffer | test_futures_io.rs:126:14:126:19 | buffer | provenance | | +| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:125:22:125:45 | await ... [Ok] | provenance | | +| test_futures_io.rs:125:22:125:45 | await ... [Ok] | test_futures_io.rs:125:22:125:46 | TryExpr | provenance | | +| test_futures_io.rs:125:22:125:46 | TryExpr | test_futures_io.rs:125:13:125:18 | buffer | provenance | | +| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:40 | +| test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | test_futures_io.rs:132:58:132:61 | [post] line | provenance | | +| test_futures_io.rs:132:58:132:61 | [post] line | test_futures_io.rs:133:15:133:18 | line | provenance | | +| test_futures_io.rs:133:15:133:18 | line | test_futures_io.rs:133:14:133:18 | &line | provenance | | +| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:38 | +| test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | test_futures_io.rs:139:50:139:53 | [post] line | provenance | | +| test_futures_io.rs:139:50:139:53 | [post] line | test_futures_io.rs:140:15:140:18 | line | provenance | | +| test_futures_io.rs:140:15:140:18 | line | test_futures_io.rs:140:14:140:18 | &line | provenance | | +| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | test_futures_io.rs:146:52:146:57 | [post] buffer | provenance | | +| test_futures_io.rs:146:52:146:57 | [post] buffer | test_futures_io.rs:147:15:147:20 | buffer | provenance | | +| test_futures_io.rs:147:15:147:20 | buffer | test_futures_io.rs:147:14:147:20 | &buffer | provenance | | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:73 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:82 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:73 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:82 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:72 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:81 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:72 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:81 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:73 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:82 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:73 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:82 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:72 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:81 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:72 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:81 | +| web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | +| web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | +nodes +| test.rs:8:10:8:22 | ...::var | semmle.label | ...::var | +| test.rs:8:10:8:30 | ...::var(...) | semmle.label | ...::var(...) | +| test.rs:9:10:9:25 | ...::var_os | semmle.label | ...::var_os | +| test.rs:9:10:9:33 | ...::var_os(...) | semmle.label | ...::var_os(...) | +| test.rs:11:9:11:12 | var1 | semmle.label | var1 | +| test.rs:11:16:11:28 | ...::var | semmle.label | ...::var | +| test.rs:11:16:11:36 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | +| test.rs:11:16:11:59 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:12:9:12:12 | var2 | semmle.label | var2 | +| test.rs:12:16:12:31 | ...::var_os | semmle.label | ...::var_os | +| test.rs:12:16:12:39 | ...::var_os(...) [Some] | semmle.label | ...::var_os(...) [Some] | +| test.rs:12:16:12:48 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:14:10:14:13 | var1 | semmle.label | var1 | +| test.rs:15:10:15:13 | var2 | semmle.label | var2 | +| test.rs:29:9:29:12 | args [element] | semmle.label | args [element] | +| test.rs:29:29:29:42 | ...::args | semmle.label | ...::args | +| test.rs:29:29:29:44 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:29:29:29:54 | ... .collect() [element] | semmle.label | ... .collect() [element] | +| test.rs:30:9:30:15 | my_path [&ref] | semmle.label | my_path [&ref] | +| test.rs:30:19:30:26 | &... [&ref] | semmle.label | &... [&ref] | +| test.rs:30:20:30:23 | args [element] | semmle.label | args [element] | +| test.rs:30:20:30:26 | args[0] | semmle.label | args[0] | +| test.rs:31:9:31:12 | arg1 [&ref] | semmle.label | arg1 [&ref] | +| test.rs:31:16:31:23 | &... [&ref] | semmle.label | &... [&ref] | +| test.rs:31:17:31:20 | args [element] | semmle.label | args [element] | +| test.rs:31:17:31:23 | args[1] | semmle.label | args[1] | +| test.rs:32:9:32:12 | arg2 | semmle.label | arg2 | +| test.rs:32:16:32:29 | ...::args | semmle.label | ...::args | +| test.rs:32:16:32:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | +| test.rs:32:16:32:47 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:33:9:33:12 | arg3 | semmle.label | arg3 | +| test.rs:33:16:33:32 | ...::args_os | semmle.label | ...::args_os | +| test.rs:33:16:33:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | +| test.rs:33:16:33:41 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | +| test.rs:33:16:33:50 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:34:9:34:12 | arg4 | semmle.label | arg4 | +| test.rs:34:16:34:29 | ...::args | semmle.label | ...::args | +| test.rs:34:16:34:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:34:16:34:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | +| test.rs:34:16:34:47 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:34:16:34:64 | ... .parse() [Ok] | semmle.label | ... .parse() [Ok] | +| test.rs:34:16:34:73 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:36:10:36:16 | my_path | semmle.label | my_path | +| test.rs:37:10:37:13 | arg1 | semmle.label | arg1 | +| test.rs:38:10:38:13 | arg2 | semmle.label | arg2 | +| test.rs:39:10:39:13 | arg3 | semmle.label | arg3 | +| test.rs:40:10:40:13 | arg4 | semmle.label | arg4 | +| test.rs:42:9:42:11 | arg | semmle.label | arg | +| test.rs:42:16:42:29 | ...::args | semmle.label | ...::args | +| test.rs:42:16:42:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:43:14:43:16 | arg | semmle.label | arg | +| test.rs:46:9:46:11 | arg | semmle.label | arg | +| test.rs:46:16:46:32 | ...::args_os | semmle.label | ...::args_os | +| test.rs:46:16:46:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | +| test.rs:47:14:47:16 | arg | semmle.label | arg | +| test.rs:52:9:52:11 | dir | semmle.label | dir | +| test.rs:52:15:52:35 | ...::current_dir | semmle.label | ...::current_dir | +| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | semmle.label | ...::current_dir(...) [Ok] | +| test.rs:52:15:52:54 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:53:9:53:11 | exe | semmle.label | exe | +| test.rs:53:15:53:35 | ...::current_exe | semmle.label | ...::current_exe | +| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | semmle.label | ...::current_exe(...) [Ok] | +| test.rs:53:15:53:54 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:54:9:54:12 | home | semmle.label | home | +| test.rs:54:16:54:33 | ...::home_dir | semmle.label | ...::home_dir | +| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | semmle.label | ...::home_dir(...) [Some] | +| test.rs:54:16:54:52 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:56:10:56:12 | dir | semmle.label | dir | +| test.rs:57:10:57:12 | exe | semmle.label | exe | +| test.rs:58:10:58:13 | home | semmle.label | home | +| test.rs:62:9:62:22 | remote_string1 | semmle.label | remote_string1 | +| test.rs:62:26:62:47 | ...::get | semmle.label | ...::get | +| test.rs:62:26:62:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:62:26:62:63 | TryExpr | semmle.label | TryExpr | +| test.rs:62:26:62:70 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | +| test.rs:62:26:62:71 | TryExpr | semmle.label | TryExpr | +| test.rs:63:10:63:23 | remote_string1 | semmle.label | remote_string1 | +| test.rs:65:9:65:22 | remote_string2 | semmle.label | remote_string2 | +| test.rs:65:26:65:47 | ...::get | semmle.label | ...::get | +| test.rs:65:26:65:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:65:26:65:71 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:65:26:65:78 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | +| test.rs:65:26:65:87 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:66:10:66:23 | remote_string2 | semmle.label | remote_string2 | +| test.rs:68:9:68:22 | remote_string3 | semmle.label | remote_string3 | +| test.rs:68:26:68:47 | ...::get | semmle.label | ...::get | +| test.rs:68:26:68:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:68:26:68:71 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | semmle.label | ... .text_with_charset(...) [Ok] | +| test.rs:68:26:68:107 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:69:10:69:23 | remote_string3 | semmle.label | remote_string3 | +| test.rs:71:9:71:22 | remote_string4 | semmle.label | remote_string4 | +| test.rs:71:26:71:47 | ...::get | semmle.label | ...::get | +| test.rs:71:26:71:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:71:26:71:71 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:71:26:71:79 | ... .bytes() [Ok] | semmle.label | ... .bytes() [Ok] | +| test.rs:71:26:71:88 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:72:10:72:23 | remote_string4 | semmle.label | remote_string4 | +| test.rs:74:9:74:22 | remote_string5 | semmle.label | remote_string5 | +| test.rs:74:26:74:37 | ...::get | semmle.label | ...::get | +| test.rs:74:26:74:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | +| test.rs:74:26:74:58 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:74:26:74:59 | TryExpr | semmle.label | TryExpr | +| test.rs:74:26:74:66 | ... .text() [future, Ok] | semmle.label | ... .text() [future, Ok] | +| test.rs:74:26:74:72 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:74:26:74:73 | TryExpr | semmle.label | TryExpr | +| test.rs:75:10:75:23 | remote_string5 | semmle.label | remote_string5 | +| test.rs:77:9:77:22 | remote_string6 | semmle.label | remote_string6 | +| test.rs:77:26:77:37 | ...::get | semmle.label | ...::get | +| test.rs:77:26:77:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | +| test.rs:77:26:77:58 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:77:26:77:59 | TryExpr | semmle.label | TryExpr | +| test.rs:77:26:77:67 | ... .bytes() [future, Ok] | semmle.label | ... .bytes() [future, Ok] | +| test.rs:77:26:77:73 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:77:26:77:74 | TryExpr | semmle.label | TryExpr | +| test.rs:78:10:78:23 | remote_string6 | semmle.label | remote_string6 | +| test.rs:80:9:80:20 | mut request1 | semmle.label | mut request1 | +| test.rs:80:24:80:35 | ...::get | semmle.label | ...::get | +| test.rs:80:24:80:50 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | +| test.rs:80:24:80:56 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:80:24:80:57 | TryExpr | semmle.label | TryExpr | +| test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | +| test.rs:81:10:81:31 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:81:10:81:32 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:81:10:81:41 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:82:15:82:25 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| test.rs:82:20:82:24 | chunk | semmle.label | chunk | +| test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | +| test.rs:82:29:82:50 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:82:29:82:51 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:83:14:83:18 | chunk | semmle.label | chunk | +| test.rs:114:13:114:20 | response | semmle.label | response | +| test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | +| test.rs:114:24:114:57 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:114:24:114:58 | TryExpr | semmle.label | TryExpr | +| test.rs:114:31:114:42 | send_request | semmle.label | send_request | +| test.rs:115:14:115:22 | &response | semmle.label | &response | +| test.rs:115:15:115:22 | response | semmle.label | response | +| test.rs:116:14:116:21 | response | semmle.label | response | +| test.rs:121:9:121:20 | mut response | semmle.label | mut response | +| test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | +| test.rs:121:24:121:57 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:121:24:121:58 | TryExpr | semmle.label | TryExpr | +| test.rs:121:31:121:42 | send_request | semmle.label | send_request | +| test.rs:122:10:122:18 | &response | semmle.label | &response | +| test.rs:122:11:122:18 | response | semmle.label | response | +| test.rs:211:22:211:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:211:22:211:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:211:44:211:54 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:211:44:211:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:211:49:211:54 | [post] buffer | semmle.label | [post] buffer | +| test.rs:212:14:212:20 | &buffer | semmle.label | &buffer | +| test.rs:212:15:212:20 | buffer | semmle.label | buffer | +| test.rs:217:22:217:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:217:22:217:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:217:51:217:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:217:56:217:61 | [post] buffer | semmle.label | [post] buffer | +| test.rs:218:14:218:20 | &buffer | semmle.label | &buffer | +| test.rs:218:15:218:20 | buffer | semmle.label | buffer | +| test.rs:223:22:223:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:223:22:223:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:223:54:223:64 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:223:54:223:64 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:223:59:223:64 | [post] buffer | semmle.label | [post] buffer | +| test.rs:224:14:224:20 | &buffer | semmle.label | &buffer | +| test.rs:224:15:224:20 | buffer | semmle.label | buffer | +| test.rs:229:22:229:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:229:22:229:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:229:22:229:44 | ... .lock() | semmle.label | ... .lock() | +| test.rs:229:61:229:71 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:229:66:229:71 | [post] buffer | semmle.label | [post] buffer | +| test.rs:230:14:230:20 | &buffer | semmle.label | &buffer | +| test.rs:230:15:230:20 | buffer | semmle.label | buffer | +| test.rs:235:9:235:22 | ...::stdin | semmle.label | ...::stdin | +| test.rs:235:9:235:24 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:235:37:235:47 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:235:37:235:47 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:235:42:235:47 | [post] buffer | semmle.label | [post] buffer | +| test.rs:236:14:236:20 | &buffer | semmle.label | &buffer | +| test.rs:236:15:236:20 | buffer | semmle.label | buffer | +| test.rs:239:17:239:30 | ...::stdin | semmle.label | ...::stdin | +| test.rs:239:17:239:32 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:239:17:239:40 | ... .bytes() | semmle.label | ... .bytes() | +| test.rs:240:14:240:17 | byte | semmle.label | byte | +| test.rs:246:13:246:22 | mut reader | semmle.label | mut reader | +| test.rs:246:26:246:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:246:50:246:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:246:50:246:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:247:13:247:16 | data | semmle.label | data | +| test.rs:247:20:247:36 | reader.fill_buf() [Ok] | semmle.label | reader.fill_buf() [Ok] | +| test.rs:247:20:247:37 | TryExpr | semmle.label | TryExpr | +| test.rs:248:14:248:18 | &data | semmle.label | &data | +| test.rs:248:15:248:18 | data | semmle.label | data | +| test.rs:252:13:252:18 | reader | semmle.label | reader | +| test.rs:252:22:252:62 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:252:46:252:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:252:46:252:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:253:13:253:16 | data | semmle.label | data | +| test.rs:253:20:253:34 | reader.buffer() | semmle.label | reader.buffer() | +| test.rs:254:14:254:18 | &data | semmle.label | &data | +| test.rs:254:15:254:18 | data | semmle.label | data | +| test.rs:259:13:259:22 | mut reader | semmle.label | mut reader | +| test.rs:259:26:259:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:259:50:259:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:259:50:259:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:260:26:260:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:260:31:260:36 | [post] buffer | semmle.label | [post] buffer | +| test.rs:261:14:261:20 | &buffer | semmle.label | &buffer | +| test.rs:261:15:261:20 | buffer | semmle.label | buffer | +| test.rs:266:13:266:22 | mut reader | semmle.label | mut reader | +| test.rs:266:26:266:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:266:50:266:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:266:50:266:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:267:33:267:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:267:38:267:43 | [post] buffer | semmle.label | [post] buffer | +| test.rs:268:14:268:20 | &buffer | semmle.label | &buffer | +| test.rs:268:15:268:20 | buffer | semmle.label | buffer | +| test.rs:269:14:269:22 | buffer[0] | semmle.label | buffer[0] | +| test.rs:273:13:273:28 | mut reader_split | semmle.label | mut reader_split | +| test.rs:273:32:273:72 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:273:32:273:84 | ... .split(...) | semmle.label | ... .split(...) | +| test.rs:273:56:273:69 | ...::stdin | semmle.label | ...::stdin | +| test.rs:273:56:273:71 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | +| test.rs:274:14:274:41 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | +| test.rs:274:14:274:50 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:275:19:275:29 | Some(...) [Some, Ok] | semmle.label | Some(...) [Some, Ok] | +| test.rs:275:24:275:28 | chunk [Ok] | semmle.label | chunk [Ok] | +| test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | +| test.rs:276:18:276:31 | chunk.unwrap() | semmle.label | chunk.unwrap() | +| test.rs:281:13:281:18 | reader | semmle.label | reader | +| test.rs:281:22:281:62 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:281:46:281:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:281:46:281:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:282:21:282:34 | reader.lines() | semmle.label | reader.lines() | +| test.rs:283:18:283:21 | line | semmle.label | line | +| test.rs:309:13:309:21 | mut stdin | semmle.label | mut stdin | +| test.rs:309:25:309:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:309:25:309:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:311:33:311:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:311:38:311:43 | [post] buffer | semmle.label | [post] buffer | +| test.rs:312:14:312:20 | &buffer | semmle.label | &buffer | +| test.rs:312:15:312:20 | buffer | semmle.label | buffer | +| test.rs:316:13:316:21 | mut stdin | semmle.label | mut stdin | +| test.rs:316:25:316:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:316:25:316:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:318:40:318:50 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:318:45:318:50 | [post] buffer | semmle.label | [post] buffer | +| test.rs:319:14:319:20 | &buffer | semmle.label | &buffer | +| test.rs:319:15:319:20 | buffer | semmle.label | buffer | +| test.rs:323:13:323:21 | mut stdin | semmle.label | mut stdin | +| test.rs:323:25:323:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:323:25:323:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:325:43:325:53 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:325:48:325:53 | [post] buffer | semmle.label | [post] buffer | +| test.rs:326:14:326:20 | &buffer | semmle.label | &buffer | +| test.rs:326:15:326:20 | buffer | semmle.label | buffer | +| test.rs:330:13:330:21 | mut stdin | semmle.label | mut stdin | +| test.rs:330:25:330:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:330:25:330:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:332:26:332:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:332:31:332:36 | [post] buffer | semmle.label | [post] buffer | +| test.rs:333:14:333:20 | &buffer | semmle.label | &buffer | +| test.rs:333:15:333:20 | buffer | semmle.label | buffer | +| test.rs:337:13:337:21 | mut stdin | semmle.label | mut stdin | +| test.rs:337:25:337:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:337:25:337:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:338:13:338:14 | v1 | semmle.label | v1 | +| test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | semmle.label | stdin.read_u8() [future, Ok] | +| test.rs:338:18:338:38 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:338:18:338:39 | TryExpr | semmle.label | TryExpr | +| test.rs:339:13:339:14 | v2 | semmle.label | v2 | +| test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | semmle.label | stdin.read_i16() [future, Ok] | +| test.rs:339:18:339:39 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:339:18:339:40 | TryExpr | semmle.label | TryExpr | +| test.rs:340:13:340:14 | v3 | semmle.label | v3 | +| test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | semmle.label | stdin.read_f32() [future, Ok] | +| test.rs:340:18:340:39 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:340:18:340:40 | TryExpr | semmle.label | TryExpr | +| test.rs:341:13:341:14 | v4 | semmle.label | v4 | +| test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | semmle.label | stdin.read_i64_le() [future, Ok] | +| test.rs:341:18:341:42 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:341:18:341:43 | TryExpr | semmle.label | TryExpr | +| test.rs:342:14:342:15 | v1 | semmle.label | v1 | +| test.rs:343:14:343:15 | v2 | semmle.label | v2 | +| test.rs:344:14:344:15 | v3 | semmle.label | v3 | +| test.rs:345:14:345:15 | v4 | semmle.label | v4 | +| test.rs:349:13:349:21 | mut stdin | semmle.label | mut stdin | +| test.rs:349:25:349:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:349:25:349:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:351:24:351:34 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:351:29:351:34 | [post] buffer | semmle.label | [post] buffer | +| test.rs:352:14:352:20 | &buffer | semmle.label | &buffer | +| test.rs:352:15:352:20 | buffer | semmle.label | buffer | +| test.rs:358:13:358:22 | mut reader | semmle.label | mut reader | +| test.rs:358:26:358:70 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:358:52:358:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:358:52:358:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:359:13:359:16 | data | semmle.label | data | +| test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | semmle.label | reader.fill_buf() [future, Ok] | +| test.rs:359:20:359:42 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:359:20:359:43 | TryExpr | semmle.label | TryExpr | +| test.rs:360:14:360:18 | &data | semmle.label | &data | +| test.rs:360:15:360:18 | data | semmle.label | data | +| test.rs:364:13:364:18 | reader | semmle.label | reader | +| test.rs:364:22:364:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:364:48:364:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:364:48:364:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:365:13:365:16 | data | semmle.label | data | +| test.rs:365:20:365:34 | reader.buffer() | semmle.label | reader.buffer() | +| test.rs:366:14:366:18 | &data | semmle.label | &data | +| test.rs:366:15:366:18 | data | semmle.label | data | +| test.rs:371:13:371:22 | mut reader | semmle.label | mut reader | +| test.rs:371:26:371:70 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:371:52:371:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:371:52:371:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:372:26:372:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:372:31:372:36 | [post] buffer | semmle.label | [post] buffer | +| test.rs:373:14:373:20 | &buffer | semmle.label | &buffer | +| test.rs:373:15:373:20 | buffer | semmle.label | buffer | +| test.rs:378:13:378:22 | mut reader | semmle.label | mut reader | +| test.rs:378:26:378:70 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:378:52:378:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:378:52:378:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:379:33:379:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:379:38:379:43 | [post] buffer | semmle.label | [post] buffer | +| test.rs:380:14:380:20 | &buffer | semmle.label | &buffer | +| test.rs:380:15:380:20 | buffer | semmle.label | buffer | +| test.rs:381:14:381:22 | buffer[0] | semmle.label | buffer[0] | +| test.rs:385:13:385:28 | mut reader_split | semmle.label | mut reader_split | +| test.rs:385:32:385:76 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:385:32:385:88 | ... .split(...) | semmle.label | ... .split(...) | +| test.rs:385:58:385:73 | ...::stdin | semmle.label | ...::stdin | +| test.rs:385:58:385:75 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | +| test.rs:386:14:386:46 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:386:14:386:47 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:386:14:386:56 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:387:19:387:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| test.rs:387:24:387:28 | chunk | semmle.label | chunk | +| test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | +| test.rs:387:33:387:65 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:387:33:387:66 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:388:18:388:22 | chunk | semmle.label | chunk | +| test.rs:393:13:393:18 | reader | semmle.label | reader | +| test.rs:393:22:393:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:393:48:393:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:393:48:393:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:394:13:394:21 | mut lines | semmle.label | mut lines | +| test.rs:394:25:394:38 | reader.lines() | semmle.label | reader.lines() | +| test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | +| test.rs:395:14:395:36 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:395:14:395:37 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:395:14:395:46 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:396:19:396:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| test.rs:396:24:396:27 | line | semmle.label | line | +| test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | +| test.rs:396:32:396:54 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:396:32:396:55 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:397:18:397:21 | line | semmle.label | line | +| test.rs:408:13:408:18 | buffer | semmle.label | buffer | +| test.rs:408:31:408:43 | ...::read | semmle.label | ...::read | +| test.rs:408:31:408:43 | ...::read [Ok] | semmle.label | ...::read [Ok] | +| test.rs:408:31:408:55 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | +| test.rs:408:31:408:56 | TryExpr | semmle.label | TryExpr | +| test.rs:409:14:409:19 | buffer | semmle.label | buffer | +| test.rs:413:13:413:18 | buffer | semmle.label | buffer | +| test.rs:413:31:413:38 | ...::read | semmle.label | ...::read | +| test.rs:413:31:413:38 | ...::read [Ok] | semmle.label | ...::read [Ok] | +| test.rs:413:31:413:50 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | +| test.rs:413:31:413:51 | TryExpr | semmle.label | TryExpr | +| test.rs:414:14:414:19 | buffer | semmle.label | buffer | +| test.rs:418:13:418:18 | buffer | semmle.label | buffer | +| test.rs:418:22:418:39 | ...::read_to_string | semmle.label | ...::read_to_string | +| test.rs:418:22:418:39 | ...::read_to_string [Ok] | semmle.label | ...::read_to_string [Ok] | +| test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | semmle.label | ...::read_to_string(...) [Ok] | +| test.rs:418:22:418:52 | TryExpr | semmle.label | TryExpr | +| test.rs:419:14:419:19 | buffer | semmle.label | buffer | +| test.rs:425:13:425:16 | path | semmle.label | path | +| test.rs:425:20:425:27 | e.path() | semmle.label | e.path() | +| test.rs:425:22:425:25 | path | semmle.label | path | +| test.rs:426:14:426:17 | path | semmle.label | path | +| test.rs:426:14:426:25 | path.clone() | semmle.label | path.clone() | +| test.rs:427:14:427:17 | path | semmle.label | path | +| test.rs:427:14:427:25 | path.clone() | semmle.label | path.clone() | +| test.rs:427:14:427:35 | ... .as_path() | semmle.label | ... .as_path() | +| test.rs:437:14:437:17 | path | semmle.label | path | +| test.rs:439:13:439:21 | file_name | semmle.label | file_name | +| test.rs:439:25:439:37 | e.file_name() | semmle.label | e.file_name() | +| test.rs:439:27:439:35 | file_name | semmle.label | file_name | +| test.rs:440:14:440:22 | file_name | semmle.label | file_name | +| test.rs:440:14:440:30 | file_name.clone() | semmle.label | file_name.clone() | +| test.rs:445:14:445:22 | file_name | semmle.label | file_name | +| test.rs:461:13:461:18 | target | semmle.label | target | +| test.rs:461:22:461:34 | ...::read_link | semmle.label | ...::read_link | +| test.rs:461:22:461:49 | ...::read_link(...) [Ok] | semmle.label | ...::read_link(...) [Ok] | +| test.rs:461:22:461:50 | TryExpr | semmle.label | TryExpr | +| test.rs:462:14:462:19 | target | semmle.label | target | +| test.rs:470:13:470:18 | buffer | semmle.label | buffer | +| test.rs:470:31:470:45 | ...::read | semmle.label | ...::read | +| test.rs:470:31:470:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | +| test.rs:470:31:470:63 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:470:31:470:64 | TryExpr | semmle.label | TryExpr | +| test.rs:471:14:471:19 | buffer | semmle.label | buffer | +| test.rs:475:13:475:18 | buffer | semmle.label | buffer | +| test.rs:475:31:475:45 | ...::read | semmle.label | ...::read | +| test.rs:475:31:475:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | +| test.rs:475:31:475:63 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:475:31:475:64 | TryExpr | semmle.label | TryExpr | +| test.rs:476:14:476:19 | buffer | semmle.label | buffer | +| test.rs:480:13:480:18 | buffer | semmle.label | buffer | +| test.rs:480:22:480:46 | ...::read_to_string | semmle.label | ...::read_to_string | +| test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | semmle.label | ...::read_to_string(...) [future, Ok] | +| test.rs:480:22:480:64 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:480:22:480:65 | TryExpr | semmle.label | TryExpr | +| test.rs:481:14:481:19 | buffer | semmle.label | buffer | +| test.rs:486:13:486:16 | path | semmle.label | path | +| test.rs:486:20:486:31 | entry.path() | semmle.label | entry.path() | +| test.rs:486:26:486:29 | path | semmle.label | path | +| test.rs:486:26:486:29 | path | semmle.label | path | +| test.rs:487:13:487:21 | file_name | semmle.label | file_name | +| test.rs:487:25:487:41 | entry.file_name() | semmle.label | entry.file_name() | +| test.rs:487:31:487:39 | file_name | semmle.label | file_name | +| test.rs:487:31:487:39 | file_name | semmle.label | file_name | +| test.rs:488:14:488:17 | path | semmle.label | path | +| test.rs:489:14:489:22 | file_name | semmle.label | file_name | +| test.rs:493:13:493:18 | target | semmle.label | target | +| test.rs:493:22:493:41 | ...::read_link | semmle.label | ...::read_link | +| test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | semmle.label | ...::read_link(...) [future, Ok] | +| test.rs:493:22:493:62 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:493:22:493:63 | TryExpr | semmle.label | TryExpr | +| test.rs:494:14:494:19 | target | semmle.label | target | +| test.rs:503:9:503:16 | mut file | semmle.label | mut file | +| test.rs:503:20:503:38 | ...::open | semmle.label | ...::open | +| test.rs:503:20:503:50 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:503:20:503:51 | TryExpr | semmle.label | TryExpr | +| test.rs:507:32:507:42 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:507:32:507:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:507:37:507:42 | [post] buffer | semmle.label | [post] buffer | +| test.rs:508:14:508:20 | &buffer | semmle.label | &buffer | +| test.rs:508:15:508:20 | buffer | semmle.label | buffer | +| test.rs:513:39:513:49 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:513:39:513:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:513:44:513:49 | [post] buffer | semmle.label | [post] buffer | +| test.rs:514:14:514:20 | &buffer | semmle.label | &buffer | +| test.rs:514:15:514:20 | buffer | semmle.label | buffer | +| test.rs:519:42:519:52 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:519:42:519:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:519:47:519:52 | [post] buffer | semmle.label | [post] buffer | +| test.rs:520:14:520:20 | &buffer | semmle.label | &buffer | +| test.rs:520:15:520:20 | buffer | semmle.label | buffer | +| test.rs:525:25:525:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:525:30:525:35 | [post] buffer | semmle.label | [post] buffer | +| test.rs:526:14:526:20 | &buffer | semmle.label | &buffer | +| test.rs:526:15:526:20 | buffer | semmle.label | buffer | +| test.rs:529:17:529:28 | file.bytes() | semmle.label | file.bytes() | +| test.rs:530:14:530:17 | byte | semmle.label | byte | +| test.rs:536:13:536:18 | mut f1 | semmle.label | mut f1 | +| test.rs:536:22:536:63 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | +| test.rs:536:22:536:72 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:536:50:536:53 | open | semmle.label | open | +| test.rs:538:30:538:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:538:30:538:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:538:35:538:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:539:14:539:20 | &buffer | semmle.label | &buffer | +| test.rs:539:15:539:20 | buffer | semmle.label | buffer | +| test.rs:543:13:543:18 | mut f2 | semmle.label | mut f2 | +| test.rs:543:22:543:80 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | +| test.rs:543:22:543:89 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:543:67:543:70 | open | semmle.label | open | +| test.rs:545:30:545:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:545:30:545:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:545:35:545:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:546:14:546:20 | &buffer | semmle.label | &buffer | +| test.rs:546:15:546:20 | buffer | semmle.label | buffer | +| test.rs:550:13:550:18 | mut f3 | semmle.label | mut f3 | +| test.rs:550:22:550:114 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | +| test.rs:550:22:550:123 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:550:101:550:104 | open | semmle.label | open | +| test.rs:552:30:552:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:552:30:552:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:552:35:552:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:553:14:553:20 | &buffer | semmle.label | &buffer | +| test.rs:553:15:553:20 | buffer | semmle.label | buffer | +| test.rs:560:13:560:17 | file1 | semmle.label | file1 | +| test.rs:560:21:560:39 | ...::open | semmle.label | ...::open | +| test.rs:560:21:560:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:560:21:560:52 | TryExpr | semmle.label | TryExpr | +| test.rs:561:13:561:17 | file2 | semmle.label | file2 | +| test.rs:561:21:561:39 | ...::open | semmle.label | ...::open | +| test.rs:561:21:561:59 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:561:21:561:60 | TryExpr | semmle.label | TryExpr | +| test.rs:562:13:562:22 | mut reader | semmle.label | mut reader | +| test.rs:562:26:562:43 | file1.chain(...) | semmle.label | file1.chain(...) | +| test.rs:562:38:562:42 | file2 | semmle.label | file2 | +| test.rs:563:31:563:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:563:36:563:41 | [post] buffer | semmle.label | [post] buffer | +| test.rs:564:14:564:20 | &buffer | semmle.label | &buffer | +| test.rs:564:15:564:20 | buffer | semmle.label | buffer | +| test.rs:569:13:569:17 | file1 | semmle.label | file1 | +| test.rs:569:21:569:39 | ...::open | semmle.label | ...::open | +| test.rs:569:21:569:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:569:21:569:52 | TryExpr | semmle.label | TryExpr | +| test.rs:570:13:570:22 | mut reader | semmle.label | mut reader | +| test.rs:570:26:570:40 | file1.take(...) | semmle.label | file1.take(...) | +| test.rs:571:31:571:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:571:36:571:41 | [post] buffer | semmle.label | [post] buffer | +| test.rs:572:14:572:20 | &buffer | semmle.label | &buffer | +| test.rs:572:15:572:20 | buffer | semmle.label | buffer | +| test.rs:581:9:581:16 | mut file | semmle.label | mut file | +| test.rs:581:20:581:40 | ...::open | semmle.label | ...::open | +| test.rs:581:20:581:52 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | +| test.rs:581:20:581:58 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:581:20:581:59 | TryExpr | semmle.label | TryExpr | +| test.rs:585:32:585:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:585:37:585:42 | [post] buffer | semmle.label | [post] buffer | +| test.rs:586:14:586:20 | &buffer | semmle.label | &buffer | +| test.rs:586:15:586:20 | buffer | semmle.label | buffer | +| test.rs:591:39:591:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:591:44:591:49 | [post] buffer | semmle.label | [post] buffer | +| test.rs:592:14:592:20 | &buffer | semmle.label | &buffer | +| test.rs:592:15:592:20 | buffer | semmle.label | buffer | +| test.rs:597:42:597:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:597:47:597:52 | [post] buffer | semmle.label | [post] buffer | +| test.rs:598:14:598:20 | &buffer | semmle.label | &buffer | +| test.rs:598:15:598:20 | buffer | semmle.label | buffer | +| test.rs:603:25:603:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:603:30:603:35 | [post] buffer | semmle.label | [post] buffer | +| test.rs:604:14:604:20 | &buffer | semmle.label | &buffer | +| test.rs:604:15:604:20 | buffer | semmle.label | buffer | +| test.rs:608:13:608:14 | v1 | semmle.label | v1 | +| test.rs:608:18:608:31 | file.read_u8() [future, Ok] | semmle.label | file.read_u8() [future, Ok] | +| test.rs:608:18:608:37 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:608:18:608:38 | TryExpr | semmle.label | TryExpr | +| test.rs:609:13:609:14 | v2 | semmle.label | v2 | +| test.rs:609:18:609:32 | file.read_i16() [future, Ok] | semmle.label | file.read_i16() [future, Ok] | +| test.rs:609:18:609:38 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:609:18:609:39 | TryExpr | semmle.label | TryExpr | +| test.rs:610:13:610:14 | v3 | semmle.label | v3 | +| test.rs:610:18:610:32 | file.read_f32() [future, Ok] | semmle.label | file.read_f32() [future, Ok] | +| test.rs:610:18:610:38 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:610:18:610:39 | TryExpr | semmle.label | TryExpr | +| test.rs:611:13:611:14 | v4 | semmle.label | v4 | +| test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | semmle.label | file.read_i64_le() [future, Ok] | +| test.rs:611:18:611:41 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:611:18:611:42 | TryExpr | semmle.label | TryExpr | +| test.rs:612:14:612:15 | v1 | semmle.label | v1 | +| test.rs:613:14:613:15 | v2 | semmle.label | v2 | +| test.rs:614:14:614:15 | v3 | semmle.label | v3 | +| test.rs:615:14:615:15 | v4 | semmle.label | v4 | +| test.rs:620:23:620:33 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:620:28:620:33 | [post] buffer | semmle.label | [post] buffer | +| test.rs:621:14:621:20 | &buffer | semmle.label | &buffer | +| test.rs:621:15:621:20 | buffer | semmle.label | buffer | +| test.rs:627:13:627:18 | mut f1 | semmle.label | mut f1 | +| test.rs:627:22:627:65 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | +| test.rs:627:22:627:71 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:627:22:627:72 | TryExpr | semmle.label | TryExpr | +| test.rs:627:52:627:55 | open | semmle.label | open | +| test.rs:629:30:629:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:629:35:629:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:630:14:630:20 | &buffer | semmle.label | &buffer | +| test.rs:630:15:630:20 | buffer | semmle.label | buffer | +| test.rs:688:13:688:22 | mut stream | semmle.label | mut stream | +| test.rs:688:26:688:53 | ...::connect | semmle.label | ...::connect | +| test.rs:688:26:688:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | +| test.rs:688:26:688:63 | TryExpr | semmle.label | TryExpr | +| test.rs:695:29:695:39 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:695:34:695:39 | [post] buffer | semmle.label | [post] buffer | +| test.rs:698:14:698:20 | &buffer | semmle.label | &buffer | +| test.rs:698:15:698:20 | buffer | semmle.label | buffer | +| test.rs:699:14:699:22 | buffer[0] | semmle.label | buffer[0] | +| test.rs:707:13:707:22 | mut stream | semmle.label | mut stream | +| test.rs:707:26:707:61 | ...::connect_timeout | semmle.label | ...::connect_timeout | +| test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | semmle.label | ...::connect_timeout(...) [Ok] | +| test.rs:707:26:707:106 | TryExpr | semmle.label | TryExpr | +| test.rs:715:21:715:30 | mut reader | semmle.label | mut reader | +| test.rs:715:34:715:64 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:715:34:715:74 | ... .take(...) | semmle.label | ... .take(...) | +| test.rs:715:58:715:63 | stream | semmle.label | stream | +| test.rs:718:44:718:52 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | +| test.rs:718:49:718:52 | [post] line | semmle.label | [post] line | +| test.rs:725:34:725:38 | &line | semmle.label | &line | +| test.rs:725:35:725:38 | line | semmle.label | line | +| test.rs:759:9:759:24 | mut tokio_stream | semmle.label | mut tokio_stream | +| test.rs:759:28:759:57 | ...::connect | semmle.label | ...::connect | +| test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | +| test.rs:759:28:759:72 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:759:28:759:73 | TryExpr | semmle.label | TryExpr | +| test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | +| test.rs:767:40:767:46 | [post] buffer1 | semmle.label | [post] buffer1 | +| test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | +| test.rs:771:41:771:47 | [post] buffer2 | semmle.label | [post] buffer2 | +| test.rs:774:14:774:21 | &buffer1 | semmle.label | &buffer1 | +| test.rs:774:15:774:21 | buffer1 | semmle.label | buffer1 | +| test.rs:775:14:775:23 | buffer1[0] | semmle.label | buffer1[0] | +| test.rs:778:14:778:21 | &buffer2 | semmle.label | &buffer2 | +| test.rs:778:15:778:21 | buffer2 | semmle.label | buffer2 | +| test.rs:779:14:779:23 | buffer2[0] | semmle.label | buffer2[0] | +| test.rs:787:41:787:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:787:46:787:51 | [post] buffer | semmle.label | [post] buffer | +| test.rs:794:26:794:32 | &buffer | semmle.label | &buffer | +| test.rs:794:27:794:32 | buffer | semmle.label | buffer | +| test.rs:810:45:810:55 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:810:50:810:55 | [post] buffer | semmle.label | [post] buffer | +| test.rs:817:26:817:32 | &buffer | semmle.label | &buffer | +| test.rs:817:27:817:32 | buffer | semmle.label | buffer | +| test_futures_io.rs:19:9:19:11 | tcp | semmle.label | tcp | +| test_futures_io.rs:19:15:19:32 | ...::connect | semmle.label | ...::connect | +| test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | +| test_futures_io.rs:19:15:19:43 | await ... [Ok] | semmle.label | await ... [Ok] | +| test_futures_io.rs:19:15:19:44 | TryExpr | semmle.label | TryExpr | +| test_futures_io.rs:20:10:20:13 | &tcp | semmle.label | &tcp | +| test_futures_io.rs:20:11:20:13 | tcp | semmle.label | tcp | +| test_futures_io.rs:26:9:26:18 | mut reader | semmle.label | mut reader | +| test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | semmle.label | connector.connect(...) [future, Ok] | +| test_futures_io.rs:26:22:26:62 | await ... [Ok] | semmle.label | await ... [Ok] | +| test_futures_io.rs:26:22:26:63 | TryExpr | semmle.label | TryExpr | +| test_futures_io.rs:26:53:26:55 | tcp | semmle.label | tcp | +| test_futures_io.rs:27:10:27:16 | &reader | semmle.label | &reader | +| test_futures_io.rs:27:11:27:16 | reader | semmle.label | reader | +| test_futures_io.rs:32:13:32:22 | mut pinned | semmle.label | mut pinned | +| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test_futures_io.rs:32:26:32:46 | ...::new(...) | semmle.label | ...::new(...) | +| test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | +| test_futures_io.rs:32:40:32:45 | reader | semmle.label | reader | +| test_futures_io.rs:33:14:33:20 | &pinned | semmle.label | &pinned | +| test_futures_io.rs:33:15:33:20 | pinned | semmle.label | pinned | +| test_futures_io.rs:33:15:33:20 | pinned [&ref] | semmle.label | pinned [&ref] | +| test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | +| test_futures_io.rs:45:64:45:69 | reader | semmle.label | reader | +| test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | +| test_futures_io.rs:45:77:45:83 | [post] buffer1 | semmle.label | [post] buffer1 | +| test_futures_io.rs:46:14:46:36 | &... | semmle.label | &... | +| test_futures_io.rs:46:15:46:36 | buffer1[...] | semmle.label | buffer1[...] | +| test_futures_io.rs:49:27:49:32 | reader | semmle.label | reader | +| test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | +| test_futures_io.rs:49:44:49:50 | [post] buffer2 | semmle.label | [post] buffer2 | +| test_futures_io.rs:51:14:51:36 | &... | semmle.label | &... | +| test_futures_io.rs:51:15:51:36 | buffer2[...] | semmle.label | buffer2[...] | +| test_futures_io.rs:54:9:54:19 | mut reader2 | semmle.label | mut reader2 | +| test_futures_io.rs:54:23:54:57 | ...::new(...) | semmle.label | ...::new(...) | +| test_futures_io.rs:54:51:54:56 | reader | semmle.label | reader | +| test_futures_io.rs:55:10:55:17 | &reader2 | semmle.label | &reader2 | +| test_futures_io.rs:55:11:55:17 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:59:13:59:22 | mut pinned | semmle.label | mut pinned | +| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test_futures_io.rs:59:26:59:47 | ...::new(...) | semmle.label | ...::new(...) | +| test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test_futures_io.rs:59:40:59:46 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:60:14:60:20 | &pinned | semmle.label | &pinned | +| test_futures_io.rs:60:15:60:20 | pinned | semmle.label | pinned | +| test_futures_io.rs:60:15:60:20 | pinned [&ref] | semmle.label | pinned [&ref] | +| test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | +| test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | +| test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| test_futures_io.rs:63:31:63:33 | buf | semmle.label | buf | +| test_futures_io.rs:64:18:64:24 | &buffer | semmle.label | &buffer | +| test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test_futures_io.rs:65:18:65:20 | buf | semmle.label | buf | +| test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | +| test_futures_io.rs:69:23:69:44 | ...::new(...) | semmle.label | ...::new(...) | +| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test_futures_io.rs:69:37:69:43 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | +| test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | +| test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| test_futures_io.rs:71:28:71:30 | buf | semmle.label | buf | +| test_futures_io.rs:72:22:72:29 | &buffer2 | semmle.label | &buffer2 | +| test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | +| test_futures_io.rs:73:22:73:24 | buf | semmle.label | buf | +| test_futures_io.rs:83:13:83:18 | buffer | semmle.label | buffer | +| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | +| test_futures_io.rs:83:22:83:45 | await ... [Ok] | semmle.label | await ... [Ok] | +| test_futures_io.rs:83:22:83:46 | TryExpr | semmle.label | TryExpr | +| test_futures_io.rs:84:14:84:19 | buffer | semmle.label | buffer | +| test_futures_io.rs:90:13:90:22 | mut pinned | semmle.label | mut pinned | +| test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test_futures_io.rs:90:26:90:47 | ...::new(...) | semmle.label | ...::new(...) | +| test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test_futures_io.rs:90:40:90:46 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:91:14:91:20 | &pinned | semmle.label | &pinned | +| test_futures_io.rs:91:15:91:20 | pinned | semmle.label | pinned | +| test_futures_io.rs:91:15:91:20 | pinned [&ref] | semmle.label | pinned [&ref] | +| test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test_futures_io.rs:103:64:103:70 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | +| test_futures_io.rs:103:78:103:84 | [post] buffer1 | semmle.label | [post] buffer1 | +| test_futures_io.rs:104:14:104:36 | &... | semmle.label | &... | +| test_futures_io.rs:104:15:104:36 | buffer1[...] | semmle.label | buffer1[...] | +| test_futures_io.rs:107:27:107:33 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | +| test_futures_io.rs:107:45:107:51 | [post] buffer2 | semmle.label | [post] buffer2 | +| test_futures_io.rs:108:14:108:36 | &... | semmle.label | &... | +| test_futures_io.rs:108:15:108:36 | buffer2[...] | semmle.label | buffer2[...] | +| test_futures_io.rs:113:13:113:22 | mut pinned | semmle.label | mut pinned | +| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test_futures_io.rs:113:26:113:47 | ...::new(...) | semmle.label | ...::new(...) | +| test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test_futures_io.rs:113:40:113:46 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:114:14:114:20 | &pinned | semmle.label | &pinned | +| test_futures_io.rs:114:15:114:20 | pinned | semmle.label | pinned | +| test_futures_io.rs:114:15:114:20 | pinned [&ref] | semmle.label | pinned [&ref] | +| test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | +| test_futures_io.rs:117:14:117:20 | &buffer | semmle.label | &buffer | +| test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | +| test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| test_futures_io.rs:118:31:118:33 | buf | semmle.label | buf | +| test_futures_io.rs:119:18:119:20 | buf | semmle.label | buf | +| test_futures_io.rs:125:13:125:18 | buffer | semmle.label | buffer | +| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | +| test_futures_io.rs:125:22:125:45 | await ... [Ok] | semmle.label | await ... [Ok] | +| test_futures_io.rs:125:22:125:46 | TryExpr | semmle.label | TryExpr | +| test_futures_io.rs:126:14:126:19 | buffer | semmle.label | buffer | +| test_futures_io.rs:132:27:132:33 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | +| test_futures_io.rs:132:58:132:61 | [post] line | semmle.label | [post] line | +| test_futures_io.rs:133:14:133:18 | &line | semmle.label | &line | +| test_futures_io.rs:133:15:133:18 | line | semmle.label | line | +| test_futures_io.rs:139:27:139:33 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | +| test_futures_io.rs:139:50:139:53 | [post] line | semmle.label | [post] line | +| test_futures_io.rs:140:14:140:18 | &line | semmle.label | &line | +| test_futures_io.rs:140:15:140:18 | line | semmle.label | line | +| test_futures_io.rs:146:27:146:33 | reader2 | semmle.label | reader2 | +| test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test_futures_io.rs:146:52:146:57 | [post] buffer | semmle.label | [post] buffer | +| test_futures_io.rs:147:14:147:20 | &buffer | semmle.label | &buffer | +| test_futures_io.rs:147:15:147:20 | buffer | semmle.label | buffer | +| web_frameworks.rs:11:31:11:31 | a | semmle.label | a | +| web_frameworks.rs:11:31:11:31 | a | semmle.label | a | +| web_frameworks.rs:13:14:13:14 | a | semmle.label | a | +| web_frameworks.rs:13:14:13:14 | a | semmle.label | a | +| web_frameworks.rs:13:14:13:22 | a.as_str() | semmle.label | a.as_str() | +| web_frameworks.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() | +| web_frameworks.rs:14:14:14:14 | a | semmle.label | a | +| web_frameworks.rs:14:14:14:14 | a | semmle.label | a | +| web_frameworks.rs:14:14:14:24 | a.as_bytes() | semmle.label | a.as_bytes() | +| web_frameworks.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() | +| web_frameworks.rs:15:14:15:14 | a | semmle.label | a | +| web_frameworks.rs:15:14:15:14 | a | semmle.label | a | +| web_frameworks.rs:68:15:68:15 | a | semmle.label | a | +| web_frameworks.rs:68:15:68:15 | a | semmle.label | a | +| web_frameworks.rs:70:14:70:14 | a | semmle.label | a | +| web_frameworks.rs:70:14:70:14 | a | semmle.label | a | +subpaths +testFailures +#select +| test.rs:8:10:8:30 | ...::var(...) | test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | $@ | test.rs:8:10:8:22 | ...::var | ...::var | +| test.rs:9:10:9:33 | ...::var_os(...) | test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | $@ | test.rs:9:10:9:25 | ...::var_os | ...::var_os | +| test.rs:14:10:14:13 | var1 | test.rs:11:16:11:28 | ...::var | test.rs:14:10:14:13 | var1 | $@ | test.rs:11:16:11:28 | ...::var | ...::var | +| test.rs:15:10:15:13 | var2 | test.rs:12:16:12:31 | ...::var_os | test.rs:15:10:15:13 | var2 | $@ | test.rs:12:16:12:31 | ...::var_os | ...::var_os | +| test.rs:36:10:36:16 | my_path | test.rs:29:29:29:42 | ...::args | test.rs:36:10:36:16 | my_path | $@ | test.rs:29:29:29:42 | ...::args | ...::args | +| test.rs:37:10:37:13 | arg1 | test.rs:29:29:29:42 | ...::args | test.rs:37:10:37:13 | arg1 | $@ | test.rs:29:29:29:42 | ...::args | ...::args | +| test.rs:38:10:38:13 | arg2 | test.rs:32:16:32:29 | ...::args | test.rs:38:10:38:13 | arg2 | $@ | test.rs:32:16:32:29 | ...::args | ...::args | +| test.rs:39:10:39:13 | arg3 | test.rs:33:16:33:32 | ...::args_os | test.rs:39:10:39:13 | arg3 | $@ | test.rs:33:16:33:32 | ...::args_os | ...::args_os | +| test.rs:40:10:40:13 | arg4 | test.rs:34:16:34:29 | ...::args | test.rs:40:10:40:13 | arg4 | $@ | test.rs:34:16:34:29 | ...::args | ...::args | +| test.rs:43:14:43:16 | arg | test.rs:42:16:42:29 | ...::args | test.rs:43:14:43:16 | arg | $@ | test.rs:42:16:42:29 | ...::args | ...::args | +| test.rs:47:14:47:16 | arg | test.rs:46:16:46:32 | ...::args_os | test.rs:47:14:47:16 | arg | $@ | test.rs:46:16:46:32 | ...::args_os | ...::args_os | +| test.rs:56:10:56:12 | dir | test.rs:52:15:52:35 | ...::current_dir | test.rs:56:10:56:12 | dir | $@ | test.rs:52:15:52:35 | ...::current_dir | ...::current_dir | +| test.rs:57:10:57:12 | exe | test.rs:53:15:53:35 | ...::current_exe | test.rs:57:10:57:12 | exe | $@ | test.rs:53:15:53:35 | ...::current_exe | ...::current_exe | +| test.rs:58:10:58:13 | home | test.rs:54:16:54:33 | ...::home_dir | test.rs:58:10:58:13 | home | $@ | test.rs:54:16:54:33 | ...::home_dir | ...::home_dir | +| test.rs:63:10:63:23 | remote_string1 | test.rs:62:26:62:47 | ...::get | test.rs:63:10:63:23 | remote_string1 | $@ | test.rs:62:26:62:47 | ...::get | ...::get | +| test.rs:66:10:66:23 | remote_string2 | test.rs:65:26:65:47 | ...::get | test.rs:66:10:66:23 | remote_string2 | $@ | test.rs:65:26:65:47 | ...::get | ...::get | +| test.rs:69:10:69:23 | remote_string3 | test.rs:68:26:68:47 | ...::get | test.rs:69:10:69:23 | remote_string3 | $@ | test.rs:68:26:68:47 | ...::get | ...::get | +| test.rs:72:10:72:23 | remote_string4 | test.rs:71:26:71:47 | ...::get | test.rs:72:10:72:23 | remote_string4 | $@ | test.rs:71:26:71:47 | ...::get | ...::get | +| test.rs:75:10:75:23 | remote_string5 | test.rs:74:26:74:37 | ...::get | test.rs:75:10:75:23 | remote_string5 | $@ | test.rs:74:26:74:37 | ...::get | ...::get | +| test.rs:78:10:78:23 | remote_string6 | test.rs:77:26:77:37 | ...::get | test.rs:78:10:78:23 | remote_string6 | $@ | test.rs:77:26:77:37 | ...::get | ...::get | +| test.rs:81:10:81:41 | ... .unwrap() | test.rs:80:24:80:35 | ...::get | test.rs:81:10:81:41 | ... .unwrap() | $@ | test.rs:80:24:80:35 | ...::get | ...::get | +| test.rs:83:14:83:18 | chunk | test.rs:80:24:80:35 | ...::get | test.rs:83:14:83:18 | chunk | $@ | test.rs:80:24:80:35 | ...::get | ...::get | +| test.rs:115:14:115:22 | &response | test.rs:114:31:114:42 | send_request | test.rs:115:14:115:22 | &response | $@ | test.rs:114:31:114:42 | send_request | send_request | +| test.rs:116:14:116:21 | response | test.rs:114:31:114:42 | send_request | test.rs:116:14:116:21 | response | $@ | test.rs:114:31:114:42 | send_request | send_request | +| test.rs:122:10:122:18 | &response | test.rs:121:31:121:42 | send_request | test.rs:122:10:122:18 | &response | $@ | test.rs:121:31:121:42 | send_request | send_request | +| test.rs:212:14:212:20 | &buffer | test.rs:211:22:211:35 | ...::stdin | test.rs:212:14:212:20 | &buffer | $@ | test.rs:211:22:211:35 | ...::stdin | ...::stdin | +| test.rs:218:14:218:20 | &buffer | test.rs:217:22:217:35 | ...::stdin | test.rs:218:14:218:20 | &buffer | $@ | test.rs:217:22:217:35 | ...::stdin | ...::stdin | +| test.rs:224:14:224:20 | &buffer | test.rs:223:22:223:35 | ...::stdin | test.rs:224:14:224:20 | &buffer | $@ | test.rs:223:22:223:35 | ...::stdin | ...::stdin | +| test.rs:230:14:230:20 | &buffer | test.rs:229:22:229:35 | ...::stdin | test.rs:230:14:230:20 | &buffer | $@ | test.rs:229:22:229:35 | ...::stdin | ...::stdin | +| test.rs:236:14:236:20 | &buffer | test.rs:235:9:235:22 | ...::stdin | test.rs:236:14:236:20 | &buffer | $@ | test.rs:235:9:235:22 | ...::stdin | ...::stdin | +| test.rs:240:14:240:17 | byte | test.rs:239:17:239:30 | ...::stdin | test.rs:240:14:240:17 | byte | $@ | test.rs:239:17:239:30 | ...::stdin | ...::stdin | +| test.rs:248:14:248:18 | &data | test.rs:246:50:246:63 | ...::stdin | test.rs:248:14:248:18 | &data | $@ | test.rs:246:50:246:63 | ...::stdin | ...::stdin | +| test.rs:254:14:254:18 | &data | test.rs:252:46:252:59 | ...::stdin | test.rs:254:14:254:18 | &data | $@ | test.rs:252:46:252:59 | ...::stdin | ...::stdin | +| test.rs:261:14:261:20 | &buffer | test.rs:259:50:259:63 | ...::stdin | test.rs:261:14:261:20 | &buffer | $@ | test.rs:259:50:259:63 | ...::stdin | ...::stdin | +| test.rs:268:14:268:20 | &buffer | test.rs:266:50:266:63 | ...::stdin | test.rs:268:14:268:20 | &buffer | $@ | test.rs:266:50:266:63 | ...::stdin | ...::stdin | +| test.rs:269:14:269:22 | buffer[0] | test.rs:266:50:266:63 | ...::stdin | test.rs:269:14:269:22 | buffer[0] | $@ | test.rs:266:50:266:63 | ...::stdin | ...::stdin | +| test.rs:274:14:274:50 | ... .unwrap() | test.rs:273:56:273:69 | ...::stdin | test.rs:274:14:274:50 | ... .unwrap() | $@ | test.rs:273:56:273:69 | ...::stdin | ...::stdin | +| test.rs:276:18:276:31 | chunk.unwrap() | test.rs:273:56:273:69 | ...::stdin | test.rs:276:18:276:31 | chunk.unwrap() | $@ | test.rs:273:56:273:69 | ...::stdin | ...::stdin | +| test.rs:283:18:283:21 | line | test.rs:281:46:281:59 | ...::stdin | test.rs:283:18:283:21 | line | $@ | test.rs:281:46:281:59 | ...::stdin | ...::stdin | +| test.rs:312:14:312:20 | &buffer | test.rs:309:25:309:40 | ...::stdin | test.rs:312:14:312:20 | &buffer | $@ | test.rs:309:25:309:40 | ...::stdin | ...::stdin | +| test.rs:319:14:319:20 | &buffer | test.rs:316:25:316:40 | ...::stdin | test.rs:319:14:319:20 | &buffer | $@ | test.rs:316:25:316:40 | ...::stdin | ...::stdin | +| test.rs:326:14:326:20 | &buffer | test.rs:323:25:323:40 | ...::stdin | test.rs:326:14:326:20 | &buffer | $@ | test.rs:323:25:323:40 | ...::stdin | ...::stdin | +| test.rs:333:14:333:20 | &buffer | test.rs:330:25:330:40 | ...::stdin | test.rs:333:14:333:20 | &buffer | $@ | test.rs:330:25:330:40 | ...::stdin | ...::stdin | +| test.rs:342:14:342:15 | v1 | test.rs:337:25:337:40 | ...::stdin | test.rs:342:14:342:15 | v1 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | +| test.rs:343:14:343:15 | v2 | test.rs:337:25:337:40 | ...::stdin | test.rs:343:14:343:15 | v2 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | +| test.rs:344:14:344:15 | v3 | test.rs:337:25:337:40 | ...::stdin | test.rs:344:14:344:15 | v3 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | +| test.rs:345:14:345:15 | v4 | test.rs:337:25:337:40 | ...::stdin | test.rs:345:14:345:15 | v4 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | +| test.rs:352:14:352:20 | &buffer | test.rs:349:25:349:40 | ...::stdin | test.rs:352:14:352:20 | &buffer | $@ | test.rs:349:25:349:40 | ...::stdin | ...::stdin | +| test.rs:360:14:360:18 | &data | test.rs:358:52:358:67 | ...::stdin | test.rs:360:14:360:18 | &data | $@ | test.rs:358:52:358:67 | ...::stdin | ...::stdin | +| test.rs:366:14:366:18 | &data | test.rs:364:48:364:63 | ...::stdin | test.rs:366:14:366:18 | &data | $@ | test.rs:364:48:364:63 | ...::stdin | ...::stdin | +| test.rs:373:14:373:20 | &buffer | test.rs:371:52:371:67 | ...::stdin | test.rs:373:14:373:20 | &buffer | $@ | test.rs:371:52:371:67 | ...::stdin | ...::stdin | +| test.rs:380:14:380:20 | &buffer | test.rs:378:52:378:67 | ...::stdin | test.rs:380:14:380:20 | &buffer | $@ | test.rs:378:52:378:67 | ...::stdin | ...::stdin | +| test.rs:381:14:381:22 | buffer[0] | test.rs:378:52:378:67 | ...::stdin | test.rs:381:14:381:22 | buffer[0] | $@ | test.rs:378:52:378:67 | ...::stdin | ...::stdin | +| test.rs:386:14:386:56 | ... .unwrap() | test.rs:385:58:385:73 | ...::stdin | test.rs:386:14:386:56 | ... .unwrap() | $@ | test.rs:385:58:385:73 | ...::stdin | ...::stdin | +| test.rs:388:18:388:22 | chunk | test.rs:385:58:385:73 | ...::stdin | test.rs:388:18:388:22 | chunk | $@ | test.rs:385:58:385:73 | ...::stdin | ...::stdin | +| test.rs:395:14:395:46 | ... .unwrap() | test.rs:393:48:393:63 | ...::stdin | test.rs:395:14:395:46 | ... .unwrap() | $@ | test.rs:393:48:393:63 | ...::stdin | ...::stdin | +| test.rs:397:18:397:21 | line | test.rs:393:48:393:63 | ...::stdin | test.rs:397:18:397:21 | line | $@ | test.rs:393:48:393:63 | ...::stdin | ...::stdin | +| test.rs:409:14:409:19 | buffer | test.rs:408:31:408:43 | ...::read | test.rs:409:14:409:19 | buffer | $@ | test.rs:408:31:408:43 | ...::read | ...::read | +| test.rs:414:14:414:19 | buffer | test.rs:413:31:413:38 | ...::read | test.rs:414:14:414:19 | buffer | $@ | test.rs:413:31:413:38 | ...::read | ...::read | +| test.rs:419:14:419:19 | buffer | test.rs:418:22:418:39 | ...::read_to_string | test.rs:419:14:419:19 | buffer | $@ | test.rs:418:22:418:39 | ...::read_to_string | ...::read_to_string | +| test.rs:426:14:426:25 | path.clone() | test.rs:425:22:425:25 | path | test.rs:426:14:426:25 | path.clone() | $@ | test.rs:425:22:425:25 | path | path | +| test.rs:427:14:427:35 | ... .as_path() | test.rs:425:22:425:25 | path | test.rs:427:14:427:35 | ... .as_path() | $@ | test.rs:425:22:425:25 | path | path | +| test.rs:437:14:437:17 | path | test.rs:425:22:425:25 | path | test.rs:437:14:437:17 | path | $@ | test.rs:425:22:425:25 | path | path | +| test.rs:440:14:440:30 | file_name.clone() | test.rs:439:27:439:35 | file_name | test.rs:440:14:440:30 | file_name.clone() | $@ | test.rs:439:27:439:35 | file_name | file_name | +| test.rs:445:14:445:22 | file_name | test.rs:439:27:439:35 | file_name | test.rs:445:14:445:22 | file_name | $@ | test.rs:439:27:439:35 | file_name | file_name | +| test.rs:462:14:462:19 | target | test.rs:461:22:461:34 | ...::read_link | test.rs:462:14:462:19 | target | $@ | test.rs:461:22:461:34 | ...::read_link | ...::read_link | +| test.rs:471:14:471:19 | buffer | test.rs:470:31:470:45 | ...::read | test.rs:471:14:471:19 | buffer | $@ | test.rs:470:31:470:45 | ...::read | ...::read | +| test.rs:476:14:476:19 | buffer | test.rs:475:31:475:45 | ...::read | test.rs:476:14:476:19 | buffer | $@ | test.rs:475:31:475:45 | ...::read | ...::read | +| test.rs:481:14:481:19 | buffer | test.rs:480:22:480:46 | ...::read_to_string | test.rs:481:14:481:19 | buffer | $@ | test.rs:480:22:480:46 | ...::read_to_string | ...::read_to_string | +| test.rs:488:14:488:17 | path | test.rs:486:26:486:29 | path | test.rs:488:14:488:17 | path | $@ | test.rs:486:26:486:29 | path | path | +| test.rs:488:14:488:17 | path | test.rs:486:26:486:29 | path | test.rs:488:14:488:17 | path | $@ | test.rs:486:26:486:29 | path | path | +| test.rs:489:14:489:22 | file_name | test.rs:487:31:487:39 | file_name | test.rs:489:14:489:22 | file_name | $@ | test.rs:487:31:487:39 | file_name | file_name | +| test.rs:489:14:489:22 | file_name | test.rs:487:31:487:39 | file_name | test.rs:489:14:489:22 | file_name | $@ | test.rs:487:31:487:39 | file_name | file_name | +| test.rs:494:14:494:19 | target | test.rs:493:22:493:41 | ...::read_link | test.rs:494:14:494:19 | target | $@ | test.rs:493:22:493:41 | ...::read_link | ...::read_link | +| test.rs:508:14:508:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:508:14:508:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | +| test.rs:514:14:514:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:514:14:514:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | +| test.rs:520:14:520:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:520:14:520:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | +| test.rs:526:14:526:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:526:14:526:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | +| test.rs:530:14:530:17 | byte | test.rs:503:20:503:38 | ...::open | test.rs:530:14:530:17 | byte | $@ | test.rs:503:20:503:38 | ...::open | ...::open | +| test.rs:539:14:539:20 | &buffer | test.rs:536:50:536:53 | open | test.rs:539:14:539:20 | &buffer | $@ | test.rs:536:50:536:53 | open | open | +| test.rs:546:14:546:20 | &buffer | test.rs:543:67:543:70 | open | test.rs:546:14:546:20 | &buffer | $@ | test.rs:543:67:543:70 | open | open | +| test.rs:553:14:553:20 | &buffer | test.rs:550:101:550:104 | open | test.rs:553:14:553:20 | &buffer | $@ | test.rs:550:101:550:104 | open | open | +| test.rs:564:14:564:20 | &buffer | test.rs:560:21:560:39 | ...::open | test.rs:564:14:564:20 | &buffer | $@ | test.rs:560:21:560:39 | ...::open | ...::open | +| test.rs:564:14:564:20 | &buffer | test.rs:561:21:561:39 | ...::open | test.rs:564:14:564:20 | &buffer | $@ | test.rs:561:21:561:39 | ...::open | ...::open | +| test.rs:572:14:572:20 | &buffer | test.rs:569:21:569:39 | ...::open | test.rs:572:14:572:20 | &buffer | $@ | test.rs:569:21:569:39 | ...::open | ...::open | +| test.rs:586:14:586:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:586:14:586:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:592:14:592:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:592:14:592:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:598:14:598:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:598:14:598:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:604:14:604:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:604:14:604:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:612:14:612:15 | v1 | test.rs:581:20:581:40 | ...::open | test.rs:612:14:612:15 | v1 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:613:14:613:15 | v2 | test.rs:581:20:581:40 | ...::open | test.rs:613:14:613:15 | v2 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:614:14:614:15 | v3 | test.rs:581:20:581:40 | ...::open | test.rs:614:14:614:15 | v3 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:615:14:615:15 | v4 | test.rs:581:20:581:40 | ...::open | test.rs:615:14:615:15 | v4 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:621:14:621:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:621:14:621:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | +| test.rs:630:14:630:20 | &buffer | test.rs:627:52:627:55 | open | test.rs:630:14:630:20 | &buffer | $@ | test.rs:627:52:627:55 | open | open | +| test.rs:698:14:698:20 | &buffer | test.rs:688:26:688:53 | ...::connect | test.rs:698:14:698:20 | &buffer | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect | +| test.rs:699:14:699:22 | buffer[0] | test.rs:688:26:688:53 | ...::connect | test.rs:699:14:699:22 | buffer[0] | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect | +| test.rs:725:34:725:38 | &line | test.rs:707:26:707:61 | ...::connect_timeout | test.rs:725:34:725:38 | &line | $@ | test.rs:707:26:707:61 | ...::connect_timeout | ...::connect_timeout | +| test.rs:774:14:774:21 | &buffer1 | test.rs:759:28:759:57 | ...::connect | test.rs:774:14:774:21 | &buffer1 | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | +| test.rs:775:14:775:23 | buffer1[0] | test.rs:759:28:759:57 | ...::connect | test.rs:775:14:775:23 | buffer1[0] | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | +| test.rs:778:14:778:21 | &buffer2 | test.rs:759:28:759:57 | ...::connect | test.rs:778:14:778:21 | &buffer2 | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | +| test.rs:779:14:779:23 | buffer2[0] | test.rs:759:28:759:57 | ...::connect | test.rs:779:14:779:23 | buffer2[0] | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | +| test.rs:794:26:794:32 | &buffer | test.rs:759:28:759:57 | ...::connect | test.rs:794:26:794:32 | &buffer | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | +| test.rs:817:26:817:32 | &buffer | test.rs:759:28:759:57 | ...::connect | test.rs:817:26:817:32 | &buffer | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | +| test_futures_io.rs:20:10:20:13 | &tcp | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:20:10:20:13 | &tcp | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:27:10:27:16 | &reader | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:27:10:27:16 | &reader | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:33:14:33:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:33:14:33:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:46:14:46:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:46:14:46:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:51:14:51:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:51:14:51:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:55:10:55:17 | &reader2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:55:10:55:17 | &reader2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:60:14:60:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:60:14:60:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:64:18:64:24 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:64:18:64:24 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:65:18:65:20 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:65:18:65:20 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:72:22:72:29 | &buffer2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:72:22:72:29 | &buffer2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:73:22:73:24 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:73:22:73:24 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:84:14:84:19 | buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:84:14:84:19 | buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:91:14:91:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:91:14:91:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:104:14:104:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:104:14:104:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:108:14:108:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:108:14:108:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:114:14:114:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:114:14:114:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:117:14:117:20 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:117:14:117:20 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:119:18:119:20 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:119:18:119:20 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:126:14:126:19 | buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:126:14:126:19 | buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:133:14:133:18 | &line | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:133:14:133:18 | &line | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:140:14:140:18 | &line | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:140:14:140:18 | &line | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:147:14:147:20 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:147:14:147:20 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| web_frameworks.rs:13:14:13:22 | a.as_str() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | $@ | web_frameworks.rs:11:31:11:31 | a | a | +| web_frameworks.rs:13:14:13:23 | a.as_str() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | $@ | web_frameworks.rs:11:31:11:31 | a | a | +| web_frameworks.rs:14:14:14:24 | a.as_bytes() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | $@ | web_frameworks.rs:11:31:11:31 | a | a | +| web_frameworks.rs:14:14:14:25 | a.as_bytes() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | $@ | web_frameworks.rs:11:31:11:31 | a | a | +| web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a | +| web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a | +| web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a | +| web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a | diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql index d13ca71f16e0..09b4ab5bf908 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql @@ -1,3 +1,7 @@ +/** + * @kind path-problem + */ + import rust import codeql.rust.dataflow.DataFlow import codeql.rust.Concepts @@ -25,3 +29,8 @@ module MyFlowConfig implements DataFlow::ConfigSig { module MyFlowTest = TaintFlowTest; import MyFlowTest +import PathGraph + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() From d93b2edc0daf081a5da8aa9a5daa470d8f70f944 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 18 Sep 2025 08:13:43 +0200 Subject: [PATCH 139/219] Ruby: Accept test changes. --- .../controlflow/graph/BasicBlocks.expected | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected index 35b18b7132b0..720ee26e679e 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected @@ -6252,7 +6252,8 @@ joinBlockPredecessor | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:21:9:21:20 | [ensure: exception] self | 1 | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | 0 | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | 1 | -| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 0 | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 (normal) | 0 | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 1 | | break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | 1 | | break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | while ... | 0 | | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | 0 | @@ -6286,20 +6287,25 @@ joinBlockPredecessor | case.rb:9:3:17:5 | case ... | case.rb:14:25:14:25 | 6 | 3 | | case.rb:9:3:17:5 | case ... | case.rb:15:28:15:28 | 7 | 4 | | case.rb:9:3:17:5 | case ... | case.rb:16:10:16:10 | 8 | 5 | -| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 0 | -| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 0 | -| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 0 | +| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | 0 | +| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 1 | +| case.rb:26:1:30:3 | exit case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | 0 | +| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 1 | +| case.rb:32:1:39:3 | exit case_match_array | case.rb:32:1:39:3 | exit case_match_array (abnormal) | 0 | +| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 1 | | case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:5:37:27 | in ... then ... | 0 | | case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:8:37:26 | [ ..., * ] | 1 | | case.rb:33:3:38:5 | case ... | case.rb:32:1:39:3 | enter case_match_array | 0 | | case.rb:33:3:38:5 | case ... | case.rb:35:9:35:9 | x | 1 | | case.rb:33:3:38:5 | case ... | case.rb:36:9:36:9 | x | 2 | | case.rb:33:3:38:5 | case ... | case.rb:37:25:37:25 | e | 3 | -| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 0 | +| case.rb:41:1:45:3 | exit case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | 0 | +| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 1 | | case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | enter case_match_find | 0 | | case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:10:43:10 | x | 1 | | case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:16:43:16 | 2 | 2 | -| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 0 | +| case.rb:47:1:53:3 | exit case_match_hash | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | 0 | +| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 1 | | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:5:51:17 | in ... then ... | 0 | | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:8:51:16 | { ..., ** } | 1 | | case.rb:48:3:52:5 | case ... | case.rb:49:29:49:32 | rest | 0 | @@ -6315,7 +6321,8 @@ joinBlockPredecessor | case.rb:56:3:60:5 | case ... | case.rb:58:5:58:10 | in ... then ... | 1 | | case.rb:64:3:66:5 | case ... | case.rb:63:1:67:3 | enter case_match_underscore | 0 | | case.rb:64:3:66:5 | case ... | case.rb:65:12:65:12 | _ | 1 | -| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 0 | +| case.rb:69:1:93:3 | exit case_match_various | case.rb:69:1:93:3 | exit case_match_various (abnormal) | 0 | +| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 1 | | case.rb:72:3:92:5 | case ... | case.rb:69:1:93:3 | enter case_match_various | 0 | | case.rb:72:3:92:5 | case ... | case.rb:74:5:74:11 | in ... then ... | 1 | | case.rb:72:3:92:5 | case ... | case.rb:75:5:75:15 | in ... then ... | 2 | @@ -6347,7 +6354,8 @@ joinBlockPredecessor | case.rb:72:3:92:5 | case ... | case.rb:91:13:91:14 | "" | 28 | | case.rb:72:3:92:5 | case ... | case.rb:91:18:91:19 | [ ..., * ] | 29 | | case.rb:72:3:92:5 | case ... | case.rb:91:23:91:24 | { ..., ** } | 30 | -| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 0 | +| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | 0 | +| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 1 | | cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:19:19:19:32 | self | 0 | | cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:21:19:21:32 | self | 1 | | cfg.rb:41:1:45:3 | case ... | cfg.rb:42:15:42:24 | self | 0 | @@ -6454,7 +6462,8 @@ joinBlockPredecessor | loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | 1 | | raise.rb:7:1:12:3 | exit m1 | raise.rb:8:3:10:5 | if ... | 0 | | raise.rb:7:1:12:3 | exit m1 | raise.rb:9:5:9:17 | self | 1 | -| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 0 | +| raise.rb:14:1:23:3 | exit m2 | raise.rb:14:1:23:3 | exit m2 (abnormal) | 0 | +| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 1 | | raise.rb:22:3:22:15 | self | raise.rb:16:5:18:7 | if ... | 0 | | raise.rb:22:3:22:15 | self | raise.rb:20:5:20:18 | self | 1 | | raise.rb:33:3:33:15 | self | raise.rb:27:5:29:7 | if ... | 0 | @@ -6463,25 +6472,30 @@ joinBlockPredecessor | raise.rb:44:3:44:15 | self | raise.rb:39:7:39:22 | self | 1 | | raise.rb:54:3:54:15 | self | raise.rb:49:5:51:7 | if ... | 0 | | raise.rb:54:3:54:15 | self | raise.rb:50:7:50:22 | self | 1 | -| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 0 | +| raise.rb:57:1:66:3 | exit m6 | raise.rb:57:1:66:3 | exit m6 (abnormal) | 0 | +| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 1 | | raise.rb:62:36:62:36 | e | raise.rb:60:7:60:22 | self | 0 | | raise.rb:62:36:62:36 | e | raise.rb:62:22:62:31 | ExceptionB | 1 | | raise.rb:65:3:65:15 | self | raise.rb:59:5:61:7 | if ... | 0 | | raise.rb:65:3:65:15 | self | raise.rb:62:36:62:36 | e | 1 | -| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 0 | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | exit m7 (normal) | 0 | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 1 | | raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:72:13:72:17 | x < 0 | 0 | | raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:76:3:76:15 | self | 1 | | raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:68:1:77:3 | enter m7 | 0 | | raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:70:5:70:17 | self | 1 | | raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:3:72:18 | elsif ... | 2 | | raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:9:71:9 | x | 3 | -| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 0 | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | exit m8 (normal) | 0 | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 1 | | raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:85:15:85:19 | x < 0 | 0 | | raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:89:5:89:17 | self | 1 | | raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:79:1:92:3 | enter m8 | 0 | | raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:83:7:83:19 | self | 1 | | raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:5:85:20 | elsif ... | 2 | | raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:11:84:11 | x | 3 | +| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 (abnormal) | 1 | +| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 (normal) | 0 | | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:116:3:118:5 | [ensure: exception] if ... | 0 | | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: exception] self | 2 | | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: return] self | 3 | @@ -6520,6 +6534,8 @@ joinBlockPredecessor | raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:25:155:48 | ... if ... | 0 | | raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:14 | self | 1 | | raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:23 | ... unless ... | 0 | +| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 (abnormal) | 1 | +| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 (normal) | 0 | | raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:175:14:175:14 | 1 | 0 | | raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:177:14:177:14 | 2 | 1 | | raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:180:12:180:12 | 3 | 2 | From 3cd737e40d43fe5108a2f5710bb733e2c37ce454 Mon Sep 17 00:00:00 2001 From: Kasper Svendsen Date: Thu, 18 Sep 2025 10:32:20 +0200 Subject: [PATCH 140/219] Overlay: Future-proof Java config discarding --- java/ql/lib/semmle/code/java/Overlay.qll | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll index 1d1a3896ba71..27e8badc2336 100644 --- a/java/ql/lib/semmle/code/java/Overlay.qll +++ b/java/ql/lib/semmle/code/java/Overlay.qll @@ -73,22 +73,24 @@ private predicate discardReferableLocatable(@locatable el) { ) } +/** Gets the raw file for a configLocatable. */ overlay[local] -private predicate baseConfigLocatable(@configLocatable l) { not isOverlay() and exists(l) } +private string getRawFileForConfig(@configLocatable el) { + exists(@location loc, @file file | + configLocations(el, loc) and + locations_default(loc, file, _, _, _, _) and + files(file, result) + ) +} overlay[local] -private predicate overlayHasConfigLocatables() { - isOverlay() and - exists(@configLocatable el) +private string baseConfigLocatable(@configLocatable el) { + not isOverlay() and result = getRawFileForConfig(el) } overlay[discard_entity] private predicate discardBaseConfigLocatable(@configLocatable el) { - // The properties extractor is currently not incremental, so if - // the overlay contains any config locatables, the overlay should - // contain a full extraction and all config locatables from base - // should be discarded. - baseConfigLocatable(el) and overlayHasConfigLocatables() + overlayChangedFiles(baseConfigLocatable(el)) } overlay[local] From dbb9a26f78938a5ddd4763d56e9c7cdb54f204c5 Mon Sep 17 00:00:00 2001 From: Kasper Svendsen Date: Thu, 18 Sep 2025 10:35:11 +0200 Subject: [PATCH 141/219] Overlay: Future-proof Java XML discarding --- java/ql/lib/semmle/code/java/Overlay.qll | 22 +--------------------- java/ql/lib/semmle/code/xml/XML.qll | 11 +++++++++++ 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll index 27e8badc2336..0f6033d87b3d 100644 --- a/java/ql/lib/semmle/code/java/Overlay.qll +++ b/java/ql/lib/semmle/code/java/Overlay.qll @@ -18,7 +18,7 @@ predicate isOverlay() { databaseMetadata("isOverlay", "true") } overlay[local] string getRawFile(@locatable el) { exists(@location loc, @file file | - hasLocation(el, loc) and + (hasLocation(el, loc) or xmllocations(el, loc)) and locations_default(loc, file, _, _, _, _) and files(file, result) ) @@ -92,23 +92,3 @@ overlay[discard_entity] private predicate discardBaseConfigLocatable(@configLocatable el) { overlayChangedFiles(baseConfigLocatable(el)) } - -overlay[local] -private predicate baseXmlLocatable(@xmllocatable l) { - not isOverlay() and not files(l, _) and not xmlNs(l, _, _, _) -} - -overlay[local] -private predicate overlayHasXmlLocatable() { - isOverlay() and - exists(@xmllocatable l | not files(l, _) and not xmlNs(l, _, _, _)) -} - -overlay[discard_entity] -private predicate discardBaseXmlLocatable(@xmllocatable el) { - // The XML extractor is currently not incremental, so if - // the overlay contains any XML locatables, the overlay should - // contain a full extraction and all XML locatables from base - // should be discarded. - baseXmlLocatable(el) and overlayHasXmlLocatable() -} diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll index e4073362fc6f..cd00991eb65c 100644 --- a/java/ql/lib/semmle/code/xml/XML.qll +++ b/java/ql/lib/semmle/code/xml/XML.qll @@ -6,6 +6,7 @@ module; import semmle.files.FileSystem private import codeql.xml.Xml +private import semmle.code.java.Overlay private module Input implements InputSig { class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; @@ -69,3 +70,13 @@ private module Input implements InputSig { } import Make + +private class DiscardableXmlAttribute extends DiscardableLocatable, @xmlattribute { } + +private class DiscardableXmlElement extends DiscardableLocatable, @xmlelement { } + +private class DiscardableXmlComment extends DiscardableLocatable, @xmlcomment { } + +private class DiscardableXmlCharacters extends DiscardableLocatable, @xmlcharacters { } + +private class DiscardableXmlDtd extends DiscardableLocatable, @xmldtd { } From c831a8c2d92d7dd7be628f16b3df9eb528184868 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 17 Sep 2025 13:43:24 +0200 Subject: [PATCH 142/219] Rust: Add more path resolution tests --- .../PathResolutionConsistency.expected | 3 +- .../library-tests/path-resolution/main.rs | 10 +- .../library-tests/path-resolution/my2/mod.rs | 10 +- .../path-resolution/my2/my3/mod.rs | 2 + .../path-resolution/path-resolution.expected | 813 +++++++++--------- 5 files changed, 431 insertions(+), 407 deletions(-) diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index 9d1761069feb..d945cb4c6c24 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,4 @@ multipleCallTargets -| main.rs:118:9:118:11 | f(...) | +| main.rs:124:9:124:11 | f(...) | +| main.rs:774:5:774:7 | f(...) | | proc_macro.rs:9:5:9:10 | ...::new(...) | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 1de91a60fe44..db8e4c0f39da 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -8,7 +8,13 @@ mod my2; // I14 use my2::*; // $ item=I14 -use my2::nested2::nested3::nested4::{f, g}; // $ item=I11 item=I12 item=I13 +#[rustfmt::skip] +use my2::nested2::nested3::nested4::{ // $ item=I11 + f, // $ item=I12 + g, // $ item=I13 +}; + +use my2::nested8_f; // $ item=I119 mod m1 { fn f() { @@ -765,7 +771,7 @@ fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 nested2::nested3::nested4::f(); // $ item=I12 - f(); // $ item=I12 + f(); // $ item=I12 $ SPURIOUS: item=I119 g(); // $ item=I13 crate::h(); // $ item=I25 m1::m2::g(); // $ item=I19 diff --git a/rust/ql/test/library-tests/path-resolution/my2/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/mod.rs index 43c1a05e91fe..85edb6832027 100644 --- a/rust/ql/test/library-tests/path-resolution/my2/mod.rs +++ b/rust/ql/test/library-tests/path-resolution/my2/mod.rs @@ -7,11 +7,17 @@ fn g() { pub use nested2::nested5::*; // $ item=I114 -pub use nested2::nested7::nested8::{self}; // $ item=I118 +#[rustfmt::skip] +pub use nested2::nested7::nested8::{ // $ item=I118 + self, // $ item=I118 + f as nested8_f // $ item=I119 +}; + +use nested2::nested5::nested6::f as nested6_f; // $ item=I116 pub mod my3; #[path = "renamed.rs"] mod mymod; -use mymod::f; // $ item=I1001 +pub use mymod::f; // $ item=I1001 diff --git a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs index 6b54377728bb..e2d413841c35 100644 --- a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs +++ b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs @@ -6,3 +6,5 @@ pub fn f() { use super::super::h; // $ item=I25 use super::g; // $ item=I9 + +use super::nested6_f; // $ MISSING: item=I116 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index a51816a52282..8f12af96c020 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -2,38 +2,38 @@ mod | lib.rs:1:1:1:11 | mod my | | main.rs:1:1:1:7 | mod my | | main.rs:7:1:7:8 | mod my2 | -| main.rs:13:1:37:1 | mod m1 | -| main.rs:18:5:36:5 | mod m2 | -| main.rs:29:9:35:9 | mod m3 | -| main.rs:39:1:46:1 | mod m4 | -| main.rs:103:1:107:1 | mod m5 | -| main.rs:109:1:120:1 | mod m6 | -| main.rs:122:1:141:1 | mod m7 | -| main.rs:143:1:197:1 | mod m8 | -| main.rs:199:1:207:1 | mod m9 | -| main.rs:209:1:228:1 | mod m10 | -| main.rs:230:1:267:1 | mod m11 | -| main.rs:240:5:240:12 | mod f | -| main.rs:269:1:281:1 | mod m12 | -| main.rs:283:1:296:1 | mod m13 | -| main.rs:287:5:295:5 | mod m14 | -| main.rs:298:1:367:1 | mod m15 | -| main.rs:369:1:461:1 | mod m16 | -| main.rs:463:1:513:1 | mod trait_visibility | -| main.rs:464:5:486:5 | mod m | -| main.rs:515:1:545:1 | mod m17 | -| main.rs:547:1:565:1 | mod m18 | -| main.rs:552:5:564:5 | mod m19 | -| main.rs:557:9:563:9 | mod m20 | -| main.rs:567:1:592:1 | mod m21 | -| main.rs:568:5:574:5 | mod m22 | -| main.rs:576:5:591:5 | mod m33 | -| main.rs:594:1:619:1 | mod m23 | -| main.rs:621:1:689:1 | mod m24 | -| main.rs:706:1:758:1 | mod associated_types | +| main.rs:19:1:43:1 | mod m1 | +| main.rs:24:5:42:5 | mod m2 | +| main.rs:35:9:41:9 | mod m3 | +| main.rs:45:1:52:1 | mod m4 | +| main.rs:109:1:113:1 | mod m5 | +| main.rs:115:1:126:1 | mod m6 | +| main.rs:128:1:147:1 | mod m7 | +| main.rs:149:1:203:1 | mod m8 | +| main.rs:205:1:213:1 | mod m9 | +| main.rs:215:1:234:1 | mod m10 | +| main.rs:236:1:273:1 | mod m11 | +| main.rs:246:5:246:12 | mod f | +| main.rs:275:1:287:1 | mod m12 | +| main.rs:289:1:302:1 | mod m13 | +| main.rs:293:5:301:5 | mod m14 | +| main.rs:304:1:373:1 | mod m15 | +| main.rs:375:1:467:1 | mod m16 | +| main.rs:469:1:519:1 | mod trait_visibility | +| main.rs:470:5:492:5 | mod m | +| main.rs:521:1:551:1 | mod m17 | +| main.rs:553:1:571:1 | mod m18 | +| main.rs:558:5:570:5 | mod m19 | +| main.rs:563:9:569:9 | mod m20 | +| main.rs:573:1:598:1 | mod m21 | +| main.rs:574:5:580:5 | mod m22 | +| main.rs:582:5:597:5 | mod m33 | +| main.rs:600:1:625:1 | mod m23 | +| main.rs:627:1:695:1 | mod m24 | +| main.rs:712:1:764:1 | mod associated_types | | my2/mod.rs:1:1:1:16 | mod nested2 | -| my2/mod.rs:12:1:12:12 | mod my3 | -| my2/mod.rs:14:1:15:10 | mod mymod | +| my2/mod.rs:18:1:18:12 | mod my3 | +| my2/mod.rs:20:1:21:10 | mod mymod | | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/nested2.rs:2:5:10:5 | mod nested4 | | my2/nested2.rs:13:1:19:1 | mod nested5 | @@ -52,385 +52,394 @@ resolvePath | main.rs:5:5:5:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | | main.rs:5:5:5:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | main.rs:9:5:9:7 | my2 | main.rs:7:1:7:8 | mod my2 | -| main.rs:11:5:11:7 | my2 | main.rs:7:1:7:8 | mod my2 | -| main.rs:11:5:11:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:11:5:11:25 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:11:5:11:34 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:11:38:11:38 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:11:41:11:41 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:25:13:25:13 | f | main.rs:19:9:21:9 | fn f | -| main.rs:26:13:26:17 | super | main.rs:13:1:37:1 | mod m1 | -| main.rs:26:13:26:20 | ...::f | main.rs:14:5:16:5 | fn f | -| main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | -| main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | -| main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:799:2 | SourceFile | -| main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:44:9:44:9 | g | main.rs:23:9:27:9 | fn g | -| main.rs:56:13:56:14 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:56:13:56:18 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:56:13:56:21 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:57:9:57:9 | g | main.rs:23:9:27:9 | fn g | -| main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | -| main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | -| main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:799:2 | SourceFile | -| main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | -| main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | -| main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo | -| main.rs:85:5:85:7 | my2 | main.rs:7:1:7:8 | mod my2 | -| main.rs:85:5:85:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:87:5:87:21 | my2_nested2_alias | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:87:5:87:30 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:87:34:87:40 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:87:34:87:43 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:87:57:87:63 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:799:2 | SourceFile | -| main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | -| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | -| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | -| main.rs:125:13:125:15 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:128:16:128:18 | i32 | {EXTERNAL LOCATION} | struct i32 | -| main.rs:134:19:134:24 | MyEnum | main.rs:123:5:131:5 | enum MyEnum | -| main.rs:137:17:137:22 | MyEnum | main.rs:123:5:131:5 | enum MyEnum | -| main.rs:137:17:137:25 | ...::A | main.rs:124:9:126:9 | A | -| main.rs:138:17:138:22 | MyEnum | main.rs:123:5:131:5 | enum MyEnum | -| main.rs:138:17:138:25 | ...::B | main.rs:126:12:129:9 | B | -| main.rs:139:9:139:14 | MyEnum | main.rs:123:5:131:5 | enum MyEnum | -| main.rs:139:9:139:17 | ...::C | main.rs:129:12:130:9 | C | -| main.rs:149:13:149:13 | f | main.rs:156:5:158:5 | fn f | -| main.rs:150:13:150:16 | Self | main.rs:144:5:152:5 | trait MyTrait | -| main.rs:150:13:150:19 | ...::f | main.rs:145:9:145:20 | fn f | -| main.rs:161:10:161:16 | MyTrait | main.rs:144:5:152:5 | trait MyTrait | -| main.rs:161:22:161:29 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:164:13:164:13 | f | main.rs:156:5:158:5 | fn f | -| main.rs:165:13:165:16 | Self | main.rs:160:5:171:5 | impl MyTrait for MyStruct { ... } | -| main.rs:165:13:165:19 | ...::g | main.rs:168:9:170:9 | fn g | -| main.rs:174:10:174:17 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:177:13:177:13 | f | main.rs:156:5:158:5 | fn f | -| main.rs:183:17:183:24 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:184:9:184:15 | MyTrait | main.rs:144:5:152:5 | trait MyTrait | -| main.rs:184:9:184:18 | ...::f | main.rs:145:9:145:20 | fn f | -| main.rs:185:9:185:16 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:185:9:185:19 | ...::f | main.rs:161:33:166:9 | fn f | -| main.rs:186:10:186:17 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:187:10:187:16 | MyTrait | main.rs:144:5:152:5 | trait MyTrait | -| main.rs:190:17:190:24 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:192:17:192:24 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:194:9:194:16 | MyStruct | main.rs:154:5:154:22 | struct MyStruct | -| main.rs:194:9:194:19 | ...::h | main.rs:174:21:178:9 | fn h | -| main.rs:203:19:203:22 | self | main.rs:199:1:207:1 | mod m9 | -| main.rs:203:19:203:32 | ...::MyStruct | main.rs:200:5:200:26 | struct MyStruct | -| main.rs:205:9:205:12 | self | main.rs:199:1:207:1 | mod m9 | -| main.rs:205:9:205:22 | ...::MyStruct | main.rs:200:5:200:26 | struct MyStruct | -| main.rs:215:12:215:12 | T | main.rs:212:7:212:7 | T | -| main.rs:220:12:220:12 | T | main.rs:219:14:219:14 | T | -| main.rs:222:7:224:7 | MyStruct::<...> | main.rs:210:5:216:5 | struct MyStruct | -| main.rs:223:9:223:9 | T | main.rs:219:14:219:14 | T | -| main.rs:226:9:226:16 | MyStruct | main.rs:210:5:216:5 | struct MyStruct | -| main.rs:236:17:236:19 | Foo | main.rs:231:5:231:21 | struct Foo | -| main.rs:237:9:237:11 | Foo | main.rs:233:5:233:15 | fn Foo | -| main.rs:246:9:246:11 | Bar | main.rs:242:5:244:5 | enum Bar | -| main.rs:246:9:246:19 | ...::FooBar | main.rs:243:9:243:17 | FooBar | -| main.rs:251:13:251:15 | Foo | main.rs:231:5:231:21 | struct Foo | -| main.rs:252:17:252:22 | FooBar | main.rs:243:9:243:17 | FooBar | -| main.rs:253:17:253:22 | FooBar | main.rs:248:5:248:18 | fn FooBar | -| main.rs:261:9:261:9 | E | main.rs:256:15:259:5 | enum E | -| main.rs:261:9:261:12 | ...::C | main.rs:258:9:258:9 | C | -| main.rs:264:17:264:17 | S | main.rs:256:5:256:13 | struct S | -| main.rs:265:17:265:17 | C | main.rs:258:9:258:9 | C | -| main.rs:278:16:278:16 | T | main.rs:272:7:272:7 | T | -| main.rs:279:14:279:17 | Self | main.rs:270:5:280:5 | trait MyParamTrait | -| main.rs:279:14:279:33 | ...::AssociatedType | main.rs:274:9:274:28 | type AssociatedType | -| main.rs:288:13:288:16 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:288:13:288:21 | ...::m13 | main.rs:283:1:296:1 | mod m13 | -| main.rs:288:13:288:24 | ...::f | main.rs:284:5:284:17 | fn f | -| main.rs:288:13:288:24 | ...::f | main.rs:284:19:285:19 | struct f | -| main.rs:291:17:291:17 | f | main.rs:284:19:285:19 | struct f | -| main.rs:292:21:292:21 | f | main.rs:284:19:285:19 | struct f | -| main.rs:293:13:293:13 | f | main.rs:284:5:284:17 | fn f | -| main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 | -| main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g | -| main.rs:320:9:320:12 | Self | main.rs:315:5:328:5 | trait Trait3 | -| main.rs:320:15:320:20 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:321:9:321:10 | TT | main.rs:317:9:317:10 | TT | -| main.rs:321:13:321:18 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:323:25:323:26 | TT | main.rs:317:9:317:10 | TT | -| main.rs:324:13:324:16 | Self | main.rs:315:5:328:5 | trait Trait3 | -| main.rs:324:13:324:19 | ...::g | main.rs:302:9:302:20 | fn g | -| main.rs:325:13:325:14 | TT | main.rs:317:9:317:10 | TT | -| main.rs:325:13:325:17 | ...::g | main.rs:302:9:302:20 | fn g | -| main.rs:333:10:333:15 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:334:11:334:11 | S | main.rs:330:5:330:13 | struct S | -| main.rs:337:13:337:16 | Self | main.rs:332:5:344:5 | impl Trait1 for S { ... } | -| main.rs:337:13:337:19 | ...::g | main.rs:341:9:343:9 | fn g | -| main.rs:347:10:347:15 | Trait2 | main.rs:305:5:313:5 | trait Trait2 | -| main.rs:348:11:348:11 | S | main.rs:330:5:330:13 | struct S | -| main.rs:357:17:357:17 | S | main.rs:330:5:330:13 | struct S | -| main.rs:358:10:358:10 | S | main.rs:330:5:330:13 | struct S | -| main.rs:359:14:359:19 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:361:10:361:10 | S | main.rs:330:5:330:13 | struct S | -| main.rs:362:14:362:19 | Trait2 | main.rs:305:5:313:5 | trait Trait2 | -| main.rs:364:9:364:9 | S | main.rs:330:5:330:13 | struct S | -| main.rs:364:9:364:12 | ...::g | main.rs:341:9:343:9 | fn g | -| main.rs:374:24:374:24 | T | main.rs:372:7:372:7 | T | -| main.rs:376:24:376:24 | T | main.rs:372:7:372:7 | T | -| main.rs:379:24:379:24 | T | main.rs:372:7:372:7 | T | -| main.rs:380:13:380:16 | Self | main.rs:370:5:386:5 | trait Trait1 | -| main.rs:380:13:380:19 | ...::g | main.rs:376:9:377:9 | fn g | -| main.rs:384:18:384:18 | T | main.rs:372:7:372:7 | T | -| main.rs:392:9:394:9 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | -| main.rs:393:11:393:11 | T | main.rs:390:7:390:7 | T | -| main.rs:395:24:395:24 | T | main.rs:390:7:390:7 | T | -| main.rs:397:13:397:16 | Self | main.rs:388:5:401:5 | trait Trait2 | -| main.rs:397:13:397:19 | ...::g | main.rs:376:9:377:9 | fn g | -| main.rs:399:13:399:16 | Self | main.rs:388:5:401:5 | trait Trait2 | -| main.rs:399:13:399:19 | ...::c | main.rs:384:9:385:9 | Const | -| main.rs:406:10:408:5 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | -| main.rs:407:7:407:7 | S | main.rs:403:5:403:13 | struct S | -| main.rs:409:11:409:11 | S | main.rs:403:5:403:13 | struct S | -| main.rs:410:24:410:24 | S | main.rs:403:5:403:13 | struct S | -| main.rs:412:13:412:16 | Self | main.rs:405:5:423:5 | impl Trait1::<...> for S { ... } | -| main.rs:412:13:412:19 | ...::g | main.rs:416:9:419:9 | fn g | -| main.rs:416:24:416:24 | S | main.rs:403:5:403:13 | struct S | -| main.rs:418:13:418:16 | Self | main.rs:405:5:423:5 | impl Trait1::<...> for S { ... } | -| main.rs:418:13:418:19 | ...::c | main.rs:421:9:422:9 | Const | -| main.rs:421:18:421:18 | S | main.rs:403:5:403:13 | struct S | -| main.rs:421:22:421:22 | S | main.rs:403:5:403:13 | struct S | -| main.rs:426:10:428:5 | Trait2::<...> | main.rs:388:5:401:5 | trait Trait2 | -| main.rs:427:7:427:7 | S | main.rs:403:5:403:13 | struct S | -| main.rs:429:11:429:11 | S | main.rs:403:5:403:13 | struct S | -| main.rs:430:24:430:24 | S | main.rs:403:5:403:13 | struct S | -| main.rs:432:13:432:16 | Self | main.rs:425:5:434:5 | impl Trait2::<...> for S { ... } | -| main.rs:439:17:439:17 | S | main.rs:403:5:403:13 | struct S | -| main.rs:440:10:440:10 | S | main.rs:403:5:403:13 | struct S | -| main.rs:441:14:443:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | -| main.rs:442:13:442:13 | S | main.rs:403:5:403:13 | struct S | -| main.rs:445:10:445:10 | S | main.rs:403:5:403:13 | struct S | -| main.rs:446:14:448:11 | Trait2::<...> | main.rs:388:5:401:5 | trait Trait2 | -| main.rs:447:13:447:13 | S | main.rs:403:5:403:13 | struct S | -| main.rs:450:9:450:9 | S | main.rs:403:5:403:13 | struct S | -| main.rs:450:9:450:12 | ...::g | main.rs:416:9:419:9 | fn g | -| main.rs:452:9:452:9 | S | main.rs:403:5:403:13 | struct S | -| main.rs:452:9:452:12 | ...::h | main.rs:379:9:382:9 | fn h | -| main.rs:454:9:454:9 | S | main.rs:403:5:403:13 | struct S | -| main.rs:454:9:454:12 | ...::c | main.rs:421:9:422:9 | Const | -| main.rs:455:10:455:10 | S | main.rs:403:5:403:13 | struct S | -| main.rs:456:14:458:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | -| main.rs:457:13:457:13 | S | main.rs:403:5:403:13 | struct S | -| main.rs:475:14:475:16 | Foo | main.rs:465:9:467:9 | trait Foo | -| main.rs:475:22:475:22 | X | main.rs:473:9:473:21 | struct X | -| main.rs:481:14:481:16 | Bar | main.rs:469:9:471:9 | trait Bar | -| main.rs:481:22:481:22 | X | main.rs:473:9:473:21 | struct X | -| main.rs:488:9:488:9 | m | main.rs:464:5:486:5 | mod m | -| main.rs:488:9:488:12 | ...::X | main.rs:473:9:473:21 | struct X | -| main.rs:491:17:491:17 | X | main.rs:473:9:473:21 | struct X | -| main.rs:494:17:494:17 | m | main.rs:464:5:486:5 | mod m | -| main.rs:494:17:494:22 | ...::Foo | main.rs:465:9:467:9 | trait Foo | -| main.rs:495:13:495:13 | X | main.rs:473:9:473:21 | struct X | -| main.rs:495:13:495:23 | ...::a_method | main.rs:475:26:478:13 | fn a_method | -| main.rs:499:17:499:17 | m | main.rs:464:5:486:5 | mod m | -| main.rs:499:17:499:22 | ...::Bar | main.rs:469:9:471:9 | trait Bar | -| main.rs:500:13:500:13 | X | main.rs:473:9:473:21 | struct X | -| main.rs:500:13:500:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method | -| main.rs:504:17:504:17 | m | main.rs:464:5:486:5 | mod m | -| main.rs:504:17:504:22 | ...::Bar | main.rs:469:9:471:9 | trait Bar | -| main.rs:505:13:505:13 | X | main.rs:473:9:473:21 | struct X | -| main.rs:505:13:505:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method | -| main.rs:510:13:510:13 | m | main.rs:464:5:486:5 | mod m | -| main.rs:510:13:510:18 | ...::Bar | main.rs:469:9:471:9 | trait Bar | -| main.rs:510:13:510:28 | ...::a_method | main.rs:470:13:470:31 | fn a_method | -| main.rs:523:10:523:16 | MyTrait | main.rs:516:5:518:5 | trait MyTrait | -| main.rs:524:9:524:9 | S | main.rs:520:5:520:13 | struct S | -| main.rs:532:7:532:13 | MyTrait | main.rs:516:5:518:5 | trait MyTrait | -| main.rs:533:10:533:10 | T | main.rs:531:10:531:10 | T | -| main.rs:535:9:535:9 | T | main.rs:531:10:531:10 | T | -| main.rs:535:9:535:12 | ...::f | main.rs:517:9:517:20 | fn f | -| main.rs:536:9:536:15 | MyTrait | main.rs:516:5:518:5 | trait MyTrait | -| main.rs:536:9:536:18 | ...::f | main.rs:517:9:517:20 | fn f | -| main.rs:541:9:541:9 | g | main.rs:530:5:537:5 | fn g | -| main.rs:542:11:542:11 | S | main.rs:520:5:520:13 | struct S | -| main.rs:560:17:560:21 | super | main.rs:552:5:564:5 | mod m19 | -| main.rs:560:17:560:24 | ...::f | main.rs:553:9:555:9 | fn f | -| main.rs:561:17:561:21 | super | main.rs:552:5:564:5 | mod m19 | -| main.rs:561:17:561:28 | ...::super | main.rs:547:1:565:1 | mod m18 | -| main.rs:561:17:561:31 | ...::f | main.rs:548:5:550:5 | fn f | -| main.rs:578:13:578:17 | super | main.rs:567:1:592:1 | mod m21 | -| main.rs:578:13:578:22 | ...::m22 | main.rs:568:5:574:5 | mod m22 | -| main.rs:578:13:578:30 | ...::MyEnum | main.rs:569:9:571:9 | enum MyEnum | -| main.rs:579:13:579:16 | self | main.rs:569:9:571:9 | enum MyEnum | -| main.rs:583:13:583:17 | super | main.rs:567:1:592:1 | mod m21 | -| main.rs:583:13:583:22 | ...::m22 | main.rs:568:5:574:5 | mod m22 | -| main.rs:583:13:583:32 | ...::MyStruct | main.rs:573:9:573:28 | struct MyStruct | -| main.rs:584:13:584:16 | self | main.rs:573:9:573:28 | struct MyStruct | -| main.rs:588:21:588:26 | MyEnum | main.rs:569:9:571:9 | enum MyEnum | -| main.rs:588:21:588:29 | ...::A | main.rs:570:13:570:13 | A | -| main.rs:589:21:589:28 | MyStruct | main.rs:573:9:573:28 | struct MyStruct | -| main.rs:605:10:607:5 | Trait1::<...> | main.rs:595:5:600:5 | trait Trait1 | -| main.rs:606:7:606:10 | Self | main.rs:602:5:602:13 | struct S | -| main.rs:608:11:608:11 | S | main.rs:602:5:602:13 | struct S | -| main.rs:616:17:616:17 | S | main.rs:602:5:602:13 | struct S | -| main.rs:632:15:632:15 | T | main.rs:631:26:631:26 | T | -| main.rs:637:9:637:24 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | -| main.rs:637:23:637:23 | T | main.rs:636:10:636:10 | T | -| main.rs:639:9:639:9 | T | main.rs:636:10:636:10 | T | -| main.rs:639:12:639:17 | TraitA | main.rs:622:5:624:5 | trait TraitA | -| main.rs:648:9:648:24 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | -| main.rs:648:23:648:23 | T | main.rs:647:10:647:10 | T | -| main.rs:650:9:650:9 | T | main.rs:647:10:647:10 | T | -| main.rs:650:12:650:17 | TraitB | main.rs:626:5:628:5 | trait TraitB | -| main.rs:651:9:651:9 | T | main.rs:647:10:647:10 | T | -| main.rs:651:12:651:17 | TraitA | main.rs:622:5:624:5 | trait TraitA | -| main.rs:662:10:662:15 | TraitA | main.rs:622:5:624:5 | trait TraitA | -| main.rs:662:21:662:31 | Implementor | main.rs:659:5:659:23 | struct Implementor | -| main.rs:669:10:669:15 | TraitB | main.rs:626:5:628:5 | trait TraitB | -| main.rs:669:21:669:31 | Implementor | main.rs:659:5:659:23 | struct Implementor | -| main.rs:677:24:677:34 | Implementor | main.rs:659:5:659:23 | struct Implementor | -| main.rs:678:23:678:35 | GenericStruct | main.rs:630:5:633:5 | struct GenericStruct | -| main.rs:684:9:684:36 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | -| main.rs:684:9:684:50 | ...::call_trait_a | main.rs:641:9:643:9 | fn call_trait_a | -| main.rs:684:25:684:35 | Implementor | main.rs:659:5:659:23 | struct Implementor | -| main.rs:687:9:687:36 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | -| main.rs:687:9:687:47 | ...::call_both | main.rs:653:9:656:9 | fn call_both | -| main.rs:687:25:687:35 | Implementor | main.rs:659:5:659:23 | struct Implementor | -| main.rs:693:3:693:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:693:3:693:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:697:6:697:12 | AStruct | main.rs:696:1:696:17 | struct AStruct | -| main.rs:699:7:699:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:699:7:699:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:702:7:702:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:702:7:702:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:707:9:707:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:707:9:707:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | -| main.rs:707:9:707:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:708:9:708:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:708:9:708:19 | ...::result | {EXTERNAL LOCATION} | mod result | -| main.rs:708:9:708:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | -| main.rs:716:19:716:22 | Self | main.rs:710:5:718:5 | trait Reduce | -| main.rs:716:19:716:29 | ...::Input | main.rs:711:9:711:19 | type Input | -| main.rs:717:14:717:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:717:21:717:24 | Self | main.rs:710:5:718:5 | trait Reduce | -| main.rs:717:21:717:32 | ...::Output | main.rs:712:21:713:20 | type Output | -| main.rs:717:35:717:38 | Self | main.rs:710:5:718:5 | trait Reduce | -| main.rs:717:35:717:45 | ...::Error | main.rs:711:21:712:19 | type Error | -| main.rs:721:17:721:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:721:29:721:33 | Input | main.rs:720:19:720:23 | Input | -| main.rs:722:17:722:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:722:29:722:33 | Error | main.rs:720:26:720:30 | Error | -| main.rs:729:11:729:16 | Reduce | main.rs:710:5:718:5 | trait Reduce | -| main.rs:730:13:733:9 | MyImpl::<...> | main.rs:720:5:723:5 | struct MyImpl | -| main.rs:731:13:731:17 | Input | main.rs:727:13:727:17 | Input | -| main.rs:732:13:732:17 | Error | main.rs:728:13:728:17 | Error | -| main.rs:735:22:738:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:736:13:736:17 | Input | main.rs:727:13:727:17 | Input | -| main.rs:737:13:737:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:737:13:737:23 | ...::Error | main.rs:739:11:743:9 | type Error | -| main.rs:740:22:742:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:741:11:741:15 | Error | main.rs:728:13:728:17 | Error | -| main.rs:745:13:745:17 | Input | main.rs:727:13:727:17 | Input | -| main.rs:750:19:750:22 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:750:19:750:29 | ...::Input | main.rs:735:9:739:9 | type Input | -| main.rs:751:14:754:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:752:13:752:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:752:13:752:24 | ...::Output | main.rs:743:11:746:9 | type Output | -| main.rs:753:13:753:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:753:13:753:23 | ...::Error | main.rs:739:11:743:9 | type Error | -| main.rs:760:5:760:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:760:11:760:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:762:15:762:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:762:15:762:25 | ...::string | {EXTERNAL LOCATION} | mod string | -| main.rs:762:15:762:33 | ...::String | {EXTERNAL LOCATION} | struct String | -| main.rs:765:5:765:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:765:5:765:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:765:5:765:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:765:5:765:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:765:5:765:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:766:5:766:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:766:5:766:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:767:5:767:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:767:5:767:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:767:5:767:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:767:5:767:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:768:5:768:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:769:5:769:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:770:5:770:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:770:5:770:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:771:5:771:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:771:5:771:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:771:5:771:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:772:5:772:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:772:5:772:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:772:5:772:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:772:5:772:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:773:5:773:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:773:5:773:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:774:5:774:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:775:5:775:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:776:5:776:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:777:5:777:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:778:5:778:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:778:5:778:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:779:5:779:6 | m7 | main.rs:122:1:141:1 | mod m7 | -| main.rs:779:5:779:9 | ...::f | main.rs:133:5:140:5 | fn f | -| main.rs:780:5:780:6 | m8 | main.rs:143:1:197:1 | mod m8 | -| main.rs:780:5:780:9 | ...::g | main.rs:181:5:196:5 | fn g | -| main.rs:781:5:781:6 | m9 | main.rs:199:1:207:1 | mod m9 | -| main.rs:781:5:781:9 | ...::f | main.rs:202:5:206:5 | fn f | -| main.rs:782:5:782:7 | m11 | main.rs:230:1:267:1 | mod m11 | -| main.rs:782:5:782:10 | ...::f | main.rs:235:5:238:5 | fn f | -| main.rs:783:5:783:7 | m15 | main.rs:298:1:367:1 | mod m15 | -| main.rs:783:5:783:10 | ...::f | main.rs:354:5:366:5 | fn f | -| main.rs:784:5:784:7 | m16 | main.rs:369:1:461:1 | mod m16 | -| main.rs:784:5:784:10 | ...::f | main.rs:436:5:460:5 | fn f | -| main.rs:785:5:785:20 | trait_visibility | main.rs:463:1:513:1 | mod trait_visibility | -| main.rs:785:5:785:23 | ...::f | main.rs:490:5:512:5 | fn f | -| main.rs:786:5:786:7 | m17 | main.rs:515:1:545:1 | mod m17 | -| main.rs:786:5:786:10 | ...::f | main.rs:539:5:544:5 | fn f | -| main.rs:787:5:787:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:787:5:787:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:788:5:788:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:788:5:788:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:789:5:789:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:789:5:789:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:790:5:790:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:791:5:791:7 | m18 | main.rs:547:1:565:1 | mod m18 | -| main.rs:791:5:791:12 | ...::m19 | main.rs:552:5:564:5 | mod m19 | -| main.rs:791:5:791:17 | ...::m20 | main.rs:557:9:563:9 | mod m20 | -| main.rs:791:5:791:20 | ...::g | main.rs:558:13:562:13 | fn g | -| main.rs:792:5:792:7 | m23 | main.rs:594:1:619:1 | mod m23 | -| main.rs:792:5:792:10 | ...::f | main.rs:614:5:618:5 | fn f | -| main.rs:793:5:793:7 | m24 | main.rs:621:1:689:1 | mod m24 | -| main.rs:793:5:793:10 | ...::f | main.rs:675:5:688:5 | fn f | -| main.rs:794:5:794:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:794:5:794:11 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:796:5:796:11 | AStruct | main.rs:696:1:696:17 | struct AStruct | -| main.rs:797:5:797:11 | AStruct | main.rs:696:1:696:17 | struct AStruct | +| main.rs:12:5:12:7 | my2 | main.rs:7:1:7:8 | mod my2 | +| main.rs:12:5:12:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:12:5:12:25 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:12:5:12:34 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:13:5:13:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:14:5:14:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:17:5:17:7 | my2 | main.rs:7:1:7:8 | mod my2 | +| main.rs:17:5:17:18 | ...::nested8_f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:31:13:31:13 | f | main.rs:25:9:27:9 | fn f | +| main.rs:32:13:32:17 | super | main.rs:19:1:43:1 | mod m1 | +| main.rs:32:13:32:20 | ...::f | main.rs:20:5:22:5 | fn f | +| main.rs:36:17:36:21 | super | main.rs:24:5:42:5 | mod m2 | +| main.rs:36:17:36:24 | ...::f | main.rs:25:9:27:9 | fn f | +| main.rs:39:17:39:17 | f | main.rs:25:9:27:9 | fn f | +| main.rs:46:9:46:13 | super | main.rs:1:1:805:2 | SourceFile | +| main.rs:46:9:46:17 | ...::m1 | main.rs:19:1:43:1 | mod m1 | +| main.rs:46:9:46:21 | ...::m2 | main.rs:24:5:42:5 | mod m2 | +| main.rs:46:9:46:24 | ...::g | main.rs:29:9:33:9 | fn g | +| main.rs:50:9:50:9 | g | main.rs:29:9:33:9 | fn g | +| main.rs:62:13:62:14 | m1 | main.rs:19:1:43:1 | mod m1 | +| main.rs:62:13:62:18 | ...::m2 | main.rs:24:5:42:5 | mod m2 | +| main.rs:62:13:62:21 | ...::g | main.rs:29:9:33:9 | fn g | +| main.rs:63:9:63:9 | g | main.rs:29:9:33:9 | fn g | +| main.rs:67:17:67:19 | Foo | main.rs:65:9:65:21 | struct Foo | +| main.rs:70:13:70:15 | Foo | main.rs:59:5:59:17 | struct Foo | +| main.rs:72:5:72:5 | f | main.rs:61:5:68:5 | fn f | +| main.rs:74:5:74:8 | self | main.rs:1:1:805:2 | SourceFile | +| main.rs:74:5:74:11 | ...::i | main.rs:77:1:89:1 | fn i | +| main.rs:80:13:80:15 | Foo | main.rs:54:1:54:13 | struct Foo | +| main.rs:84:16:84:18 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:87:17:87:19 | Foo | main.rs:83:9:85:9 | struct Foo | +| main.rs:91:5:91:7 | my2 | main.rs:7:1:7:8 | mod my2 | +| main.rs:91:5:91:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:93:5:93:21 | my2_nested2_alias | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:93:5:93:30 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:93:34:93:40 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:93:34:93:43 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:93:57:93:63 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:93:57:93:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:93:80:93:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:106:5:106:22 | f_defined_in_macro | main.rs:105:18:105:42 | fn f_defined_in_macro | +| main.rs:123:13:123:17 | super | main.rs:1:1:805:2 | SourceFile | +| main.rs:123:13:123:21 | ...::m5 | main.rs:109:1:113:1 | mod m5 | +| main.rs:124:9:124:9 | f | main.rs:110:5:112:5 | fn f | +| main.rs:124:9:124:9 | f | main.rs:116:5:118:5 | fn f | +| main.rs:131:13:131:15 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:134:16:134:18 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:140:19:140:24 | MyEnum | main.rs:129:5:137:5 | enum MyEnum | +| main.rs:143:17:143:22 | MyEnum | main.rs:129:5:137:5 | enum MyEnum | +| main.rs:143:17:143:25 | ...::A | main.rs:130:9:132:9 | A | +| main.rs:144:17:144:22 | MyEnum | main.rs:129:5:137:5 | enum MyEnum | +| main.rs:144:17:144:25 | ...::B | main.rs:132:12:135:9 | B | +| main.rs:145:9:145:14 | MyEnum | main.rs:129:5:137:5 | enum MyEnum | +| main.rs:145:9:145:17 | ...::C | main.rs:135:12:136:9 | C | +| main.rs:155:13:155:13 | f | main.rs:162:5:164:5 | fn f | +| main.rs:156:13:156:16 | Self | main.rs:150:5:158:5 | trait MyTrait | +| main.rs:156:13:156:19 | ...::f | main.rs:151:9:151:20 | fn f | +| main.rs:167:10:167:16 | MyTrait | main.rs:150:5:158:5 | trait MyTrait | +| main.rs:167:22:167:29 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:170:13:170:13 | f | main.rs:162:5:164:5 | fn f | +| main.rs:171:13:171:16 | Self | main.rs:166:5:177:5 | impl MyTrait for MyStruct { ... } | +| main.rs:171:13:171:19 | ...::g | main.rs:174:9:176:9 | fn g | +| main.rs:180:10:180:17 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:183:13:183:13 | f | main.rs:162:5:164:5 | fn f | +| main.rs:189:17:189:24 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:190:9:190:15 | MyTrait | main.rs:150:5:158:5 | trait MyTrait | +| main.rs:190:9:190:18 | ...::f | main.rs:151:9:151:20 | fn f | +| main.rs:191:9:191:16 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:191:9:191:19 | ...::f | main.rs:167:33:172:9 | fn f | +| main.rs:192:10:192:17 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:193:10:193:16 | MyTrait | main.rs:150:5:158:5 | trait MyTrait | +| main.rs:196:17:196:24 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:198:17:198:24 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:200:9:200:16 | MyStruct | main.rs:160:5:160:22 | struct MyStruct | +| main.rs:200:9:200:19 | ...::h | main.rs:180:21:184:9 | fn h | +| main.rs:209:19:209:22 | self | main.rs:205:1:213:1 | mod m9 | +| main.rs:209:19:209:32 | ...::MyStruct | main.rs:206:5:206:26 | struct MyStruct | +| main.rs:211:9:211:12 | self | main.rs:205:1:213:1 | mod m9 | +| main.rs:211:9:211:22 | ...::MyStruct | main.rs:206:5:206:26 | struct MyStruct | +| main.rs:221:12:221:12 | T | main.rs:218:7:218:7 | T | +| main.rs:226:12:226:12 | T | main.rs:225:14:225:14 | T | +| main.rs:228:7:230:7 | MyStruct::<...> | main.rs:216:5:222:5 | struct MyStruct | +| main.rs:229:9:229:9 | T | main.rs:225:14:225:14 | T | +| main.rs:232:9:232:16 | MyStruct | main.rs:216:5:222:5 | struct MyStruct | +| main.rs:242:17:242:19 | Foo | main.rs:237:5:237:21 | struct Foo | +| main.rs:243:9:243:11 | Foo | main.rs:239:5:239:15 | fn Foo | +| main.rs:252:9:252:11 | Bar | main.rs:248:5:250:5 | enum Bar | +| main.rs:252:9:252:19 | ...::FooBar | main.rs:249:9:249:17 | FooBar | +| main.rs:257:13:257:15 | Foo | main.rs:237:5:237:21 | struct Foo | +| main.rs:258:17:258:22 | FooBar | main.rs:249:9:249:17 | FooBar | +| main.rs:259:17:259:22 | FooBar | main.rs:254:5:254:18 | fn FooBar | +| main.rs:267:9:267:9 | E | main.rs:262:15:265:5 | enum E | +| main.rs:267:9:267:12 | ...::C | main.rs:264:9:264:9 | C | +| main.rs:270:17:270:17 | S | main.rs:262:5:262:13 | struct S | +| main.rs:271:17:271:17 | C | main.rs:264:9:264:9 | C | +| main.rs:284:16:284:16 | T | main.rs:278:7:278:7 | T | +| main.rs:285:14:285:17 | Self | main.rs:276:5:286:5 | trait MyParamTrait | +| main.rs:285:14:285:33 | ...::AssociatedType | main.rs:280:9:280:28 | type AssociatedType | +| main.rs:294:13:294:16 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:294:13:294:21 | ...::m13 | main.rs:289:1:302:1 | mod m13 | +| main.rs:294:13:294:24 | ...::f | main.rs:290:5:290:17 | fn f | +| main.rs:294:13:294:24 | ...::f | main.rs:290:19:291:19 | struct f | +| main.rs:297:17:297:17 | f | main.rs:290:19:291:19 | struct f | +| main.rs:298:21:298:21 | f | main.rs:290:19:291:19 | struct f | +| main.rs:299:13:299:13 | f | main.rs:290:5:290:17 | fn f | +| main.rs:313:9:313:14 | Trait1 | main.rs:305:5:309:5 | trait Trait1 | +| main.rs:316:13:316:16 | Self | main.rs:311:5:319:5 | trait Trait2 | +| main.rs:316:13:316:19 | ...::g | main.rs:308:9:308:20 | fn g | +| main.rs:326:9:326:12 | Self | main.rs:321:5:334:5 | trait Trait3 | +| main.rs:326:15:326:20 | Trait1 | main.rs:305:5:309:5 | trait Trait1 | +| main.rs:327:9:327:10 | TT | main.rs:323:9:323:10 | TT | +| main.rs:327:13:327:18 | Trait1 | main.rs:305:5:309:5 | trait Trait1 | +| main.rs:329:25:329:26 | TT | main.rs:323:9:323:10 | TT | +| main.rs:330:13:330:16 | Self | main.rs:321:5:334:5 | trait Trait3 | +| main.rs:330:13:330:19 | ...::g | main.rs:308:9:308:20 | fn g | +| main.rs:331:13:331:14 | TT | main.rs:323:9:323:10 | TT | +| main.rs:331:13:331:17 | ...::g | main.rs:308:9:308:20 | fn g | +| main.rs:339:10:339:15 | Trait1 | main.rs:305:5:309:5 | trait Trait1 | +| main.rs:340:11:340:11 | S | main.rs:336:5:336:13 | struct S | +| main.rs:343:13:343:16 | Self | main.rs:338:5:350:5 | impl Trait1 for S { ... } | +| main.rs:343:13:343:19 | ...::g | main.rs:347:9:349:9 | fn g | +| main.rs:353:10:353:15 | Trait2 | main.rs:311:5:319:5 | trait Trait2 | +| main.rs:354:11:354:11 | S | main.rs:336:5:336:13 | struct S | +| main.rs:363:17:363:17 | S | main.rs:336:5:336:13 | struct S | +| main.rs:364:10:364:10 | S | main.rs:336:5:336:13 | struct S | +| main.rs:365:14:365:19 | Trait1 | main.rs:305:5:309:5 | trait Trait1 | +| main.rs:367:10:367:10 | S | main.rs:336:5:336:13 | struct S | +| main.rs:368:14:368:19 | Trait2 | main.rs:311:5:319:5 | trait Trait2 | +| main.rs:370:9:370:9 | S | main.rs:336:5:336:13 | struct S | +| main.rs:370:9:370:12 | ...::g | main.rs:347:9:349:9 | fn g | +| main.rs:380:24:380:24 | T | main.rs:378:7:378:7 | T | +| main.rs:382:24:382:24 | T | main.rs:378:7:378:7 | T | +| main.rs:385:24:385:24 | T | main.rs:378:7:378:7 | T | +| main.rs:386:13:386:16 | Self | main.rs:376:5:392:5 | trait Trait1 | +| main.rs:386:13:386:19 | ...::g | main.rs:382:9:383:9 | fn g | +| main.rs:390:18:390:18 | T | main.rs:378:7:378:7 | T | +| main.rs:398:9:400:9 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 | +| main.rs:399:11:399:11 | T | main.rs:396:7:396:7 | T | +| main.rs:401:24:401:24 | T | main.rs:396:7:396:7 | T | +| main.rs:403:13:403:16 | Self | main.rs:394:5:407:5 | trait Trait2 | +| main.rs:403:13:403:19 | ...::g | main.rs:382:9:383:9 | fn g | +| main.rs:405:13:405:16 | Self | main.rs:394:5:407:5 | trait Trait2 | +| main.rs:405:13:405:19 | ...::c | main.rs:390:9:391:9 | Const | +| main.rs:412:10:414:5 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 | +| main.rs:413:7:413:7 | S | main.rs:409:5:409:13 | struct S | +| main.rs:415:11:415:11 | S | main.rs:409:5:409:13 | struct S | +| main.rs:416:24:416:24 | S | main.rs:409:5:409:13 | struct S | +| main.rs:418:13:418:16 | Self | main.rs:411:5:429:5 | impl Trait1::<...> for S { ... } | +| main.rs:418:13:418:19 | ...::g | main.rs:422:9:425:9 | fn g | +| main.rs:422:24:422:24 | S | main.rs:409:5:409:13 | struct S | +| main.rs:424:13:424:16 | Self | main.rs:411:5:429:5 | impl Trait1::<...> for S { ... } | +| main.rs:424:13:424:19 | ...::c | main.rs:427:9:428:9 | Const | +| main.rs:427:18:427:18 | S | main.rs:409:5:409:13 | struct S | +| main.rs:427:22:427:22 | S | main.rs:409:5:409:13 | struct S | +| main.rs:432:10:434:5 | Trait2::<...> | main.rs:394:5:407:5 | trait Trait2 | +| main.rs:433:7:433:7 | S | main.rs:409:5:409:13 | struct S | +| main.rs:435:11:435:11 | S | main.rs:409:5:409:13 | struct S | +| main.rs:436:24:436:24 | S | main.rs:409:5:409:13 | struct S | +| main.rs:438:13:438:16 | Self | main.rs:431:5:440:5 | impl Trait2::<...> for S { ... } | +| main.rs:445:17:445:17 | S | main.rs:409:5:409:13 | struct S | +| main.rs:446:10:446:10 | S | main.rs:409:5:409:13 | struct S | +| main.rs:447:14:449:11 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 | +| main.rs:448:13:448:13 | S | main.rs:409:5:409:13 | struct S | +| main.rs:451:10:451:10 | S | main.rs:409:5:409:13 | struct S | +| main.rs:452:14:454:11 | Trait2::<...> | main.rs:394:5:407:5 | trait Trait2 | +| main.rs:453:13:453:13 | S | main.rs:409:5:409:13 | struct S | +| main.rs:456:9:456:9 | S | main.rs:409:5:409:13 | struct S | +| main.rs:456:9:456:12 | ...::g | main.rs:422:9:425:9 | fn g | +| main.rs:458:9:458:9 | S | main.rs:409:5:409:13 | struct S | +| main.rs:458:9:458:12 | ...::h | main.rs:385:9:388:9 | fn h | +| main.rs:460:9:460:9 | S | main.rs:409:5:409:13 | struct S | +| main.rs:460:9:460:12 | ...::c | main.rs:427:9:428:9 | Const | +| main.rs:461:10:461:10 | S | main.rs:409:5:409:13 | struct S | +| main.rs:462:14:464:11 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 | +| main.rs:463:13:463:13 | S | main.rs:409:5:409:13 | struct S | +| main.rs:481:14:481:16 | Foo | main.rs:471:9:473:9 | trait Foo | +| main.rs:481:22:481:22 | X | main.rs:479:9:479:21 | struct X | +| main.rs:487:14:487:16 | Bar | main.rs:475:9:477:9 | trait Bar | +| main.rs:487:22:487:22 | X | main.rs:479:9:479:21 | struct X | +| main.rs:494:9:494:9 | m | main.rs:470:5:492:5 | mod m | +| main.rs:494:9:494:12 | ...::X | main.rs:479:9:479:21 | struct X | +| main.rs:497:17:497:17 | X | main.rs:479:9:479:21 | struct X | +| main.rs:500:17:500:17 | m | main.rs:470:5:492:5 | mod m | +| main.rs:500:17:500:22 | ...::Foo | main.rs:471:9:473:9 | trait Foo | +| main.rs:501:13:501:13 | X | main.rs:479:9:479:21 | struct X | +| main.rs:501:13:501:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method | +| main.rs:505:17:505:17 | m | main.rs:470:5:492:5 | mod m | +| main.rs:505:17:505:22 | ...::Bar | main.rs:475:9:477:9 | trait Bar | +| main.rs:506:13:506:13 | X | main.rs:479:9:479:21 | struct X | +| main.rs:506:13:506:23 | ...::a_method | main.rs:487:26:490:13 | fn a_method | +| main.rs:510:17:510:17 | m | main.rs:470:5:492:5 | mod m | +| main.rs:510:17:510:22 | ...::Bar | main.rs:475:9:477:9 | trait Bar | +| main.rs:511:13:511:13 | X | main.rs:479:9:479:21 | struct X | +| main.rs:511:13:511:23 | ...::a_method | main.rs:487:26:490:13 | fn a_method | +| main.rs:516:13:516:13 | m | main.rs:470:5:492:5 | mod m | +| main.rs:516:13:516:18 | ...::Bar | main.rs:475:9:477:9 | trait Bar | +| main.rs:516:13:516:28 | ...::a_method | main.rs:476:13:476:31 | fn a_method | +| main.rs:529:10:529:16 | MyTrait | main.rs:522:5:524:5 | trait MyTrait | +| main.rs:530:9:530:9 | S | main.rs:526:5:526:13 | struct S | +| main.rs:538:7:538:13 | MyTrait | main.rs:522:5:524:5 | trait MyTrait | +| main.rs:539:10:539:10 | T | main.rs:537:10:537:10 | T | +| main.rs:541:9:541:9 | T | main.rs:537:10:537:10 | T | +| main.rs:541:9:541:12 | ...::f | main.rs:523:9:523:20 | fn f | +| main.rs:542:9:542:15 | MyTrait | main.rs:522:5:524:5 | trait MyTrait | +| main.rs:542:9:542:18 | ...::f | main.rs:523:9:523:20 | fn f | +| main.rs:547:9:547:9 | g | main.rs:536:5:543:5 | fn g | +| main.rs:548:11:548:11 | S | main.rs:526:5:526:13 | struct S | +| main.rs:566:17:566:21 | super | main.rs:558:5:570:5 | mod m19 | +| main.rs:566:17:566:24 | ...::f | main.rs:559:9:561:9 | fn f | +| main.rs:567:17:567:21 | super | main.rs:558:5:570:5 | mod m19 | +| main.rs:567:17:567:28 | ...::super | main.rs:553:1:571:1 | mod m18 | +| main.rs:567:17:567:31 | ...::f | main.rs:554:5:556:5 | fn f | +| main.rs:584:13:584:17 | super | main.rs:573:1:598:1 | mod m21 | +| main.rs:584:13:584:22 | ...::m22 | main.rs:574:5:580:5 | mod m22 | +| main.rs:584:13:584:30 | ...::MyEnum | main.rs:575:9:577:9 | enum MyEnum | +| main.rs:585:13:585:16 | self | main.rs:575:9:577:9 | enum MyEnum | +| main.rs:589:13:589:17 | super | main.rs:573:1:598:1 | mod m21 | +| main.rs:589:13:589:22 | ...::m22 | main.rs:574:5:580:5 | mod m22 | +| main.rs:589:13:589:32 | ...::MyStruct | main.rs:579:9:579:28 | struct MyStruct | +| main.rs:590:13:590:16 | self | main.rs:579:9:579:28 | struct MyStruct | +| main.rs:594:21:594:26 | MyEnum | main.rs:575:9:577:9 | enum MyEnum | +| main.rs:594:21:594:29 | ...::A | main.rs:576:13:576:13 | A | +| main.rs:595:21:595:28 | MyStruct | main.rs:579:9:579:28 | struct MyStruct | +| main.rs:611:10:613:5 | Trait1::<...> | main.rs:601:5:606:5 | trait Trait1 | +| main.rs:612:7:612:10 | Self | main.rs:608:5:608:13 | struct S | +| main.rs:614:11:614:11 | S | main.rs:608:5:608:13 | struct S | +| main.rs:622:17:622:17 | S | main.rs:608:5:608:13 | struct S | +| main.rs:638:15:638:15 | T | main.rs:637:26:637:26 | T | +| main.rs:643:9:643:24 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct | +| main.rs:643:23:643:23 | T | main.rs:642:10:642:10 | T | +| main.rs:645:9:645:9 | T | main.rs:642:10:642:10 | T | +| main.rs:645:12:645:17 | TraitA | main.rs:628:5:630:5 | trait TraitA | +| main.rs:654:9:654:24 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct | +| main.rs:654:23:654:23 | T | main.rs:653:10:653:10 | T | +| main.rs:656:9:656:9 | T | main.rs:653:10:653:10 | T | +| main.rs:656:12:656:17 | TraitB | main.rs:632:5:634:5 | trait TraitB | +| main.rs:657:9:657:9 | T | main.rs:653:10:653:10 | T | +| main.rs:657:12:657:17 | TraitA | main.rs:628:5:630:5 | trait TraitA | +| main.rs:668:10:668:15 | TraitA | main.rs:628:5:630:5 | trait TraitA | +| main.rs:668:21:668:31 | Implementor | main.rs:665:5:665:23 | struct Implementor | +| main.rs:675:10:675:15 | TraitB | main.rs:632:5:634:5 | trait TraitB | +| main.rs:675:21:675:31 | Implementor | main.rs:665:5:665:23 | struct Implementor | +| main.rs:683:24:683:34 | Implementor | main.rs:665:5:665:23 | struct Implementor | +| main.rs:684:23:684:35 | GenericStruct | main.rs:636:5:639:5 | struct GenericStruct | +| main.rs:690:9:690:36 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct | +| main.rs:690:9:690:50 | ...::call_trait_a | main.rs:647:9:649:9 | fn call_trait_a | +| main.rs:690:25:690:35 | Implementor | main.rs:665:5:665:23 | struct Implementor | +| main.rs:693:9:693:36 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct | +| main.rs:693:9:693:47 | ...::call_both | main.rs:659:9:662:9 | fn call_both | +| main.rs:693:25:693:35 | Implementor | main.rs:665:5:665:23 | struct Implementor | +| main.rs:699:3:699:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:699:3:699:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:703:6:703:12 | AStruct | main.rs:702:1:702:17 | struct AStruct | +| main.rs:705:7:705:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:705:7:705:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:708:7:708:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:708:7:708:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:713:9:713:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:713:9:713:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | +| main.rs:713:9:713:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:714:9:714:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:714:9:714:19 | ...::result | {EXTERNAL LOCATION} | mod result | +| main.rs:714:9:714:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | +| main.rs:722:19:722:22 | Self | main.rs:716:5:724:5 | trait Reduce | +| main.rs:722:19:722:29 | ...::Input | main.rs:717:9:717:19 | type Input | +| main.rs:723:14:723:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:723:21:723:24 | Self | main.rs:716:5:724:5 | trait Reduce | +| main.rs:723:21:723:32 | ...::Output | main.rs:718:21:719:20 | type Output | +| main.rs:723:35:723:38 | Self | main.rs:716:5:724:5 | trait Reduce | +| main.rs:723:35:723:45 | ...::Error | main.rs:717:21:718:19 | type Error | +| main.rs:727:17:727:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:727:29:727:33 | Input | main.rs:726:19:726:23 | Input | +| main.rs:728:17:728:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:728:29:728:33 | Error | main.rs:726:26:726:30 | Error | +| main.rs:735:11:735:16 | Reduce | main.rs:716:5:724:5 | trait Reduce | +| main.rs:736:13:739:9 | MyImpl::<...> | main.rs:726:5:729:5 | struct MyImpl | +| main.rs:737:13:737:17 | Input | main.rs:733:13:733:17 | Input | +| main.rs:738:13:738:17 | Error | main.rs:734:13:734:17 | Error | +| main.rs:741:22:744:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:742:13:742:17 | Input | main.rs:733:13:733:17 | Input | +| main.rs:743:13:743:16 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:743:13:743:23 | ...::Error | main.rs:745:11:749:9 | type Error | +| main.rs:746:22:748:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:747:11:747:15 | Error | main.rs:734:13:734:17 | Error | +| main.rs:751:13:751:17 | Input | main.rs:733:13:733:17 | Input | +| main.rs:756:19:756:22 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:756:19:756:29 | ...::Input | main.rs:741:9:745:9 | type Input | +| main.rs:757:14:760:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:758:13:758:16 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:758:13:758:24 | ...::Output | main.rs:749:11:752:9 | type Output | +| main.rs:759:13:759:16 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:759:13:759:23 | ...::Error | main.rs:745:11:749:9 | type Error | +| main.rs:766:5:766:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:766:11:766:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:768:15:768:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:768:15:768:25 | ...::string | {EXTERNAL LOCATION} | mod string | +| main.rs:768:15:768:33 | ...::String | {EXTERNAL LOCATION} | struct String | +| main.rs:771:5:771:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:771:5:771:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:771:5:771:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:771:5:771:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:771:5:771:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:772:5:772:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:772:5:772:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:773:5:773:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:773:5:773:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:773:5:773:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:773:5:773:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:774:5:774:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:774:5:774:5 | f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:775:5:775:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:776:5:776:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:776:5:776:12 | ...::h | main.rs:56:1:75:1 | fn h | +| main.rs:777:5:777:6 | m1 | main.rs:19:1:43:1 | mod m1 | +| main.rs:777:5:777:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 | +| main.rs:777:5:777:13 | ...::g | main.rs:29:9:33:9 | fn g | +| main.rs:778:5:778:6 | m1 | main.rs:19:1:43:1 | mod m1 | +| main.rs:778:5:778:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 | +| main.rs:778:5:778:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 | +| main.rs:778:5:778:17 | ...::h | main.rs:36:27:40:13 | fn h | +| main.rs:779:5:779:6 | m4 | main.rs:45:1:52:1 | mod m4 | +| main.rs:779:5:779:9 | ...::i | main.rs:48:5:51:5 | fn i | +| main.rs:780:5:780:5 | h | main.rs:56:1:75:1 | fn h | +| main.rs:781:5:781:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:782:5:782:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:783:5:783:5 | j | main.rs:103:1:107:1 | fn j | +| main.rs:784:5:784:6 | m6 | main.rs:115:1:126:1 | mod m6 | +| main.rs:784:5:784:9 | ...::g | main.rs:120:5:125:5 | fn g | +| main.rs:785:5:785:6 | m7 | main.rs:128:1:147:1 | mod m7 | +| main.rs:785:5:785:9 | ...::f | main.rs:139:5:146:5 | fn f | +| main.rs:786:5:786:6 | m8 | main.rs:149:1:203:1 | mod m8 | +| main.rs:786:5:786:9 | ...::g | main.rs:187:5:202:5 | fn g | +| main.rs:787:5:787:6 | m9 | main.rs:205:1:213:1 | mod m9 | +| main.rs:787:5:787:9 | ...::f | main.rs:208:5:212:5 | fn f | +| main.rs:788:5:788:7 | m11 | main.rs:236:1:273:1 | mod m11 | +| main.rs:788:5:788:10 | ...::f | main.rs:241:5:244:5 | fn f | +| main.rs:789:5:789:7 | m15 | main.rs:304:1:373:1 | mod m15 | +| main.rs:789:5:789:10 | ...::f | main.rs:360:5:372:5 | fn f | +| main.rs:790:5:790:7 | m16 | main.rs:375:1:467:1 | mod m16 | +| main.rs:790:5:790:10 | ...::f | main.rs:442:5:466:5 | fn f | +| main.rs:791:5:791:20 | trait_visibility | main.rs:469:1:519:1 | mod trait_visibility | +| main.rs:791:5:791:23 | ...::f | main.rs:496:5:518:5 | fn f | +| main.rs:792:5:792:7 | m17 | main.rs:521:1:551:1 | mod m17 | +| main.rs:792:5:792:10 | ...::f | main.rs:545:5:550:5 | fn f | +| main.rs:793:5:793:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:793:5:793:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:794:5:794:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:794:5:794:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:795:5:795:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 | +| main.rs:795:5:795:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:796:5:796:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:797:5:797:7 | m18 | main.rs:553:1:571:1 | mod m18 | +| main.rs:797:5:797:12 | ...::m19 | main.rs:558:5:570:5 | mod m19 | +| main.rs:797:5:797:17 | ...::m20 | main.rs:563:9:569:9 | mod m20 | +| main.rs:797:5:797:20 | ...::g | main.rs:564:13:568:13 | fn g | +| main.rs:798:5:798:7 | m23 | main.rs:600:1:625:1 | mod m23 | +| main.rs:798:5:798:10 | ...::f | main.rs:620:5:624:5 | fn f | +| main.rs:799:5:799:7 | m24 | main.rs:627:1:695:1 | mod m24 | +| main.rs:799:5:799:10 | ...::f | main.rs:681:5:694:5 | fn f | +| main.rs:800:5:800:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:800:5:800:11 | ...::h | main.rs:56:1:75:1 | fn h | +| main.rs:802:5:802:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | +| main.rs:803:5:803:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | my2/mod.rs:5:5:5:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | | my2/mod.rs:8:9:8:15 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:8:9:8:24 | ...::nested5 | my2/nested2.rs:13:1:19:1 | mod nested5 | -| my2/mod.rs:10:9:10:15 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| my2/mod.rs:10:9:10:24 | ...::nested7 | my2/nested2.rs:21:1:27:1 | mod nested7 | -| my2/mod.rs:10:9:10:33 | ...::nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| my2/mod.rs:10:37:10:40 | self | my2/nested2.rs:22:5:26:5 | mod nested8 | -| my2/mod.rs:17:5:17:9 | mymod | my2/mod.rs:14:1:15:10 | mod mymod | -| my2/mod.rs:17:5:17:12 | ...::f | my2/renamed.rs:1:1:1:13 | fn f | +| my2/mod.rs:11:9:11:15 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| my2/mod.rs:11:9:11:24 | ...::nested7 | my2/nested2.rs:21:1:27:1 | mod nested7 | +| my2/mod.rs:11:9:11:33 | ...::nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| my2/mod.rs:12:5:12:8 | self | my2/nested2.rs:22:5:26:5 | mod nested8 | +| my2/mod.rs:13:5:13:5 | f | my2/nested2.rs:23:9:25:9 | fn f | +| my2/mod.rs:16:5:16:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| my2/mod.rs:16:5:16:20 | ...::nested5 | my2/nested2.rs:13:1:19:1 | mod nested5 | +| my2/mod.rs:16:5:16:29 | ...::nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| my2/mod.rs:16:5:16:32 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| my2/mod.rs:23:9:23:13 | mymod | my2/mod.rs:20:1:21:10 | mod mymod | +| my2/mod.rs:23:9:23:16 | ...::f | my2/renamed.rs:1:1:1:13 | fn f | | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | -| my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | -| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:799:2 | SourceFile | -| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | -| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | +| my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h | +| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:805:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h | +| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | +| my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | | my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested | | my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g | | my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g | From f6bdfba3b328e8f9d42f5af0fa0cae8363122e84 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 17 Sep 2025 13:43:39 +0200 Subject: [PATCH 143/219] Rust: Path resolution improvements --- .../codeql/rust/internal/PathResolution.qll | 60 +- .../PathResolutionConsistency.expected | 2 + .../dataflow/sources/InlineFlow.expected | 840 +++++++++--------- .../library-tests/dataflow/sources/test.rs | 4 +- .../PathResolutionConsistency.expected | 1 - .../library-tests/path-resolution/main.rs | 2 +- .../path-resolution/my2/my3/mod.rs | 2 +- .../path-resolution/path-resolution.expected | 2 +- 8 files changed, 497 insertions(+), 416 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 4b718fc43998..f819632ce100 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -72,9 +72,9 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki if item instanceof ImplOrTraitItemNode and result instanceof AssocItem then kind.isExternal() else - if result instanceof Use - then kind.isInternal() - else kind.isBoth() + if result.isPublic() + then kind.isBoth() + else kind.isInternal() ) } @@ -165,6 +165,20 @@ abstract class ItemNode extends Locatable { /** Gets the visibility of this item, if any. */ abstract Visibility getVisibility(); + /** + * Holds if this item is public. + * + * This is the case when this item either has `pub` visibility (but is not + * a `use`; a `use` itself is not visible from the outside), or when this + * item is a variant. + */ + predicate isPublic() { + exists(this.getVisibility()) and + not this instanceof Use + or + this instanceof Variant + } + /** Gets the `i`th type parameter of this item, if any. */ abstract TypeParam getTypeParam(int i); @@ -380,9 +394,7 @@ abstract private class ModuleLikeNode extends ItemNode { private class SourceFileItemNode extends ModuleLikeNode, SourceFile { pragma[nomagic] - ModuleLikeNode getSuper() { - result = any(ModuleItemNode mod | fileImport(mod, this)).getASuccessor("super") - } + ModuleLikeNode getSuper() { fileImport(result.getAnItemInScope(), this) } override string getName() { result = "(source file)" } @@ -1300,7 +1312,8 @@ private predicate useTreeDeclares(UseTree tree, string name) { */ pragma[nomagic] private predicate declaresDirectly(ItemNode item, Namespace ns, string name) { - exists(ItemNode child, SuccessorKind kind | child = getAChildSuccessor(item, name, kind) | + exists(ItemNode child, SuccessorKind kind | + child = getAChildSuccessor(item, name, kind) and child.getNamespace() = ns and kind.isInternalOrBoth() ) @@ -1491,6 +1504,13 @@ private ItemNode resolvePathCandQualifier(RelevantPath qualifier, RelevantPath p name = path.getText() } +pragma[nomagic] +private Crate getCrate0(Locatable l) { result.getASourceFile().getFile() = l.getFile() } + +bindingset[l] +pragma[inline_late] +private Crate getCrate(Locatable l) { result = getCrate0(l) } + /** * Gets the item that `path` resolves to in `ns` when `qualifier` is the * qualifier of `path` and `qualifier` resolves to `q`, if any. @@ -1501,8 +1521,17 @@ private ItemNode resolvePathCandQualified( ) { exists(string name, SuccessorKind kind | q = resolvePathCandQualifier(qualifier, path, name) and - result = getASuccessor(q, name, ns, kind) and + result = getASuccessor(q, name, ns, kind) + | kind.isExternalOrBoth() + or + // Non-public items are visible to paths in descendant modules of the declaring + // module; the declaration may happen via a `use` statement, where the item + // being used is _not_ itself in an ancestor module, and we currently don't track + // that information in `getASuccessor`. So, for simplicity, we allow for non-public + // items when the path and the item are in the same crate. + getCrate(path) = getCrate(result) and + not result instanceof TypeParam ) } @@ -1646,10 +1675,12 @@ private ItemNode resolveUseTreeListItemQualifier( pragma[nomagic] private ItemNode resolveUseTreeListItem(Use use, UseTree tree) { - tree = use.getUseTree() and - result = resolvePathCand(tree.getPath()) - or - result = resolveUseTreeListItem(use, tree, tree.getPath(), _) + exists(Path path | path = tree.getPath() | + tree = use.getUseTree() and + result = resolvePathCand(path) + or + result = resolveUseTreeListItem(use, tree, path, _) + ) } /** Holds if `use` imports `item` as `name`. */ @@ -1673,7 +1704,10 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi item = used and ( not tree.hasRename() and - name = item.getName() + exists(string pathName | + pathName = tree.getPath().getText() and + if pathName = "self" then name = item.getName() else name = pathName + ) or exists(Rename rename | rename = tree.getRename() | name = rename.getName().getText() diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index 5ba71c14933d..0fb7a59f6f47 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -11,6 +11,8 @@ multipleCallTargets | test.rs:179:30:179:68 | ...::_print(...) | | test.rs:188:26:188:105 | ...::_print(...) | | test.rs:229:22:229:72 | ... .read_to_string(...) | +| test.rs:664:22:664:43 | file.read(...) | +| test.rs:673:22:673:41 | f1.read(...) | | test.rs:697:18:697:38 | ...::_print(...) | | test.rs:702:18:702:45 | ...::_print(...) | | test.rs:720:38:720:42 | ...::_print(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index 88a728253d80..db0cb969d5a7 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -1,138 +1,140 @@ models -| 1 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 2 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 3 | Source: ::file_name; ReturnValue; file | -| 4 | Source: ::path; ReturnValue; file | -| 5 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 6 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 7 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 8 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 9 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 10 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 11 | Source: ::file_name; ReturnValue; file | -| 12 | Source: ::path; ReturnValue; file | -| 13 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 14 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 15 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 16 | Source: std::env::args; ReturnValue.Element; commandargs | -| 17 | Source: std::env::args_os; ReturnValue.Element; commandargs | -| 18 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | -| 19 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | -| 20 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | -| 21 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | -| 22 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | -| 23 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 24 | Source: std::fs::read; ReturnValue; file | -| 25 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 26 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 27 | Source: std::fs::read_to_string; ReturnValue; file | -| 28 | Source: std::io::stdio::stdin; ReturnValue; stdin | -| 29 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 30 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 31 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 32 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | -| 33 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 34 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | -| 35 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 36 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 37 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 38 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 42 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 43 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 46 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | -| 47 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | -| 48 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | -| 49 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | -| 50 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 51 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | -| 52 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | -| 53 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 54 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 55 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 56 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 57 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 58 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 59 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | -| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | -| 63 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 64 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | -| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 72 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 73 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 74 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 75 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 76 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 77 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | -| 78 | Summary: ::new; Argument[0]; ReturnValue; value | -| 79 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 80 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 81 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 82 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 83 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 84 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 85 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 86 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 87 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 88 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 89 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 90 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 91 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 92 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 93 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 94 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 95 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | -| 96 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 97 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 98 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | -| 99 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 100 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 101 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 102 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 103 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 104 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | -| 105 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | -| 106 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 107 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 108 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 109 | Summary: ::lock; Argument[self]; ReturnValue; taint | -| 110 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 111 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 112 | Summary: ::as_path; Argument[self]; ReturnValue; value | -| 113 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 114 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 115 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 116 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 117 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | -| 118 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | -| 119 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +| 1 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 2 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 3 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 4 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 5 | Source: ::file_name; ReturnValue; file | +| 6 | Source: ::path; ReturnValue; file | +| 7 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 8 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 9 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 10 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 11 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 12 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 13 | Source: ::file_name; ReturnValue; file | +| 14 | Source: ::path; ReturnValue; file | +| 15 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 16 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 17 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 18 | Source: std::env::args; ReturnValue.Element; commandargs | +| 19 | Source: std::env::args_os; ReturnValue.Element; commandargs | +| 20 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 21 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 22 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | +| 23 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | +| 24 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | +| 25 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 26 | Source: std::fs::read; ReturnValue; file | +| 27 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 28 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 29 | Source: std::fs::read_to_string; ReturnValue; file | +| 30 | Source: std::io::stdio::stdin; ReturnValue; stdin | +| 31 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 32 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 33 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 34 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | +| 35 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 36 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | +| 37 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 38 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 42 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 43 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 46 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 47 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 48 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | +| 49 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | +| 50 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | +| 51 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | +| 52 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 53 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | +| 54 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | +| 55 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 56 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 57 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 58 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 59 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | +| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 63 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 64 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | +| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | +| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 72 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 73 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 74 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 75 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 76 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 77 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 78 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 79 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | +| 80 | Summary: ::new; Argument[0]; ReturnValue; value | +| 81 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 82 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 83 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 84 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 85 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 86 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 87 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 88 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 89 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 90 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 91 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 92 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 93 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 94 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 95 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 96 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 97 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | +| 98 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 99 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 100 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | +| 101 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 102 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 103 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 104 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 105 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 106 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | +| 107 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | +| 108 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 109 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 110 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 111 | Summary: ::lock; Argument[self]; ReturnValue; taint | +| 112 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 113 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 114 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 115 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 116 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 117 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 118 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 119 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | +| 120 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | +| 121 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | edges -| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:21 | -| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:22 | +| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:23 | +| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:24 | | test.rs:11:9:11:12 | var1 | test.rs:14:10:14:13 | var1 | provenance | | -| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:21 | -| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:79 | +| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:23 | +| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:81 | | test.rs:11:16:11:59 | ... .expect(...) | test.rs:11:9:11:12 | var1 | provenance | | | test.rs:12:9:12:12 | var2 | test.rs:15:10:15:13 | var2 | provenance | | -| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:22 | -| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:75 | +| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:24 | +| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:77 | | test.rs:12:16:12:48 | ... .unwrap() | test.rs:12:9:12:12 | var2 | provenance | | | test.rs:29:9:29:12 | args [element] | test.rs:30:20:30:23 | args [element] | provenance | | | test.rs:29:9:29:12 | args [element] | test.rs:31:17:31:20 | args [element] | provenance | | -| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:16 | -| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:34 | +| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:18 | +| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:36 | | test.rs:29:29:29:54 | ... .collect() [element] | test.rs:29:9:29:12 | args [element] | provenance | | | test.rs:30:9:30:15 | my_path [&ref] | test.rs:36:10:36:16 | my_path | provenance | | | test.rs:30:19:30:26 | &... [&ref] | test.rs:30:9:30:15 | my_path [&ref] | provenance | | @@ -143,89 +145,89 @@ edges | test.rs:31:17:31:20 | args [element] | test.rs:31:17:31:23 | args[1] | provenance | | | test.rs:31:17:31:23 | args[1] | test.rs:31:16:31:23 | &... [&ref] | provenance | | | test.rs:32:9:32:12 | arg2 | test.rs:38:10:38:13 | arg2 | provenance | | -| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:16 | -| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:35 | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:75 | +| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:18 | +| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:37 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:77 | | test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:9:32:12 | arg2 | provenance | | | test.rs:33:9:33:12 | arg3 | test.rs:39:10:39:13 | arg3 | provenance | | -| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:17 | -| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:35 | -| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:75 | +| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:19 | +| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:37 | +| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:77 | | test.rs:33:16:33:50 | ... .unwrap() | test.rs:33:9:33:12 | arg3 | provenance | | | test.rs:34:9:34:12 | arg4 | test.rs:40:10:40:13 | arg4 | provenance | | -| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:16 | -| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:35 | -| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:75 | -| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:83 | -| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:80 | +| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:18 | +| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:37 | +| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:77 | +| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:85 | +| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:82 | | test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | | | test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | | -| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:16 | +| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:18 | | test.rs:42:16:42:31 | ...::args(...) [element] | test.rs:42:9:42:11 | arg | provenance | | | test.rs:46:9:46:11 | arg | test.rs:47:14:47:16 | arg | provenance | | -| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:17 | +| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:19 | | test.rs:46:16:46:34 | ...::args_os(...) [element] | test.rs:46:9:46:11 | arg | provenance | | | test.rs:52:9:52:11 | dir | test.rs:56:10:56:12 | dir | provenance | | -| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:18 | -| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:79 | +| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:20 | +| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:81 | | test.rs:52:15:52:54 | ... .expect(...) | test.rs:52:9:52:11 | dir | provenance | | | test.rs:53:9:53:11 | exe | test.rs:57:10:57:12 | exe | provenance | | -| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:19 | -| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:79 | +| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:21 | +| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:81 | | test.rs:53:15:53:54 | ... .expect(...) | test.rs:53:9:53:11 | exe | provenance | | | test.rs:54:9:54:12 | home | test.rs:58:10:58:13 | home | provenance | | -| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:20 | -| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:74 | +| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:22 | +| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:76 | | test.rs:54:16:54:52 | ... .expect(...) | test.rs:54:9:54:12 | home | provenance | | | test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | | -| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | +| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | | test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | | -| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:90 | +| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:92 | | test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | | | test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | | | test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | | -| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | -| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:80 | -| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:90 | -| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:80 | +| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | +| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:82 | +| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:92 | +| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:82 | | test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | | | test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | | -| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | -| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:80 | -| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:91 | -| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:80 | +| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | +| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:82 | +| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:93 | +| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:82 | | test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | | | test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | | -| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 | -| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:80 | -| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:89 | -| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:80 | +| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | +| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:82 | +| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:91 | +| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:82 | | test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | | | test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | | -| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | | | test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | | -| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:88 | +| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:90 | | test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | | | test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | | | test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | | | test.rs:77:9:77:22 | remote_string6 | test.rs:78:10:78:23 | remote_string6 | provenance | | -| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | | | test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | | -| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:86 | +| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:88 | | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | | | test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | | | test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | | -| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:87 | -| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:87 | -| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:89 | +| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:89 | +| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | | | test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | | | test.rs:80:24:80:57 | TryExpr | test.rs:80:9:80:20 | mut request1 | provenance | | | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | test.rs:81:10:81:31 | await ... [Ok, Some] | provenance | | | test.rs:81:10:81:31 | await ... [Ok, Some] | test.rs:81:10:81:32 | TryExpr [Some] | provenance | | -| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:75 | +| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:77 | | test.rs:82:15:82:25 | Some(...) [Some] | test.rs:82:20:82:24 | chunk | provenance | | | test.rs:82:20:82:24 | chunk | test.rs:83:14:83:18 | chunk | provenance | | | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | test.rs:82:29:82:50 | await ... [Ok, Some] | provenance | | @@ -236,129 +238,129 @@ edges | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | test.rs:114:24:114:57 | await ... [Ok] | provenance | | | test.rs:114:24:114:57 | await ... [Ok] | test.rs:114:24:114:58 | TryExpr | provenance | | | test.rs:114:24:114:58 | TryExpr | test.rs:114:13:114:20 | response | provenance | | -| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:4 | | test.rs:115:15:115:22 | response | test.rs:115:14:115:22 | &response | provenance | | | test.rs:121:9:121:20 | mut response | test.rs:122:11:122:18 | response | provenance | | | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | test.rs:121:24:121:57 | await ... [Ok] | provenance | | | test.rs:121:24:121:57 | await ... [Ok] | test.rs:121:24:121:58 | TryExpr | provenance | | | test.rs:121:24:121:58 | TryExpr | test.rs:121:9:121:20 | mut response | provenance | | -| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:4 | | test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | | -| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:103 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:53 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:102 | +| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:105 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:104 | | test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | | | test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | | -| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:106 | +| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:108 | | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | | | test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | | | test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | | -| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:108 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:56 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:107 | +| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:110 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:109 | | test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | | | test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | | -| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:109 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:56 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:110 | +| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:111 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:112 | | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | | | test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | | | test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | | -| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:105 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:54 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:104 | +| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:107 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:106 | | test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | | | test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:236:15:236:20 | buffer | test.rs:236:14:236:20 | &buffer | provenance | | -| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:50 | +| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:52 | | test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | | -| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:99 | +| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:101 | | test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | | -| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:101 | +| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:103 | | test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | | | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | | | test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | | | test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | | -| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:100 | +| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:102 | | test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | | -| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:101 | +| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:103 | | test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | | | test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | | | test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | | -| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:47 | +| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:49 | | test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | | -| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:101 | +| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:103 | | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | | | test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | | | test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | | -| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:48 | +| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:50 | | test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | | -| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:101 | +| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:103 | | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | | | test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | | -| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:98 | -| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:98 | -| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:49 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:100 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:100 | +| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:51 | | test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | | -| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:101 | -| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:75 | -| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:80 | +| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:103 | +| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:77 | +| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:82 | | test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | | -| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:80 | +| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:82 | | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | test.rs:275:19:275:29 | Some(...) [Some, Ok] | provenance | | -| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:46 | +| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:48 | | test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | | -| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 | -| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:101 | +| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | +| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:103 | | test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | | -| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:63 | -| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:309:25:309:42 | ...::stdin(...) | test.rs:309:13:309:21 | mut stdin | provenance | | | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | test.rs:311:38:311:43 | [post] buffer | provenance | | | test.rs:311:38:311:43 | [post] buffer | test.rs:312:15:312:20 | buffer | provenance | | | test.rs:312:15:312:20 | buffer | test.rs:312:14:312:20 | &buffer | provenance | | -| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:69 | -| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:71 | +| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:316:25:316:42 | ...::stdin(...) | test.rs:316:13:316:21 | mut stdin | provenance | | | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | test.rs:318:45:318:50 | [post] buffer | provenance | | | test.rs:318:45:318:50 | [post] buffer | test.rs:319:15:319:20 | buffer | provenance | | | test.rs:319:15:319:20 | buffer | test.rs:319:14:319:20 | &buffer | provenance | | -| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:70 | -| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:72 | +| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:323:25:323:42 | ...::stdin(...) | test.rs:323:13:323:21 | mut stdin | provenance | | | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | test.rs:325:48:325:53 | [post] buffer | provenance | | | test.rs:325:48:325:53 | [post] buffer | test.rs:326:15:326:20 | buffer | provenance | | | test.rs:326:15:326:20 | buffer | test.rs:326:14:326:20 | &buffer | provenance | | -| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:65 | -| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:67 | +| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:330:25:330:42 | ...::stdin(...) | test.rs:330:13:330:21 | mut stdin | provenance | | | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | test.rs:332:31:332:36 | [post] buffer | provenance | | | test.rs:332:31:332:36 | [post] buffer | test.rs:333:15:333:20 | buffer | provenance | | | test.rs:333:15:333:20 | buffer | test.rs:333:14:333:20 | &buffer | provenance | | -| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:71 | -| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:67 | -| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:66 | -| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:68 | -| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:73 | +| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:69 | +| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:68 | +| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:70 | +| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:337:25:337:42 | ...::stdin(...) | test.rs:337:13:337:21 | mut stdin | provenance | | | test.rs:338:13:338:14 | v1 | test.rs:342:14:342:15 | v1 | provenance | | | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | test.rs:338:18:338:38 | await ... [Ok] | provenance | | @@ -376,150 +378,150 @@ edges | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | test.rs:341:18:341:42 | await ... [Ok] | provenance | | | test.rs:341:18:341:42 | await ... [Ok] | test.rs:341:18:341:43 | TryExpr | provenance | | | test.rs:341:18:341:43 | TryExpr | test.rs:341:13:341:14 | v4 | provenance | | -| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:64 | -| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | +| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:66 | +| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:349:25:349:42 | ...::stdin(...) | test.rs:349:13:349:21 | mut stdin | provenance | | | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | test.rs:351:29:351:34 | [post] buffer | provenance | | | test.rs:351:29:351:34 | [post] buffer | test.rs:352:15:352:20 | buffer | provenance | | | test.rs:352:15:352:20 | buffer | test.rs:352:14:352:20 | &buffer | provenance | | -| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:58 | +| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:60 | | test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | | -| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | -| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:114 | +| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:116 | | test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | | | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | | | test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | | | test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | | | test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | | -| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:113 | +| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:115 | | test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | | -| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | -| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:114 | +| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:116 | | test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | | | test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | | | test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | | -| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:62 | | test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | | -| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | -| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:114 | +| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:116 | | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | | | test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | | | test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | | -| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:61 | +| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:63 | | test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | | -| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | -| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:114 | +| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:116 | | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | | | test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | | -| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:116 | -| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:116 | -| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:62 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:118 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:118 | +| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:64 | | test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | | -| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | -| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:114 | +| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:116 | | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | | | test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | | -| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:75 | +| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:77 | | test.rs:387:19:387:29 | Some(...) [Some] | test.rs:387:24:387:28 | chunk | provenance | | | test.rs:387:24:387:28 | chunk | test.rs:388:18:388:22 | chunk | provenance | | | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:387:33:387:65 | await ... [Ok, Some] | provenance | | | test.rs:387:33:387:65 | await ... [Ok, Some] | test.rs:387:33:387:66 | TryExpr [Some] | provenance | | | test.rs:387:33:387:66 | TryExpr [Some] | test.rs:387:19:387:29 | Some(...) [Some] | provenance | | -| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:59 | +| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:61 | | test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | | -| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 | -| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:114 | -| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:115 | -| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:115 | +| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:116 | +| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:117 | +| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:117 | | test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | | | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | | | test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | | -| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:75 | +| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:77 | | test.rs:396:19:396:28 | Some(...) [Some] | test.rs:396:24:396:27 | line | provenance | | | test.rs:396:24:396:27 | line | test.rs:397:18:397:21 | line | provenance | | | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | test.rs:396:32:396:54 | await ... [Ok, Some] | provenance | | | test.rs:396:32:396:54 | await ... [Ok, Some] | test.rs:396:32:396:55 | TryExpr [Some] | provenance | | | test.rs:396:32:396:55 | TryExpr [Some] | test.rs:396:19:396:28 | Some(...) [Some] | provenance | | | test.rs:408:13:408:18 | buffer | test.rs:409:14:409:19 | buffer | provenance | | -| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:23 | -| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:24 | +| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:25 | +| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:25 | +| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:26 | | test.rs:408:31:408:55 | ...::read(...) [Ok] | test.rs:408:31:408:56 | TryExpr | provenance | | | test.rs:408:31:408:56 | TryExpr | test.rs:408:13:408:18 | buffer | provenance | | | test.rs:413:13:413:18 | buffer | test.rs:414:14:414:19 | buffer | provenance | | -| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:23 | -| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:24 | +| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:25 | +| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:25 | +| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:26 | | test.rs:413:31:413:50 | ...::read(...) [Ok] | test.rs:413:31:413:51 | TryExpr | provenance | | | test.rs:413:31:413:51 | TryExpr | test.rs:413:13:413:18 | buffer | provenance | | | test.rs:418:13:418:18 | buffer | test.rs:419:14:419:19 | buffer | provenance | | -| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:26 | -| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:26 | -| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:27 | +| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:28 | +| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:28 | +| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:29 | | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | test.rs:418:22:418:52 | TryExpr | provenance | | | test.rs:418:22:418:52 | TryExpr | test.rs:418:13:418:18 | buffer | provenance | | | test.rs:425:13:425:16 | path | test.rs:426:14:426:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:33 | +| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:35 | | test.rs:425:13:425:16 | path | test.rs:427:14:427:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:33 | +| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:35 | | test.rs:425:13:425:16 | path | test.rs:437:14:437:17 | path | provenance | | | test.rs:425:20:425:27 | e.path() | test.rs:425:13:425:16 | path | provenance | | -| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:4 MaD:4 | -| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:33 | -| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:33 | -| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:112 | +| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:6 MaD:6 | +| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:35 | +| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:35 | +| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:114 | | test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | | -| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:33 | +| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:35 | | test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | | | test.rs:439:25:439:37 | e.file_name() | test.rs:439:13:439:21 | file_name | provenance | | -| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:3 MaD:3 | -| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:33 | +| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:5 MaD:5 | +| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:35 | | test.rs:461:13:461:18 | target | test.rs:462:14:462:19 | target | provenance | | -| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:25 | +| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:27 | | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | test.rs:461:22:461:50 | TryExpr | provenance | | | test.rs:461:22:461:50 | TryExpr | test.rs:461:13:461:18 | target | provenance | | | test.rs:470:13:470:18 | buffer | test.rs:471:14:471:19 | buffer | provenance | | -| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:29 | +| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:31 | | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | test.rs:470:31:470:63 | await ... [Ok] | provenance | | | test.rs:470:31:470:63 | await ... [Ok] | test.rs:470:31:470:64 | TryExpr | provenance | | | test.rs:470:31:470:64 | TryExpr | test.rs:470:13:470:18 | buffer | provenance | | | test.rs:475:13:475:18 | buffer | test.rs:476:14:476:19 | buffer | provenance | | -| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:29 | +| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:31 | | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | test.rs:475:31:475:63 | await ... [Ok] | provenance | | | test.rs:475:31:475:63 | await ... [Ok] | test.rs:475:31:475:64 | TryExpr | provenance | | | test.rs:475:31:475:64 | TryExpr | test.rs:475:13:475:18 | buffer | provenance | | | test.rs:480:13:480:18 | buffer | test.rs:481:14:481:19 | buffer | provenance | | -| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:31 | +| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:33 | | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | test.rs:480:22:480:64 | await ... [Ok] | provenance | | | test.rs:480:22:480:64 | await ... [Ok] | test.rs:480:22:480:65 | TryExpr | provenance | | | test.rs:480:22:480:65 | TryExpr | test.rs:480:13:480:18 | buffer | provenance | | | test.rs:486:13:486:16 | path | test.rs:488:14:488:17 | path | provenance | | | test.rs:486:20:486:31 | entry.path() | test.rs:486:13:486:16 | path | provenance | | -| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:12 MaD:12 | -| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:12 MaD:12 | +| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:14 MaD:14 | +| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:14 MaD:14 | | test.rs:487:13:487:21 | file_name | test.rs:489:14:489:22 | file_name | provenance | | | test.rs:487:25:487:41 | entry.file_name() | test.rs:487:13:487:21 | file_name | provenance | | -| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:11 MaD:11 | -| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:11 MaD:11 | +| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:13 MaD:13 | +| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:13 MaD:13 | | test.rs:493:13:493:18 | target | test.rs:494:14:494:19 | target | provenance | | -| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:30 | +| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:32 | | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | | | test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | | | test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:93 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:53 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:92 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:95 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:97 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:56 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:96 | -| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:54 | -| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:50 | -| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:95 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:94 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:97 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:96 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:99 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:98 | +| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:52 | +| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:503:20:503:50 | ...::open(...) [Ok] | test.rs:503:20:503:51 | TryExpr | provenance | | | test.rs:503:20:503:51 | TryExpr | test.rs:503:9:503:16 | mut file | provenance | | | test.rs:507:32:507:42 | [post] &mut buffer | test.rs:508:15:508:20 | buffer | provenance | | @@ -538,69 +540,69 @@ edges | test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | | | test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | | | test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:93 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:53 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:92 | -| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:80 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:95 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:94 | +| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:82 | | test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | | -| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:8 | | test.rs:538:30:538:40 | [post] &mut buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | | | test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:93 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:53 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:92 | -| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:80 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:95 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:94 | +| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:82 | | test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | | -| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:8 | | test.rs:545:30:545:40 | [post] &mut buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | | | test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:93 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:53 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:92 | -| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:80 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:95 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:94 | +| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:82 | | test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | | -| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:8 | | test.rs:552:30:552:40 | [post] &mut buffer | test.rs:553:15:553:20 | buffer | provenance | | | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | test.rs:552:35:552:40 | [post] buffer | provenance | | | test.rs:552:35:552:40 | [post] buffer | test.rs:553:15:553:20 | buffer | provenance | | | test.rs:553:15:553:20 | buffer | test.rs:553:14:553:20 | &buffer | provenance | | -| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:52 | -| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:54 | +| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:560:21:560:51 | ...::open(...) [Ok] | test.rs:560:21:560:52 | TryExpr | provenance | | | test.rs:560:21:560:52 | TryExpr | test.rs:560:13:560:17 | file1 | provenance | | | test.rs:561:13:561:17 | file2 | test.rs:562:38:562:42 | file2 | provenance | | -| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:561:21:561:59 | ...::open(...) [Ok] | test.rs:561:21:561:60 | TryExpr | provenance | | | test.rs:561:21:561:60 | TryExpr | test.rs:561:13:561:17 | file2 | provenance | | -| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:58 | | test.rs:562:26:562:43 | file1.chain(...) | test.rs:562:13:562:22 | mut reader | provenance | | -| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:51 | +| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:53 | | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | test.rs:563:36:563:41 | [post] buffer | provenance | | | test.rs:563:36:563:41 | [post] buffer | test.rs:564:15:564:20 | buffer | provenance | | | test.rs:564:15:564:20 | buffer | test.rs:564:14:564:20 | &buffer | provenance | | -| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:57 | -| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:59 | +| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:569:21:569:51 | ...::open(...) [Ok] | test.rs:569:21:569:52 | TryExpr | provenance | | | test.rs:569:21:569:52 | TryExpr | test.rs:569:13:569:17 | file1 | provenance | | -| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:56 | +| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:58 | | test.rs:570:26:570:40 | file1.take(...) | test.rs:570:13:570:22 | mut reader | provenance | | | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | test.rs:571:36:571:41 | [post] buffer | provenance | | | test.rs:571:36:571:41 | [post] buffer | test.rs:572:15:572:20 | buffer | provenance | | | test.rs:572:15:572:20 | buffer | test.rs:572:14:572:20 | &buffer | provenance | | -| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:63 | -| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:69 | -| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:70 | -| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:65 | -| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:71 | -| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:67 | -| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:66 | -| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:68 | -| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:64 | -| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:9 | +| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:71 | +| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:72 | +| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:67 | +| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:73 | +| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:69 | +| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:68 | +| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:70 | +| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:66 | +| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:11 | | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | test.rs:581:20:581:58 | await ... [Ok] | provenance | | | test.rs:581:20:581:58 | await ... [Ok] | test.rs:581:20:581:59 | TryExpr | provenance | | | test.rs:581:20:581:59 | TryExpr | test.rs:581:9:581:16 | mut file | provenance | | @@ -635,17 +637,39 @@ edges | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | test.rs:620:28:620:33 | [post] buffer | provenance | | | test.rs:620:28:620:33 | [post] buffer | test.rs:621:15:621:20 | buffer | provenance | | | test.rs:621:15:621:20 | buffer | test.rs:621:14:621:20 | &buffer | provenance | | -| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:65 | | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | test.rs:627:22:627:71 | await ... [Ok] | provenance | | | test.rs:627:22:627:71 | await ... [Ok] | test.rs:627:22:627:72 | TryExpr | provenance | | | test.rs:627:22:627:72 | TryExpr | test.rs:627:13:627:18 | mut f1 | provenance | | -| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:10 | +| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:12 | | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | test.rs:629:35:629:40 | [post] buffer | provenance | | | test.rs:629:35:629:40 | [post] buffer | test.rs:630:15:630:20 | buffer | provenance | | | test.rs:630:15:630:20 | buffer | test.rs:630:14:630:20 | &buffer | provenance | | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:53 | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:111 | -| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:660:9:660:16 | mut file | test.rs:664:22:664:25 | file | provenance | | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:45 | +| test.rs:660:20:660:44 | ...::open | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:660:20:660:56 | ...::open(...) [future, Ok] | test.rs:660:20:660:62 | await ... [Ok] | provenance | | +| test.rs:660:20:660:62 | await ... [Ok] | test.rs:660:20:660:63 | TryExpr | provenance | | +| test.rs:660:20:660:63 | TryExpr | test.rs:660:9:660:16 | mut file | provenance | | +| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:664:32:664:42 | [post] &mut buffer [&ref] | test.rs:664:37:664:42 | [post] buffer | provenance | | +| test.rs:664:37:664:42 | [post] buffer | test.rs:665:15:665:20 | buffer | provenance | | +| test.rs:665:15:665:20 | buffer | test.rs:665:14:665:20 | &buffer | provenance | | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:22:673:23 | f1 | provenance | | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:45 | +| test.rs:671:22:671:69 | ... .open(...) [future, Ok] | test.rs:671:22:671:75 | await ... [Ok] | provenance | | +| test.rs:671:22:671:75 | await ... [Ok] | test.rs:671:22:671:76 | TryExpr | provenance | | +| test.rs:671:22:671:76 | TryExpr | test.rs:671:13:671:18 | mut f1 | provenance | | +| test.rs:671:56:671:59 | open | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:673:30:673:40 | [post] &mut buffer [&ref] | test.rs:673:35:673:40 | [post] buffer | provenance | | +| test.rs:673:35:673:40 | [post] buffer | test.rs:674:15:674:20 | buffer | provenance | | +| test.rs:674:15:674:20 | buffer | test.rs:674:14:674:20 | &buffer | provenance | | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:55 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:113 | +| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:9 | | test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | | | test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | | | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | test.rs:695:34:695:39 | [post] buffer | provenance | | @@ -653,21 +677,21 @@ edges | test.rs:695:34:695:39 | [post] buffer | test.rs:699:14:699:22 | buffer[0] | provenance | | | test.rs:698:15:698:20 | buffer | test.rs:698:14:698:20 | &buffer | provenance | | | test.rs:707:13:707:22 | mut stream | test.rs:715:58:715:63 | stream | provenance | | -| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:8 | +| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:10 | | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | test.rs:707:26:707:106 | TryExpr | provenance | | | test.rs:707:26:707:106 | TryExpr | test.rs:707:13:707:22 | mut stream | provenance | | -| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:47 | -| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:57 | +| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:49 | +| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:59 | | test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | | -| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:101 | +| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:103 | | test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | | | test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | | | test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:117 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:63 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:118 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:119 | -| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:13 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:119 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:65 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:120 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:121 | +| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:15 | | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | | | test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | | | test.rs:759:28:759:73 | TryExpr | test.rs:759:9:759:24 | mut tokio_stream | provenance | | @@ -687,7 +711,7 @@ edges | test.rs:817:27:817:32 | buffer | test.rs:817:26:817:32 | &buffer | provenance | | | test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:20:11:20:13 | tcp | provenance | | | test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:26:53:26:55 | tcp | provenance | | -| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | +| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:3 | | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | test_futures_io.rs:19:15:19:43 | await ... [Ok] | provenance | | | test_futures_io.rs:19:15:19:43 | await ... [Ok] | test_futures_io.rs:19:15:19:44 | TryExpr | provenance | | | test_futures_io.rs:19:15:19:44 | TryExpr | test_futures_io.rs:19:9:19:11 | tcp | provenance | | @@ -696,13 +720,13 @@ edges | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:43 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:45 | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | | | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | | | test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | | | test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | | -| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:84 | +| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:86 | | test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | | @@ -710,56 +734,56 @@ edges | test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:76 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:78 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:78 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:80 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | | test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | | | test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:44 | | test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | | | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | | | test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | | | test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | | -| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | | | test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | | | test_futures_io.rs:51:15:51:36 | buffer2[...] | test_futures_io.rs:51:14:51:36 | &... | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:55:11:55:17 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:59:40:59:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:69:37:69:43 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:37 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:39 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:43 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:45 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:37 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:39 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:27:132:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:40 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:41 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:42 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:43 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:27:139:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:38 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:39 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:40 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:41 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:27:146:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:44 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:45 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:46 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:47 | | test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | | -| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:85 | +| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:87 | | test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | | | test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:60:15:60:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) | test_futures_io.rs:59:13:59:22 | mut pinned | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:76 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:78 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:78 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:80 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | | test_futures_io.rs:59:40:59:46 | reader2 | test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:60:15:60:20 | pinned | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | | test_futures_io.rs:60:15:60:20 | pinned [&ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | @@ -772,11 +796,11 @@ edges | test_futures_io.rs:63:31:63:33 | buf | test_futures_io.rs:65:18:65:20 | buf | provenance | | | test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | test_futures_io.rs:64:18:64:24 | &buffer | provenance | | | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | -| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:76 | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:78 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:78 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:80 | | test_futures_io.rs:69:37:69:43 | reader2 | test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | provenance | | | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | provenance | | @@ -794,33 +818,33 @@ edges | test_futures_io.rs:90:26:90:47 | ...::new(...) | test_futures_io.rs:90:13:90:22 | mut pinned | provenance | | | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:76 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:78 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:78 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:80 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | | test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:44 | | test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | | | test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | | | test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | | -| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:42 | +| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | | | test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | | | test_futures_io.rs:108:15:108:36 | buffer2[...] | test_futures_io.rs:108:14:108:36 | &... | provenance | | | test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:114:15:114:20 | pinned | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:114:15:114:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 | +| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) | test_futures_io.rs:113:13:113:22 | mut pinned | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:76 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:78 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:78 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:80 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | | test_futures_io.rs:113:40:113:46 | reader2 | test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:114:15:114:20 | pinned | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | | test_futures_io.rs:114:15:114:20 | pinned [&ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | @@ -836,40 +860,40 @@ edges | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:125:22:125:45 | await ... [Ok] | provenance | | | test_futures_io.rs:125:22:125:45 | await ... [Ok] | test_futures_io.rs:125:22:125:46 | TryExpr | provenance | | | test_futures_io.rs:125:22:125:46 | TryExpr | test_futures_io.rs:125:13:125:18 | buffer | provenance | | -| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:40 | +| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:42 | | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | test_futures_io.rs:132:58:132:61 | [post] line | provenance | | | test_futures_io.rs:132:58:132:61 | [post] line | test_futures_io.rs:133:15:133:18 | line | provenance | | | test_futures_io.rs:133:15:133:18 | line | test_futures_io.rs:133:14:133:18 | &line | provenance | | -| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:38 | +| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:40 | | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | test_futures_io.rs:139:50:139:53 | [post] line | provenance | | | test_futures_io.rs:139:50:139:53 | [post] line | test_futures_io.rs:140:15:140:18 | line | provenance | | | test_futures_io.rs:140:15:140:18 | line | test_futures_io.rs:140:14:140:18 | &line | provenance | | -| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:46 | | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | test_futures_io.rs:146:52:146:57 | [post] buffer | provenance | | | test_futures_io.rs:146:52:146:57 | [post] buffer | test_futures_io.rs:147:15:147:20 | buffer | provenance | | | test_futures_io.rs:147:15:147:20 | buffer | test_futures_io.rs:147:14:147:20 | &buffer | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:73 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:82 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:73 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:82 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:75 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:84 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:75 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:84 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:72 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:81 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:72 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:81 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:74 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:83 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:74 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:83 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:73 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:82 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:73 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:82 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:72 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:81 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:72 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:81 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:75 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:84 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:75 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:84 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:74 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:83 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:74 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:83 | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | nodes @@ -1437,6 +1461,26 @@ nodes | test.rs:629:35:629:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:630:14:630:20 | &buffer | semmle.label | &buffer | | test.rs:630:15:630:20 | buffer | semmle.label | buffer | +| test.rs:660:9:660:16 | mut file | semmle.label | mut file | +| test.rs:660:20:660:44 | ...::open | semmle.label | ...::open | +| test.rs:660:20:660:56 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | +| test.rs:660:20:660:62 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:660:20:660:63 | TryExpr | semmle.label | TryExpr | +| test.rs:664:22:664:25 | file | semmle.label | file | +| test.rs:664:32:664:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:664:37:664:42 | [post] buffer | semmle.label | [post] buffer | +| test.rs:665:14:665:20 | &buffer | semmle.label | &buffer | +| test.rs:665:15:665:20 | buffer | semmle.label | buffer | +| test.rs:671:13:671:18 | mut f1 | semmle.label | mut f1 | +| test.rs:671:22:671:69 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | +| test.rs:671:22:671:75 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:671:22:671:76 | TryExpr | semmle.label | TryExpr | +| test.rs:671:56:671:59 | open | semmle.label | open | +| test.rs:673:22:673:23 | f1 | semmle.label | f1 | +| test.rs:673:30:673:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:673:35:673:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:674:14:674:20 | &buffer | semmle.label | &buffer | +| test.rs:674:15:674:20 | buffer | semmle.label | buffer | | test.rs:688:13:688:22 | mut stream | semmle.label | mut stream | | test.rs:688:26:688:53 | ...::connect | semmle.label | ...::connect | | test.rs:688:26:688:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | @@ -1738,6 +1782,8 @@ testFailures | test.rs:615:14:615:15 | v4 | test.rs:581:20:581:40 | ...::open | test.rs:615:14:615:15 | v4 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | | test.rs:621:14:621:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:621:14:621:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | | test.rs:630:14:630:20 | &buffer | test.rs:627:52:627:55 | open | test.rs:630:14:630:20 | &buffer | $@ | test.rs:627:52:627:55 | open | open | +| test.rs:665:14:665:20 | &buffer | test.rs:660:20:660:44 | ...::open | test.rs:665:14:665:20 | &buffer | $@ | test.rs:660:20:660:44 | ...::open | ...::open | +| test.rs:674:14:674:20 | &buffer | test.rs:671:56:671:59 | open | test.rs:674:14:674:20 | &buffer | $@ | test.rs:671:56:671:59 | open | open | | test.rs:698:14:698:20 | &buffer | test.rs:688:26:688:53 | ...::connect | test.rs:698:14:698:20 | &buffer | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect | | test.rs:699:14:699:22 | buffer[0] | test.rs:688:26:688:53 | ...::connect | test.rs:699:14:699:22 | buffer[0] | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect | | test.rs:725:34:725:38 | &line | test.rs:707:26:707:61 | ...::connect_timeout | test.rs:725:34:725:38 | &line | $@ | test.rs:707:26:707:61 | ...::connect_timeout | ...::connect_timeout | diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index 6e30159ea1a3..895a789cfaf4 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -662,7 +662,7 @@ async fn test_async_std_file() -> std::io::Result<()> { { let mut buffer = [0u8; 100]; let _bytes = file.read(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" + sink(&buffer); // $ hasTaintFlow="file.txt" } // --- OpenOptions --- @@ -671,7 +671,7 @@ async fn test_async_std_file() -> std::io::Result<()> { let mut f1 = async_std::fs::OpenOptions::new().open("f1.txt").await?; // $ Alert[rust/summary/taint-sources] let mut buffer = [0u8; 1024]; let _bytes = f1.read(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow="f1.txt" + sink(&buffer); // $ hasTaintFlow="f1.txt" } Ok(()) diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index d945cb4c6c24..7a3fd01dbc7d 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,3 @@ multipleCallTargets | main.rs:124:9:124:11 | f(...) | -| main.rs:774:5:774:7 | f(...) | | proc_macro.rs:9:5:9:10 | ...::new(...) | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index db8e4c0f39da..5146373b8966 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -771,7 +771,7 @@ fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 nested2::nested3::nested4::f(); // $ item=I12 - f(); // $ item=I12 $ SPURIOUS: item=I119 + f(); // $ item=I12 g(); // $ item=I13 crate::h(); // $ item=I25 m1::m2::g(); // $ item=I19 diff --git a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs index e2d413841c35..b459ca05aa6c 100644 --- a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs +++ b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs @@ -7,4 +7,4 @@ pub fn f() { use super::super::h; // $ item=I25 use super::g; // $ item=I9 -use super::nested6_f; // $ MISSING: item=I116 +use super::nested6_f; // $ item=I116 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 8f12af96c020..067365a53864 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -361,7 +361,6 @@ resolvePath | main.rs:773:5:773:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:773:5:773:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | | main.rs:774:5:774:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:774:5:774:5 | f | my2/nested2.rs:23:9:25:9 | fn f | | main.rs:775:5:775:5 | g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:776:5:776:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | | main.rs:776:5:776:12 | ...::h | main.rs:56:1:75:1 | fn h | @@ -440,6 +439,7 @@ resolvePath | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | +| my2/my3/mod.rs:10:5:10:20 | ...::nested6_f | my2/nested2.rs:15:9:17:9 | fn f | | my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested | | my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g | | my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g | From a6c1ffc45d1c6bec8f01e55f5b4ac6989fd2a236 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 19 Sep 2025 10:39:36 +0100 Subject: [PATCH 144/219] sort the annotations alphabetically --- .../ql-language-reference/annotations.rst | 6 ++-- .../ql-language-specification.rst | 36 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/codeql/ql-language-reference/annotations.rst b/docs/codeql/ql-language-reference/annotations.rst index 0ddb28c3a9d7..00080087d368 100644 --- a/docs/codeql/ql-language-reference/annotations.rst +++ b/docs/codeql/ql-language-reference/annotations.rst @@ -16,9 +16,9 @@ For example, to declare a module ``M`` as private, you could use: } Note that some annotations act on an entity itself, whilst others act on a particular *name* for the entity: - - Act on an **entity**: ``abstract``, ``cached``, ``external``, ``transient``, ``override``, ``pragma``, ``language``, - and ``bindingset`` - - Act on a **name**: ``deprecated``, ``library``, ``private``, ``final``, and ``query`` + - Act on an **entity**: ``abstract``, ``bindingset``, ``cached``, ``external``, ``language``, + ``override``, ``pragma``, and ``transient`` + - Act on a **name**: ``deprecated``, ``final``, ``library``, ``private``, and ``query`` For example, if you annotate an entity with ``private``, then only that particular name is private. You could still access that entity under a different name (using an :ref:`alias `). diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 9989c73e5dc5..854c9f28f603 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -761,17 +761,17 @@ Various kinds of syntax can have *annotations* applied to them. Annotations are annotation ::= simpleAnnotation | argsAnnotation simpleAnnotation ::= "abstract" + | "additional" | "cached" - | "external" + | "deprecated" | "extensible" + | "external" | "final" - | "transient" | "library" - | "private" - | "deprecated" | "override" - | "additional" + | "private" | "query" + | "transient" argsAnnotation ::= "pragma" "[" ("inline" | "inline_late" | "noinline" | "nomagic" | "noopt" | "assume_small_delta") "]" | "language" "[" "monotonicAggregates" "]" @@ -791,28 +791,28 @@ The following table summarizes the syntactic constructs which can be marked with +================+=========+============+===================+=======================+=========+========+=========+=========+============+ | ``abstract`` | yes | | yes | | | | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``additional`` | yes | | | yes | | | yes | yes | yes | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``cached`` | yes | yes | yes | yes | | | yes | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``external`` | | | | yes | | | | | | +| ``deprecated`` | yes | | yes | yes | yes | yes | yes | yes | yes | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``extensible`` | | | | yes | | | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``final`` | yes | | yes | | | yes | | (yes) | | +| ``external`` | | | | yes | | | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``transient`` | | | | yes | | | | | | +| ``final`` | yes | | yes | | | yes | | (yes) | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``library`` | (yes) | | | | | | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``private`` | yes | | yes | yes | yes | yes | yes | yes | yes | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``deprecated`` | yes | | yes | yes | yes | yes | yes | yes | yes | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``override`` | | | yes | | | yes | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``additional`` | yes | | | yes | | | yes | yes | yes | +| ``private`` | yes | | yes | yes | yes | yes | yes | yes | yes | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``query`` | | | | yes | | | | yes | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``transient`` | | | | yes | | | | | | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ The ``library`` annotation is only usable within a QLL file, not a QL file. The ``final`` annotation is usable on type aliases, but not on module aliases and predicate aliases. @@ -2292,17 +2292,17 @@ The complete grammar for QL is as follows: annotation ::= simpleAnnotation | argsAnnotation simpleAnnotation ::= "abstract" + | "additional" | "cached" - | "external" + | "deprecated" | "extensible" + | "external" | "final" - | "transient" | "library" - | "private" - | "deprecated" | "override" - | "additional" + | "private" | "query" + | "transient" argsAnnotation ::= "pragma" "[" ("inline" | "inline_late" | "noinline" | "nomagic" | "noopt" | "assume_small_delta") "]" | "language" "[" "monotonicAggregates" "]" From b27d3745781d0362ec42dfb384d1d21c296bdb05 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 19 Sep 2025 10:41:52 +0100 Subject: [PATCH 145/219] mention 'additional' and 'extensible' annotations --- docs/codeql/ql-language-reference/annotations.rst | 4 ++-- .../ql-language-reference/ql-language-specification.rst | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/codeql/ql-language-reference/annotations.rst b/docs/codeql/ql-language-reference/annotations.rst index 00080087d368..cffbbf73c71a 100644 --- a/docs/codeql/ql-language-reference/annotations.rst +++ b/docs/codeql/ql-language-reference/annotations.rst @@ -16,9 +16,9 @@ For example, to declare a module ``M`` as private, you could use: } Note that some annotations act on an entity itself, whilst others act on a particular *name* for the entity: - - Act on an **entity**: ``abstract``, ``bindingset``, ``cached``, ``external``, ``language``, + - Act on an **entity**: ``abstract``, ``bindingset``, ``cached``, ``extensible``, ``external``, ``language``, ``override``, ``pragma``, and ``transient`` - - Act on a **name**: ``deprecated``, ``final``, ``library``, ``private``, and ``query`` + - Act on a **name**: ``additional``, ``deprecated``, ``final``, ``library``, ``private``, and ``query`` For example, if you annotate an entity with ``private``, then only that particular name is private. You could still access that entity under a different name (using an :ref:`alias `). diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 854c9f28f603..f834949c3cde 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -933,7 +933,8 @@ A predicate definition adds a mapping from the predicate name and arity to the p When a predicate is a top-level clause in a module, it is called a non-member predicate. See below for "`Member predicates <#member-predicates>`__." -A valid non-member predicate can be annotated with ``cached``, ``deprecated``, ``external``, ``transient``, ``private``, and ``query``. Note, the ``transient`` annotation can only be applied if the non-member predicate is also annotated with ``external``. +A valid non-member predicate can be annotated with ``additional``, ``cached``, ``deprecated``, ``extensible``, ``external``, ``transient``, ``private``, and ``query``. +Note, the ``transient`` annotation can only be applied if the non-member predicate is also annotated with ``external``. The head of the predicate gives a name, an optional *result type*, and a sequence of variables declarations that are *arguments*: @@ -979,7 +980,7 @@ A class type is said to *final inherit* from base types that are final or refere A class adds a mapping from the class name to the class declaration to the current module's declared type environment. -A valid class can be annotated with ``abstract``, ``final``, ``library``, and ``private``. Any other annotation renders the class invalid. +A valid class can be annotated with ``abstract``, ``additional``, ``final``, ``library``, and ``private``. Any other annotation renders the class invalid. A valid class may not inherit from itself, or from more than one primitive type. The set of types that a valid class inherits from must be disjoint from the set of types that it final inherits from. From c7a9cc5a424c80dc4a3c538d20f934ad4d5f44c7 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 14:55:52 +0200 Subject: [PATCH 146/219] Rust: Use annotations also for items in macro expansions --- .../lib/utils/test/PathResolutionInlineExpectationsTest.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll b/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll index c5a95ac90389..8d2fdb2d2ebf 100644 --- a/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll +++ b/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll @@ -25,9 +25,9 @@ private module ResolveTest implements TestSig { private predicate item(ItemNode i, string value) { exists(string filepath, int line, boolean inMacro | itemAt(i, filepath, line, inMacro) | - commmentAt(value, filepath, line) and inMacro = false + commmentAt(value, filepath, line) or - not (commmentAt(_, filepath, line) and inMacro = false) and + not commmentAt(_, filepath, line) and value = i.getName() ) } From 32365fd673e0520ae10cea12212adfd3e98d0b6e Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 15:15:29 +0200 Subject: [PATCH 147/219] Rust: Account for attribute expansions in path resolution --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 11 ++++++----- rust/ql/test/library-tests/path-resolution/main.rs | 7 +++---- .../path-resolution/path-resolution.expected | 10 ++++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index f819632ce100..980033811ddd 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -156,6 +156,11 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki * - https://doc.rust-lang.org/reference/names/namespaces.html */ abstract class ItemNode extends Locatable { + ItemNode() { + // Exclude items that are superceded by the expansion of an attribute macro. + not this.(Item).hasAttributeMacroExpansion() + } + /** Gets the (original) name of this item. */ abstract string getName(); @@ -660,11 +665,7 @@ final class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { override Visibility getVisibility() { result = Impl.super.getVisibility() } - TypeParamItemNode getBlanketImplementationTypeParam() { - result = this.resolveSelfTy() and - // This impl block is not superseded by the expansion of an attribute macro. - not exists(super.getAttributeMacroExpansion()) - } + TypeParamItemNode getBlanketImplementationTypeParam() { result = this.resolveSelfTy() } /** * Holds if this impl block is a blanket implementation. That is, the diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 5146373b8966..1ad55d36ad45 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -798,8 +798,7 @@ fn main() { m23::f(); // $ item=I108 m24::f(); // $ item=I121 zelf::h(); // $ item=I25 - z_changed(); // $ MISSING: item=I122 - AStruct::z_on_type(); // $ MISSING: item=I124 - AStruct {} // $ item=I123 - .z_on_instance(); // MISSING: item=I125 + z_changed(); // $ item=I122 + AStruct::z_on_type(); // $ item=I124 + AStruct {}.z_on_instance(); // $ item=I123 item=I125 } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 067365a53864..7c30ebc4a1e3 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -66,7 +66,7 @@ resolvePath | main.rs:36:17:36:21 | super | main.rs:24:5:42:5 | mod m2 | | main.rs:36:17:36:24 | ...::f | main.rs:25:9:27:9 | fn f | | main.rs:39:17:39:17 | f | main.rs:25:9:27:9 | fn f | -| main.rs:46:9:46:13 | super | main.rs:1:1:805:2 | SourceFile | +| main.rs:46:9:46:13 | super | main.rs:1:1:804:2 | SourceFile | | main.rs:46:9:46:17 | ...::m1 | main.rs:19:1:43:1 | mod m1 | | main.rs:46:9:46:21 | ...::m2 | main.rs:24:5:42:5 | mod m2 | | main.rs:46:9:46:24 | ...::g | main.rs:29:9:33:9 | fn g | @@ -78,7 +78,7 @@ resolvePath | main.rs:67:17:67:19 | Foo | main.rs:65:9:65:21 | struct Foo | | main.rs:70:13:70:15 | Foo | main.rs:59:5:59:17 | struct Foo | | main.rs:72:5:72:5 | f | main.rs:61:5:68:5 | fn f | -| main.rs:74:5:74:8 | self | main.rs:1:1:805:2 | SourceFile | +| main.rs:74:5:74:8 | self | main.rs:1:1:804:2 | SourceFile | | main.rs:74:5:74:11 | ...::i | main.rs:77:1:89:1 | fn i | | main.rs:80:13:80:15 | Foo | main.rs:54:1:54:13 | struct Foo | | main.rs:84:16:84:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -93,7 +93,7 @@ resolvePath | main.rs:93:57:93:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:93:80:93:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:106:5:106:22 | f_defined_in_macro | main.rs:105:18:105:42 | fn f_defined_in_macro | -| main.rs:123:13:123:17 | super | main.rs:1:1:805:2 | SourceFile | +| main.rs:123:13:123:17 | super | main.rs:1:1:804:2 | SourceFile | | main.rs:123:13:123:21 | ...::m5 | main.rs:109:1:113:1 | mod m5 | | main.rs:124:9:124:9 | f | main.rs:110:5:112:5 | fn f | | main.rs:124:9:124:9 | f | main.rs:116:5:118:5 | fn f | @@ -412,7 +412,9 @@ resolvePath | main.rs:799:5:799:10 | ...::f | main.rs:681:5:694:5 | fn f | | main.rs:800:5:800:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | | main.rs:800:5:800:11 | ...::h | main.rs:56:1:75:1 | fn h | +| main.rs:801:5:801:13 | z_changed | main.rs:700:1:700:8 | fn z_changed | | main.rs:802:5:802:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | +| main.rs:802:5:802:22 | ...::z_on_type | main.rs:706:5:706:16 | fn z_on_type | | main.rs:803:5:803:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | @@ -434,7 +436,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:805:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:804:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | From 2c84b49cede939e5f935213890910c0ad87d7643 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 15:58:54 +0200 Subject: [PATCH 148/219] Rust: Update test expecations --- .../security/CWE-696/BadCTorInitialization.expected | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-696/BadCTorInitialization.expected b/rust/ql/test/query-tests/security/CWE-696/BadCTorInitialization.expected index 3ac74a3cb13b..ed95a8d448ad 100644 --- a/rust/ql/test/query-tests/security/CWE-696/BadCTorInitialization.expected +++ b/rust/ql/test/query-tests/security/CWE-696/BadCTorInitialization.expected @@ -59,13 +59,11 @@ edges | test.rs:129:4:130:21 | fn bad3_1 | test.rs:130:5:130:19 | call_target3_1(...) | | test.rs:130:5:130:19 | call_target3_1(...) | test.rs:124:1:126:1 | fn call_target3_1 | | test.rs:144:1:144:7 | Attr | test.rs:145:4:147:21 | fn bad3_3 | -| test.rs:144:1:148:1 | fn bad3_3 | test.rs:146:5:146:20 | call_target3_1(...) | | test.rs:145:4:147:21 | fn bad3_3 | test.rs:146:5:146:19 | call_target3_1(...) | | test.rs:146:5:146:19 | call_target3_1(...) | test.rs:124:1:126:1 | fn call_target3_1 | -| test.rs:146:5:146:20 | call_target3_1(...) | test.rs:124:1:126:1 | fn call_target3_1 | | test.rs:150:1:150:7 | Attr | test.rs:151:4:152:13 | fn bad3_4 | | test.rs:151:4:152:13 | fn bad3_4 | test.rs:152:5:152:11 | bad3_3(...) | -| test.rs:152:5:152:11 | bad3_3(...) | test.rs:144:1:148:1 | fn bad3_3 | +| test.rs:152:5:152:11 | bad3_3(...) | test.rs:145:4:147:21 | fn bad3_3 | | test.rs:168:1:168:7 | Attr | test.rs:169:4:170:16 | fn bad4_1 | | test.rs:169:4:170:16 | fn bad4_1 | test.rs:168:1:168:7 | ... .write(...) | | test.rs:169:4:170:16 | fn bad4_1 | test.rs:168:1:168:7 | ...::stdout(...) | From a9d7662bb7a20a08bdc794bc67c1d10f60c5f3f9 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 19 Sep 2025 13:09:07 +0200 Subject: [PATCH 149/219] Rust: Add path resolution test with attribute on impl block --- .../library-tests/path-resolution/main.rs | 22 +++ .../path-resolution/path-resolution.expected | 161 ++++++++++-------- .../path-resolution/proc_macro.rs | 8 +- 3 files changed, 116 insertions(+), 75 deletions(-) diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 1ad55d36ad45..42107ec5fd4c 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -767,6 +767,27 @@ use std::{self as ztd}; // $ item=std fn use_ztd(x: ztd::string::String) {} // $ item=String +#[rustfmt::skip] +mod impl_with_attribute_macro { + struct Foo; // IFoo + + trait ATrait { + type Foo; + } // IATrait + + #[proc_macro::identity] // $ item=identity + impl ATrait for i64 { // $ item=IATrait item=i64 + type Foo = + i64 // $ item=i64 + ; // IATrait_i64_Foo + } + + pub fn test() { + // This should resolve to the struct, not the associated type. + let _x: Foo; // $ item=IFoo SPURIOUS: item=IATrait_i64_Foo + } // impl_with_attribute_macro::test +} + fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 @@ -801,4 +822,5 @@ fn main() { z_changed(); // $ item=I122 AStruct::z_on_type(); // $ item=I124 AStruct {}.z_on_instance(); // $ item=I123 item=I125 + impl_with_attribute_macro::test(); // $ item=impl_with_attribute_macro::test } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 7c30ebc4a1e3..e9bb668f6816 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -31,6 +31,7 @@ mod | main.rs:600:1:625:1 | mod m23 | | main.rs:627:1:695:1 | mod m24 | | main.rs:712:1:764:1 | mod associated_types | +| main.rs:770:1:789:1 | mod impl_with_attribute_macro | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:18:1:18:12 | mod my3 | | my2/mod.rs:20:1:21:10 | mod mymod | @@ -66,7 +67,7 @@ resolvePath | main.rs:36:17:36:21 | super | main.rs:24:5:42:5 | mod m2 | | main.rs:36:17:36:24 | ...::f | main.rs:25:9:27:9 | fn f | | main.rs:39:17:39:17 | f | main.rs:25:9:27:9 | fn f | -| main.rs:46:9:46:13 | super | main.rs:1:1:804:2 | SourceFile | +| main.rs:46:9:46:13 | super | main.rs:1:1:826:2 | SourceFile | | main.rs:46:9:46:17 | ...::m1 | main.rs:19:1:43:1 | mod m1 | | main.rs:46:9:46:21 | ...::m2 | main.rs:24:5:42:5 | mod m2 | | main.rs:46:9:46:24 | ...::g | main.rs:29:9:33:9 | fn g | @@ -78,7 +79,7 @@ resolvePath | main.rs:67:17:67:19 | Foo | main.rs:65:9:65:21 | struct Foo | | main.rs:70:13:70:15 | Foo | main.rs:59:5:59:17 | struct Foo | | main.rs:72:5:72:5 | f | main.rs:61:5:68:5 | fn f | -| main.rs:74:5:74:8 | self | main.rs:1:1:804:2 | SourceFile | +| main.rs:74:5:74:8 | self | main.rs:1:1:826:2 | SourceFile | | main.rs:74:5:74:11 | ...::i | main.rs:77:1:89:1 | fn i | | main.rs:80:13:80:15 | Foo | main.rs:54:1:54:13 | struct Foo | | main.rs:84:16:84:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -93,7 +94,7 @@ resolvePath | main.rs:93:57:93:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:93:80:93:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:106:5:106:22 | f_defined_in_macro | main.rs:105:18:105:42 | fn f_defined_in_macro | -| main.rs:123:13:123:17 | super | main.rs:1:1:804:2 | SourceFile | +| main.rs:123:13:123:17 | super | main.rs:1:1:826:2 | SourceFile | | main.rs:123:13:123:21 | ...::m5 | main.rs:109:1:113:1 | mod m5 | | main.rs:124:9:124:9 | f | main.rs:110:5:112:5 | fn f | | main.rs:124:9:124:9 | f | main.rs:116:5:118:5 | fn f | @@ -303,12 +304,12 @@ resolvePath | main.rs:693:9:693:47 | ...::call_both | main.rs:659:9:662:9 | fn call_both | | main.rs:693:25:693:35 | Implementor | main.rs:665:5:665:23 | struct Implementor | | main.rs:699:3:699:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:699:3:699:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:699:3:699:24 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | | main.rs:703:6:703:12 | AStruct | main.rs:702:1:702:17 | struct AStruct | | main.rs:705:7:705:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:705:7:705:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:705:7:705:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | | main.rs:708:7:708:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:708:7:708:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:708:7:708:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix | | main.rs:713:9:713:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | | main.rs:713:9:713:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | | main.rs:713:9:713:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | @@ -349,73 +350,82 @@ resolvePath | main.rs:768:15:768:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | | main.rs:768:15:768:25 | ...::string | {EXTERNAL LOCATION} | mod string | | main.rs:768:15:768:33 | ...::String | {EXTERNAL LOCATION} | struct String | -| main.rs:771:5:771:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:771:5:771:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:771:5:771:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:771:5:771:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:771:5:771:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:772:5:772:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:772:5:772:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:773:5:773:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:773:5:773:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:773:5:773:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:773:5:773:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:774:5:774:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:775:5:775:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:776:5:776:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:776:5:776:12 | ...::h | main.rs:56:1:75:1 | fn h | -| main.rs:777:5:777:6 | m1 | main.rs:19:1:43:1 | mod m1 | -| main.rs:777:5:777:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 | -| main.rs:777:5:777:13 | ...::g | main.rs:29:9:33:9 | fn g | -| main.rs:778:5:778:6 | m1 | main.rs:19:1:43:1 | mod m1 | -| main.rs:778:5:778:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 | -| main.rs:778:5:778:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 | -| main.rs:778:5:778:17 | ...::h | main.rs:36:27:40:13 | fn h | -| main.rs:779:5:779:6 | m4 | main.rs:45:1:52:1 | mod m4 | -| main.rs:779:5:779:9 | ...::i | main.rs:48:5:51:5 | fn i | -| main.rs:780:5:780:5 | h | main.rs:56:1:75:1 | fn h | -| main.rs:781:5:781:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:782:5:782:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:783:5:783:5 | j | main.rs:103:1:107:1 | fn j | -| main.rs:784:5:784:6 | m6 | main.rs:115:1:126:1 | mod m6 | -| main.rs:784:5:784:9 | ...::g | main.rs:120:5:125:5 | fn g | -| main.rs:785:5:785:6 | m7 | main.rs:128:1:147:1 | mod m7 | -| main.rs:785:5:785:9 | ...::f | main.rs:139:5:146:5 | fn f | -| main.rs:786:5:786:6 | m8 | main.rs:149:1:203:1 | mod m8 | -| main.rs:786:5:786:9 | ...::g | main.rs:187:5:202:5 | fn g | -| main.rs:787:5:787:6 | m9 | main.rs:205:1:213:1 | mod m9 | -| main.rs:787:5:787:9 | ...::f | main.rs:208:5:212:5 | fn f | -| main.rs:788:5:788:7 | m11 | main.rs:236:1:273:1 | mod m11 | -| main.rs:788:5:788:10 | ...::f | main.rs:241:5:244:5 | fn f | -| main.rs:789:5:789:7 | m15 | main.rs:304:1:373:1 | mod m15 | -| main.rs:789:5:789:10 | ...::f | main.rs:360:5:372:5 | fn f | -| main.rs:790:5:790:7 | m16 | main.rs:375:1:467:1 | mod m16 | -| main.rs:790:5:790:10 | ...::f | main.rs:442:5:466:5 | fn f | -| main.rs:791:5:791:20 | trait_visibility | main.rs:469:1:519:1 | mod trait_visibility | -| main.rs:791:5:791:23 | ...::f | main.rs:496:5:518:5 | fn f | -| main.rs:792:5:792:7 | m17 | main.rs:521:1:551:1 | mod m17 | -| main.rs:792:5:792:10 | ...::f | main.rs:545:5:550:5 | fn f | -| main.rs:793:5:793:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:793:5:793:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:794:5:794:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:794:5:794:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:795:5:795:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 | -| main.rs:795:5:795:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:796:5:796:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:797:5:797:7 | m18 | main.rs:553:1:571:1 | mod m18 | -| main.rs:797:5:797:12 | ...::m19 | main.rs:558:5:570:5 | mod m19 | -| main.rs:797:5:797:17 | ...::m20 | main.rs:563:9:569:9 | mod m20 | -| main.rs:797:5:797:20 | ...::g | main.rs:564:13:568:13 | fn g | -| main.rs:798:5:798:7 | m23 | main.rs:600:1:625:1 | mod m23 | -| main.rs:798:5:798:10 | ...::f | main.rs:620:5:624:5 | fn f | -| main.rs:799:5:799:7 | m24 | main.rs:627:1:695:1 | mod m24 | -| main.rs:799:5:799:10 | ...::f | main.rs:681:5:694:5 | fn f | -| main.rs:800:5:800:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:800:5:800:11 | ...::h | main.rs:56:1:75:1 | fn h | -| main.rs:801:5:801:13 | z_changed | main.rs:700:1:700:8 | fn z_changed | -| main.rs:802:5:802:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | -| main.rs:802:5:802:22 | ...::z_on_type | main.rs:706:5:706:16 | fn z_on_type | -| main.rs:803:5:803:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | +| main.rs:778:7:778:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:778:7:778:26 | ...::identity | proc_macro.rs:15:1:18:1 | fn identity | +| main.rs:779:10:779:15 | ATrait | main.rs:774:5:776:5 | trait ATrait | +| main.rs:779:21:779:23 | i64 | {EXTERNAL LOCATION} | struct i64 | +| main.rs:781:11:781:13 | i64 | {EXTERNAL LOCATION} | struct i64 | +| main.rs:787:17:787:19 | Foo | main.rs:772:5:772:15 | struct Foo | +| main.rs:787:17:787:19 | Foo | main.rs:779:27:782:9 | type Foo | +| main.rs:792:5:792:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:792:5:792:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:792:5:792:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:792:5:792:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:792:5:792:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:793:5:793:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:793:5:793:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:794:5:794:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:794:5:794:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:794:5:794:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:794:5:794:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:795:5:795:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:796:5:796:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:797:5:797:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:797:5:797:12 | ...::h | main.rs:56:1:75:1 | fn h | +| main.rs:798:5:798:6 | m1 | main.rs:19:1:43:1 | mod m1 | +| main.rs:798:5:798:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 | +| main.rs:798:5:798:13 | ...::g | main.rs:29:9:33:9 | fn g | +| main.rs:799:5:799:6 | m1 | main.rs:19:1:43:1 | mod m1 | +| main.rs:799:5:799:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 | +| main.rs:799:5:799:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 | +| main.rs:799:5:799:17 | ...::h | main.rs:36:27:40:13 | fn h | +| main.rs:800:5:800:6 | m4 | main.rs:45:1:52:1 | mod m4 | +| main.rs:800:5:800:9 | ...::i | main.rs:48:5:51:5 | fn i | +| main.rs:801:5:801:5 | h | main.rs:56:1:75:1 | fn h | +| main.rs:802:5:802:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:803:5:803:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:804:5:804:5 | j | main.rs:103:1:107:1 | fn j | +| main.rs:805:5:805:6 | m6 | main.rs:115:1:126:1 | mod m6 | +| main.rs:805:5:805:9 | ...::g | main.rs:120:5:125:5 | fn g | +| main.rs:806:5:806:6 | m7 | main.rs:128:1:147:1 | mod m7 | +| main.rs:806:5:806:9 | ...::f | main.rs:139:5:146:5 | fn f | +| main.rs:807:5:807:6 | m8 | main.rs:149:1:203:1 | mod m8 | +| main.rs:807:5:807:9 | ...::g | main.rs:187:5:202:5 | fn g | +| main.rs:808:5:808:6 | m9 | main.rs:205:1:213:1 | mod m9 | +| main.rs:808:5:808:9 | ...::f | main.rs:208:5:212:5 | fn f | +| main.rs:809:5:809:7 | m11 | main.rs:236:1:273:1 | mod m11 | +| main.rs:809:5:809:10 | ...::f | main.rs:241:5:244:5 | fn f | +| main.rs:810:5:810:7 | m15 | main.rs:304:1:373:1 | mod m15 | +| main.rs:810:5:810:10 | ...::f | main.rs:360:5:372:5 | fn f | +| main.rs:811:5:811:7 | m16 | main.rs:375:1:467:1 | mod m16 | +| main.rs:811:5:811:10 | ...::f | main.rs:442:5:466:5 | fn f | +| main.rs:812:5:812:20 | trait_visibility | main.rs:469:1:519:1 | mod trait_visibility | +| main.rs:812:5:812:23 | ...::f | main.rs:496:5:518:5 | fn f | +| main.rs:813:5:813:7 | m17 | main.rs:521:1:551:1 | mod m17 | +| main.rs:813:5:813:10 | ...::f | main.rs:545:5:550:5 | fn f | +| main.rs:814:5:814:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:814:5:814:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:815:5:815:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:815:5:815:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:816:5:816:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 | +| main.rs:816:5:816:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:817:5:817:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:818:5:818:7 | m18 | main.rs:553:1:571:1 | mod m18 | +| main.rs:818:5:818:12 | ...::m19 | main.rs:558:5:570:5 | mod m19 | +| main.rs:818:5:818:17 | ...::m20 | main.rs:563:9:569:9 | mod m20 | +| main.rs:818:5:818:20 | ...::g | main.rs:564:13:568:13 | fn g | +| main.rs:819:5:819:7 | m23 | main.rs:600:1:625:1 | mod m23 | +| main.rs:819:5:819:10 | ...::f | main.rs:620:5:624:5 | fn f | +| main.rs:820:5:820:7 | m24 | main.rs:627:1:695:1 | mod m24 | +| main.rs:820:5:820:10 | ...::f | main.rs:681:5:694:5 | fn f | +| main.rs:821:5:821:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:821:5:821:11 | ...::h | main.rs:56:1:75:1 | fn h | +| main.rs:822:5:822:13 | z_changed | main.rs:700:1:700:8 | fn z_changed | +| main.rs:823:5:823:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | +| main.rs:823:5:823:22 | ...::z_on_type | main.rs:706:5:706:16 | fn z_on_type | +| main.rs:824:5:824:11 | AStruct | main.rs:702:1:702:17 | struct AStruct | +| main.rs:825:5:825:29 | impl_with_attribute_macro | main.rs:770:1:789:1 | mod impl_with_attribute_macro | +| main.rs:825:5:825:35 | ...::test | main.rs:785:5:788:5 | fn test | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -436,7 +446,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:804:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:826:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | @@ -482,4 +492,7 @@ resolvePath | proc_macro.rs:8:21:8:23 | syn | {EXTERNAL LOCATION} | Crate(syn@2.0.103) | | proc_macro.rs:8:21:8:30 | ...::Ident | {EXTERNAL LOCATION} | struct Ident | | proc_macro.rs:8:21:8:35 | ...::new | {EXTERNAL LOCATION} | fn new | +| proc_macro.rs:16:24:16:34 | TokenStream | {EXTERNAL LOCATION} | struct TokenStream | +| proc_macro.rs:16:43:16:53 | TokenStream | {EXTERNAL LOCATION} | struct TokenStream | +| proc_macro.rs:16:59:16:69 | TokenStream | {EXTERNAL LOCATION} | struct TokenStream | testFailures diff --git a/rust/ql/test/library-tests/path-resolution/proc_macro.rs b/rust/ql/test/library-tests/path-resolution/proc_macro.rs index c95fc6fe6401..11e3a7024ae6 100644 --- a/rust/ql/test/library-tests/path-resolution/proc_macro.rs +++ b/rust/ql/test/library-tests/path-resolution/proc_macro.rs @@ -8,5 +8,11 @@ pub fn add_suffix(attr: TokenStream, item: TokenStream) -> TokenStream { ast.sig.ident = syn::Ident::new(&format!("{}_{}", ast.sig.ident, suff), ast.sig.ident.span()); quote! { #ast - }.into() + } + .into() +} + +#[proc_macro_attribute] +pub fn identity(_attr: TokenStream, item: TokenStream) -> TokenStream { + item } From d88bc8e4086b3d90e80601b8489ed521c3cacdb2 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 19 Sep 2025 14:23:40 +0200 Subject: [PATCH 150/219] JS: Add test case for `GraphQLObjectType` --- .../CWE-094/CodeInjection/graph-ql.js | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js index f68f47cf3acd..c4b68e169901 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js @@ -1,5 +1,5 @@ const express = require('express'); -const { graphql, buildSchema } = require('graphql'); +const { graphql, buildSchema, GraphQLObjectType, GraphQLString } = require('graphql'); const app = express(); app.use(express.json()); @@ -53,4 +53,30 @@ app.post('/graphql', async (req, res) => { rootValue: root1, variableValues: variables }); + + const MutationType = new GraphQLObjectType({ + name: 'Mutation', + fields: { + runEval: { + type: GraphQLString, + args: { + value: { type: GraphQLString } + }, + resolve: (_, { value }, context) => { // $ MISSING: Source[js/code-injection] + return eval(value); // $ MISSING: Alert[js/code-injection] + } + } + } + }); + + const schema = new GraphQLSchema({ + query: QueryType, + mutation: MutationType + }); + + await graphql({ + schema, + source: query, + variableValues: variables + }); }); From 60ceb89f01be59ecba08fc972d5a9bdd84e11ff2 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 19 Sep 2025 13:26:36 +0200 Subject: [PATCH 151/219] Rust: Add debug predicate for `ItemNode` --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 980033811ddd..6b7df0db58ae 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -1807,6 +1807,8 @@ private module Debug { path = p.toStringDebug() } + predicate debugItemNode(ItemNode item) { item = getRelevantLocatable() } + ItemNode debugResolvePath(RelevantPath path) { path = getRelevantLocatable() and result = resolvePath(path) From 72103adacc7cf9712acd464a38adebeb240d5fb5 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 19 Sep 2025 13:27:02 +0200 Subject: [PATCH 152/219] Rust: Fix spurious path resolution The annotated impl block was filtered away, but it's children where not. This caused the associated type `Foo` to appear as if it was an item in the scope outside of the impl block. --- .../codeql/rust/internal/PathResolution.qll | 20 ++++++++++++++++++- .../library-tests/path-resolution/main.rs | 2 +- .../path-resolution/path-resolution.expected | 1 - 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 6b7df0db58ae..46197b6189e8 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -78,6 +78,24 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki ) } +/** + * Holds if `n` is superceded by an attribute macro expansion. That is, `n` is + * an item or a transitive child of an item with an attribute macro expansion. + */ +predicate supercededByAttributeMacroExpansion(AstNode n) { + n.(Item).hasAttributeMacroExpansion() + or + exists(AstNode parent | + n.getParentNode() = parent and + supercededByAttributeMacroExpansion(parent) and + // Don't exclude expansions themselves as they supercede other nodes. + not n = parent.(Item).getAttributeMacroExpansion() and + // Don't consider attributes themselves to be superceded. E.g., in `#[a] fn + // f() {}` the macro expansion supercedes `fn f() {}` but not `#[a]`. + not n instanceof Attr + ) +} + /** * An item that may be referred to by a path, and which is a node in * the _item graph_. @@ -158,7 +176,7 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki abstract class ItemNode extends Locatable { ItemNode() { // Exclude items that are superceded by the expansion of an attribute macro. - not this.(Item).hasAttributeMacroExpansion() + not supercededByAttributeMacroExpansion(this) } /** Gets the (original) name of this item. */ diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 42107ec5fd4c..9051f7f8412e 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -784,7 +784,7 @@ mod impl_with_attribute_macro { pub fn test() { // This should resolve to the struct, not the associated type. - let _x: Foo; // $ item=IFoo SPURIOUS: item=IATrait_i64_Foo + let _x: Foo; // $ item=IFoo } // impl_with_attribute_macro::test } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index e9bb668f6816..a908ec1e5c17 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -356,7 +356,6 @@ resolvePath | main.rs:779:21:779:23 | i64 | {EXTERNAL LOCATION} | struct i64 | | main.rs:781:11:781:13 | i64 | {EXTERNAL LOCATION} | struct i64 | | main.rs:787:17:787:19 | Foo | main.rs:772:5:772:15 | struct Foo | -| main.rs:787:17:787:19 | Foo | main.rs:779:27:782:9 | type Foo | | main.rs:792:5:792:6 | my | main.rs:1:1:1:7 | mod my | | main.rs:792:5:792:14 | ...::nested | my.rs:1:1:1:15 | mod nested | | main.rs:792:5:792:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | From afb6d307624ce482bf7f6f09c18b29353829bd34 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 19 Sep 2025 14:27:14 +0200 Subject: [PATCH 153/219] Rust: Fix typo in superseded --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 46197b6189e8..44e8b4522554 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -79,18 +79,18 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki } /** - * Holds if `n` is superceded by an attribute macro expansion. That is, `n` is + * Holds if `n` is superseded by an attribute macro expansion. That is, `n` is * an item or a transitive child of an item with an attribute macro expansion. */ -predicate supercededByAttributeMacroExpansion(AstNode n) { +predicate supersededByAttributeMacroExpansion(AstNode n) { n.(Item).hasAttributeMacroExpansion() or exists(AstNode parent | n.getParentNode() = parent and - supercededByAttributeMacroExpansion(parent) and + supersededByAttributeMacroExpansion(parent) and // Don't exclude expansions themselves as they supercede other nodes. not n = parent.(Item).getAttributeMacroExpansion() and - // Don't consider attributes themselves to be superceded. E.g., in `#[a] fn + // Don't consider attributes themselves to be superseded. E.g., in `#[a] fn // f() {}` the macro expansion supercedes `fn f() {}` but not `#[a]`. not n instanceof Attr ) @@ -175,8 +175,8 @@ predicate supercededByAttributeMacroExpansion(AstNode n) { */ abstract class ItemNode extends Locatable { ItemNode() { - // Exclude items that are superceded by the expansion of an attribute macro. - not supercededByAttributeMacroExpansion(this) + // Exclude items that are superseded by the expansion of an attribute macro. + not supersededByAttributeMacroExpansion(this) } /** Gets the (original) name of this item. */ From 6cfc95015921ab781e16f36ac2ba5ba9a57187ae Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 19 Sep 2025 14:39:36 +0200 Subject: [PATCH 154/219] JS: Model `GraphQLObjectType` resolve params as sources --- javascript/ql/lib/ext/graph-ql.model.yml | 5 +++++ .../Security/CWE-094/CodeInjection/CodeInjection.expected | 6 ++++++ .../CodeInjection/HeuristicSourceCodeInjection.expected | 5 +++++ .../query-tests/Security/CWE-094/CodeInjection/graph-ql.js | 4 ++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/ext/graph-ql.model.yml b/javascript/ql/lib/ext/graph-ql.model.yml index 08233d1135da..2ea1c41ed9fc 100644 --- a/javascript/ql/lib/ext/graph-ql.model.yml +++ b/javascript/ql/lib/ext/graph-ql.model.yml @@ -4,3 +4,8 @@ extensions: extensible: summaryModel data: - ["graphql", "Member[graphql]", "Argument[0].Member[source,variableValues]", "Argument[0].Member[rootValue].AnyMember.Parameter[0]", "taint"] + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["graphql", "Member[GraphQLObjectType].Argument[0].Member[fields].AnyMember.Member[resolve].Parameter[1]", "remote"] diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected index 3f5d8abed8a4..fb3e4ad6e6a1 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected @@ -63,6 +63,7 @@ | fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:51 | request ... plyCode | user-provided value | | graph-ql.js:20:19:20:22 | expr | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:20:19:20:22 | expr | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value | | graph-ql.js:39:19:39:30 | name + title | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:39:19:39:30 | name + title | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value | +| graph-ql.js:66:23:66:27 | value | graph-ql.js:65:22:65:30 | { value } | graph-ql.js:66:23:66:27 | value | This code execution depends on a $@. | graph-ql.js:65:22:65:30 | { value } | user-provided value | | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value | | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value | | react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | @@ -173,6 +174,8 @@ edges | graph-ql.js:39:19:39:22 | name | graph-ql.js:39:19:39:30 | name + title | provenance | | | graph-ql.js:39:26:39:30 | title | graph-ql.js:39:19:39:30 | name + title | provenance | | | graph-ql.js:54:21:54:29 | variables | graph-ql.js:38:13:38:27 | { name, title } | provenance | | +| graph-ql.js:65:22:65:30 | { value } | graph-ql.js:65:24:65:28 | value | provenance | | +| graph-ql.js:65:24:65:28 | value | graph-ql.js:66:23:66:27 | value | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | @@ -323,6 +326,9 @@ nodes | graph-ql.js:39:19:39:30 | name + title | semmle.label | name + title | | graph-ql.js:39:26:39:30 | title | semmle.label | title | | graph-ql.js:54:21:54:29 | variables | semmle.label | variables | +| graph-ql.js:65:22:65:30 | { value } | semmle.label | { value } | +| graph-ql.js:65:24:65:28 | value | semmle.label | value | +| graph-ql.js:66:23:66:27 | value | semmle.label | value | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | | react-native.js:7:7:7:13 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected index 3d4022d8fb6a..837ae37eaee2 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected @@ -72,6 +72,8 @@ edges | graph-ql.js:39:19:39:22 | name | graph-ql.js:39:19:39:30 | name + title | provenance | | | graph-ql.js:39:26:39:30 | title | graph-ql.js:39:19:39:30 | name + title | provenance | | | graph-ql.js:54:21:54:29 | variables | graph-ql.js:38:13:38:27 | { name, title } | provenance | | +| graph-ql.js:65:22:65:30 | { value } | graph-ql.js:65:24:65:28 | value | provenance | | +| graph-ql.js:65:24:65:28 | value | graph-ql.js:66:23:66:27 | value | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | @@ -224,6 +226,9 @@ nodes | graph-ql.js:39:19:39:30 | name + title | semmle.label | name + title | | graph-ql.js:39:26:39:30 | title | semmle.label | title | | graph-ql.js:54:21:54:29 | variables | semmle.label | variables | +| graph-ql.js:65:22:65:30 | { value } | semmle.label | { value } | +| graph-ql.js:65:24:65:28 | value | semmle.label | value | +| graph-ql.js:66:23:66:27 | value | semmle.label | value | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | | react-native.js:7:7:7:13 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js index c4b68e169901..167292330d29 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js @@ -62,8 +62,8 @@ app.post('/graphql', async (req, res) => { args: { value: { type: GraphQLString } }, - resolve: (_, { value }, context) => { // $ MISSING: Source[js/code-injection] - return eval(value); // $ MISSING: Alert[js/code-injection] + resolve: (_, { value }, context) => { // $ Source[js/code-injection] + return eval(value); // $ Alert[js/code-injection] } } } From 3a6a537986133f24bfecbde3f2c770952e4d4642 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 19 Sep 2025 14:46:13 +0200 Subject: [PATCH 155/219] JS: Add change note --- .../ql/lib/change-notes/2025-09-19-graphql-type-object.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md diff --git a/javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md b/javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md new file mode 100644 index 000000000000..6afa4ece331d --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added modeling of `GraphQLObjectType` resolver function parameters as remote sources. From 95a84ad6559f4180039dac0dc07dcd1b4d7756ee Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 19 Sep 2025 15:06:46 +0000 Subject: [PATCH 156/219] Python: Fix false positive for unmatchable dollar/caret Our previous modelling did not account for the fact that a lookahead can potentially extend all the way to the end of the input (and similarly, that a lookbehind can extend all the way to the beginning). To fix this, I extended `firstPart` and `lastPart` to handle lookbehinds and lookaheads correctly, and added some test cases (all of which yield no new results). Fixes #20429. --- .../semmle/python/regexp/RegexTreeView.qll | 8 +-- .../python/regexp/internal/ParseRegExp.qll | 70 ++++++++++++------- ...atchable-dollar-and-caret-in-assertions.md | 5 ++ .../query-tests/Expressions/Regex/test.py | 10 ++- 4 files changed, 64 insertions(+), 29 deletions(-) create mode 100644 python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md diff --git a/python/ql/lib/semmle/python/regexp/RegexTreeView.qll b/python/ql/lib/semmle/python/regexp/RegexTreeView.qll index a2952a5680bc..897c97bb7831 100644 --- a/python/ql/lib/semmle/python/regexp/RegexTreeView.qll +++ b/python/ql/lib/semmle/python/regexp/RegexTreeView.qll @@ -964,7 +964,7 @@ module Impl implements RegexTreeViewSig { * ``` */ class RegExpPositiveLookahead extends RegExpLookahead { - RegExpPositiveLookahead() { re.positiveLookaheadAssertionGroup(start, end) } + RegExpPositiveLookahead() { re.positiveLookaheadAssertionGroup(start, end, _, _) } override string getPrimaryQLClass() { result = "RegExpPositiveLookahead" } } @@ -979,7 +979,7 @@ module Impl implements RegexTreeViewSig { * ``` */ additional class RegExpNegativeLookahead extends RegExpLookahead { - RegExpNegativeLookahead() { re.negativeLookaheadAssertionGroup(start, end) } + RegExpNegativeLookahead() { re.negativeLookaheadAssertionGroup(start, end, _, _) } override string getPrimaryQLClass() { result = "RegExpNegativeLookahead" } } @@ -1006,7 +1006,7 @@ module Impl implements RegexTreeViewSig { * ``` */ class RegExpPositiveLookbehind extends RegExpLookbehind { - RegExpPositiveLookbehind() { re.positiveLookbehindAssertionGroup(start, end) } + RegExpPositiveLookbehind() { re.positiveLookbehindAssertionGroup(start, end, _, _) } override string getPrimaryQLClass() { result = "RegExpPositiveLookbehind" } } @@ -1021,7 +1021,7 @@ module Impl implements RegexTreeViewSig { * ``` */ additional class RegExpNegativeLookbehind extends RegExpLookbehind { - RegExpNegativeLookbehind() { re.negativeLookbehindAssertionGroup(start, end) } + RegExpNegativeLookbehind() { re.negativeLookbehindAssertionGroup(start, end, _, _) } override string getPrimaryQLClass() { result = "RegExpNegativeLookbehind" } } diff --git a/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll b/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll index 7e23554e0589..d91c4bbd78c0 100644 --- a/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll +++ b/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll @@ -554,9 +554,9 @@ class RegExp extends Expr instanceof StringLiteral { or this.negativeAssertionGroup(start, end) or - this.positiveLookaheadAssertionGroup(start, end) + this.positiveLookaheadAssertionGroup(start, end, _, _) or - this.positiveLookbehindAssertionGroup(start, end) + this.positiveLookbehindAssertionGroup(start, end, _, _) } /** Holds if an empty group is found between `start` and `end`. */ @@ -572,7 +572,7 @@ class RegExp extends Expr instanceof StringLiteral { or this.negativeAssertionGroup(start, end) or - this.positiveLookaheadAssertionGroup(start, end) + this.positiveLookaheadAssertionGroup(start, end, _, _) } private predicate emptyMatchAtEndGroup(int start, int end) { @@ -580,7 +580,7 @@ class RegExp extends Expr instanceof StringLiteral { or this.negativeAssertionGroup(start, end) or - this.positiveLookbehindAssertionGroup(start, end) + this.positiveLookbehindAssertionGroup(start, end, _, _) } private predicate negativeAssertionGroup(int start, int end) { @@ -593,32 +593,40 @@ class RegExp extends Expr instanceof StringLiteral { ) } - /** Holds if a negative lookahead is found between `start` and `end` */ - predicate negativeLookaheadAssertionGroup(int start, int end) { - exists(int in_start | this.negative_lookahead_assertion_start(start, in_start) | - this.groupContents(start, end, in_start, _) - ) + /** + * Holds if a negative lookahead is found between `start` and `end`, with contents + * between `in_start` and `in_end`. + */ + predicate negativeLookaheadAssertionGroup(int start, int end, int in_start, int in_end) { + this.negative_lookahead_assertion_start(start, in_start) and + this.groupContents(start, end, in_start, in_end) } - /** Holds if a negative lookbehind is found between `start` and `end` */ - predicate negativeLookbehindAssertionGroup(int start, int end) { - exists(int in_start | this.negative_lookbehind_assertion_start(start, in_start) | - this.groupContents(start, end, in_start, _) - ) + /** + * Holds if a negative lookbehind is found between `start` and `end`, with contents + * between `in_start` and `in_end`. + */ + predicate negativeLookbehindAssertionGroup(int start, int end, int in_start, int in_end) { + this.negative_lookbehind_assertion_start(start, in_start) and + this.groupContents(start, end, in_start, in_end) } - /** Holds if a positive lookahead is found between `start` and `end` */ - predicate positiveLookaheadAssertionGroup(int start, int end) { - exists(int in_start | this.lookahead_assertion_start(start, in_start) | - this.groupContents(start, end, in_start, _) - ) + /** + * Holds if a positive lookahead is found between `start` and `end`, with contents + * between `in_start` and `in_end`. + */ + predicate positiveLookaheadAssertionGroup(int start, int end, int in_start, int in_end) { + this.lookahead_assertion_start(start, in_start) and + this.groupContents(start, end, in_start, in_end) } - /** Holds if a positive lookbehind is found between `start` and `end` */ - predicate positiveLookbehindAssertionGroup(int start, int end) { - exists(int in_start | this.lookbehind_assertion_start(start, in_start) | - this.groupContents(start, end, in_start, _) - ) + /** + * Holds if a positive lookbehind is found between `start` and `end`, with contents + * between `in_start` and `in_end`. + */ + predicate positiveLookbehindAssertionGroup(int start, int end, int in_start, int in_end) { + this.lookbehind_assertion_start(start, in_start) and + this.groupContents(start, end, in_start, in_end) } private predicate group_start(int start, int end) { @@ -1049,6 +1057,13 @@ class RegExp extends Expr instanceof StringLiteral { or this.alternationOption(x, y, start, end) ) + or + // Lookbehind assertions can potentially match the start of the string + ( + this.positiveLookbehindAssertionGroup(_, _, start, _) or + this.negativeLookbehindAssertionGroup(_, _, start, _) + ) and + this.item(start, end) } /** A part of the regex that may match the end of the string. */ @@ -1074,6 +1089,13 @@ class RegExp extends Expr instanceof StringLiteral { or this.alternationOption(x, y, start, end) ) + or + // Lookahead assertions can potentially match the end of the string + ( + this.positiveLookaheadAssertionGroup(_, _, _, end) or + this.negativeLookaheadAssertionGroup(_, _, _, end) + ) and + this.item(start, end) } /** diff --git a/python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md b/python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md new file mode 100644 index 000000000000..cf63dd9ed4da --- /dev/null +++ b/python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + +- The queries that check for unmatchable `$` and `^` in regular expressions did not account correctly for occurrences inside lookahead and lookbehind assertions. These occurrences are now handled correctly, eliminating this source of false positives. diff --git a/python/ql/test/query-tests/Expressions/Regex/test.py b/python/ql/test/query-tests/Expressions/Regex/test.py index 6dadbccb4b65..717663e335c5 100644 --- a/python/ql/test/query-tests/Expressions/Regex/test.py +++ b/python/ql/test/query-tests/Expressions/Regex/test.py @@ -150,4 +150,12 @@ re.compile(r"[\u0000-\uFFFF]") #Allow unicode names -re.compile(r"[\N{degree sign}\N{EM DASH}]") \ No newline at end of file +re.compile(r"[\N{degree sign}\N{EM DASH}]") + +#Lookahead assertions. None of these are unmatchable dollars: +re.compile(r"^(?=a$)[ab]") +re.compile(r"^(?!a$)[ab]") + +#Lookbehind assertions. None of these are unmatchable carets: +re.compile(r"(?<=^a)a") +re.compile(r"(? Date: Fri, 19 Sep 2025 15:39:12 +0000 Subject: [PATCH 157/219] Python: Update test output --- python/ql/test/library-tests/regex/FirstLast.expected | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/ql/test/library-tests/regex/FirstLast.expected b/python/ql/test/library-tests/regex/FirstLast.expected index b187033ee22d..0abf9c790c24 100644 --- a/python/ql/test/library-tests/regex/FirstLast.expected +++ b/python/ql/test/library-tests/regex/FirstLast.expected @@ -4,6 +4,7 @@ | (?!not-this)^[A-Z_]+$ | first | 12 | 13 | | (?!not-this)^[A-Z_]+$ | first | 13 | 19 | | (?!not-this)^[A-Z_]+$ | first | 13 | 20 | +| (?!not-this)^[A-Z_]+$ | last | 3 | 11 | | (?!not-this)^[A-Z_]+$ | last | 13 | 19 | | (?!not-this)^[A-Z_]+$ | last | 13 | 20 | | (?!not-this)^[A-Z_]+$ | last | 20 | 21 | @@ -101,6 +102,7 @@ | ^[A-Z_]+$(? Date: Fri, 19 Sep 2025 16:49:54 +0100 Subject: [PATCH 158/219] Apply suggestions from code review Co-authored-by: Simon Friis Vindum --- rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp index e4e0fc5eaa90..088f202965a9 100644 --- a/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp +++ b/rust/ql/src/queries/security/CWE-319/UseOfHttp.qhelp @@ -4,7 +4,7 @@ -

    Constructing URLs with the HTTP protocol can lead to unsecured connections.

    +

    Constructing URLs with the HTTP protocol can lead to insecure connections.

    Furthermore, constructing URLs with the HTTP protocol can create problems if other parts of the code expect HTTPS URLs. A typical pattern is to use libraries that expect secure connections, @@ -14,7 +14,7 @@ which may fail or fall back to insecure behavior when provided with HTTP URLs in

    When you construct a URL for network requests, ensure that you use an HTTPS URL rather than an HTTP URL. -Then, any connections that are made using that URL are secure SSL/TLS connections.

    +Then, any connections that are made using that URL are secure TLS connections.

    @@ -26,7 +26,7 @@ by attackers:

    A better approach is to use HTTPS. When the request is made using an HTTPS URL, the connection -is a secure SSL/TLS connection:

    +is a secure TLS connection:

    From 89e9ee43c00159a561bbad75b43296acefd87ef7 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 19 Sep 2025 18:28:45 -0400 Subject: [PATCH 159/219] Convert from GrapeHelperMethodTaintStep extends AdditionalTaintStep to a simplified GrapeHelperMethodTarget extends AdditionalCallTarget --- .../2025-09-15-grape-framework-support.md | 2 +- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 39 +++++++------------ .../frameworks/grape/Flow.expected | 36 +++++++++++++++-- .../library-tests/frameworks/grape/app.rb | 4 +- 4 files changed, 49 insertions(+), 32 deletions(-) diff --git a/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md b/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md index 258da40d36c5..08ceed887f21 100644 --- a/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md +++ b/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md @@ -1,4 +1,4 @@ --- category: feature --- -* Initial modeling for the Ruby Grape framework in `Grape.qll` have been added to detect API endpoints, parameters, and headers within Grape API classes. \ No newline at end of file +* Initial modeling for the Ruby Grape framework in `Grape.qll` has been added to detect API endpoints, parameters, and headers within Grape API classes. \ No newline at end of file diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index a1646b8654c9..31632e019485 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -3,6 +3,7 @@ */ private import codeql.ruby.AST +private import codeql.ruby.CFG private import codeql.ruby.Concepts private import codeql.ruby.controlflow.CfgNodes private import codeql.ruby.DataFlow @@ -301,32 +302,20 @@ private class GrapeHelperMethod extends Method { } /** - * Additional taint step to model dataflow from method arguments to parameters - * and from return values back to call sites for Grape helper methods defined in `helpers` blocks. - * This bridges the gap where standard dataflow doesn't recognize the Grape DSL semantics. + * Additional call-target to resolve helper method calls defined in `helpers` blocks. + * + * This class is responsible for resolving calls to helper methods defined in + * `helpers` blocks, allowing the dataflow framework to accurately track + * the flow of information between these methods and their call sites. */ -private class GrapeHelperMethodTaintStep extends AdditionalTaintStep { - override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - // Map arguments to parameters for helper method calls - exists(GrapeHelperMethod helperMethod, MethodCall call, int i | - // Find calls to helper methods from within Grape endpoints or other helper methods - call.getMethodName() = helperMethod.getName() and - exists(GrapeApiClass api | call.getParent+() = api.getADeclaration()) and - // Map argument to parameter - nodeFrom.asExpr().getExpr() = call.getArgument(i) and - nodeTo.asParameter() = helperMethod.getParameter(i) - ) - or - // Model implicit return values: the last expression in a helper method flows to the call site - exists(GrapeHelperMethod helperMethod, MethodCall helperCall, Expr lastExpr | - // Find calls to helper methods from within Grape endpoints or other helper methods - helperCall.getMethodName() = helperMethod.getName() and - exists(GrapeApiClass api | helperCall.getParent+() = api.getADeclaration()) and - // Get the last expression in the helper method (Ruby's implicit return) - lastExpr = helperMethod.getLastStmt() and - // Flow from the last expression in the helper method to the call site - nodeFrom.asExpr().getExpr() = lastExpr and - nodeTo.asExpr().getExpr() = helperCall +private class GrapeHelperMethodTarget extends AdditionalCallTarget { + override DataFlowCallable viableTarget(CfgNodes::ExprNodes::CallCfgNode call) { + // Find calls to helper methods from within Grape endpoints or other helper methods + exists(GrapeHelperMethod helperMethod, MethodCall mc | + result.asCfgScope() = helperMethod and + mc = call.getAstNode() and + mc.getMethodName() = helperMethod.getName() and + mc.getParent+() = helperMethod.getApiClass().getADeclaration() ) } } diff --git a/ruby/ql/test/library-tests/frameworks/grape/Flow.expected b/ruby/ql/test/library-tests/frameworks/grape/Flow.expected index 0fd19d4eaced..c104b36afb2d 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Flow.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Flow.expected @@ -1,10 +1,15 @@ models edges | app.rb:103:13:103:18 | call to params | app.rb:103:13:103:70 | call to select | provenance | | -| app.rb:103:13:103:70 | call to select | app.rb:149:21:149:31 | call to user_params | provenance | AdditionalTaintStep | -| app.rb:103:13:103:70 | call to select | app.rb:165:21:165:31 | call to user_params | provenance | AdditionalTaintStep | -| app.rb:107:13:107:32 | call to source | app.rb:143:18:143:43 | call to vulnerable_helper | provenance | AdditionalTaintStep | -| app.rb:111:13:111:33 | call to source | app.rb:150:25:150:37 | call to simple_helper | provenance | AdditionalTaintStep | +| app.rb:103:13:103:18 | call to params | app.rb:103:13:103:70 | call to select : [collection] [element] | provenance | | +| app.rb:103:13:103:70 | call to select | app.rb:149:21:149:31 | call to user_params | provenance | | +| app.rb:103:13:103:70 | call to select | app.rb:165:21:165:31 | call to user_params | provenance | | +| app.rb:103:13:103:70 | call to select : [collection] [element] | app.rb:149:21:149:31 | call to user_params : [collection] [element] | provenance | | +| app.rb:103:13:103:70 | call to select : [collection] [element] | app.rb:165:21:165:31 | call to user_params : [collection] [element] | provenance | | +| app.rb:107:13:107:32 | call to source | app.rb:143:18:143:43 | call to vulnerable_helper | provenance | | +| app.rb:107:13:107:32 | call to source | app.rb:143:18:143:43 | call to vulnerable_helper | provenance | | +| app.rb:111:13:111:33 | call to source | app.rb:150:25:150:37 | call to simple_helper | provenance | | +| app.rb:111:13:111:33 | call to source | app.rb:150:25:150:37 | call to simple_helper | provenance | | | app.rb:126:9:126:15 | user_id | app.rb:133:14:133:20 | user_id | provenance | | | app.rb:126:19:126:24 | call to params | app.rb:126:19:126:34 | ...[...] | provenance | | | app.rb:126:19:126:34 | ...[...] | app.rb:126:9:126:15 | user_id | provenance | | @@ -17,20 +22,31 @@ edges | app.rb:129:19:129:25 | call to cookies | app.rb:129:19:129:38 | ...[...] | provenance | | | app.rb:129:19:129:38 | ...[...] | app.rb:129:9:129:15 | session | provenance | | | app.rb:143:9:143:14 | result | app.rb:144:14:144:19 | result | provenance | | +| app.rb:143:9:143:14 | result | app.rb:144:14:144:19 | result | provenance | | +| app.rb:143:18:143:43 | call to vulnerable_helper | app.rb:143:9:143:14 | result | provenance | | | app.rb:143:18:143:43 | call to vulnerable_helper | app.rb:143:9:143:14 | result | provenance | | | app.rb:149:9:149:17 | user_data | app.rb:151:14:151:22 | user_data | provenance | | +| app.rb:149:9:149:17 | user_data : [collection] [element] | app.rb:151:14:151:22 | user_data | provenance | | | app.rb:149:21:149:31 | call to user_params | app.rb:149:9:149:17 | user_data | provenance | | +| app.rb:149:21:149:31 | call to user_params : [collection] [element] | app.rb:149:9:149:17 | user_data : [collection] [element] | provenance | | | app.rb:150:9:150:21 | simple_result | app.rb:152:14:152:26 | simple_result | provenance | | +| app.rb:150:9:150:21 | simple_result | app.rb:152:14:152:26 | simple_result | provenance | | +| app.rb:150:25:150:37 | call to simple_helper | app.rb:150:9:150:21 | simple_result | provenance | | | app.rb:150:25:150:37 | call to simple_helper | app.rb:150:9:150:21 | simple_result | provenance | | | app.rb:159:13:159:19 | user_id | app.rb:160:18:160:24 | user_id | provenance | | | app.rb:159:23:159:28 | call to params | app.rb:159:23:159:33 | ...[...] | provenance | | | app.rb:159:23:159:33 | ...[...] | app.rb:159:13:159:19 | user_id | provenance | | | app.rb:165:9:165:17 | user_data | app.rb:166:14:166:22 | user_data | provenance | | +| app.rb:165:9:165:17 | user_data : [collection] [element] | app.rb:166:14:166:22 | user_data | provenance | | | app.rb:165:21:165:31 | call to user_params | app.rb:165:9:165:17 | user_data | provenance | | +| app.rb:165:21:165:31 | call to user_params : [collection] [element] | app.rb:165:9:165:17 | user_data : [collection] [element] | provenance | | nodes | app.rb:103:13:103:18 | call to params | semmle.label | call to params | | app.rb:103:13:103:70 | call to select | semmle.label | call to select | +| app.rb:103:13:103:70 | call to select : [collection] [element] | semmle.label | call to select : [collection] [element] | | app.rb:107:13:107:32 | call to source | semmle.label | call to source | +| app.rb:107:13:107:32 | call to source | semmle.label | call to source | +| app.rb:111:13:111:33 | call to source | semmle.label | call to source | | app.rb:111:13:111:33 | call to source | semmle.label | call to source | | app.rb:126:9:126:15 | user_id | semmle.label | user_id | | app.rb:126:19:126:24 | call to params | semmle.label | call to params | @@ -48,20 +64,30 @@ nodes | app.rb:135:14:135:17 | auth | semmle.label | auth | | app.rb:136:14:136:20 | session | semmle.label | session | | app.rb:143:9:143:14 | result | semmle.label | result | +| app.rb:143:9:143:14 | result | semmle.label | result | | app.rb:143:18:143:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | +| app.rb:143:18:143:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | +| app.rb:144:14:144:19 | result | semmle.label | result | | app.rb:144:14:144:19 | result | semmle.label | result | | app.rb:149:9:149:17 | user_data | semmle.label | user_data | +| app.rb:149:9:149:17 | user_data : [collection] [element] | semmle.label | user_data : [collection] [element] | | app.rb:149:21:149:31 | call to user_params | semmle.label | call to user_params | +| app.rb:149:21:149:31 | call to user_params : [collection] [element] | semmle.label | call to user_params : [collection] [element] | | app.rb:150:9:150:21 | simple_result | semmle.label | simple_result | +| app.rb:150:9:150:21 | simple_result | semmle.label | simple_result | +| app.rb:150:25:150:37 | call to simple_helper | semmle.label | call to simple_helper | | app.rb:150:25:150:37 | call to simple_helper | semmle.label | call to simple_helper | | app.rb:151:14:151:22 | user_data | semmle.label | user_data | | app.rb:152:14:152:26 | simple_result | semmle.label | simple_result | +| app.rb:152:14:152:26 | simple_result | semmle.label | simple_result | | app.rb:159:13:159:19 | user_id | semmle.label | user_id | | app.rb:159:23:159:28 | call to params | semmle.label | call to params | | app.rb:159:23:159:33 | ...[...] | semmle.label | ...[...] | | app.rb:160:18:160:24 | user_id | semmle.label | user_id | | app.rb:165:9:165:17 | user_data | semmle.label | user_data | +| app.rb:165:9:165:17 | user_data : [collection] [element] | semmle.label | user_data : [collection] [element] | | app.rb:165:21:165:31 | call to user_params | semmle.label | call to user_params | +| app.rb:165:21:165:31 | call to user_params : [collection] [element] | semmle.label | call to user_params : [collection] [element] | | app.rb:166:14:166:22 | user_data | semmle.label | user_data | subpaths testFailures @@ -71,7 +97,9 @@ testFailures | app.rb:135:14:135:17 | auth | app.rb:128:16:128:22 | call to headers | app.rb:135:14:135:17 | auth | $@ | app.rb:128:16:128:22 | call to headers | call to headers | | app.rb:136:14:136:20 | session | app.rb:129:19:129:25 | call to cookies | app.rb:136:14:136:20 | session | $@ | app.rb:129:19:129:25 | call to cookies | call to cookies | | app.rb:144:14:144:19 | result | app.rb:107:13:107:32 | call to source | app.rb:144:14:144:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | +| app.rb:144:14:144:19 | result | app.rb:107:13:107:32 | call to source | app.rb:144:14:144:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | | app.rb:151:14:151:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:151:14:151:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | | app.rb:152:14:152:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:152:14:152:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | +| app.rb:152:14:152:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:152:14:152:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | | app.rb:160:18:160:24 | user_id | app.rb:159:23:159:28 | call to params | app.rb:160:18:160:24 | user_id | $@ | app.rb:159:23:159:28 | call to params | call to params | | app.rb:166:14:166:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:166:14:166:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | diff --git a/ruby/ql/test/library-tests/frameworks/grape/app.rb b/ruby/ql/test/library-tests/frameworks/grape/app.rb index 6fbb184cab98..81f464826876 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/app.rb +++ b/ruby/ql/test/library-tests/frameworks/grape/app.rb @@ -141,7 +141,7 @@ def simple_helper # Test helper method parameter passing dataflow user_id = params[:user_id] result = vulnerable_helper(user_id) - sink result # $ hasTaintFlow=paramHelper + sink result # $ hasValueFlow=paramHelper end post '/users' do @@ -149,7 +149,7 @@ def simple_helper user_data = user_params simple_result = simple_helper sink user_data # $ hasTaintFlow - sink simple_result # $ hasTaintFlow=simpleHelper + sink simple_result # $ hasValueFlow=simpleHelper end # Test route_param block pattern From f4bbbc346fe5b270f6fbfc3ed351fdfdaee3fa46 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 19 Sep 2025 19:06:50 -0400 Subject: [PATCH 160/219] Refactor Grape framework to be encapsulated properly in Module --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 480 +++++++++--------- .../library-tests/frameworks/grape/Grape.ql | 14 +- 2 files changed, 250 insertions(+), 244 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 31632e019485..0999be945052 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -29,293 +29,299 @@ module Grape { not exists(GrapeApiClass parent | this != parent and this = parent.getADescendent()) } } -} - -/** - * A class that extends `Grape::API`. - * For example, - * - * ```rb - * class FooAPI < Grape::API - * get '/users' do - * name = params[:name] - * User.where("name = #{name}") - * end - * end - * ``` - */ -class GrapeApiClass extends DataFlow::ClassNode { - GrapeApiClass() { - this = grapeApiBaseClass().getADescendentModule() and - not exists(DataFlow::ModuleNode m | m = grapeApiBaseClass().asModule() | this = m) - } /** - * Gets a `GrapeEndpoint` defined in this class. + * A class that extends `Grape::API`. + * For example, + * + * ```rb + * class FooAPI < Grape::API + * get '/users' do + * name = params[:name] + * User.where("name = #{name}") + * end + * end + * ``` */ - GrapeEndpoint getAnEndpoint() { result.getApiClass() = this } + class GrapeApiClass extends DataFlow::ClassNode { + GrapeApiClass() { + this = grapeApiBaseClass().getADescendentModule() and + not exists(DataFlow::ModuleNode m | m = grapeApiBaseClass().asModule() | this = m) + } - /** - * Gets a `self` that possibly refers to an instance of this class. - */ - DataFlow::LocalSourceNode getSelf() { - result = this.getAnInstanceSelf() - or - // Include the module-level `self` to recover some cases where a block at the module level - // is invoked with an instance as the `self`. - result = this.getModuleLevelSelf() + /** + * Gets a `GrapeEndpoint` defined in this class. + */ + GrapeEndpoint getAnEndpoint() { result.getApiClass() = this } + + /** + * Gets a `self` that possibly refers to an instance of this class. + */ + DataFlow::LocalSourceNode getSelf() { + result = this.getAnInstanceSelf() + or + // Include the module-level `self` to recover some cases where a block at the module level + // is invoked with an instance as the `self`. + result = this.getModuleLevelSelf() + } } -} -private DataFlow::ConstRef grapeApiBaseClass() { - result = DataFlow::getConstant("Grape").getConstant("API") -} + private DataFlow::ConstRef grapeApiBaseClass() { + result = DataFlow::getConstant("Grape").getConstant("API") + } -private API::Node grapeApiInstance() { result = any(GrapeApiClass cls).getSelf().track() } + private API::Node grapeApiInstance() { result = any(GrapeApiClass cls).getSelf().track() } -/** - * A Grape API endpoint (get, post, put, delete, etc.) call within a `Grape::API` class. - */ -class GrapeEndpoint extends DataFlow::CallNode { - private GrapeApiClass apiClass; + /** + * A Grape API endpoint (get, post, put, delete, etc.) call within a `Grape::API` class. + */ + class GrapeEndpoint extends DataFlow::CallNode { + private GrapeApiClass apiClass; + + GrapeEndpoint() { + this = + apiClass.getAModuleLevelCall(["get", "post", "put", "delete", "patch", "head", "options"]) + } - GrapeEndpoint() { - this = - apiClass.getAModuleLevelCall(["get", "post", "put", "delete", "patch", "head", "options"]) + /** + * Gets the HTTP method for this endpoint (e.g., "GET", "POST", etc.) + */ + string getHttpMethod() { result = this.getMethodName().toUpperCase() } + + /** + * Gets the API class containing this endpoint. + */ + GrapeApiClass getApiClass() { result = apiClass } + + /** + * Gets the block containing the endpoint logic. + */ + DataFlow::BlockNode getBody() { result = this.getBlock() } + + /** + * Gets the path pattern for this endpoint, if specified. + */ + string getPath() { result = this.getArgument(0).getConstantValue().getString() } } /** - * Gets the HTTP method for this endpoint (e.g., "GET", "POST", etc.) + * A `RemoteFlowSource::Range` to represent accessing the + * Grape parameters available via the `params` method within an endpoint. */ - string getHttpMethod() { result = this.getMethodName().toUpperCase() } + class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { + GrapeParamsSource() { this.asExpr().getExpr() instanceof GrapeParamsCall } - /** - * Gets the API class containing this endpoint. - */ - GrapeApiClass getApiClass() { result = apiClass } + override string getSourceType() { result = "Grape::API#params" } + + override Http::Server::RequestInputKind getKind() { + result = Http::Server::parameterInputKind() + } + } /** - * Gets the block containing the endpoint logic. + * A call to `params` from within a Grape API endpoint or helper method. */ - DataFlow::BlockNode getBody() { result = this.getBlock() } + private class GrapeParamsCall extends ParamsCallImpl { + GrapeParamsCall() { + // Params calls within endpoint blocks + exists(GrapeApiClass api | + this.getMethodName() = "params" and + this.getParent+() = api.getADeclaration() + ) + or + // Params calls within helper methods (defined in helpers blocks) + exists(GrapeApiClass api, DataFlow::CallNode helpersCall | + helpersCall = api.getAModuleLevelCall("helpers") and + this.getMethodName() = "params" and + this.getParent+() = helpersCall.getBlock().asExpr().getExpr() + ) + } + } /** - * Gets the path pattern for this endpoint, if specified. + * A call to `headers` from within a Grape API endpoint or headers block. + * Headers can also be a source of user input. */ - string getPath() { result = this.getArgument(0).getConstantValue().getString() } -} - -/** - * A `RemoteFlowSource::Range` to represent accessing the - * Grape parameters available via the `params` method within an endpoint. - */ -class GrapeParamsSource extends Http::Server::RequestInputAccess::Range { - GrapeParamsSource() { this.asExpr().getExpr() instanceof GrapeParamsCall } + class GrapeHeadersSource extends Http::Server::RequestInputAccess::Range { + GrapeHeadersSource() { + this.asExpr().getExpr() instanceof GrapeHeadersCall + or + this.asExpr().getExpr() instanceof GrapeHeadersBlockCall + } - override string getSourceType() { result = "Grape::API#params" } + override string getSourceType() { result = "Grape::API#headers" } - override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } -} - -/** - * A call to `params` from within a Grape API endpoint or helper method. - */ -private class GrapeParamsCall extends ParamsCallImpl { - GrapeParamsCall() { - // Params calls within endpoint blocks - exists(GrapeApiClass api | - this.getMethodName() = "params" and - this.getParent+() = api.getADeclaration() - ) - or - // Params calls within helper methods (defined in helpers blocks) - exists(GrapeApiClass api, DataFlow::CallNode helpersCall | - helpersCall = api.getAModuleLevelCall("helpers") and - this.getMethodName() = "params" and - this.getParent+() = helpersCall.getBlock().asExpr().getExpr() - ) + override Http::Server::RequestInputKind getKind() { result = Http::Server::headerInputKind() } } -} -/** - * A call to `headers` from within a Grape API endpoint or headers block. - * Headers can also be a source of user input. - */ -class GrapeHeadersSource extends Http::Server::RequestInputAccess::Range { - GrapeHeadersSource() { - this.asExpr().getExpr() instanceof GrapeHeadersCall - or - this.asExpr().getExpr() instanceof GrapeHeadersBlockCall + /** + * A call to `headers` from within a Grape API endpoint. + */ + private class GrapeHeadersCall extends MethodCall { + GrapeHeadersCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "headers" + ) + or + // Also handle cases where headers is called on an instance of a Grape API class + this = grapeApiInstance().getAMethodCall("headers").asExpr().getExpr() + } } - override string getSourceType() { result = "Grape::API#headers" } + /** + * A call to `request` from within a Grape API endpoint. + * The request object can contain user input. + */ + class GrapeRequestSource extends Http::Server::RequestInputAccess::Range { + GrapeRequestSource() { this.asExpr().getExpr() instanceof GrapeRequestCall } - override Http::Server::RequestInputKind getKind() { result = Http::Server::headerInputKind() } -} + override string getSourceType() { result = "Grape::API#request" } -/** - * A call to `headers` from within a Grape API endpoint. - */ -private class GrapeHeadersCall extends MethodCall { - GrapeHeadersCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "headers" - ) - or - // Also handle cases where headers is called on an instance of a Grape API class - this = grapeApiInstance().getAMethodCall("headers").asExpr().getExpr() + override Http::Server::RequestInputKind getKind() { + result = Http::Server::parameterInputKind() + } } -} -/** - * A call to `request` from within a Grape API endpoint. - * The request object can contain user input. - */ -class GrapeRequestSource extends Http::Server::RequestInputAccess::Range { - GrapeRequestSource() { this.asExpr().getExpr() instanceof GrapeRequestCall } - - override string getSourceType() { result = "Grape::API#request" } - - override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } -} - -/** - * A call to `route_param` from within a Grape API endpoint. - * Route parameters are extracted from the URL path and can be a source of user input. - */ -class GrapeRouteParamSource extends Http::Server::RequestInputAccess::Range { - GrapeRouteParamSource() { this.asExpr().getExpr() instanceof GrapeRouteParamCall } + /** + * A call to `route_param` from within a Grape API endpoint. + * Route parameters are extracted from the URL path and can be a source of user input. + */ + class GrapeRouteParamSource extends Http::Server::RequestInputAccess::Range { + GrapeRouteParamSource() { this.asExpr().getExpr() instanceof GrapeRouteParamCall } - override string getSourceType() { result = "Grape::API#route_param" } + override string getSourceType() { result = "Grape::API#route_param" } - override Http::Server::RequestInputKind getKind() { result = Http::Server::parameterInputKind() } -} - -/** - * A call to `request` from within a Grape API endpoint. - */ -private class GrapeRequestCall extends MethodCall { - GrapeRequestCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "request" - ) - or - // Also handle cases where request is called on an instance of a Grape API class - this = grapeApiInstance().getAMethodCall("request").asExpr().getExpr() + override Http::Server::RequestInputKind getKind() { + result = Http::Server::parameterInputKind() + } } -} -/** - * A call to `route_param` from within a Grape API endpoint. - */ -private class GrapeRouteParamCall extends MethodCall { - GrapeRouteParamCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asExpr().getExpr() and - this.getMethodName() = "route_param" - ) - or - // Also handle cases where route_param is called on an instance of a Grape API class - this = grapeApiInstance().getAMethodCall("route_param").asExpr().getExpr() + /** + * A call to `request` from within a Grape API endpoint. + */ + private class GrapeRequestCall extends MethodCall { + GrapeRequestCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "request" + ) + or + // Also handle cases where request is called on an instance of a Grape API class + this = grapeApiInstance().getAMethodCall("request").asExpr().getExpr() + } } -} -/** - * A call to `headers` block within a Grape API class. - * This is different from the headers() method call - this is the DSL block for defining header requirements. - */ -private class GrapeHeadersBlockCall extends MethodCall { - GrapeHeadersBlockCall() { - exists(GrapeApiClass api | - this.getParent+() = api.getADeclaration() and - this.getMethodName() = "headers" and - exists(this.getBlock()) - ) + /** + * A call to `route_param` from within a Grape API endpoint. + */ + private class GrapeRouteParamCall extends MethodCall { + GrapeRouteParamCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asExpr().getExpr() and + this.getMethodName() = "route_param" + ) + or + // Also handle cases where route_param is called on an instance of a Grape API class + this = grapeApiInstance().getAMethodCall("route_param").asExpr().getExpr() + } } -} -/** - * A call to `cookies` block within a Grape API class. - * This DSL block defines cookie requirements and those cookies are user-controlled. - */ -private class GrapeCookiesBlockCall extends MethodCall { - GrapeCookiesBlockCall() { - exists(GrapeApiClass api | - this.getParent+() = api.getADeclaration() and - this.getMethodName() = "cookies" and - exists(this.getBlock()) - ) + /** + * A call to `headers` block within a Grape API class. + * This is different from the headers() method call - this is the DSL block for defining header requirements. + */ + private class GrapeHeadersBlockCall extends MethodCall { + GrapeHeadersBlockCall() { + exists(GrapeApiClass api | + this.getParent+() = api.getADeclaration() and + this.getMethodName() = "headers" and + exists(this.getBlock()) + ) + } } -} -/** - * A call to `cookies` method from within a Grape API endpoint or cookies block. - * Similar to headers, cookies can be accessed as a method and are user-controlled input. - */ -class GrapeCookiesSource extends Http::Server::RequestInputAccess::Range { - GrapeCookiesSource() { - this.asExpr().getExpr() instanceof GrapeCookiesCall - or - this.asExpr().getExpr() instanceof GrapeCookiesBlockCall + /** + * A call to `cookies` block within a Grape API class. + * This DSL block defines cookie requirements and those cookies are user-controlled. + */ + private class GrapeCookiesBlockCall extends MethodCall { + GrapeCookiesBlockCall() { + exists(GrapeApiClass api | + this.getParent+() = api.getADeclaration() and + this.getMethodName() = "cookies" and + exists(this.getBlock()) + ) + } } - override string getSourceType() { result = "Grape::API#cookies" } + /** + * A call to `cookies` method from within a Grape API endpoint or cookies block. + * Similar to headers, cookies can be accessed as a method and are user-controlled input. + */ + class GrapeCookiesSource extends Http::Server::RequestInputAccess::Range { + GrapeCookiesSource() { + this.asExpr().getExpr() instanceof GrapeCookiesCall + or + this.asExpr().getExpr() instanceof GrapeCookiesBlockCall + } - override Http::Server::RequestInputKind getKind() { result = Http::Server::cookieInputKind() } -} + override string getSourceType() { result = "Grape::API#cookies" } -/** - * A call to `cookies` method from within a Grape API endpoint. - */ -private class GrapeCookiesCall extends MethodCall { - GrapeCookiesCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "cookies" - ) - or - // Also handle cases where cookies is called on an instance of a Grape API class - this = grapeApiInstance().getAMethodCall("cookies").asExpr().getExpr() + override Http::Server::RequestInputKind getKind() { result = Http::Server::cookieInputKind() } } -} -/** - * A method defined within a `helpers` block in a Grape API class. - * These methods become available in endpoint contexts through Grape's DSL. - */ -private class GrapeHelperMethod extends Method { - private GrapeApiClass apiClass; - - GrapeHelperMethod() { - exists(DataFlow::CallNode helpersCall | - helpersCall = apiClass.getAModuleLevelCall("helpers") and - this.getParent+() = helpersCall.getBlock().asExpr().getExpr() - ) + /** + * A call to `cookies` method from within a Grape API endpoint. + */ + private class GrapeCookiesCall extends MethodCall { + GrapeCookiesCall() { + exists(GrapeEndpoint endpoint | + this.getParent+() = endpoint.getBody().asCallableAstNode() and + this.getMethodName() = "cookies" + ) + or + // Also handle cases where cookies is called on an instance of a Grape API class + this = grapeApiInstance().getAMethodCall("cookies").asExpr().getExpr() + } } /** - * Gets the API class that contains this helper method. + * A method defined within a `helpers` block in a Grape API class. + * These methods become available in endpoint contexts through Grape's DSL. */ - GrapeApiClass getApiClass() { result = apiClass } -} + private class GrapeHelperMethod extends Method { + private GrapeApiClass apiClass; + + GrapeHelperMethod() { + exists(DataFlow::CallNode helpersCall | + helpersCall = apiClass.getAModuleLevelCall("helpers") and + this.getParent+() = helpersCall.getBlock().asExpr().getExpr() + ) + } -/** - * Additional call-target to resolve helper method calls defined in `helpers` blocks. - * - * This class is responsible for resolving calls to helper methods defined in - * `helpers` blocks, allowing the dataflow framework to accurately track - * the flow of information between these methods and their call sites. - */ -private class GrapeHelperMethodTarget extends AdditionalCallTarget { - override DataFlowCallable viableTarget(CfgNodes::ExprNodes::CallCfgNode call) { - // Find calls to helper methods from within Grape endpoints or other helper methods - exists(GrapeHelperMethod helperMethod, MethodCall mc | - result.asCfgScope() = helperMethod and - mc = call.getAstNode() and - mc.getMethodName() = helperMethod.getName() and - mc.getParent+() = helperMethod.getApiClass().getADeclaration() - ) + /** + * Gets the API class that contains this helper method. + */ + GrapeApiClass getApiClass() { result = apiClass } + } + + /** + * Additional call-target to resolve helper method calls defined in `helpers` blocks. + * + * This class is responsible for resolving calls to helper methods defined in + * `helpers` blocks, allowing the dataflow framework to accurately track + * the flow of information between these methods and their call sites. + */ + private class GrapeHelperMethodTarget extends AdditionalCallTarget { + override DataFlowCallable viableTarget(CfgNodes::ExprNodes::CallCfgNode call) { + // Find calls to helper methods from within Grape endpoints or other helper methods + exists(GrapeHelperMethod helperMethod, MethodCall mc | + result.asCfgScope() = helperMethod and + mc = call.getAstNode() and + mc.getMethodName() = helperMethod.getName() and + mc.getParent+() = helperMethod.getApiClass().getADeclaration() + ) + } } } diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql index c9aa7c29082c..c5f0798f7a6b 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -3,20 +3,20 @@ import codeql.ruby.frameworks.Grape import codeql.ruby.Concepts import codeql.ruby.AST -query predicate grapeApiClasses(GrapeApiClass api) { any() } +query predicate grapeApiClasses(Grape::GrapeApiClass api) { any() } -query predicate grapeEndpoints(GrapeApiClass api, GrapeEndpoint endpoint, string method, string path) { +query predicate grapeEndpoints(Grape::GrapeApiClass api, Grape::GrapeEndpoint endpoint, string method, string path) { endpoint = api.getAnEndpoint() and method = endpoint.getHttpMethod() and path = endpoint.getPath() } -query predicate grapeParams(GrapeParamsSource params) { any() } +query predicate grapeParams(Grape::GrapeParamsSource params) { any() } -query predicate grapeHeaders(GrapeHeadersSource headers) { any() } +query predicate grapeHeaders(Grape::GrapeHeadersSource headers) { any() } -query predicate grapeRequest(GrapeRequestSource request) { any() } +query predicate grapeRequest(Grape::GrapeRequestSource request) { any() } -query predicate grapeRouteParam(GrapeRouteParamSource routeParam) { any() } +query predicate grapeRouteParam(Grape::GrapeRouteParamSource routeParam) { any() } -query predicate grapeCookies(GrapeCookiesSource cookies) { any() } +query predicate grapeCookies(Grape::GrapeCookiesSource cookies) { any() } From bdeeb3217ec087d58345cdfcf813d3a56a5050ad Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 19 Sep 2025 15:06:47 +0200 Subject: [PATCH 161/219] Rust: Add path resolution tests --- .../PathResolutionInlineExpectationsTest.qll | 12 +++++++---- .../library-tests/path-resolution/my2/mod.rs | 2 ++ .../path-resolution/my2/my3/mod.rs | 4 ++++ .../path-resolution/path-resolution.expected | 20 +++++++++++-------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll b/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll index 8d2fdb2d2ebf..df668194c075 100644 --- a/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll +++ b/rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll @@ -25,10 +25,14 @@ private module ResolveTest implements TestSig { private predicate item(ItemNode i, string value) { exists(string filepath, int line, boolean inMacro | itemAt(i, filepath, line, inMacro) | - commmentAt(value, filepath, line) - or - not commmentAt(_, filepath, line) and - value = i.getName() + if i instanceof SourceFile + then value = i.getFile().getBaseName() + else ( + commmentAt(value, filepath, line) + or + not commmentAt(_, filepath, line) and + value = i.getName() + ) ) } diff --git a/rust/ql/test/library-tests/path-resolution/my2/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/mod.rs index 85edb6832027..6b86c78237c9 100644 --- a/rust/ql/test/library-tests/path-resolution/my2/mod.rs +++ b/rust/ql/test/library-tests/path-resolution/my2/mod.rs @@ -15,6 +15,8 @@ pub use nested2::nested7::nested8::{ // $ item=I118 use nested2::nested5::nested6::f as nested6_f; // $ item=I116 +use std::ops::Deref; // $ item=Deref + pub mod my3; #[path = "renamed.rs"] diff --git a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs index b459ca05aa6c..1a98df1b560c 100644 --- a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs +++ b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs @@ -8,3 +8,7 @@ use super::super::h; // $ item=I25 use super::g; // $ item=I9 use super::nested6_f; // $ item=I116 + +use super::*; // $ item=mod.rs + +trait MyTrait: Deref {} // $ MISSING: item=Deref diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index a908ec1e5c17..1a925a31cce0 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -33,8 +33,8 @@ mod | main.rs:712:1:764:1 | mod associated_types | | main.rs:770:1:789:1 | mod impl_with_attribute_macro | | my2/mod.rs:1:1:1:16 | mod nested2 | -| my2/mod.rs:18:1:18:12 | mod my3 | -| my2/mod.rs:20:1:21:10 | mod mymod | +| my2/mod.rs:20:1:20:12 | mod my3 | +| my2/mod.rs:22:1:23:10 | mod mymod | | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/nested2.rs:2:5:10:5 | mod nested4 | | my2/nested2.rs:13:1:19:1 | mod nested5 | @@ -406,7 +406,7 @@ resolvePath | main.rs:814:5:814:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | | main.rs:815:5:815:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | | main.rs:815:5:815:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:816:5:816:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 | +| main.rs:816:5:816:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 | | main.rs:816:5:816:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | | main.rs:817:5:817:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | | main.rs:818:5:818:7 | m18 | main.rs:553:1:571:1 | mod m18 | @@ -440,17 +440,21 @@ resolvePath | my2/mod.rs:16:5:16:20 | ...::nested5 | my2/nested2.rs:13:1:19:1 | mod nested5 | | my2/mod.rs:16:5:16:29 | ...::nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | | my2/mod.rs:16:5:16:32 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| my2/mod.rs:23:9:23:13 | mymod | my2/mod.rs:20:1:21:10 | mod mymod | -| my2/mod.rs:23:9:23:16 | ...::f | my2/renamed.rs:1:1:1:13 | fn f | +| my2/mod.rs:18:5:18:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| my2/mod.rs:18:5:18:12 | ...::ops | {EXTERNAL LOCATION} | mod ops | +| my2/mod.rs:18:5:18:19 | ...::Deref | {EXTERNAL LOCATION} | trait Deref | +| my2/mod.rs:25:9:25:13 | mymod | my2/mod.rs:22:1:23:10 | mod mymod | +| my2/mod.rs:25:9:25:16 | ...::f | my2/renamed.rs:1:1:1:13 | fn f | | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h | -| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | +| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:826:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h | -| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | +| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | -| my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:23:34 | SourceFile | +| my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my2/my3/mod.rs:10:5:10:20 | ...::nested6_f | my2/nested2.rs:15:9:17:9 | fn f | +| my2/my3/mod.rs:12:5:12:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested | | my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g | | my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g | From 223ab5e60cc654b3255520c581ba8cdbd9716335 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Sun, 21 Sep 2025 15:22:40 +0200 Subject: [PATCH 162/219] Rust: Add missing model --- rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml b/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml index 9e65ba1b1964..706170d44b89 100644 --- a/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml @@ -4,3 +4,9 @@ extensions: extensible: sourceModel data: - ["::connect", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "remote", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["<_ as async_std::io::read::ReadExt>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["<_ as async_std::io::read::ReadExt>::read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] \ No newline at end of file From 8d5d219c0f1d5372249c12a6f59ef3bf1046cd04 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Sun, 21 Sep 2025 15:36:22 +0200 Subject: [PATCH 163/219] Rust: Update expected test output --- .../dataflow/sources/InlineFlow.expected | 600 +++++++++--------- 1 file changed, 308 insertions(+), 292 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index db0cb969d5a7..af0e73ca2c08 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -33,108 +33,110 @@ models | 32 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | | 33 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | | 34 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | -| 35 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 36 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | -| 37 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 38 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 42 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 43 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 46 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 47 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 48 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | -| 49 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | -| 50 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | -| 51 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | -| 52 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 53 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | -| 54 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | -| 55 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 56 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 57 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 58 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 59 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | -| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 63 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 64 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | -| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | -| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 72 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 73 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 74 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 75 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 76 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 77 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 78 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 79 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | -| 80 | Summary: ::new; Argument[0]; ReturnValue; value | -| 81 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 82 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 83 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 84 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 85 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 86 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 87 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 88 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 89 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 90 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 91 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 92 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 93 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 94 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 95 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 96 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 97 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | -| 98 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 99 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 100 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | -| 101 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 102 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 103 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 104 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 105 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 106 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | -| 107 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | -| 108 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 109 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 110 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 111 | Summary: ::lock; Argument[self]; ReturnValue; taint | -| 112 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 113 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 114 | Summary: ::as_path; Argument[self]; ReturnValue; value | -| 115 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 116 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 117 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 118 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 119 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | -| 120 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | -| 121 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +| 35 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 36 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 37 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 38 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | +| 39 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 40 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 42 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 43 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 44 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 45 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 46 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 47 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 48 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 49 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 50 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | +| 51 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | +| 52 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | +| 53 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | +| 54 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 55 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | +| 56 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | +| 57 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 58 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 59 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 60 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 61 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 63 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | +| 64 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 65 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 66 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | +| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | +| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 72 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 73 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 74 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 75 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 76 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 77 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 78 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 79 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 80 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 81 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | +| 82 | Summary: ::new; Argument[0]; ReturnValue; value | +| 83 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 84 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 85 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 86 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 87 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 88 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 89 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 90 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 91 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 92 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 93 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 94 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 95 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 96 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 97 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 98 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 99 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | +| 100 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 101 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 102 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | +| 103 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 104 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 105 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 106 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 107 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 108 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | +| 109 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | +| 110 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 111 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 112 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 113 | Summary: ::lock; Argument[self]; ReturnValue; taint | +| 114 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 115 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 116 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 117 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 118 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 119 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 120 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 121 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | +| 122 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | +| 123 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | edges | test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:23 | | test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:24 | | test.rs:11:9:11:12 | var1 | test.rs:14:10:14:13 | var1 | provenance | | | test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:81 | +| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:83 | | test.rs:11:16:11:59 | ... .expect(...) | test.rs:11:9:11:12 | var1 | provenance | | | test.rs:12:9:12:12 | var2 | test.rs:15:10:15:13 | var2 | provenance | | | test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:24 | -| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:77 | +| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:79 | | test.rs:12:16:12:48 | ... .unwrap() | test.rs:12:9:12:12 | var2 | provenance | | | test.rs:29:9:29:12 | args [element] | test.rs:30:20:30:23 | args [element] | provenance | | | test.rs:29:9:29:12 | args [element] | test.rs:31:17:31:20 | args [element] | provenance | | | test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:18 | -| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:36 | +| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:38 | | test.rs:29:29:29:54 | ... .collect() [element] | test.rs:29:9:29:12 | args [element] | provenance | | | test.rs:30:9:30:15 | my_path [&ref] | test.rs:36:10:36:16 | my_path | provenance | | | test.rs:30:19:30:26 | &... [&ref] | test.rs:30:9:30:15 | my_path [&ref] | provenance | | @@ -146,20 +148,20 @@ edges | test.rs:31:17:31:23 | args[1] | test.rs:31:16:31:23 | &... [&ref] | provenance | | | test.rs:32:9:32:12 | arg2 | test.rs:38:10:38:13 | arg2 | provenance | | | test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:18 | -| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:37 | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:77 | +| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:39 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:79 | | test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:9:32:12 | arg2 | provenance | | | test.rs:33:9:33:12 | arg3 | test.rs:39:10:39:13 | arg3 | provenance | | | test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:19 | -| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:37 | -| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:77 | +| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:39 | +| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:79 | | test.rs:33:16:33:50 | ... .unwrap() | test.rs:33:9:33:12 | arg3 | provenance | | | test.rs:34:9:34:12 | arg4 | test.rs:40:10:40:13 | arg4 | provenance | | | test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:18 | -| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:37 | -| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:77 | -| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:85 | -| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:82 | +| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:39 | +| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:79 | +| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:87 | +| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:84 | | test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | | | test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | | | test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:18 | @@ -169,45 +171,45 @@ edges | test.rs:46:16:46:34 | ...::args_os(...) [element] | test.rs:46:9:46:11 | arg | provenance | | | test.rs:52:9:52:11 | dir | test.rs:56:10:56:12 | dir | provenance | | | test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:20 | -| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:81 | +| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:83 | | test.rs:52:15:52:54 | ... .expect(...) | test.rs:52:9:52:11 | dir | provenance | | | test.rs:53:9:53:11 | exe | test.rs:57:10:57:12 | exe | provenance | | | test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:21 | -| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:81 | +| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:83 | | test.rs:53:15:53:54 | ... .expect(...) | test.rs:53:9:53:11 | exe | provenance | | | test.rs:54:9:54:12 | home | test.rs:58:10:58:13 | home | provenance | | | test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:22 | -| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:76 | +| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:78 | | test.rs:54:16:54:52 | ... .expect(...) | test.rs:54:9:54:12 | home | provenance | | | test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | | | test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | | test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | | -| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:92 | +| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:94 | | test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | | | test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | | | test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | | | test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | -| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:82 | -| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:92 | -| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:82 | +| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:84 | +| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:94 | +| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:84 | | test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | | | test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | | | test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | -| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:82 | -| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:93 | -| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:82 | +| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:84 | +| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:95 | +| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:84 | | test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | | | test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | | | test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | -| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:82 | -| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:91 | -| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:82 | +| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:84 | +| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:93 | +| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:84 | | test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | | | test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | | | test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | | | test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | | -| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:90 | +| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:92 | | test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | | | test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | | | test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | | @@ -215,19 +217,19 @@ edges | test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | | | test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | | -| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:88 | +| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:90 | | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | | | test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | | | test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | | -| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:89 | -| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:89 | +| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:91 | +| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:91 | | test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | | | test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | | | test.rs:80:24:80:57 | TryExpr | test.rs:80:9:80:20 | mut request1 | provenance | | | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | test.rs:81:10:81:31 | await ... [Ok, Some] | provenance | | | test.rs:81:10:81:31 | await ... [Ok, Some] | test.rs:81:10:81:32 | TryExpr [Some] | provenance | | -| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:77 | +| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:79 | | test.rs:82:15:82:25 | Some(...) [Some] | test.rs:82:20:82:24 | chunk | provenance | | | test.rs:82:20:82:24 | chunk | test.rs:83:14:83:18 | chunk | provenance | | | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | test.rs:82:29:82:50 | await ... [Ok, Some] | provenance | | @@ -247,119 +249,119 @@ edges | test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:4 | | test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | | | test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:105 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:104 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:107 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:106 | | test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | | | test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | | | test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:108 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:59 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:110 | | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | | | test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | | | test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | | | test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:110 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:58 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:109 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:112 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:111 | | test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | | | test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | | | test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:111 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:58 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:112 | +| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:113 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:114 | | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | | | test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | | | test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | | | test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:107 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:56 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:106 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:109 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:108 | | test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | | | test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:236:15:236:20 | buffer | test.rs:236:14:236:20 | &buffer | provenance | | | test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:52 | +| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:54 | | test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | | -| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:101 | +| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:103 | | test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | | | test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:103 | +| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:105 | | test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | | | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | | | test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | | | test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | | -| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:102 | +| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:104 | | test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | | | test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:103 | +| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:105 | | test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | | | test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | | | test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | | -| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:49 | +| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:51 | | test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | | | test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:103 | +| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:105 | | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | | | test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | | | test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | | -| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:50 | +| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:52 | | test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | | | test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:103 | +| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:105 | | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | | | test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | | -| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:100 | -| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:100 | -| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:51 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:102 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:102 | +| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:53 | | test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | | | test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:103 | -| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:77 | -| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:82 | +| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:105 | +| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:79 | +| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:84 | | test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | | -| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:82 | +| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:84 | | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | test.rs:275:19:275:29 | Some(...) [Some, Ok] | provenance | | -| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:48 | +| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:50 | | test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | | | test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:103 | +| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:105 | | test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | | -| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:67 | | test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:309:25:309:42 | ...::stdin(...) | test.rs:309:13:309:21 | mut stdin | provenance | | | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | test.rs:311:38:311:43 | [post] buffer | provenance | | | test.rs:311:38:311:43 | [post] buffer | test.rs:312:15:312:20 | buffer | provenance | | | test.rs:312:15:312:20 | buffer | test.rs:312:14:312:20 | &buffer | provenance | | -| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:71 | +| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:73 | | test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:316:25:316:42 | ...::stdin(...) | test.rs:316:13:316:21 | mut stdin | provenance | | | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | test.rs:318:45:318:50 | [post] buffer | provenance | | | test.rs:318:45:318:50 | [post] buffer | test.rs:319:15:319:20 | buffer | provenance | | | test.rs:319:15:319:20 | buffer | test.rs:319:14:319:20 | &buffer | provenance | | -| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:72 | +| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:74 | | test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:323:25:323:42 | ...::stdin(...) | test.rs:323:13:323:21 | mut stdin | provenance | | | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | test.rs:325:48:325:53 | [post] buffer | provenance | | | test.rs:325:48:325:53 | [post] buffer | test.rs:326:15:326:20 | buffer | provenance | | | test.rs:326:15:326:20 | buffer | test.rs:326:14:326:20 | &buffer | provenance | | -| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:67 | +| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:69 | | test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:330:25:330:42 | ...::stdin(...) | test.rs:330:13:330:21 | mut stdin | provenance | | | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | test.rs:332:31:332:36 | [post] buffer | provenance | | | test.rs:332:31:332:36 | [post] buffer | test.rs:333:15:333:20 | buffer | provenance | | | test.rs:333:15:333:20 | buffer | test.rs:333:14:333:20 | &buffer | provenance | | -| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:73 | -| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:69 | -| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:68 | -| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:70 | +| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:75 | +| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:71 | +| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:70 | +| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:72 | | test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:337:25:337:42 | ...::stdin(...) | test.rs:337:13:337:21 | mut stdin | provenance | | | test.rs:338:13:338:14 | v1 | test.rs:342:14:342:15 | v1 | provenance | | @@ -378,67 +380,67 @@ edges | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | test.rs:341:18:341:42 | await ... [Ok] | provenance | | | test.rs:341:18:341:42 | await ... [Ok] | test.rs:341:18:341:43 | TryExpr | provenance | | | test.rs:341:18:341:43 | TryExpr | test.rs:341:13:341:14 | v4 | provenance | | -| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:66 | +| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:68 | | test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | | test.rs:349:25:349:42 | ...::stdin(...) | test.rs:349:13:349:21 | mut stdin | provenance | | | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | test.rs:351:29:351:34 | [post] buffer | provenance | | | test.rs:351:29:351:34 | [post] buffer | test.rs:352:15:352:20 | buffer | provenance | | | test.rs:352:15:352:20 | buffer | test.rs:352:14:352:20 | &buffer | provenance | | -| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:60 | +| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:62 | | test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | | | test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:116 | +| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:118 | | test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | | | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | | | test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | | | test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | | | test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | | -| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:115 | +| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:117 | | test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | | | test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:116 | +| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:118 | | test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | | | test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | | | test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | | -| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:62 | +| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:64 | | test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | | | test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:116 | +| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:118 | | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | | | test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | | | test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | | -| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:65 | | test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | | | test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:116 | +| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:118 | | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | | | test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | | -| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:118 | -| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:118 | -| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:64 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:120 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:120 | +| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:66 | | test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | | | test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:116 | +| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:118 | | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | | | test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | | -| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:77 | +| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:79 | | test.rs:387:19:387:29 | Some(...) [Some] | test.rs:387:24:387:28 | chunk | provenance | | | test.rs:387:24:387:28 | chunk | test.rs:388:18:388:22 | chunk | provenance | | | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:387:33:387:65 | await ... [Ok, Some] | provenance | | | test.rs:387:33:387:65 | await ... [Ok, Some] | test.rs:387:33:387:66 | TryExpr [Some] | provenance | | | test.rs:387:33:387:66 | TryExpr [Some] | test.rs:387:19:387:29 | Some(...) [Some] | provenance | | -| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:61 | +| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:63 | | test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | | | test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:116 | -| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:117 | -| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:117 | +| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:118 | +| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:119 | +| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:119 | | test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | | | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | | | test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | | -| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:77 | +| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:79 | | test.rs:396:19:396:28 | Some(...) [Some] | test.rs:396:24:396:27 | line | provenance | | | test.rs:396:24:396:27 | line | test.rs:397:18:397:21 | line | provenance | | | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | test.rs:396:32:396:54 | await ... [Ok, Some] | provenance | | @@ -463,21 +465,21 @@ edges | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | test.rs:418:22:418:52 | TryExpr | provenance | | | test.rs:418:22:418:52 | TryExpr | test.rs:418:13:418:18 | buffer | provenance | | | test.rs:425:13:425:16 | path | test.rs:426:14:426:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:35 | +| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:37 | | test.rs:425:13:425:16 | path | test.rs:427:14:427:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:35 | +| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:37 | | test.rs:425:13:425:16 | path | test.rs:437:14:437:17 | path | provenance | | | test.rs:425:20:425:27 | e.path() | test.rs:425:13:425:16 | path | provenance | | | test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:6 MaD:6 | -| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:35 | -| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:35 | -| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:114 | +| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:37 | +| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:37 | +| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:116 | | test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | | -| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:35 | +| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:37 | | test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | | | test.rs:439:25:439:37 | e.file_name() | test.rs:439:13:439:21 | file_name | provenance | | | test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:5 MaD:5 | -| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:35 | +| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:37 | | test.rs:461:13:461:18 | target | test.rs:462:14:462:19 | target | provenance | | | test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:27 | | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | test.rs:461:22:461:50 | TryExpr | provenance | | @@ -510,17 +512,17 @@ edges | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | | | test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | | | test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:95 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:97 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:96 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:99 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:58 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:98 | -| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:56 | -| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:52 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:97 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:96 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:99 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:59 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:98 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:101 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:100 | +| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:54 | | test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:503:20:503:50 | ...::open(...) [Ok] | test.rs:503:20:503:51 | TryExpr | provenance | | | test.rs:503:20:503:51 | TryExpr | test.rs:503:9:503:16 | mut file | provenance | | @@ -540,37 +542,37 @@ edges | test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | | | test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | | | test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:95 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:82 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:97 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:96 | +| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:84 | | test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | | | test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:8 | | test.rs:538:30:538:40 | [post] &mut buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | | | test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:95 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:82 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:97 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:96 | +| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:84 | | test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | | | test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:8 | | test.rs:545:30:545:40 | [post] &mut buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | | | test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:95 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:82 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:97 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:96 | +| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:84 | | test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | | | test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:8 | | test.rs:552:30:552:40 | [post] &mut buffer | test.rs:553:15:553:20 | buffer | provenance | | | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | test.rs:552:35:552:40 | [post] buffer | provenance | | | test.rs:552:35:552:40 | [post] buffer | test.rs:553:15:553:20 | buffer | provenance | | | test.rs:553:15:553:20 | buffer | test.rs:553:14:553:20 | &buffer | provenance | | -| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:54 | +| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:56 | | test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:560:21:560:51 | ...::open(...) [Ok] | test.rs:560:21:560:52 | TryExpr | provenance | | | test.rs:560:21:560:52 | TryExpr | test.rs:560:13:560:17 | file1 | provenance | | @@ -578,30 +580,30 @@ edges | test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:561:21:561:59 | ...::open(...) [Ok] | test.rs:561:21:561:60 | TryExpr | provenance | | | test.rs:561:21:561:60 | TryExpr | test.rs:561:13:561:17 | file2 | provenance | | -| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:60 | | test.rs:562:26:562:43 | file1.chain(...) | test.rs:562:13:562:22 | mut reader | provenance | | -| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:53 | +| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:55 | | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | test.rs:563:36:563:41 | [post] buffer | provenance | | | test.rs:563:36:563:41 | [post] buffer | test.rs:564:15:564:20 | buffer | provenance | | | test.rs:564:15:564:20 | buffer | test.rs:564:14:564:20 | &buffer | provenance | | -| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:59 | +| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:61 | | test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:7 | | test.rs:569:21:569:51 | ...::open(...) [Ok] | test.rs:569:21:569:52 | TryExpr | provenance | | | test.rs:569:21:569:52 | TryExpr | test.rs:569:13:569:17 | file1 | provenance | | -| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:58 | +| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:60 | | test.rs:570:26:570:40 | file1.take(...) | test.rs:570:13:570:22 | mut reader | provenance | | | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | test.rs:571:36:571:41 | [post] buffer | provenance | | | test.rs:571:36:571:41 | [post] buffer | test.rs:572:15:572:20 | buffer | provenance | | | test.rs:572:15:572:20 | buffer | test.rs:572:14:572:20 | &buffer | provenance | | -| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:65 | -| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:71 | -| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:72 | -| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:67 | -| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:73 | -| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:69 | -| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:68 | -| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:70 | -| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:66 | +| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:67 | +| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:73 | +| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:74 | +| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:69 | +| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:75 | +| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:71 | +| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:70 | +| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:72 | +| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:68 | | test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:11 | | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | test.rs:581:20:581:58 | await ... [Ok] | provenance | | | test.rs:581:20:581:58 | await ... [Ok] | test.rs:581:20:581:59 | TryExpr | provenance | | @@ -637,7 +639,7 @@ edges | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | test.rs:620:28:620:33 | [post] buffer | provenance | | | test.rs:620:28:620:33 | [post] buffer | test.rs:621:15:621:20 | buffer | provenance | | | test.rs:621:15:621:20 | buffer | test.rs:621:14:621:20 | &buffer | provenance | | -| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:67 | | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | test.rs:627:22:627:71 | await ... [Ok] | provenance | | | test.rs:627:22:627:71 | await ... [Ok] | test.rs:627:22:627:72 | TryExpr | provenance | | | test.rs:627:22:627:72 | TryExpr | test.rs:627:13:627:18 | mut f1 | provenance | | @@ -646,29 +648,35 @@ edges | test.rs:629:35:629:40 | [post] buffer | test.rs:630:15:630:20 | buffer | provenance | | | test.rs:630:15:630:20 | buffer | test.rs:630:14:630:20 | &buffer | provenance | | | test.rs:660:9:660:16 | mut file | test.rs:664:22:664:25 | file | provenance | | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:44 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:45 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:36 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:46 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:47 | | test.rs:660:20:660:44 | ...::open | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | test.rs:660:20:660:62 | await ... [Ok] | provenance | | | test.rs:660:20:660:62 | await ... [Ok] | test.rs:660:20:660:63 | TryExpr | provenance | | | test.rs:660:20:660:63 | TryExpr | test.rs:660:9:660:16 | mut file | provenance | | -| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:46 | | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | test.rs:664:37:664:42 | [post] buffer | provenance | | | test.rs:664:37:664:42 | [post] buffer | test.rs:665:15:665:20 | buffer | provenance | | | test.rs:665:15:665:20 | buffer | test.rs:665:14:665:20 | &buffer | provenance | | | test.rs:671:13:671:18 | mut f1 | test.rs:673:22:673:23 | f1 | provenance | | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:44 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:45 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:36 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:46 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:47 | | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | test.rs:671:22:671:75 | await ... [Ok] | provenance | | | test.rs:671:22:671:75 | await ... [Ok] | test.rs:671:22:671:76 | TryExpr | provenance | | | test.rs:671:22:671:76 | TryExpr | test.rs:671:13:671:18 | mut f1 | provenance | | | test.rs:671:56:671:59 | open | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | -| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:46 | | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | test.rs:673:35:673:40 | [post] buffer | provenance | | | test.rs:673:35:673:40 | [post] buffer | test.rs:674:15:674:20 | buffer | provenance | | | test.rs:674:15:674:20 | buffer | test.rs:674:14:674:20 | &buffer | provenance | | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:55 | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:113 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:57 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:115 | | test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:9 | | test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | | | test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | | @@ -680,17 +688,17 @@ edges | test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:10 | | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | test.rs:707:26:707:106 | TryExpr | provenance | | | test.rs:707:26:707:106 | TryExpr | test.rs:707:13:707:22 | mut stream | provenance | | -| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:49 | -| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:59 | +| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:51 | +| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:61 | | test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | | -| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:103 | +| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:105 | | test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | | | test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | | | test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:119 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:65 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:120 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:121 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:121 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:67 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:122 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:123 | | test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:15 | | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | | | test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | | @@ -720,13 +728,15 @@ edges | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:45 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:36 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:47 | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | | | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | | | test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | | | test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | | -| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:86 | +| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:88 | | test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | | @@ -734,56 +744,60 @@ edges | test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:78 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:80 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:80 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:82 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | | test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | | | test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:44 | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:35 | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:46 | | test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | | | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | | | test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | | | test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | | -| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | +| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | +| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | | | test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | | | test_futures_io.rs:51:15:51:36 | buffer2[...] | test_futures_io.rs:51:14:51:36 | &... | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:55:11:55:17 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:59:40:59:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:69:37:69:43 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:39 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:41 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:45 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:36 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:47 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:39 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:41 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:27:132:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:42 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:43 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:44 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:45 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:27:139:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:40 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:41 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:42 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:43 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:27:146:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:46 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:47 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:48 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:49 | | test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | | -| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:87 | +| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:89 | | test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | | | test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | +| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:60:15:60:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | +| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) | test_futures_io.rs:59:13:59:22 | mut pinned | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:78 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:80 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:80 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:82 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | | test_futures_io.rs:59:40:59:46 | reader2 | test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:60:15:60:20 | pinned | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | | test_futures_io.rs:60:15:60:20 | pinned [&ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | @@ -796,11 +810,11 @@ edges | test_futures_io.rs:63:31:63:33 | buf | test_futures_io.rs:65:18:65:20 | buf | provenance | | | test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | test_futures_io.rs:64:18:64:24 | &buffer | provenance | | | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | -| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:78 | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:80 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:80 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:82 | | test_futures_io.rs:69:37:69:43 | reader2 | test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | provenance | | | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | provenance | | @@ -818,33 +832,35 @@ edges | test_futures_io.rs:90:26:90:47 | ...::new(...) | test_futures_io.rs:90:13:90:22 | mut pinned | provenance | | | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:78 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:80 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:80 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:82 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | | test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:44 | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:35 | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:46 | | test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | | | test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | | | test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | | -| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:44 | +| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | +| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | | | test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | | | test_futures_io.rs:108:15:108:36 | buffer2[...] | test_futures_io.rs:108:14:108:36 | &... | provenance | | | test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:114:15:114:20 | pinned | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | +| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:114:15:114:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:38 | +| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) | test_futures_io.rs:113:13:113:22 | mut pinned | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:78 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:80 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:79 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:80 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:82 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | | test_futures_io.rs:113:40:113:46 | reader2 | test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:114:15:114:20 | pinned | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | | test_futures_io.rs:114:15:114:20 | pinned [&ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | @@ -860,40 +876,40 @@ edges | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:125:22:125:45 | await ... [Ok] | provenance | | | test_futures_io.rs:125:22:125:45 | await ... [Ok] | test_futures_io.rs:125:22:125:46 | TryExpr | provenance | | | test_futures_io.rs:125:22:125:46 | TryExpr | test_futures_io.rs:125:13:125:18 | buffer | provenance | | -| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:42 | +| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:44 | | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | test_futures_io.rs:132:58:132:61 | [post] line | provenance | | | test_futures_io.rs:132:58:132:61 | [post] line | test_futures_io.rs:133:15:133:18 | line | provenance | | | test_futures_io.rs:133:15:133:18 | line | test_futures_io.rs:133:14:133:18 | &line | provenance | | -| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:40 | +| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:42 | | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | test_futures_io.rs:139:50:139:53 | [post] line | provenance | | | test_futures_io.rs:139:50:139:53 | [post] line | test_futures_io.rs:140:15:140:18 | line | provenance | | | test_futures_io.rs:140:15:140:18 | line | test_futures_io.rs:140:14:140:18 | &line | provenance | | -| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:46 | +| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:48 | | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | test_futures_io.rs:146:52:146:57 | [post] buffer | provenance | | | test_futures_io.rs:146:52:146:57 | [post] buffer | test_futures_io.rs:147:15:147:20 | buffer | provenance | | | test_futures_io.rs:147:15:147:20 | buffer | test_futures_io.rs:147:14:147:20 | &buffer | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:75 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:84 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:75 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:84 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:77 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:86 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:77 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:86 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:74 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:83 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:74 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:83 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:76 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:85 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:76 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:85 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:75 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:84 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:75 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:84 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:74 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:83 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:74 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:83 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:77 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:86 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:77 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:86 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:76 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:85 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:76 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:85 | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | nodes From 50bf9ae7563e671814820819269200980cb5a5b3 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Sun, 21 Sep 2025 20:44:46 -0400 Subject: [PATCH 164/219] Refactor RootApi class to use getAnImmediateDescendent for clarity --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 0999be945052..ce0b47502f96 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -26,7 +26,7 @@ module Grape { */ class RootApi extends GrapeApiClass { RootApi() { - not exists(GrapeApiClass parent | this != parent and this = parent.getADescendent()) + not this = any(GrapeApiClass parent).getAnImmediateDescendent() } } From 1bf6101967e860043695e2d93e10c34373ea8b39 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Sun, 21 Sep 2025 20:52:28 -0400 Subject: [PATCH 165/219] Remove redundant exclusion of base Grape::API module from GrapeApiClass - should not impact extracted application code --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index ce0b47502f96..4e178792572f 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -45,8 +45,7 @@ module Grape { */ class GrapeApiClass extends DataFlow::ClassNode { GrapeApiClass() { - this = grapeApiBaseClass().getADescendentModule() and - not exists(DataFlow::ModuleNode m | m = grapeApiBaseClass().asModule() | this = m) + this = grapeApiBaseClass().getADescendentModule() } /** From b2cc01c490115f1c1078318e45d328a1ddbedc7c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 22 Sep 2025 09:38:30 +0200 Subject: [PATCH 166/219] Rust: Visibility check for qualified path resolution --- .../lib/codeql/rust/internal/CachedStages.qll | 2 +- .../codeql/rust/internal/PathResolution.qll | 209 +++++++++++------- .../path-resolution/my2/my3/mod.rs | 2 +- .../path-resolution/path-resolution.expected | 1 + 4 files changed, 136 insertions(+), 78 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/CachedStages.qll b/rust/ql/lib/codeql/rust/internal/CachedStages.qll index cfd3d6905220..132b9ec8f7e8 100644 --- a/rust/ql/lib/codeql/rust/internal/CachedStages.qll +++ b/rust/ql/lib/codeql/rust/internal/CachedStages.qll @@ -117,7 +117,7 @@ module Stages { or exists(resolvePath(_)) or - exists(any(ItemNode i).getASuccessor(_, _)) + exists(any(ItemNode i).getASuccessor(_, _, _)) or exists(any(ImplOrTraitItemNode i).getASelfPath()) or diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 44e8b4522554..785dc2e43198 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -6,6 +6,7 @@ private import rust private import codeql.rust.elements.internal.generated.ParentChild private import codeql.rust.internal.CachedStages private import codeql.rust.frameworks.stdlib.Builtins as Builtins +private import codeql.util.Option private newtype TNamespace = TTypeNamespace() or @@ -78,6 +79,10 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki ) } +private module UseOption = Option; + +private class UseOption = UseOption::Option; + /** * Holds if `n` is superseded by an attribute macro expansion. That is, `n` is * an item or a transitive child of an item with an attribute macro expansion. @@ -229,40 +234,51 @@ abstract class ItemNode extends Locatable { result = this.(SourceFileItemNode).getSuper() } - /** Gets a successor named `name` of the given `kind`, if any. */ + /** + * Gets a successor named `name` of the given `kind`, if any. + * + * `useOpt` represents the `use` statement that brought the item into scope, + * if any. + */ cached - ItemNode getASuccessor(string name, SuccessorKind kind) { + ItemNode getASuccessor(string name, SuccessorKind kind, UseOption useOpt) { Stages::PathResolutionStage::ref() and sourceFileEdge(this, name, result) and - kind.isBoth() + kind.isBoth() and + useOpt.isNone() or - result = getAChildSuccessor(this, name, kind) + result = getAChildSuccessor(this, name, kind) and + useOpt.isNone() or - fileImportEdge(this, name, result, kind) + fileImportEdge(this, name, result, kind, useOpt) or - useImportEdge(this, name, result, kind) + useImportEdge(this, name, result, kind) and + useOpt.isNone() or - crateDefEdge(this, name, result, kind) + crateDefEdge(this, name, result, kind, useOpt) or crateDependencyEdge(this, name, result) and - kind.isInternal() + kind.isInternal() and + useOpt.isNone() or externCrateEdge(this, name, result) and - kind.isInternal() + kind.isInternal() and + useOpt.isNone() or // items made available through `use` are available to nodes that contain the `use` - exists(UseItemNode use | - use = this.getASuccessor(_, _) and - result = use.getASuccessor(name, kind) - ) + useOpt.asSome() = + any(UseItemNode use_ | + use_ = this.getASuccessor(_, _, _) and + result = use_.getASuccessor(name, kind, _) + ) or - exists(ExternCrateItemNode ec | result = ec.(ItemNode).getASuccessor(name, kind) | - ec = this.getASuccessor(_, _) + exists(ExternCrateItemNode ec | result = ec.(ItemNode).getASuccessor(name, kind, useOpt) | + ec = this.getASuccessor(_, _, _) or // if the extern crate appears in the crate root, then the crate name is also added // to the 'extern prelude', see https://doc.rust-lang.org/reference/items/extern-crates.html exists(Crate c | - ec = c.getSourceFile().(ItemNode).getASuccessor(_, _) and + ec = c.getSourceFile().(ItemNode).getASuccessor(_, _, _) and this = c.getASourceFile() ) ) @@ -270,20 +286,20 @@ abstract class ItemNode extends Locatable { // a trait has access to the associated items of its supertraits this = any(TraitItemNodeImpl trait | - result = trait.resolveABoundCand().getASuccessor(name, kind) and + result = trait.resolveABoundCand().getASuccessor(name, kind, useOpt) and kind.isExternalOrBoth() and result instanceof AssocItemNode and not trait.hasAssocItem(name) ) or // items made available by an implementation where `this` is the implementing type - typeImplEdge(this, _, name, kind, result) + typeImplEdge(this, _, name, kind, result, useOpt) or // trait items with default implementations made available in an implementation exists(ImplItemNodeImpl impl, ItemNode trait | this = impl and trait = impl.resolveTraitTyCand() and - result = trait.getASuccessor(name, kind) and + result = trait.getASuccessor(name, kind, useOpt) and result.(AssocItemNode).hasImplementation() and kind.isExternalOrBoth() and not impl.hasAssocItem(name) @@ -291,42 +307,52 @@ abstract class ItemNode extends Locatable { or // type parameters have access to the associated items of its bounds result = - this.(TypeParamItemNodeImpl).resolveABoundCand().getASuccessor(name, kind).(AssocItemNode) and + this.(TypeParamItemNodeImpl) + .resolveABoundCand() + .getASuccessor(name, kind, useOpt) + .(AssocItemNode) and kind.isExternalOrBoth() or result = this.(ImplTraitTypeReprItemNodeImpl) .resolveABoundCand() - .getASuccessor(name, kind) + .getASuccessor(name, kind, useOpt) .(AssocItemNode) and kind.isExternalOrBoth() or - result = this.(TypeAliasItemNodeImpl).resolveAliasCand().getASuccessor(name, kind) and + result = this.(TypeAliasItemNodeImpl).resolveAliasCand().getASuccessor(name, kind, useOpt) and kind.isExternalOrBoth() or name = "super" and - if this instanceof Module or this instanceof SourceFile - then ( - kind.isBoth() and result = this.getImmediateParentModule() - ) else ( - kind.isInternal() and result = this.getImmediateParentModule().getImmediateParentModule() + useOpt.isNone() and + ( + if this instanceof Module or this instanceof SourceFile + then ( + kind.isBoth() and result = this.getImmediateParentModule() + ) else ( + kind.isInternal() and result = this.getImmediateParentModule().getImmediateParentModule() + ) ) or name = "self" and - if - this instanceof Module or - this instanceof Enum or - this instanceof Struct or - this instanceof Crate - then ( - kind.isBoth() and - result = this - ) else ( - kind.isInternal() and - result = this.getImmediateParentModule() + useOpt.isNone() and + ( + if + this instanceof Module or + this instanceof Enum or + this instanceof Struct or + this instanceof Crate + then ( + kind.isBoth() and + result = this + ) else ( + kind.isInternal() and + result = this.getImmediateParentModule() + ) ) or kind.isInternal() and + useOpt.isNone() and ( preludeEdge(this, name, result) or @@ -350,7 +376,7 @@ abstract class ItemNode extends Locatable { pragma[nomagic] ItemNode getASuccessor(string name) { exists(SuccessorKind kind | - result = this.getASuccessor(name, kind) and + result = this.getASuccessor(name, kind, _) and kind.isExternalOrBoth() ) } @@ -1266,10 +1292,12 @@ predicate fileImport(Module m, SourceFile f) { * in scope under the name `name`. */ pragma[nomagic] -private predicate fileImportEdge(Module mod, string name, ItemNode item, SuccessorKind kind) { +private predicate fileImportEdge( + Module mod, string name, ItemNode item, SuccessorKind kind, UseOption useOpt +) { exists(SourceFileItemNode f | fileImport(mod, f) and - item = f.getASuccessor(name, kind) + item = f.getASuccessor(name, kind, useOpt) ) } @@ -1277,8 +1305,10 @@ private predicate fileImportEdge(Module mod, string name, ItemNode item, Success * Holds if crate `c` defines the item `i` named `name`. */ pragma[nomagic] -private predicate crateDefEdge(CrateItemNode c, string name, ItemNode i, SuccessorKind kind) { - i = c.getSourceFile().getASuccessor(name, kind) and +private predicate crateDefEdge( + CrateItemNode c, string name, ItemNode i, SuccessorKind kind, UseOption useOpt +) { + i = c.getSourceFile().getASuccessor(name, kind, useOpt) and kind.isExternalOrBoth() } @@ -1421,8 +1451,10 @@ private predicate unqualifiedPathLookup(ItemNode encl, string name, Namespace ns } pragma[nomagic] -private ItemNode getASuccessor(ItemNode pred, string name, Namespace ns, SuccessorKind kind) { - result = pred.getASuccessor(name, kind) and +private ItemNode getASuccessor( + ItemNode pred, string name, Namespace ns, SuccessorKind kind, UseOption useOpt +) { + result = pred.getASuccessor(name, kind, useOpt) and ns = result.getNamespace() } @@ -1457,7 +1489,7 @@ private predicate keywordLookup(ItemNode encl, string name, RelevantPath p) { pragma[nomagic] private ItemNode unqualifiedPathLookup(RelevantPath p, Namespace ns, SuccessorKind kind) { exists(ItemNode encl, string name | - result = getASuccessor(encl, name, ns, kind) and + result = getASuccessor(encl, name, ns, kind, _) and kind.isInternalOrBoth() | unqualifiedPathLookup(encl, name, ns, p) @@ -1486,7 +1518,7 @@ module TraitIsVisible { // lookup in an outer scope, but only if the trait is not declared in inner scope exists(ItemNode mid | traitLookup(mid, element, trait) and - not trait = mid.getASuccessor(_, _) and + not trait = mid.getASuccessor(_, _, _) and encl = getOuterScope(mid) ) } @@ -1494,7 +1526,9 @@ module TraitIsVisible { /** Holds if the trait `trait` is visible at `element`. */ pragma[nomagic] predicate traitIsVisible(Element element, Trait trait) { - exists(ItemNode encl | traitLookup(encl, element, trait) and trait = encl.getASuccessor(_, _)) + exists(ItemNode encl | + traitLookup(encl, element, trait) and trait = encl.getASuccessor(_, _, _) + ) } } @@ -1523,12 +1557,42 @@ private ItemNode resolvePathCandQualifier(RelevantPath qualifier, RelevantPath p name = path.getText() } -pragma[nomagic] -private Crate getCrate0(Locatable l) { result.getASourceFile().getFile() = l.getFile() } - bindingset[l] pragma[inline_late] -private Crate getCrate(Locatable l) { result = getCrate0(l) } +private ModuleLikeNode getAnAncestorModule(Locatable l) { + exists(ItemNode encl | + encl.getADescendant() = l and + result = encl.getImmediateParentModule*() + ) +} + +bindingset[i] +pragma[inline_late] +private ModuleLikeNode getParent(ItemNode i) { result = i.getImmediateParent() } + +/** + * Holds if resolving a qualified path at `l` to the item `i` with successor kind + * `kind` respects visibility. + * + * This is the case when either `i` is externally visible (e.g. a `pub` function), + * or when `i` (or the `use` statement, `useOpt`, that brought `i` into scope) is + * in an ancestor module of `l`. + */ +bindingset[l, i, kind, useOpt] +pragma[inline_late] +private predicate checkQualifiedVisibility( + Locatable l, ItemNode i, SuccessorKind kind, UseOption useOpt +) { + kind.isExternalOrBoth() + or + exists(AstNode n | getAnAncestorModule(l) = getParent(n) | + n = useOpt.asSome() + or + useOpt.isNone() and + n = i + ) and + not i instanceof TypeParam +} /** * Gets the item that `path` resolves to in `ns` when `qualifier` is the @@ -1538,19 +1602,10 @@ pragma[nomagic] private ItemNode resolvePathCandQualified( RelevantPath qualifier, ItemNode q, RelevantPath path, Namespace ns ) { - exists(string name, SuccessorKind kind | + exists(string name, SuccessorKind kind, UseOption useOpt | q = resolvePathCandQualifier(qualifier, path, name) and - result = getASuccessor(q, name, ns, kind) - | - kind.isExternalOrBoth() - or - // Non-public items are visible to paths in descendant modules of the declaring - // module; the declaration may happen via a `use` statement, where the item - // being used is _not_ itself in an ancestor module, and we currently don't track - // that information in `getASuccessor`. So, for simplicity, we allow for non-public - // items when the path and the item are in the same crate. - getCrate(path) = getCrate(result) and - not result instanceof TypeParam + result = getASuccessor(q, name, ns, kind, useOpt) and + checkQualifiedVisibility(path, result, kind, useOpt) ) } @@ -1561,6 +1616,8 @@ private predicate pathUsesNamespace(Path p, Namespace n) { p = any(PathExpr pe).getPath() or p = any(TupleStructPat tsp).getPath() + or + p = any(Meta m).getPath() ) or n.isType() and @@ -1621,7 +1678,7 @@ private ItemNode resolvePathCand(RelevantPath path) { private Trait getResolvePathTraitUsed(RelevantPath path, AssocItemNode node) { exists(TypeItemNode type, ImplItemNodeImpl impl | node = resolvePathCandQualified(_, type, path, _) and - typeImplEdge(type, impl, _, _, node) and + typeImplEdge(type, impl, _, _, node, _) and result = impl.resolveTraitTyCand() ) } @@ -1668,18 +1725,17 @@ private predicate isUseTreeSubPathUnqualified(UseTree tree, RelevantPath path, s pragma[nomagic] private ItemNode resolveUseTreeListItem(Use use, UseTree tree, RelevantPath path, SuccessorKind kind) { - kind.isExternalOrBoth() and - ( + exists(UseOption useOpt | checkQualifiedVisibility(use, result, kind, useOpt) | exists(UseTree midTree, ItemNode mid, string name | mid = resolveUseTreeListItem(use, midTree) and tree = midTree.getUseTreeList().getAUseTree() and isUseTreeSubPathUnqualified(tree, path, pragma[only_bind_into](name)) and - result = mid.getASuccessor(pragma[only_bind_into](name), kind) + result = mid.getASuccessor(pragma[only_bind_into](name), kind, useOpt) ) or exists(ItemNode q, string name | q = resolveUseTreeListItemQualifier(use, tree, path, name) and - result = q.getASuccessor(name, kind) + result = q.getASuccessor(name, kind, useOpt) ) ) } @@ -1711,10 +1767,10 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi not tree.hasUseTreeList() and if tree.isGlob() then - exists(ItemNode encl, Namespace ns, SuccessorKind kind1 | + exists(ItemNode encl, Namespace ns, SuccessorKind kind1, UseOption useOpt | encl.getADescendant() = use and - item = getASuccessor(used, name, ns, kind1) and - kind1.isExternalOrBoth() and + item = getASuccessor(used, name, ns, kind1, useOpt) and + checkQualifiedVisibility(use, item, kind1, useOpt) and // glob imports can be shadowed not declares(encl, ns, name) and not name = ["super", "self"] @@ -1764,10 +1820,11 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem * makes `assoc` available as `name` at `kind`. */ private predicate typeImplEdge( - TypeItemNode typeItem, ImplItemNodeImpl impl, string name, SuccessorKind kind, AssocItemNode assoc + TypeItemNode typeItem, ImplItemNodeImpl impl, string name, SuccessorKind kind, + AssocItemNode assoc, UseOption useOpt ) { typeItem = impl.resolveSelfTyCand() and - assoc = impl.getASuccessor(name, kind) and + assoc = impl.getASuccessor(name, kind, useOpt) and kind.isExternalOrBoth() } @@ -1839,12 +1896,12 @@ private module Debug { ItemNode debugGetASuccessor(ItemNode i, string name, SuccessorKind kind) { i = getRelevantLocatable() and - result = i.getASuccessor(name, kind) + result = i.getASuccessor(name, kind, _) } predicate debugFileImportEdge(Module mod, string name, ItemNode item, SuccessorKind kind) { mod = getRelevantLocatable() and - fileImportEdge(mod, name, item, kind) + fileImportEdge(mod, name, item, kind, _) } predicate debugFileImport(Module m, SourceFile f) { diff --git a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs index 1a98df1b560c..169aeed6b288 100644 --- a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs +++ b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs @@ -11,4 +11,4 @@ use super::nested6_f; // $ item=I116 use super::*; // $ item=mod.rs -trait MyTrait: Deref {} // $ MISSING: item=Deref +trait MyTrait: Deref {} // $ item=Deref diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 1a925a31cce0..9315016fe6a0 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -455,6 +455,7 @@ resolvePath | my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | | my2/my3/mod.rs:10:5:10:20 | ...::nested6_f | my2/nested2.rs:15:9:17:9 | fn f | | my2/my3/mod.rs:12:5:12:9 | super | my2/mod.rs:1:1:25:34 | SourceFile | +| my2/my3/mod.rs:14:16:14:20 | Deref | {EXTERNAL LOCATION} | trait Deref | | my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested | | my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g | | my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g | From b5b6f0600565148c64d278c2bec48ddd03926916 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 22 Sep 2025 09:38:43 +0200 Subject: [PATCH 167/219] Rust: Fix bad join ``` Evaluated relational algebra for predicate _PathResolution::CrateItemNode.getName/0#dispred#91b4dd6b_PathResolution::SourceFileItemNode#bd8f490__#antijoin_rhs@e84aee8k with tuple counts: 35406180 ~0% {3} r1 = JOIN PathResolution::SourceFileItemNode#bd8f4905 WITH `PathResolution::CrateItemNode.getName/0#dispred#91b4dd6b` CARTESIAN PRODUCT OUTPUT Lhs.0, Rhs.1, Rhs.0 8455 ~2% {4} | JOIN WITH `PathResolution::declaresDirectly/3#7d0350fb_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2, Lhs.1 3259 ~0% {3} | JOIN WITH num#PathResolution::TTypeNamespace#4897e416 ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3 return r1 ``` --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 785dc2e43198..a4b1e9bce988 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -1321,6 +1321,12 @@ private predicate crateDependency(SourceFileItemNode file, string name, CrateIte exists(CrateItemNode c | dep = c.(Crate).getDependency(name) | file = c.getASourceFile()) } +pragma[nomagic] +private predicate hasDeclOrDep(SourceFileItemNode file, string name) { + declaresDirectly(file, TTypeNamespace(), name) or + crateDependency(file, name, _) +} + /** * Holds if `file` depends on crate `dep` named `name`. */ @@ -1334,8 +1340,7 @@ private predicate crateDependencyEdge(SourceFileItemNode file, string name, Crat // a given file to its crate (for example, if the file is `mod` imported inside a macro that the // extractor is unable to expand). name = dep.getName() and - not declaresDirectly(file, TTypeNamespace(), name) and - not crateDependency(file, name, _) + not hasDeclOrDep(file, name) } private predicate useTreeDeclares(UseTree tree, string name) { From 78641b4dde6d2fc3c1c8cd23bce229f73da3cd0e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 22 Sep 2025 09:37:03 +0200 Subject: [PATCH 168/219] Rust: Reduce size of `unqualifiedPathLookup` --- .../codeql/rust/internal/PathResolution.qll | 58 ++++++++++++------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index a4b1e9bce988..efd614db63a4 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -1401,13 +1401,22 @@ class RelevantPath extends Path { name = this.getText() } + /** + * Holds if this is an unqualified path with the textual value `name` and + * enclosing item `encl`. + */ pragma[nomagic] - predicate isCratePath(string name, ItemNode encl) { - name = ["crate", "$crate"] and + predicate isUnqualified(string name, ItemNode encl) { this.isUnqualified(name) and encl.getADescendant() = this } + pragma[nomagic] + predicate isCratePath(string name, ItemNode encl) { + name = ["crate", "$crate"] and + this.isUnqualified(name, encl) + } + pragma[nomagic] predicate isDollarCrateQualifiedPath(string name) { this.getQualifier().(RelevantPath).isCratePath("$crate", _) and @@ -1432,26 +1441,26 @@ private ItemNode getOuterScope(ItemNode i) { } /** - * Holds if the unqualified path `p` references an item named `name`, and `name` - * may be looked up in the `ns` namespace inside enclosing item `encl`. + * Holds if _some_ unqualified path in `encl` references an item named `name`, + * and `name` may be looked up in the `ns` namespace inside `ancestor`. */ pragma[nomagic] -private predicate unqualifiedPathLookup(ItemNode encl, string name, Namespace ns, RelevantPath p) { +private predicate unqualifiedPathLookup(ItemNode ancestor, string name, Namespace ns, ItemNode encl) { // lookup in the immediately enclosing item - p.isUnqualified(name) and - encl.getADescendant() = p and + any(RelevantPath p).isUnqualified(name, encl) and + ancestor = encl and exists(ns) and not name = ["crate", "$crate", "super", "self"] or // lookup in an outer scope, but only if the item is not declared in inner scope exists(ItemNode mid | - unqualifiedPathLookup(mid, name, ns, p) and + unqualifiedPathLookup(mid, name, ns, encl) and not declares(mid, ns, name) and not ( name = "Self" and mid = any(ImplOrTraitItemNode i).getAnItemInSelfScope() ) and - encl = getOuterScope(mid) + ancestor = getOuterScope(mid) ) } @@ -1474,32 +1483,34 @@ private predicate sourceFileHasCratePathTc(ItemNode i1, ItemNode i2) = /** * Holds if the unqualified path `p` references a keyword item named `name`, and - * `name` may be looked up inside enclosing item `encl`. + * `name` may be looked up inside `ancestor`. */ pragma[nomagic] -private predicate keywordLookup(ItemNode encl, string name, RelevantPath p) { +private predicate keywordLookup(ItemNode ancestor, string name, RelevantPath p) { // For `($)crate`, jump directly to the root module exists(ItemNode i | p.isCratePath(name, i) | - encl instanceof SourceFile and - encl = i + ancestor instanceof SourceFile and + ancestor = i or - sourceFileHasCratePathTc(encl, i) + sourceFileHasCratePathTc(ancestor, i) ) or name = ["super", "self"] and - p.isUnqualified(name) and - encl.getADescendant() = p + p.isUnqualified(name, ancestor) } pragma[nomagic] private ItemNode unqualifiedPathLookup(RelevantPath p, Namespace ns, SuccessorKind kind) { - exists(ItemNode encl, string name | - result = getASuccessor(encl, name, ns, kind, _) and + exists(ItemNode ancestor, string name | + result = getASuccessor(ancestor, pragma[only_bind_into](name), ns, kind, _) and kind.isInternalOrBoth() | - unqualifiedPathLookup(encl, name, ns, p) + exists(ItemNode encl | + unqualifiedPathLookup(ancestor, name, ns, encl) and + p.isUnqualified(pragma[only_bind_into](name), encl) + ) or - keywordLookup(encl, name, p) and exists(ns) + keywordLookup(ancestor, name, p) and exists(ns) ) } @@ -1880,10 +1891,13 @@ private module Debug { } predicate debugUnqualifiedPathLookup( - RelevantPath p, string name, Namespace ns, ItemNode encl, string path + RelevantPath p, string name, Namespace ns, ItemNode ancestor, string path ) { p = getRelevantLocatable() and - unqualifiedPathLookup(encl, name, ns, p) and + exists(ItemNode encl | + unqualifiedPathLookup(encl, name, ns, ancestor) and + p.isUnqualified(name, encl) + ) and path = p.toStringDebug() } From cd807533f26b24f841124b6a4f6632149abcd5f7 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 10:55:47 +0200 Subject: [PATCH 169/219] Rust: Add tests for parameter in source model --- .../library-tests/dataflow/models/main.rs | 27 ++ .../dataflow/models/models.expected | 328 +++++++++--------- .../dataflow/models/models.ext.yml | 1 + 3 files changed, 192 insertions(+), 164 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 0430b6f8dff1..98a45655035b 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -249,6 +249,33 @@ fn test_enum_method_source() { } } +mod source_into_function { + use super::sink; + + // has a source model + fn pass_source(_i: i64, f: impl FnOnce(i64) -> A) -> A { + f(42) + } + + fn test_source_into_function() { + let a = |a| sink(a); // $ MISSING: hasValueFlow=1 + pass_source(1, a); + + pass_source(2, |a| { + sink(a); // $ MISSING: hasValueFlow=2 + }); + + fn f(a: i64) { + sink(a) // $ MISSING: hasValueFlow=3 + } + pass_source(3, f); + + pass_source(4, async move |a| { + sink(a); // $ MISSING: hasValueFlow=4 + }); + } +} + // has a sink model fn enum_sink(e: MyFieldEnum) {} diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index db7489809b85..c04b66068db6 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -230,70 +230,70 @@ edges | main.rs:247:9:247:37 | ...::C {...} [C] | main.rs:247:35:247:35 | i | provenance | | | main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | | main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | -| main.rs:256:9:256:9 | s | main.rs:257:41:257:41 | s | provenance | | -| main.rs:256:9:256:9 | s | main.rs:257:41:257:41 | s | provenance | | -| main.rs:256:13:256:22 | source(...) | main.rs:256:9:256:9 | s | provenance | | -| main.rs:256:13:256:22 | source(...) | main.rs:256:9:256:9 | s | provenance | | -| main.rs:257:15:257:43 | ...::C {...} [C] | main.rs:257:5:257:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:257:15:257:43 | ...::C {...} [C] | main.rs:257:5:257:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:257:41:257:41 | s | main.rs:257:15:257:43 | ...::C {...} [C] | provenance | | -| main.rs:257:41:257:41 | s | main.rs:257:15:257:43 | ...::C {...} [C] | provenance | | -| main.rs:262:9:262:9 | s | main.rs:263:39:263:39 | s | provenance | | -| main.rs:262:9:262:9 | s | main.rs:263:39:263:39 | s | provenance | | -| main.rs:262:13:262:22 | source(...) | main.rs:262:9:262:9 | s | provenance | | -| main.rs:262:13:262:22 | source(...) | main.rs:262:9:262:9 | s | provenance | | -| main.rs:263:9:263:9 | e [D] | main.rs:264:5:264:5 | e [D] | provenance | | -| main.rs:263:9:263:9 | e [D] | main.rs:264:5:264:5 | e [D] | provenance | | -| main.rs:263:13:263:41 | ...::D {...} [D] | main.rs:263:9:263:9 | e [D] | provenance | | -| main.rs:263:13:263:41 | ...::D {...} [D] | main.rs:263:9:263:9 | e [D] | provenance | | -| main.rs:263:39:263:39 | s | main.rs:263:13:263:41 | ...::D {...} [D] | provenance | | -| main.rs:263:39:263:39 | s | main.rs:263:13:263:41 | ...::D {...} [D] | provenance | | -| main.rs:264:5:264:5 | e [D] | main.rs:264:7:264:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:264:5:264:5 | e [D] | main.rs:264:7:264:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:273:9:273:9 | s | main.rs:274:10:274:10 | s | provenance | | -| main.rs:273:9:273:9 | s | main.rs:274:10:274:10 | s | provenance | | -| main.rs:273:13:273:25 | simple_source | main.rs:273:13:273:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:273:13:273:25 | simple_source | main.rs:273:13:273:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:273:13:273:29 | simple_source(...) | main.rs:273:9:273:9 | s | provenance | | -| main.rs:273:13:273:29 | simple_source(...) | main.rs:273:9:273:9 | s | provenance | | -| main.rs:281:9:281:9 | s | main.rs:282:17:282:17 | s | provenance | | -| main.rs:281:9:281:9 | s | main.rs:282:17:282:17 | s | provenance | | -| main.rs:281:13:281:22 | source(...) | main.rs:281:9:281:9 | s | provenance | | -| main.rs:281:13:281:22 | source(...) | main.rs:281:9:281:9 | s | provenance | | -| main.rs:282:17:282:17 | s | main.rs:282:5:282:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:282:17:282:17 | s | main.rs:282:5:282:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:290:5:290:14 | arg_source | main.rs:290:16:290:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:290:5:290:14 | arg_source | main.rs:290:16:290:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:290:16:290:16 | [post] i | main.rs:291:10:291:10 | i | provenance | | -| main.rs:290:16:290:16 | [post] i | main.rs:291:10:291:10 | i | provenance | | -| main.rs:343:9:343:10 | x1 | main.rs:344:10:344:11 | x1 | provenance | | -| main.rs:343:9:343:10 | x1 | main.rs:344:10:344:11 | x1 | provenance | | -| main.rs:343:14:343:23 | source(...) | main.rs:343:14:343:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:343:14:343:23 | source(...) | main.rs:343:14:343:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:343:14:343:30 | ... .max(...) | main.rs:343:9:343:10 | x1 | provenance | | -| main.rs:343:14:343:30 | ... .max(...) | main.rs:343:9:343:10 | x1 | provenance | | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | main.rs:354:10:354:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | main.rs:354:10:354:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | main.rs:346:9:346:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | main.rs:346:9:346:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | -| main.rs:347:17:347:26 | source(...) | main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:347:17:347:26 | source(...) | main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | main.rs:354:10:354:18 | x2.field1 | provenance | | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | main.rs:354:10:354:18 | x2.field1 | provenance | | -| main.rs:359:9:359:10 | x4 | main.rs:360:10:360:11 | x4 | provenance | | -| main.rs:359:9:359:10 | x4 | main.rs:360:10:360:11 | x4 | provenance | | -| main.rs:359:14:359:23 | source(...) | main.rs:359:14:359:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:359:14:359:23 | source(...) | main.rs:359:14:359:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:359:14:359:30 | ... .max(...) | main.rs:359:9:359:10 | x4 | provenance | | -| main.rs:359:14:359:30 | ... .max(...) | main.rs:359:9:359:10 | x4 | provenance | | -| main.rs:362:9:362:10 | x5 | main.rs:363:10:363:11 | x5 | provenance | | -| main.rs:362:14:362:23 | source(...) | main.rs:362:14:362:30 | ... .lt(...) | provenance | MaD:9 | -| main.rs:362:14:362:30 | ... .lt(...) | main.rs:362:9:362:10 | x5 | provenance | | -| main.rs:365:9:365:10 | x6 | main.rs:366:10:366:11 | x6 | provenance | | -| main.rs:365:14:365:23 | source(...) | main.rs:365:14:365:27 | ... < ... | provenance | MaD:9 | -| main.rs:365:14:365:27 | ... < ... | main.rs:365:9:365:10 | x6 | provenance | | +| main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | +| main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | +| main.rs:283:13:283:22 | source(...) | main.rs:283:9:283:9 | s | provenance | | +| main.rs:283:13:283:22 | source(...) | main.rs:283:9:283:9 | s | provenance | | +| main.rs:284:15:284:43 | ...::C {...} [C] | main.rs:284:5:284:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:284:15:284:43 | ...::C {...} [C] | main.rs:284:5:284:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:284:41:284:41 | s | main.rs:284:15:284:43 | ...::C {...} [C] | provenance | | +| main.rs:284:41:284:41 | s | main.rs:284:15:284:43 | ...::C {...} [C] | provenance | | +| main.rs:289:9:289:9 | s | main.rs:290:39:290:39 | s | provenance | | +| main.rs:289:9:289:9 | s | main.rs:290:39:290:39 | s | provenance | | +| main.rs:289:13:289:22 | source(...) | main.rs:289:9:289:9 | s | provenance | | +| main.rs:289:13:289:22 | source(...) | main.rs:289:9:289:9 | s | provenance | | +| main.rs:290:9:290:9 | e [D] | main.rs:291:5:291:5 | e [D] | provenance | | +| main.rs:290:9:290:9 | e [D] | main.rs:291:5:291:5 | e [D] | provenance | | +| main.rs:290:13:290:41 | ...::D {...} [D] | main.rs:290:9:290:9 | e [D] | provenance | | +| main.rs:290:13:290:41 | ...::D {...} [D] | main.rs:290:9:290:9 | e [D] | provenance | | +| main.rs:290:39:290:39 | s | main.rs:290:13:290:41 | ...::D {...} [D] | provenance | | +| main.rs:290:39:290:39 | s | main.rs:290:13:290:41 | ...::D {...} [D] | provenance | | +| main.rs:291:5:291:5 | e [D] | main.rs:291:7:291:10 | sink | provenance | MaD:1 Sink:MaD:1 | +| main.rs:291:5:291:5 | e [D] | main.rs:291:7:291:10 | sink | provenance | MaD:1 Sink:MaD:1 | +| main.rs:300:9:300:9 | s | main.rs:301:10:301:10 | s | provenance | | +| main.rs:300:9:300:9 | s | main.rs:301:10:301:10 | s | provenance | | +| main.rs:300:13:300:25 | simple_source | main.rs:300:13:300:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:300:13:300:25 | simple_source | main.rs:300:13:300:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:300:13:300:29 | simple_source(...) | main.rs:300:9:300:9 | s | provenance | | +| main.rs:300:13:300:29 | simple_source(...) | main.rs:300:9:300:9 | s | provenance | | +| main.rs:308:9:308:9 | s | main.rs:309:17:309:17 | s | provenance | | +| main.rs:308:9:308:9 | s | main.rs:309:17:309:17 | s | provenance | | +| main.rs:308:13:308:22 | source(...) | main.rs:308:9:308:9 | s | provenance | | +| main.rs:308:13:308:22 | source(...) | main.rs:308:9:308:9 | s | provenance | | +| main.rs:309:17:309:17 | s | main.rs:309:5:309:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:309:17:309:17 | s | main.rs:309:5:309:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:317:5:317:14 | arg_source | main.rs:317:16:317:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:317:5:317:14 | arg_source | main.rs:317:16:317:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:317:16:317:16 | [post] i | main.rs:318:10:318:10 | i | provenance | | +| main.rs:317:16:317:16 | [post] i | main.rs:318:10:318:10 | i | provenance | | +| main.rs:370:9:370:10 | x1 | main.rs:371:10:371:11 | x1 | provenance | | +| main.rs:370:9:370:10 | x1 | main.rs:371:10:371:11 | x1 | provenance | | +| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:8 | +| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:8 | +| main.rs:370:14:370:30 | ... .max(...) | main.rs:370:9:370:10 | x1 | provenance | | +| main.rs:370:14:370:30 | ... .max(...) | main.rs:370:9:370:10 | x1 | provenance | | +| main.rs:373:9:373:10 | x2 [MyStruct.field1] | main.rs:381:10:381:11 | x2 [MyStruct.field1] | provenance | | +| main.rs:373:9:373:10 | x2 [MyStruct.field1] | main.rs:381:10:381:11 | x2 [MyStruct.field1] | provenance | | +| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | main.rs:373:9:373:10 | x2 [MyStruct.field1] | provenance | | +| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | main.rs:373:9:373:10 | x2 [MyStruct.field1] | provenance | | +| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | +| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | +| main.rs:374:17:374:26 | source(...) | main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:374:17:374:26 | source(...) | main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:381:10:381:11 | x2 [MyStruct.field1] | main.rs:381:10:381:18 | x2.field1 | provenance | | +| main.rs:381:10:381:11 | x2 [MyStruct.field1] | main.rs:381:10:381:18 | x2.field1 | provenance | | +| main.rs:386:9:386:10 | x4 | main.rs:387:10:387:11 | x4 | provenance | | +| main.rs:386:9:386:10 | x4 | main.rs:387:10:387:11 | x4 | provenance | | +| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:8 | +| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:8 | +| main.rs:386:14:386:30 | ... .max(...) | main.rs:386:9:386:10 | x4 | provenance | | +| main.rs:386:14:386:30 | ... .max(...) | main.rs:386:9:386:10 | x4 | provenance | | +| main.rs:389:9:389:10 | x5 | main.rs:390:10:390:11 | x5 | provenance | | +| main.rs:389:14:389:23 | source(...) | main.rs:389:14:389:30 | ... .lt(...) | provenance | MaD:9 | +| main.rs:389:14:389:30 | ... .lt(...) | main.rs:389:9:389:10 | x5 | provenance | | +| main.rs:392:9:392:10 | x6 | main.rs:393:10:393:11 | x6 | provenance | | +| main.rs:392:14:392:23 | source(...) | main.rs:392:14:392:27 | ... < ... | provenance | MaD:9 | +| main.rs:392:14:392:27 | ... < ... | main.rs:392:9:392:10 | x6 | provenance | | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -533,88 +533,88 @@ nodes | main.rs:247:35:247:35 | i | semmle.label | i | | main.rs:247:47:247:47 | i | semmle.label | i | | main.rs:247:47:247:47 | i | semmle.label | i | -| main.rs:256:9:256:9 | s | semmle.label | s | -| main.rs:256:9:256:9 | s | semmle.label | s | -| main.rs:256:13:256:22 | source(...) | semmle.label | source(...) | -| main.rs:256:13:256:22 | source(...) | semmle.label | source(...) | -| main.rs:257:5:257:13 | enum_sink | semmle.label | enum_sink | -| main.rs:257:5:257:13 | enum_sink | semmle.label | enum_sink | -| main.rs:257:15:257:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:257:15:257:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:257:41:257:41 | s | semmle.label | s | -| main.rs:257:41:257:41 | s | semmle.label | s | -| main.rs:262:9:262:9 | s | semmle.label | s | -| main.rs:262:9:262:9 | s | semmle.label | s | -| main.rs:262:13:262:22 | source(...) | semmle.label | source(...) | -| main.rs:262:13:262:22 | source(...) | semmle.label | source(...) | -| main.rs:263:9:263:9 | e [D] | semmle.label | e [D] | -| main.rs:263:9:263:9 | e [D] | semmle.label | e [D] | -| main.rs:263:13:263:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:263:13:263:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:263:39:263:39 | s | semmle.label | s | -| main.rs:263:39:263:39 | s | semmle.label | s | -| main.rs:264:5:264:5 | e [D] | semmle.label | e [D] | -| main.rs:264:5:264:5 | e [D] | semmle.label | e [D] | -| main.rs:264:7:264:10 | sink | semmle.label | sink | -| main.rs:264:7:264:10 | sink | semmle.label | sink | -| main.rs:273:9:273:9 | s | semmle.label | s | -| main.rs:273:9:273:9 | s | semmle.label | s | -| main.rs:273:13:273:25 | simple_source | semmle.label | simple_source | -| main.rs:273:13:273:25 | simple_source | semmle.label | simple_source | -| main.rs:273:13:273:29 | simple_source(...) | semmle.label | simple_source(...) | -| main.rs:273:13:273:29 | simple_source(...) | semmle.label | simple_source(...) | -| main.rs:274:10:274:10 | s | semmle.label | s | -| main.rs:274:10:274:10 | s | semmle.label | s | -| main.rs:281:9:281:9 | s | semmle.label | s | -| main.rs:281:9:281:9 | s | semmle.label | s | -| main.rs:281:13:281:22 | source(...) | semmle.label | source(...) | -| main.rs:281:13:281:22 | source(...) | semmle.label | source(...) | -| main.rs:282:5:282:15 | simple_sink | semmle.label | simple_sink | -| main.rs:282:5:282:15 | simple_sink | semmle.label | simple_sink | -| main.rs:282:17:282:17 | s | semmle.label | s | -| main.rs:282:17:282:17 | s | semmle.label | s | -| main.rs:290:5:290:14 | arg_source | semmle.label | arg_source | -| main.rs:290:5:290:14 | arg_source | semmle.label | arg_source | -| main.rs:290:16:290:16 | [post] i | semmle.label | [post] i | -| main.rs:290:16:290:16 | [post] i | semmle.label | [post] i | -| main.rs:291:10:291:10 | i | semmle.label | i | -| main.rs:291:10:291:10 | i | semmle.label | i | -| main.rs:343:9:343:10 | x1 | semmle.label | x1 | -| main.rs:343:9:343:10 | x1 | semmle.label | x1 | -| main.rs:343:14:343:23 | source(...) | semmle.label | source(...) | -| main.rs:343:14:343:23 | source(...) | semmle.label | source(...) | -| main.rs:343:14:343:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:343:14:343:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:344:10:344:11 | x1 | semmle.label | x1 | -| main.rs:344:10:344:11 | x1 | semmle.label | x1 | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:347:17:347:26 | source(...) | semmle.label | source(...) | -| main.rs:347:17:347:26 | source(...) | semmle.label | source(...) | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:354:10:354:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:354:10:354:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:359:9:359:10 | x4 | semmle.label | x4 | -| main.rs:359:9:359:10 | x4 | semmle.label | x4 | -| main.rs:359:14:359:23 | source(...) | semmle.label | source(...) | -| main.rs:359:14:359:23 | source(...) | semmle.label | source(...) | -| main.rs:359:14:359:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:359:14:359:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:360:10:360:11 | x4 | semmle.label | x4 | -| main.rs:360:10:360:11 | x4 | semmle.label | x4 | -| main.rs:362:9:362:10 | x5 | semmle.label | x5 | -| main.rs:362:14:362:23 | source(...) | semmle.label | source(...) | -| main.rs:362:14:362:30 | ... .lt(...) | semmle.label | ... .lt(...) | -| main.rs:363:10:363:11 | x5 | semmle.label | x5 | -| main.rs:365:9:365:10 | x6 | semmle.label | x6 | -| main.rs:365:14:365:23 | source(...) | semmle.label | source(...) | -| main.rs:365:14:365:27 | ... < ... | semmle.label | ... < ... | -| main.rs:366:10:366:11 | x6 | semmle.label | x6 | +| main.rs:283:9:283:9 | s | semmle.label | s | +| main.rs:283:9:283:9 | s | semmle.label | s | +| main.rs:283:13:283:22 | source(...) | semmle.label | source(...) | +| main.rs:283:13:283:22 | source(...) | semmle.label | source(...) | +| main.rs:284:5:284:13 | enum_sink | semmle.label | enum_sink | +| main.rs:284:5:284:13 | enum_sink | semmle.label | enum_sink | +| main.rs:284:15:284:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:284:15:284:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:284:41:284:41 | s | semmle.label | s | +| main.rs:284:41:284:41 | s | semmle.label | s | +| main.rs:289:9:289:9 | s | semmle.label | s | +| main.rs:289:9:289:9 | s | semmle.label | s | +| main.rs:289:13:289:22 | source(...) | semmle.label | source(...) | +| main.rs:289:13:289:22 | source(...) | semmle.label | source(...) | +| main.rs:290:9:290:9 | e [D] | semmle.label | e [D] | +| main.rs:290:9:290:9 | e [D] | semmle.label | e [D] | +| main.rs:290:13:290:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:290:13:290:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:290:39:290:39 | s | semmle.label | s | +| main.rs:290:39:290:39 | s | semmle.label | s | +| main.rs:291:5:291:5 | e [D] | semmle.label | e [D] | +| main.rs:291:5:291:5 | e [D] | semmle.label | e [D] | +| main.rs:291:7:291:10 | sink | semmle.label | sink | +| main.rs:291:7:291:10 | sink | semmle.label | sink | +| main.rs:300:9:300:9 | s | semmle.label | s | +| main.rs:300:9:300:9 | s | semmle.label | s | +| main.rs:300:13:300:25 | simple_source | semmle.label | simple_source | +| main.rs:300:13:300:25 | simple_source | semmle.label | simple_source | +| main.rs:300:13:300:29 | simple_source(...) | semmle.label | simple_source(...) | +| main.rs:300:13:300:29 | simple_source(...) | semmle.label | simple_source(...) | +| main.rs:301:10:301:10 | s | semmle.label | s | +| main.rs:301:10:301:10 | s | semmle.label | s | +| main.rs:308:9:308:9 | s | semmle.label | s | +| main.rs:308:9:308:9 | s | semmle.label | s | +| main.rs:308:13:308:22 | source(...) | semmle.label | source(...) | +| main.rs:308:13:308:22 | source(...) | semmle.label | source(...) | +| main.rs:309:5:309:15 | simple_sink | semmle.label | simple_sink | +| main.rs:309:5:309:15 | simple_sink | semmle.label | simple_sink | +| main.rs:309:17:309:17 | s | semmle.label | s | +| main.rs:309:17:309:17 | s | semmle.label | s | +| main.rs:317:5:317:14 | arg_source | semmle.label | arg_source | +| main.rs:317:5:317:14 | arg_source | semmle.label | arg_source | +| main.rs:317:16:317:16 | [post] i | semmle.label | [post] i | +| main.rs:317:16:317:16 | [post] i | semmle.label | [post] i | +| main.rs:318:10:318:10 | i | semmle.label | i | +| main.rs:318:10:318:10 | i | semmle.label | i | +| main.rs:370:9:370:10 | x1 | semmle.label | x1 | +| main.rs:370:9:370:10 | x1 | semmle.label | x1 | +| main.rs:370:14:370:23 | source(...) | semmle.label | source(...) | +| main.rs:370:14:370:23 | source(...) | semmle.label | source(...) | +| main.rs:370:14:370:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:370:14:370:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:371:10:371:11 | x1 | semmle.label | x1 | +| main.rs:371:10:371:11 | x1 | semmle.label | x1 | +| main.rs:373:9:373:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:373:9:373:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | +| main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | +| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:374:17:374:26 | source(...) | semmle.label | source(...) | +| main.rs:374:17:374:26 | source(...) | semmle.label | source(...) | +| main.rs:381:10:381:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:381:10:381:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:381:10:381:18 | x2.field1 | semmle.label | x2.field1 | +| main.rs:381:10:381:18 | x2.field1 | semmle.label | x2.field1 | +| main.rs:386:9:386:10 | x4 | semmle.label | x4 | +| main.rs:386:9:386:10 | x4 | semmle.label | x4 | +| main.rs:386:14:386:23 | source(...) | semmle.label | source(...) | +| main.rs:386:14:386:23 | source(...) | semmle.label | source(...) | +| main.rs:386:14:386:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:386:14:386:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:387:10:387:11 | x4 | semmle.label | x4 | +| main.rs:387:10:387:11 | x4 | semmle.label | x4 | +| main.rs:389:9:389:10 | x5 | semmle.label | x5 | +| main.rs:389:14:389:23 | source(...) | semmle.label | source(...) | +| main.rs:389:14:389:30 | ... .lt(...) | semmle.label | ... .lt(...) | +| main.rs:390:10:390:11 | x5 | semmle.label | x5 | +| main.rs:392:9:392:10 | x6 | semmle.label | x6 | +| main.rs:392:14:392:23 | source(...) | semmle.label | source(...) | +| main.rs:392:14:392:27 | ... < ... | semmle.label | ... < ... | +| main.rs:393:10:393:11 | x6 | semmle.label | x6 | subpaths | main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | main.rs:198:13:198:24 | apply(...) | | main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | main.rs:198:13:198:24 | apply(...) | @@ -658,21 +658,21 @@ invalidSpecComponent | main.rs:239:47:239:47 | i | main.rs:236:13:236:23 | enum_source | main.rs:239:47:239:47 | i | $@ | main.rs:236:13:236:23 | enum_source | enum_source | | main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | | main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | -| main.rs:257:5:257:13 | enum_sink | main.rs:256:13:256:22 | source(...) | main.rs:257:5:257:13 | enum_sink | $@ | main.rs:256:13:256:22 | source(...) | source(...) | -| main.rs:257:5:257:13 | enum_sink | main.rs:256:13:256:22 | source(...) | main.rs:257:5:257:13 | enum_sink | $@ | main.rs:256:13:256:22 | source(...) | source(...) | -| main.rs:264:7:264:10 | sink | main.rs:262:13:262:22 | source(...) | main.rs:264:7:264:10 | sink | $@ | main.rs:262:13:262:22 | source(...) | source(...) | -| main.rs:264:7:264:10 | sink | main.rs:262:13:262:22 | source(...) | main.rs:264:7:264:10 | sink | $@ | main.rs:262:13:262:22 | source(...) | source(...) | -| main.rs:274:10:274:10 | s | main.rs:273:13:273:25 | simple_source | main.rs:274:10:274:10 | s | $@ | main.rs:273:13:273:25 | simple_source | simple_source | -| main.rs:274:10:274:10 | s | main.rs:273:13:273:25 | simple_source | main.rs:274:10:274:10 | s | $@ | main.rs:273:13:273:25 | simple_source | simple_source | -| main.rs:282:5:282:15 | simple_sink | main.rs:281:13:281:22 | source(...) | main.rs:282:5:282:15 | simple_sink | $@ | main.rs:281:13:281:22 | source(...) | source(...) | -| main.rs:282:5:282:15 | simple_sink | main.rs:281:13:281:22 | source(...) | main.rs:282:5:282:15 | simple_sink | $@ | main.rs:281:13:281:22 | source(...) | source(...) | -| main.rs:291:10:291:10 | i | main.rs:290:5:290:14 | arg_source | main.rs:291:10:291:10 | i | $@ | main.rs:290:5:290:14 | arg_source | arg_source | -| main.rs:291:10:291:10 | i | main.rs:290:5:290:14 | arg_source | main.rs:291:10:291:10 | i | $@ | main.rs:290:5:290:14 | arg_source | arg_source | -| main.rs:344:10:344:11 | x1 | main.rs:343:14:343:23 | source(...) | main.rs:344:10:344:11 | x1 | $@ | main.rs:343:14:343:23 | source(...) | source(...) | -| main.rs:344:10:344:11 | x1 | main.rs:343:14:343:23 | source(...) | main.rs:344:10:344:11 | x1 | $@ | main.rs:343:14:343:23 | source(...) | source(...) | -| main.rs:354:10:354:18 | x2.field1 | main.rs:347:17:347:26 | source(...) | main.rs:354:10:354:18 | x2.field1 | $@ | main.rs:347:17:347:26 | source(...) | source(...) | -| main.rs:354:10:354:18 | x2.field1 | main.rs:347:17:347:26 | source(...) | main.rs:354:10:354:18 | x2.field1 | $@ | main.rs:347:17:347:26 | source(...) | source(...) | -| main.rs:360:10:360:11 | x4 | main.rs:359:14:359:23 | source(...) | main.rs:360:10:360:11 | x4 | $@ | main.rs:359:14:359:23 | source(...) | source(...) | -| main.rs:360:10:360:11 | x4 | main.rs:359:14:359:23 | source(...) | main.rs:360:10:360:11 | x4 | $@ | main.rs:359:14:359:23 | source(...) | source(...) | -| main.rs:363:10:363:11 | x5 | main.rs:362:14:362:23 | source(...) | main.rs:363:10:363:11 | x5 | $@ | main.rs:362:14:362:23 | source(...) | source(...) | -| main.rs:366:10:366:11 | x6 | main.rs:365:14:365:23 | source(...) | main.rs:366:10:366:11 | x6 | $@ | main.rs:365:14:365:23 | source(...) | source(...) | +| main.rs:284:5:284:13 | enum_sink | main.rs:283:13:283:22 | source(...) | main.rs:284:5:284:13 | enum_sink | $@ | main.rs:283:13:283:22 | source(...) | source(...) | +| main.rs:284:5:284:13 | enum_sink | main.rs:283:13:283:22 | source(...) | main.rs:284:5:284:13 | enum_sink | $@ | main.rs:283:13:283:22 | source(...) | source(...) | +| main.rs:291:7:291:10 | sink | main.rs:289:13:289:22 | source(...) | main.rs:291:7:291:10 | sink | $@ | main.rs:289:13:289:22 | source(...) | source(...) | +| main.rs:291:7:291:10 | sink | main.rs:289:13:289:22 | source(...) | main.rs:291:7:291:10 | sink | $@ | main.rs:289:13:289:22 | source(...) | source(...) | +| main.rs:301:10:301:10 | s | main.rs:300:13:300:25 | simple_source | main.rs:301:10:301:10 | s | $@ | main.rs:300:13:300:25 | simple_source | simple_source | +| main.rs:301:10:301:10 | s | main.rs:300:13:300:25 | simple_source | main.rs:301:10:301:10 | s | $@ | main.rs:300:13:300:25 | simple_source | simple_source | +| main.rs:309:5:309:15 | simple_sink | main.rs:308:13:308:22 | source(...) | main.rs:309:5:309:15 | simple_sink | $@ | main.rs:308:13:308:22 | source(...) | source(...) | +| main.rs:309:5:309:15 | simple_sink | main.rs:308:13:308:22 | source(...) | main.rs:309:5:309:15 | simple_sink | $@ | main.rs:308:13:308:22 | source(...) | source(...) | +| main.rs:318:10:318:10 | i | main.rs:317:5:317:14 | arg_source | main.rs:318:10:318:10 | i | $@ | main.rs:317:5:317:14 | arg_source | arg_source | +| main.rs:318:10:318:10 | i | main.rs:317:5:317:14 | arg_source | main.rs:318:10:318:10 | i | $@ | main.rs:317:5:317:14 | arg_source | arg_source | +| main.rs:371:10:371:11 | x1 | main.rs:370:14:370:23 | source(...) | main.rs:371:10:371:11 | x1 | $@ | main.rs:370:14:370:23 | source(...) | source(...) | +| main.rs:371:10:371:11 | x1 | main.rs:370:14:370:23 | source(...) | main.rs:371:10:371:11 | x1 | $@ | main.rs:370:14:370:23 | source(...) | source(...) | +| main.rs:381:10:381:18 | x2.field1 | main.rs:374:17:374:26 | source(...) | main.rs:381:10:381:18 | x2.field1 | $@ | main.rs:374:17:374:26 | source(...) | source(...) | +| main.rs:381:10:381:18 | x2.field1 | main.rs:374:17:374:26 | source(...) | main.rs:381:10:381:18 | x2.field1 | $@ | main.rs:374:17:374:26 | source(...) | source(...) | +| main.rs:387:10:387:11 | x4 | main.rs:386:14:386:23 | source(...) | main.rs:387:10:387:11 | x4 | $@ | main.rs:386:14:386:23 | source(...) | source(...) | +| main.rs:387:10:387:11 | x4 | main.rs:386:14:386:23 | source(...) | main.rs:387:10:387:11 | x4 | $@ | main.rs:386:14:386:23 | source(...) | source(...) | +| main.rs:390:10:390:11 | x5 | main.rs:389:14:389:23 | source(...) | main.rs:390:10:390:11 | x5 | $@ | main.rs:389:14:389:23 | source(...) | source(...) | +| main.rs:393:10:393:11 | x6 | main.rs:392:14:392:23 | source(...) | main.rs:393:10:393:11 | x6 | $@ | main.rs:392:14:392:23 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index eb51ac64f50f..52342e880224 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -7,6 +7,7 @@ extensions: - ["main::enum_source", "ReturnValue.Field[main::MyFieldEnum::D::field_d]", "test-source", "manual"] - ["::source", "ReturnValue.Field[main::MyFieldEnum::C::field_c]", "test-source", "manual"] - ["main::arg_source", "Argument[0]", "test-source", "manual"] + - ["main::source_into_function::pass_source", "Argument[1].Parameter[0]", "test-source", "manual"] - addsTo: pack: codeql/rust-all extensible: sinkModel From 05a58323c1eca9a8c929209a17965ecbb6a88b43 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 18 Sep 2025 10:02:25 +0200 Subject: [PATCH 170/219] Rust: Add Warp test to request forgery query tests --- .../query-tests/security/CWE-918/Cargo.lock | 73 +++++++++++++++++++ .../query-tests/security/CWE-918/options.yml | 1 + .../security/CWE-918/request_forgery_tests.rs | 20 +++++ 3 files changed, 94 insertions(+) diff --git a/rust/ql/test/query-tests/security/CWE-918/Cargo.lock b/rust/ql/test/query-tests/security/CWE-918/Cargo.lock index 83c077741bc7..d00e99a29095 100644 --- a/rust/ql/test/query-tests/security/CWE-918/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-918/Cargo.lock @@ -714,6 +714,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -851,6 +861,26 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -1132,6 +1162,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -1337,6 +1373,7 @@ dependencies = [ "poem", "reqwest", "tokio", + "warp", ] [[package]] @@ -1501,6 +1538,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1547,6 +1585,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-ident" version = "1.0.18" @@ -1598,6 +1642,35 @@ dependencies = [ "try-lock", ] +[[package]] +name = "warp" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0" +dependencies = [ + "bytes", + "futures-util", + "headers", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" diff --git a/rust/ql/test/query-tests/security/CWE-918/options.yml b/rust/ql/test/query-tests/security/CWE-918/options.yml index 078784053e14..6c6a1517497f 100644 --- a/rust/ql/test/query-tests/security/CWE-918/options.yml +++ b/rust/ql/test/query-tests/security/CWE-918/options.yml @@ -3,3 +3,4 @@ qltest_dependencies: - reqwest = { version = "0.12.23", features = ["blocking", "json"] } - tokio = { version = "1.0", features = ["full"] } - poem = { version = "3.1.12", features = ["server"] } + - warp = { version = "0.4.2", features = ["server"] } diff --git a/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs b/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs index d9f2e1ae5c4f..ab99d73db439 100644 --- a/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs +++ b/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs @@ -54,6 +54,26 @@ mod poem_server { } } +mod warp_test { + use warp::Filter; + + #[tokio::main] + #[rustfmt::skip] + async fn test_warp() { + // A route with parameter and `and_then` + let map_route = + warp::path::param().and_then(async |a: String| // $ MISSING: Source=a + { + + let response = reqwest::get(&a).await; // $ MISSING: Alert[rust/request-forgery]=a + match response { + Ok(resp) => Ok(resp.text().await.unwrap_or_default()), + Err(_err) => Err(warp::reject::not_found()), + } + }); + } +} + /// Start the Poem web application pub fn start() { tokio::runtime::Runtime::new() From 014c27ee8a501f31dadb133f1df0ef80f3141b97 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 11:13:16 +0200 Subject: [PATCH 171/219] Rust: Discard sources with spaces in inline flow tests --- rust/ql/lib/utils/test/InlineFlowTest.qll | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/rust/ql/lib/utils/test/InlineFlowTest.qll b/rust/ql/lib/utils/test/InlineFlowTest.qll index 80abf21e1f5f..9ba92f7757be 100644 --- a/rust/ql/lib/utils/test/InlineFlowTest.qll +++ b/rust/ql/lib/utils/test/InlineFlowTest.qll @@ -34,10 +34,9 @@ private module FlowTestImpl implements InputSig { result = src.asExpr().(CallExprCfgNode).getArgument(0).toString() or sourceNode(src, _) and - exists(CallExprBase call | - call = src.(Node::FlowSummaryNode).getSourceElement().getCall() and - result = call.getArgList().getArg(0).toString() - ) + result = src.(Node::FlowSummaryNode).getSourceElement().getCall().getArg(0).toString() and + // Don't use the result if it contains spaces + not result.matches("% %") } bindingset[src, sink] From 265e8b3623d3554777821cc068f17db4626bb015 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 13:56:48 +0200 Subject: [PATCH 172/219] Shared: Pass SummaryComponentStack to isSource and getSourceType --- .../rust/dataflow/internal/DataFlowImpl.qll | 3 +- .../dataflow/internal/FlowSummaryImpl.qll | 45 +- .../library-tests/dataflow/models/main.rs | 8 +- .../dataflow/models/models.expected | 163 ++-- .../dataflow/sources/InlineFlow.expected | 897 +++++++++--------- .../dataflow/sources/web_frameworks.rs | 8 +- .../security/CWE-918/RequestForgery.expected | 37 +- .../security/CWE-918/request_forgery_tests.rs | 4 +- .../dataflow/internal/FlowSummaryImpl.qll | 40 +- 9 files changed, 686 insertions(+), 519 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 1d7a3d49cf4d..4c252dfcd0f0 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -508,7 +508,8 @@ module RustDataFlow implements InputSig { */ predicate jumpStep(Node node1, Node node2) { FlowSummaryImpl::Private::Steps::summaryJumpStep(node1.(FlowSummaryNode).getSummaryNode(), - node2.(FlowSummaryNode).getSummaryNode()) + node2.(FlowSummaryNode).getSummaryNode()) or + FlowSummaryImpl::Private::Steps::sourceJumpStep(node1.(FlowSummaryNode).getSummaryNode(), node2) } pragma[nomagic] diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index 997f27e51e18..129bd468e012 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -6,7 +6,10 @@ private import rust private import codeql.dataflow.internal.FlowSummaryImpl private import codeql.dataflow.internal.AccessPathSyntax as AccessPath private import codeql.rust.dataflow.internal.DataFlowImpl +private import codeql.rust.internal.PathResolution private import codeql.rust.dataflow.FlowSummary +private import codeql.rust.dataflow.Ssa +private import codeql.rust.controlflow.CfgNodes private import Content module Input implements InputSig { @@ -133,16 +136,44 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.asCallCfgNode().getCall().getStaticTarget() = sc } - RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { - sc = Impl::Private::SummaryComponent::return(_) and + /** Gets the argument of `source` described by `sc`, if any. */ + private Expr getSourceNodeArgument(Input::SourceBase source, Impl::Private::SummaryComponent sc) { + exists(ArgumentPosition pos | + sc = Impl::Private::SummaryComponent::argument(pos) and + result = pos.getArgument(source.getCall()) + ) + } + + /** Get the callable that `expr` refers to. */ + private Callable getCallable(Expr expr) { + result = resolvePath(expr.(PathExpr).getPath()).(Function) + or + result = expr.(ClosureExpr) + or + // The expression is an SSA read of an assignment of a closure + exists(Ssa::Definition def, ExprCfgNode value | + def.getARead().getAstNode() = expr and + def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(value) and + result = value.getExpr().(ClosureExpr) + ) + } + + RustDataFlow::DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { + result.asCfgScope() = source.getEnclosingCfgScope() + } + + RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { + s.head() = Impl::Private::SummaryComponent::return(_) and result.asExpr().getExpr() = source.getCall() or - exists(CallExprBase call, Expr arg, ArgumentPosition pos | - result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr().getExpr() = arg and - sc = Impl::Private::SummaryComponent::argument(pos) and - call = source.getCall() and - arg = pos.getArgument(call) + exists(ArgumentPosition pos, Expr arg | + s.head() = Impl::Private::SummaryComponent::parameter(pos) and + arg = getSourceNodeArgument(source, s.tail().head()) and + result.asParameter() = getCallable(arg).getParam(pos.getPosition()) ) + or + result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr().getExpr() = + getSourceNodeArgument(source, s.head()) } RustDataFlow::Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 98a45655035b..7daa883996f2 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -258,20 +258,20 @@ mod source_into_function { } fn test_source_into_function() { - let a = |a| sink(a); // $ MISSING: hasValueFlow=1 + let a = |a| sink(a); // $ hasValueFlow=1 pass_source(1, a); pass_source(2, |a| { - sink(a); // $ MISSING: hasValueFlow=2 + sink(a); // $ hasValueFlow=2 }); fn f(a: i64) { - sink(a) // $ MISSING: hasValueFlow=3 + sink(a) // $ hasValueFlow=3 } pass_source(3, f); pass_source(4, async move |a| { - sink(a); // $ MISSING: hasValueFlow=4 + sink(a); // $ hasValueFlow=4 }); } } diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index c04b66068db6..2918e5c3c394 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -6,22 +6,23 @@ models | 5 | Source: main::arg_source; Argument[0]; test-source | | 6 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | | 7 | Source: main::simple_source; ReturnValue; test-source | -| 8 | Summary: <_ as core::cmp::Ord>::max; Argument[self]; ReturnValue; value | -| 9 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 10 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 11 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 12 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 13 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 14 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 15 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 16 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 17 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 18 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 19 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 20 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 21 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 22 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 23 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 8 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | +| 9 | Summary: <_ as core::cmp::Ord>::max; Argument[self]; ReturnValue; value | +| 10 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | +| 11 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 12 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 13 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 14 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 15 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 16 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 17 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 18 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 19 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 20 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 21 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 22 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 23 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 24 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -31,7 +32,7 @@ edges | main.rs:16:19:16:19 | s | main.rs:16:10:16:20 | identity(...) | provenance | QL | | main.rs:25:9:25:9 | s | main.rs:26:17:26:17 | s | provenance | | | main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | s | provenance | | -| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:12 | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:13 | | main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | | main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | | main.rs:40:13:40:21 | source(...) | main.rs:40:9:40:9 | s | provenance | | @@ -42,8 +43,8 @@ edges | main.rs:41:14:41:28 | ...::A(...) [A] | main.rs:41:9:41:10 | e1 [A] | provenance | | | main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | | main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:18 | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:18 | +| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:19 | +| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:19 | | main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | | main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | | main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | s | provenance | | @@ -52,8 +53,8 @@ edges | main.rs:54:9:54:10 | e1 [B] | main.rs:55:11:55:12 | e1 [B] | provenance | | | main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | | main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:23 | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:23 | +| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:24 | +| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:24 | | main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | | main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | | main.rs:57:9:57:23 | ...::B(...) [B] | main.rs:57:22:57:22 | i | provenance | | @@ -70,8 +71,8 @@ edges | main.rs:73:14:73:42 | ...::C {...} [C] | main.rs:73:9:73:10 | e1 [C] | provenance | | | main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | | main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:17 | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:17 | +| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:18 | +| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:18 | | main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | | main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | | main.rs:85:13:85:21 | source(...) | main.rs:85:9:85:9 | s | provenance | | @@ -80,8 +81,8 @@ edges | main.rs:86:9:86:10 | e1 [D] | main.rs:87:11:87:12 | e1 [D] | provenance | | | main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | | main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:22 | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:22 | +| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:23 | +| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:23 | | main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | | main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | | main.rs:89:9:89:37 | ...::D {...} [D] | main.rs:89:35:89:35 | i | provenance | | @@ -98,8 +99,8 @@ edges | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | main.rs:105:9:105:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:15 | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:15 | +| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:16 | +| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:16 | | main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | | main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | | main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | | @@ -108,16 +109,16 @@ edges | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:20 | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:20 | +| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:21 | +| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:21 | | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | | main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | | main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | | main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | | main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:13 | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:13 | +| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:14 | +| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:14 | | main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | | main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | | main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | | @@ -128,8 +129,8 @@ edges | main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | | | main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | | main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:19 | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:19 | +| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:20 | +| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:20 | | main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | | main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | | main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | | @@ -142,8 +143,8 @@ edges | main.rs:160:13:160:18 | TupleExpr [tuple.0] | main.rs:160:9:160:9 | t [tuple.0] | provenance | | | main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | | main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:16 | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:16 | +| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:17 | +| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:17 | | main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | | main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | | main.rs:172:13:172:22 | source(...) | main.rs:172:9:172:9 | s | provenance | | @@ -152,8 +153,8 @@ edges | main.rs:173:9:173:9 | t [tuple.1] | main.rs:175:10:175:10 | t [tuple.1] | provenance | | | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:21 | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:21 | +| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:22 | +| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:22 | | main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | | main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | | main.rs:187:9:187:9 | s | main.rs:192:11:192:11 | s | provenance | | @@ -162,8 +163,8 @@ edges | main.rs:187:13:187:22 | source(...) | main.rs:187:9:187:9 | s | provenance | | | main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | | main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:10 | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:10 | +| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:11 | +| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:11 | | main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | | main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | provenance | | @@ -172,14 +173,14 @@ edges | main.rs:198:9:198:9 | t | main.rs:199:10:199:10 | t | provenance | | | main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | | main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:10 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:10 | | main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | | main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:10 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:10 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:12 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:12 | | main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | | main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:12 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:12 | | main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | | main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | | main.rs:203:13:203:22 | source(...) | main.rs:203:9:203:9 | s | provenance | | @@ -190,10 +191,10 @@ edges | main.rs:205:9:205:9 | t | main.rs:206:10:206:10 | t | provenance | | | main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | | main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:10 | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:10 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:10 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:10 | +| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:11 | +| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:11 | +| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:11 | +| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:11 | | main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | | main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | | main.rs:215:13:215:22 | source(...) | main.rs:215:9:215:9 | s | provenance | | @@ -204,8 +205,8 @@ edges | main.rs:216:13:216:31 | get_async_number(...) [future] | main.rs:216:13:216:37 | await ... | provenance | | | main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | | main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:14 | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:14 | +| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:15 | +| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:15 | | main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | | main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | | main.rs:236:13:236:23 | enum_source | main.rs:236:13:236:27 | enum_source(...) [D] | provenance | Src:MaD:6 | @@ -230,6 +231,22 @@ edges | main.rs:247:9:247:37 | ...::C {...} [C] | main.rs:247:35:247:35 | i | provenance | | | main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | | main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | +| main.rs:261:18:261:18 | ... | main.rs:261:26:261:26 | a | provenance | | +| main.rs:261:18:261:18 | ... | main.rs:261:26:261:26 | a | provenance | | +| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:264:25:264:25 | ... | main.rs:265:18:265:18 | a | provenance | | +| main.rs:264:25:264:25 | ... | main.rs:265:18:265:18 | a | provenance | | +| main.rs:268:14:268:19 | ...: i64 | main.rs:269:18:269:18 | a | provenance | | +| main.rs:268:14:268:19 | ...: i64 | main.rs:269:18:269:18 | a | provenance | | +| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 MaD:8 | +| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 MaD:8 | +| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:273:36:273:36 | ... | main.rs:274:18:274:18 | a | provenance | | +| main.rs:273:36:273:36 | ... | main.rs:274:18:274:18 | a | provenance | | | main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | | main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | | main.rs:283:13:283:22 | source(...) | main.rs:283:9:283:9 | s | provenance | | @@ -268,31 +285,31 @@ edges | main.rs:317:16:317:16 | [post] i | main.rs:318:10:318:10 | i | provenance | | | main.rs:370:9:370:10 | x1 | main.rs:371:10:371:11 | x1 | provenance | | | main.rs:370:9:370:10 | x1 | main.rs:371:10:371:11 | x1 | provenance | | -| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:8 | +| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:370:14:370:23 | source(...) | main.rs:370:14:370:30 | ... .max(...) | provenance | MaD:9 | | main.rs:370:14:370:30 | ... .max(...) | main.rs:370:9:370:10 | x1 | provenance | | | main.rs:370:14:370:30 | ... .max(...) | main.rs:370:9:370:10 | x1 | provenance | | | main.rs:373:9:373:10 | x2 [MyStruct.field1] | main.rs:381:10:381:11 | x2 [MyStruct.field1] | provenance | | | main.rs:373:9:373:10 | x2 [MyStruct.field1] | main.rs:381:10:381:11 | x2 [MyStruct.field1] | provenance | | | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | main.rs:373:9:373:10 | x2 [MyStruct.field1] | provenance | | | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | main.rs:373:9:373:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | -| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | +| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | +| main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | main.rs:373:14:380:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | | main.rs:374:17:374:26 | source(...) | main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:374:17:374:26 | source(...) | main.rs:373:15:376:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:381:10:381:11 | x2 [MyStruct.field1] | main.rs:381:10:381:18 | x2.field1 | provenance | | | main.rs:381:10:381:11 | x2 [MyStruct.field1] | main.rs:381:10:381:18 | x2.field1 | provenance | | | main.rs:386:9:386:10 | x4 | main.rs:387:10:387:11 | x4 | provenance | | | main.rs:386:9:386:10 | x4 | main.rs:387:10:387:11 | x4 | provenance | | -| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:8 | +| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:386:14:386:23 | source(...) | main.rs:386:14:386:30 | ... .max(...) | provenance | MaD:9 | | main.rs:386:14:386:30 | ... .max(...) | main.rs:386:9:386:10 | x4 | provenance | | | main.rs:386:14:386:30 | ... .max(...) | main.rs:386:9:386:10 | x4 | provenance | | | main.rs:389:9:389:10 | x5 | main.rs:390:10:390:11 | x5 | provenance | | -| main.rs:389:14:389:23 | source(...) | main.rs:389:14:389:30 | ... .lt(...) | provenance | MaD:9 | +| main.rs:389:14:389:23 | source(...) | main.rs:389:14:389:30 | ... .lt(...) | provenance | MaD:10 | | main.rs:389:14:389:30 | ... .lt(...) | main.rs:389:9:389:10 | x5 | provenance | | | main.rs:392:9:392:10 | x6 | main.rs:393:10:393:11 | x6 | provenance | | -| main.rs:392:14:392:23 | source(...) | main.rs:392:14:392:27 | ... < ... | provenance | MaD:9 | +| main.rs:392:14:392:23 | source(...) | main.rs:392:14:392:27 | ... < ... | provenance | MaD:10 | | main.rs:392:14:392:27 | ... < ... | main.rs:392:9:392:10 | x6 | provenance | | nodes | main.rs:15:9:15:9 | s | semmle.label | s | @@ -533,6 +550,30 @@ nodes | main.rs:247:35:247:35 | i | semmle.label | i | | main.rs:247:47:247:47 | i | semmle.label | i | | main.rs:247:47:247:47 | i | semmle.label | i | +| main.rs:261:18:261:18 | ... | semmle.label | ... | +| main.rs:261:18:261:18 | ... | semmle.label | ... | +| main.rs:261:26:261:26 | a | semmle.label | a | +| main.rs:261:26:261:26 | a | semmle.label | a | +| main.rs:262:9:262:19 | pass_source | semmle.label | pass_source | +| main.rs:262:9:262:19 | pass_source | semmle.label | pass_source | +| main.rs:264:9:264:19 | pass_source | semmle.label | pass_source | +| main.rs:264:9:264:19 | pass_source | semmle.label | pass_source | +| main.rs:264:25:264:25 | ... | semmle.label | ... | +| main.rs:264:25:264:25 | ... | semmle.label | ... | +| main.rs:265:18:265:18 | a | semmle.label | a | +| main.rs:265:18:265:18 | a | semmle.label | a | +| main.rs:268:14:268:19 | ...: i64 | semmle.label | ...: i64 | +| main.rs:268:14:268:19 | ...: i64 | semmle.label | ...: i64 | +| main.rs:269:18:269:18 | a | semmle.label | a | +| main.rs:269:18:269:18 | a | semmle.label | a | +| main.rs:271:9:271:19 | pass_source | semmle.label | pass_source | +| main.rs:271:9:271:19 | pass_source | semmle.label | pass_source | +| main.rs:273:9:273:19 | pass_source | semmle.label | pass_source | +| main.rs:273:9:273:19 | pass_source | semmle.label | pass_source | +| main.rs:273:36:273:36 | ... | semmle.label | ... | +| main.rs:273:36:273:36 | ... | semmle.label | ... | +| main.rs:274:18:274:18 | a | semmle.label | a | +| main.rs:274:18:274:18 | a | semmle.label | a | | main.rs:283:9:283:9 | s | semmle.label | s | | main.rs:283:9:283:9 | s | semmle.label | s | | main.rs:283:13:283:22 | source(...) | semmle.label | source(...) | @@ -658,6 +699,14 @@ invalidSpecComponent | main.rs:239:47:239:47 | i | main.rs:236:13:236:23 | enum_source | main.rs:239:47:239:47 | i | $@ | main.rs:236:13:236:23 | enum_source | enum_source | | main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | | main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | +| main.rs:261:26:261:26 | a | main.rs:262:9:262:19 | pass_source | main.rs:261:26:261:26 | a | $@ | main.rs:262:9:262:19 | pass_source | pass_source | +| main.rs:261:26:261:26 | a | main.rs:262:9:262:19 | pass_source | main.rs:261:26:261:26 | a | $@ | main.rs:262:9:262:19 | pass_source | pass_source | +| main.rs:265:18:265:18 | a | main.rs:264:9:264:19 | pass_source | main.rs:265:18:265:18 | a | $@ | main.rs:264:9:264:19 | pass_source | pass_source | +| main.rs:265:18:265:18 | a | main.rs:264:9:264:19 | pass_source | main.rs:265:18:265:18 | a | $@ | main.rs:264:9:264:19 | pass_source | pass_source | +| main.rs:269:18:269:18 | a | main.rs:271:9:271:19 | pass_source | main.rs:269:18:269:18 | a | $@ | main.rs:271:9:271:19 | pass_source | pass_source | +| main.rs:269:18:269:18 | a | main.rs:271:9:271:19 | pass_source | main.rs:269:18:269:18 | a | $@ | main.rs:271:9:271:19 | pass_source | pass_source | +| main.rs:274:18:274:18 | a | main.rs:273:9:273:19 | pass_source | main.rs:274:18:274:18 | a | $@ | main.rs:273:9:273:19 | pass_source | pass_source | +| main.rs:274:18:274:18 | a | main.rs:273:9:273:19 | pass_source | main.rs:274:18:274:18 | a | $@ | main.rs:273:9:273:19 | pass_source | pass_source | | main.rs:284:5:284:13 | enum_sink | main.rs:283:13:283:22 | source(...) | main.rs:284:5:284:13 | enum_sink | $@ | main.rs:283:13:283:22 | source(...) | source(...) | | main.rs:284:5:284:13 | enum_sink | main.rs:283:13:283:22 | source(...) | main.rs:284:5:284:13 | enum_sink | $@ | main.rs:283:13:283:22 | source(...) | source(...) | | main.rs:291:7:291:10 | sink | main.rs:289:13:289:22 | source(...) | main.rs:291:7:291:10 | sink | $@ | main.rs:289:13:289:22 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index af0e73ca2c08..e0855a5d8548 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -1,142 +1,145 @@ models -| 1 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 2 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 3 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 4 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 5 | Source: ::file_name; ReturnValue; file | -| 6 | Source: ::path; ReturnValue; file | -| 7 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 8 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 9 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 10 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 11 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 12 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 13 | Source: ::file_name; ReturnValue; file | -| 14 | Source: ::path; ReturnValue; file | -| 15 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 16 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 17 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 18 | Source: std::env::args; ReturnValue.Element; commandargs | -| 19 | Source: std::env::args_os; ReturnValue.Element; commandargs | -| 20 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | -| 21 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | -| 22 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | -| 23 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | -| 24 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | -| 25 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 26 | Source: std::fs::read; ReturnValue; file | -| 27 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 28 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 29 | Source: std::fs::read_to_string; ReturnValue; file | -| 30 | Source: std::io::stdio::stdin; ReturnValue; stdin | -| 31 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 32 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 33 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 34 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | -| 35 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 36 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 37 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 38 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | -| 39 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 40 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 42 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 43 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 44 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 45 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 46 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 47 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 48 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 49 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 50 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | -| 51 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | -| 52 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | -| 53 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | -| 54 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 55 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | -| 56 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | -| 57 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 58 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 59 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 60 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 61 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 63 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | -| 64 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 65 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 66 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | -| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | -| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 72 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 73 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 74 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 75 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 76 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 77 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 78 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 79 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 80 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 81 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | -| 82 | Summary: ::new; Argument[0]; ReturnValue; value | -| 83 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 84 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 85 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 86 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 87 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 88 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 89 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 90 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 91 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 92 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 93 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 94 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 95 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 96 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 97 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 98 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 99 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | -| 100 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 101 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 102 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | -| 103 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 104 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 105 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 106 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 107 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 108 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | -| 109 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | -| 110 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 111 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 112 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 113 | Summary: ::lock; Argument[self]; ReturnValue; taint | -| 114 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 115 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 116 | Summary: ::as_path; Argument[self]; ReturnValue; value | -| 117 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 118 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 119 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 120 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 121 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | -| 122 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | -| 123 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +| 1 | Source: <_ as warp::filter::Filter>::and_then; Argument[0].Parameter[0..7]; remote | +| 2 | Source: <_ as warp::filter::Filter>::map; Argument[0].Parameter[0..7]; remote | +| 3 | Source: <_ as warp::filter::Filter>::then; Argument[0].Parameter[0..7]; remote | +| 4 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 5 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 6 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 7 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 8 | Source: ::file_name; ReturnValue; file | +| 9 | Source: ::path; ReturnValue; file | +| 10 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 11 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 12 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 13 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 14 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 15 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 16 | Source: ::file_name; ReturnValue; file | +| 17 | Source: ::path; ReturnValue; file | +| 18 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 19 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 20 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 21 | Source: std::env::args; ReturnValue.Element; commandargs | +| 22 | Source: std::env::args_os; ReturnValue.Element; commandargs | +| 23 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 24 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 25 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | +| 26 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | +| 27 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | +| 28 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 29 | Source: std::fs::read; ReturnValue; file | +| 30 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 31 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 32 | Source: std::fs::read_to_string; ReturnValue; file | +| 33 | Source: std::io::stdio::stdin; ReturnValue; stdin | +| 34 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 35 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 36 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 37 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | +| 38 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 39 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 40 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 41 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | +| 42 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 43 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 44 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 45 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 46 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 47 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 48 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 49 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 50 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 51 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 52 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 53 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | +| 54 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | +| 55 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | +| 56 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | +| 57 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 58 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | +| 59 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | +| 60 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 61 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 62 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 63 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 64 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 65 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 66 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | +| 67 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 68 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 69 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | +| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | +| 72 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 73 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 74 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 75 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 76 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 77 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 78 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 79 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 80 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 81 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 82 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 83 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 84 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | +| 85 | Summary: ::new; Argument[0]; ReturnValue; value | +| 86 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 87 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 88 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 89 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 90 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 91 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 92 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 93 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 94 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 95 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 96 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 97 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 98 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 99 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 100 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 101 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 102 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | +| 103 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 104 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 105 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | +| 106 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 107 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 108 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 109 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 110 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 111 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | +| 112 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | +| 113 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 114 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 115 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 116 | Summary: ::lock; Argument[self]; ReturnValue; taint | +| 117 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 118 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 119 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 120 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 121 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 122 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 123 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 124 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | +| 125 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | +| 126 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | edges -| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:23 | -| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:24 | +| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:26 | +| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:27 | | test.rs:11:9:11:12 | var1 | test.rs:14:10:14:13 | var1 | provenance | | -| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:83 | +| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:26 | +| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:86 | | test.rs:11:16:11:59 | ... .expect(...) | test.rs:11:9:11:12 | var1 | provenance | | | test.rs:12:9:12:12 | var2 | test.rs:15:10:15:13 | var2 | provenance | | -| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:24 | -| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:79 | +| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:27 | +| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:82 | | test.rs:12:16:12:48 | ... .unwrap() | test.rs:12:9:12:12 | var2 | provenance | | | test.rs:29:9:29:12 | args [element] | test.rs:30:20:30:23 | args [element] | provenance | | | test.rs:29:9:29:12 | args [element] | test.rs:31:17:31:20 | args [element] | provenance | | -| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:18 | -| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:38 | +| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:21 | +| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:41 | | test.rs:29:29:29:54 | ... .collect() [element] | test.rs:29:9:29:12 | args [element] | provenance | | | test.rs:30:9:30:15 | my_path [&ref] | test.rs:36:10:36:16 | my_path | provenance | | | test.rs:30:19:30:26 | &... [&ref] | test.rs:30:9:30:15 | my_path [&ref] | provenance | | @@ -147,89 +150,89 @@ edges | test.rs:31:17:31:20 | args [element] | test.rs:31:17:31:23 | args[1] | provenance | | | test.rs:31:17:31:23 | args[1] | test.rs:31:16:31:23 | &... [&ref] | provenance | | | test.rs:32:9:32:12 | arg2 | test.rs:38:10:38:13 | arg2 | provenance | | -| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:18 | -| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:39 | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:79 | +| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:21 | +| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:42 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:82 | | test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:9:32:12 | arg2 | provenance | | | test.rs:33:9:33:12 | arg3 | test.rs:39:10:39:13 | arg3 | provenance | | -| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:19 | -| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:39 | -| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:79 | +| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:22 | +| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:42 | +| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:82 | | test.rs:33:16:33:50 | ... .unwrap() | test.rs:33:9:33:12 | arg3 | provenance | | | test.rs:34:9:34:12 | arg4 | test.rs:40:10:40:13 | arg4 | provenance | | -| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:18 | -| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:39 | -| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:79 | -| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:87 | -| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:84 | +| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:21 | +| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:42 | +| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:82 | +| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:90 | +| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:87 | | test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | | | test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | | -| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:18 | +| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:21 | | test.rs:42:16:42:31 | ...::args(...) [element] | test.rs:42:9:42:11 | arg | provenance | | | test.rs:46:9:46:11 | arg | test.rs:47:14:47:16 | arg | provenance | | -| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:19 | +| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:22 | | test.rs:46:16:46:34 | ...::args_os(...) [element] | test.rs:46:9:46:11 | arg | provenance | | | test.rs:52:9:52:11 | dir | test.rs:56:10:56:12 | dir | provenance | | -| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:20 | -| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:83 | +| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:23 | +| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:86 | | test.rs:52:15:52:54 | ... .expect(...) | test.rs:52:9:52:11 | dir | provenance | | | test.rs:53:9:53:11 | exe | test.rs:57:10:57:12 | exe | provenance | | -| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:21 | -| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:83 | +| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:24 | +| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:86 | | test.rs:53:15:53:54 | ... .expect(...) | test.rs:53:9:53:11 | exe | provenance | | | test.rs:54:9:54:12 | home | test.rs:58:10:58:13 | home | provenance | | -| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:22 | -| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:78 | +| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:25 | +| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:81 | | test.rs:54:16:54:52 | ... .expect(...) | test.rs:54:9:54:12 | home | provenance | | | test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | | -| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | +| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | | test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | | -| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:94 | +| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:97 | | test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | | | test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | | | test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | | -| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | -| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:84 | -| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:94 | -| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:84 | +| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | +| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:87 | +| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:97 | +| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:87 | | test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | | | test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | | -| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | -| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:84 | -| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:95 | -| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:84 | +| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | +| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:87 | +| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:98 | +| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:87 | | test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | | | test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | | -| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:16 | -| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:84 | -| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:93 | -| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:84 | +| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | +| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:87 | +| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:96 | +| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:87 | | test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | | | test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | | -| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | +| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:20 | | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | | | test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | | -| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:92 | +| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:95 | | test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | | | test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | | | test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | | | test.rs:77:9:77:22 | remote_string6 | test.rs:78:10:78:23 | remote_string6 | provenance | | -| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | +| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:20 | | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | | | test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | | -| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:90 | +| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:93 | | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | | | test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | | | test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | | -| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:91 | -| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:91 | -| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:17 | +| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:94 | +| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:94 | +| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:20 | | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | | | test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | | | test.rs:80:24:80:57 | TryExpr | test.rs:80:9:80:20 | mut request1 | provenance | | | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | test.rs:81:10:81:31 | await ... [Ok, Some] | provenance | | | test.rs:81:10:81:31 | await ... [Ok, Some] | test.rs:81:10:81:32 | TryExpr [Some] | provenance | | -| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:79 | +| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:82 | | test.rs:82:15:82:25 | Some(...) [Some] | test.rs:82:20:82:24 | chunk | provenance | | | test.rs:82:20:82:24 | chunk | test.rs:83:14:83:18 | chunk | provenance | | | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | test.rs:82:29:82:50 | await ... [Ok, Some] | provenance | | @@ -240,129 +243,129 @@ edges | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | test.rs:114:24:114:57 | await ... [Ok] | provenance | | | test.rs:114:24:114:57 | await ... [Ok] | test.rs:114:24:114:58 | TryExpr | provenance | | | test.rs:114:24:114:58 | TryExpr | test.rs:114:13:114:20 | response | provenance | | -| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:4 | +| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:115:15:115:22 | response | test.rs:115:14:115:22 | &response | provenance | | | test.rs:121:9:121:20 | mut response | test.rs:122:11:122:18 | response | provenance | | | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | test.rs:121:24:121:57 | await ... [Ok] | provenance | | | test.rs:121:24:121:57 | await ... [Ok] | test.rs:121:24:121:58 | TryExpr | provenance | | | test.rs:121:24:121:58 | TryExpr | test.rs:121:9:121:20 | mut response | provenance | | -| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:4 | +| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | | -| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:107 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:106 | +| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:110 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:109 | | test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | | | test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | | -| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:59 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:110 | +| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:62 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:113 | | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | | | test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | | | test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | | -| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:112 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:111 | +| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:115 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:114 | | test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | | | test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | | -| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:113 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:114 | +| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:116 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:117 | | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | | | test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | | | test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | | -| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:109 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:58 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:108 | +| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:112 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:61 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:111 | | test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | | | test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:236:15:236:20 | buffer | test.rs:236:14:236:20 | &buffer | provenance | | -| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:54 | +| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:57 | | test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | | -| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:103 | +| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:106 | | test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | | -| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:105 | +| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:108 | | test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | | | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | | | test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | | | test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | | -| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:104 | +| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:107 | | test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | | -| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:105 | +| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:108 | | test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | | | test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | | | test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | | -| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:51 | +| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:54 | | test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | | -| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:105 | +| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:108 | | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | | | test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | | | test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | | -| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:52 | +| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:55 | | test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | | -| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:105 | +| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:108 | | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | | | test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | | -| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:102 | -| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:102 | -| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:53 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:105 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:105 | +| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:56 | | test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | | -| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:105 | -| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:79 | -| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:84 | +| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:108 | +| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:82 | +| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:87 | | test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | | -| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:84 | +| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:87 | | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | test.rs:275:19:275:29 | Some(...) [Some, Ok] | provenance | | -| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:50 | +| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:53 | | test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | | -| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:30 MaD:30 | -| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:105 | +| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | +| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:108 | | test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | | -| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:67 | -| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:70 | +| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | | test.rs:309:25:309:42 | ...::stdin(...) | test.rs:309:13:309:21 | mut stdin | provenance | | | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | test.rs:311:38:311:43 | [post] buffer | provenance | | | test.rs:311:38:311:43 | [post] buffer | test.rs:312:15:312:20 | buffer | provenance | | | test.rs:312:15:312:20 | buffer | test.rs:312:14:312:20 | &buffer | provenance | | -| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:73 | -| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:76 | +| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | | test.rs:316:25:316:42 | ...::stdin(...) | test.rs:316:13:316:21 | mut stdin | provenance | | | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | test.rs:318:45:318:50 | [post] buffer | provenance | | | test.rs:318:45:318:50 | [post] buffer | test.rs:319:15:319:20 | buffer | provenance | | | test.rs:319:15:319:20 | buffer | test.rs:319:14:319:20 | &buffer | provenance | | -| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:74 | -| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:77 | +| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | | test.rs:323:25:323:42 | ...::stdin(...) | test.rs:323:13:323:21 | mut stdin | provenance | | | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | test.rs:325:48:325:53 | [post] buffer | provenance | | | test.rs:325:48:325:53 | [post] buffer | test.rs:326:15:326:20 | buffer | provenance | | | test.rs:326:15:326:20 | buffer | test.rs:326:14:326:20 | &buffer | provenance | | -| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:69 | -| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:72 | +| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | | test.rs:330:25:330:42 | ...::stdin(...) | test.rs:330:13:330:21 | mut stdin | provenance | | | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | test.rs:332:31:332:36 | [post] buffer | provenance | | | test.rs:332:31:332:36 | [post] buffer | test.rs:333:15:333:20 | buffer | provenance | | | test.rs:333:15:333:20 | buffer | test.rs:333:14:333:20 | &buffer | provenance | | -| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:75 | -| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:71 | -| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:70 | -| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:72 | -| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:78 | +| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:74 | +| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:73 | +| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:75 | +| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | | test.rs:337:25:337:42 | ...::stdin(...) | test.rs:337:13:337:21 | mut stdin | provenance | | | test.rs:338:13:338:14 | v1 | test.rs:342:14:342:15 | v1 | provenance | | | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | test.rs:338:18:338:38 | await ... [Ok] | provenance | | @@ -380,150 +383,150 @@ edges | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | test.rs:341:18:341:42 | await ... [Ok] | provenance | | | test.rs:341:18:341:42 | await ... [Ok] | test.rs:341:18:341:43 | TryExpr | provenance | | | test.rs:341:18:341:43 | TryExpr | test.rs:341:13:341:14 | v4 | provenance | | -| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:68 | -| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | +| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:71 | +| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | | test.rs:349:25:349:42 | ...::stdin(...) | test.rs:349:13:349:21 | mut stdin | provenance | | | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | test.rs:351:29:351:34 | [post] buffer | provenance | | | test.rs:351:29:351:34 | [post] buffer | test.rs:352:15:352:20 | buffer | provenance | | | test.rs:352:15:352:20 | buffer | test.rs:352:14:352:20 | &buffer | provenance | | -| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:62 | +| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:65 | | test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | | -| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:118 | +| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | +| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:121 | | test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | | | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | | | test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | | | test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | | | test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | | -| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:117 | +| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:120 | | test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | | -| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:118 | +| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | +| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:121 | | test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | | | test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | | | test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | | -| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:64 | +| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:67 | | test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | | -| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:118 | +| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | +| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:121 | | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | | | test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | | | test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | | -| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:65 | +| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:68 | | test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | | -| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:118 | +| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | +| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:121 | | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | | | test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | | -| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:120 | -| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:120 | -| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:66 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:123 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:123 | +| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:69 | | test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | | -| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:118 | +| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | +| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:121 | | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | | | test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | | -| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:79 | +| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:82 | | test.rs:387:19:387:29 | Some(...) [Some] | test.rs:387:24:387:28 | chunk | provenance | | | test.rs:387:24:387:28 | chunk | test.rs:388:18:388:22 | chunk | provenance | | | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:387:33:387:65 | await ... [Ok, Some] | provenance | | | test.rs:387:33:387:65 | await ... [Ok, Some] | test.rs:387:33:387:66 | TryExpr [Some] | provenance | | | test.rs:387:33:387:66 | TryExpr [Some] | test.rs:387:19:387:29 | Some(...) [Some] | provenance | | -| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:63 | +| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:66 | | test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | | -| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:34 MaD:34 | -| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:118 | -| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:119 | -| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:119 | +| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | +| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:121 | +| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:122 | +| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:122 | | test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | | | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | | | test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | | -| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:79 | +| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:82 | | test.rs:396:19:396:28 | Some(...) [Some] | test.rs:396:24:396:27 | line | provenance | | | test.rs:396:24:396:27 | line | test.rs:397:18:397:21 | line | provenance | | | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | test.rs:396:32:396:54 | await ... [Ok, Some] | provenance | | | test.rs:396:32:396:54 | await ... [Ok, Some] | test.rs:396:32:396:55 | TryExpr [Some] | provenance | | | test.rs:396:32:396:55 | TryExpr [Some] | test.rs:396:19:396:28 | Some(...) [Some] | provenance | | | test.rs:408:13:408:18 | buffer | test.rs:409:14:409:19 | buffer | provenance | | -| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:25 | -| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:25 | -| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:26 | +| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:28 | +| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:28 | +| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:29 | | test.rs:408:31:408:55 | ...::read(...) [Ok] | test.rs:408:31:408:56 | TryExpr | provenance | | | test.rs:408:31:408:56 | TryExpr | test.rs:408:13:408:18 | buffer | provenance | | | test.rs:413:13:413:18 | buffer | test.rs:414:14:414:19 | buffer | provenance | | -| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:25 | -| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:25 | -| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:26 | +| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:28 | +| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:28 | +| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:29 | | test.rs:413:31:413:50 | ...::read(...) [Ok] | test.rs:413:31:413:51 | TryExpr | provenance | | | test.rs:413:31:413:51 | TryExpr | test.rs:413:13:413:18 | buffer | provenance | | | test.rs:418:13:418:18 | buffer | test.rs:419:14:419:19 | buffer | provenance | | -| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:28 | -| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:28 | -| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:29 | +| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:31 | +| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:31 | +| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:32 | | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | test.rs:418:22:418:52 | TryExpr | provenance | | | test.rs:418:22:418:52 | TryExpr | test.rs:418:13:418:18 | buffer | provenance | | | test.rs:425:13:425:16 | path | test.rs:426:14:426:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:37 | +| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:40 | | test.rs:425:13:425:16 | path | test.rs:427:14:427:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:37 | +| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:40 | | test.rs:425:13:425:16 | path | test.rs:437:14:437:17 | path | provenance | | | test.rs:425:20:425:27 | e.path() | test.rs:425:13:425:16 | path | provenance | | -| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:6 MaD:6 | -| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:37 | -| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:37 | -| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:116 | +| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:9 MaD:9 | +| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:40 | +| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:40 | +| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:119 | | test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | | -| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:37 | +| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:40 | | test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | | | test.rs:439:25:439:37 | e.file_name() | test.rs:439:13:439:21 | file_name | provenance | | -| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:5 MaD:5 | -| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:37 | +| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:8 MaD:8 | +| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:40 | | test.rs:461:13:461:18 | target | test.rs:462:14:462:19 | target | provenance | | -| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:27 | +| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:30 | | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | test.rs:461:22:461:50 | TryExpr | provenance | | | test.rs:461:22:461:50 | TryExpr | test.rs:461:13:461:18 | target | provenance | | | test.rs:470:13:470:18 | buffer | test.rs:471:14:471:19 | buffer | provenance | | -| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:31 | +| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:34 | | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | test.rs:470:31:470:63 | await ... [Ok] | provenance | | | test.rs:470:31:470:63 | await ... [Ok] | test.rs:470:31:470:64 | TryExpr | provenance | | | test.rs:470:31:470:64 | TryExpr | test.rs:470:13:470:18 | buffer | provenance | | | test.rs:475:13:475:18 | buffer | test.rs:476:14:476:19 | buffer | provenance | | -| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:31 | +| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:34 | | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | test.rs:475:31:475:63 | await ... [Ok] | provenance | | | test.rs:475:31:475:63 | await ... [Ok] | test.rs:475:31:475:64 | TryExpr | provenance | | | test.rs:475:31:475:64 | TryExpr | test.rs:475:13:475:18 | buffer | provenance | | | test.rs:480:13:480:18 | buffer | test.rs:481:14:481:19 | buffer | provenance | | -| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:33 | +| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:36 | | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | test.rs:480:22:480:64 | await ... [Ok] | provenance | | | test.rs:480:22:480:64 | await ... [Ok] | test.rs:480:22:480:65 | TryExpr | provenance | | | test.rs:480:22:480:65 | TryExpr | test.rs:480:13:480:18 | buffer | provenance | | | test.rs:486:13:486:16 | path | test.rs:488:14:488:17 | path | provenance | | | test.rs:486:20:486:31 | entry.path() | test.rs:486:13:486:16 | path | provenance | | -| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:14 MaD:14 | -| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:14 MaD:14 | +| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:17 MaD:17 | +| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:17 MaD:17 | | test.rs:487:13:487:21 | file_name | test.rs:489:14:489:22 | file_name | provenance | | | test.rs:487:25:487:41 | entry.file_name() | test.rs:487:13:487:21 | file_name | provenance | | -| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:13 MaD:13 | -| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:13 MaD:13 | +| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:16 MaD:16 | +| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:16 MaD:16 | | test.rs:493:13:493:18 | target | test.rs:494:14:494:19 | target | provenance | | -| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:32 | +| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:35 | | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | | | test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | | | test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:97 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:96 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:99 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:59 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:98 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:101 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:100 | -| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:58 | -| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:54 | -| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:100 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:99 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:102 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:62 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:101 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:104 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:63 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:103 | +| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:61 | +| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:57 | +| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:10 | | test.rs:503:20:503:50 | ...::open(...) [Ok] | test.rs:503:20:503:51 | TryExpr | provenance | | | test.rs:503:20:503:51 | TryExpr | test.rs:503:9:503:16 | mut file | provenance | | | test.rs:507:32:507:42 | [post] &mut buffer | test.rs:508:15:508:20 | buffer | provenance | | @@ -542,69 +545,69 @@ edges | test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | | | test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | | | test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:97 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:96 | -| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:84 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:100 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:99 | +| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:87 | | test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | | -| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:8 | +| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:11 | | test.rs:538:30:538:40 | [post] &mut buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | | | test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:97 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:96 | -| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:84 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:100 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:99 | +| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:87 | | test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | | -| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:8 | +| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:11 | | test.rs:545:30:545:40 | [post] &mut buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | | | test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:97 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:96 | -| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:84 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:100 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:99 | +| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:87 | | test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | | -| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:8 | +| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:11 | | test.rs:552:30:552:40 | [post] &mut buffer | test.rs:553:15:553:20 | buffer | provenance | | | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | test.rs:552:35:552:40 | [post] buffer | provenance | | | test.rs:552:35:552:40 | [post] buffer | test.rs:553:15:553:20 | buffer | provenance | | | test.rs:553:15:553:20 | buffer | test.rs:553:14:553:20 | &buffer | provenance | | -| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:56 | -| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:59 | +| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:10 | | test.rs:560:21:560:51 | ...::open(...) [Ok] | test.rs:560:21:560:52 | TryExpr | provenance | | | test.rs:560:21:560:52 | TryExpr | test.rs:560:13:560:17 | file1 | provenance | | | test.rs:561:13:561:17 | file2 | test.rs:562:38:562:42 | file2 | provenance | | -| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:10 | | test.rs:561:21:561:59 | ...::open(...) [Ok] | test.rs:561:21:561:60 | TryExpr | provenance | | | test.rs:561:21:561:60 | TryExpr | test.rs:561:13:561:17 | file2 | provenance | | -| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:63 | | test.rs:562:26:562:43 | file1.chain(...) | test.rs:562:13:562:22 | mut reader | provenance | | -| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:55 | +| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:58 | | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | test.rs:563:36:563:41 | [post] buffer | provenance | | | test.rs:563:36:563:41 | [post] buffer | test.rs:564:15:564:20 | buffer | provenance | | | test.rs:564:15:564:20 | buffer | test.rs:564:14:564:20 | &buffer | provenance | | -| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:61 | -| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:7 | +| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:64 | +| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:10 | | test.rs:569:21:569:51 | ...::open(...) [Ok] | test.rs:569:21:569:52 | TryExpr | provenance | | | test.rs:569:21:569:52 | TryExpr | test.rs:569:13:569:17 | file1 | provenance | | -| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:63 | | test.rs:570:26:570:40 | file1.take(...) | test.rs:570:13:570:22 | mut reader | provenance | | | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | test.rs:571:36:571:41 | [post] buffer | provenance | | | test.rs:571:36:571:41 | [post] buffer | test.rs:572:15:572:20 | buffer | provenance | | | test.rs:572:15:572:20 | buffer | test.rs:572:14:572:20 | &buffer | provenance | | -| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:67 | -| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:73 | -| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:74 | -| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:69 | -| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:75 | -| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:71 | -| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:70 | -| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:72 | -| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:68 | -| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:11 | +| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:70 | +| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:76 | +| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:77 | +| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:72 | +| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:78 | +| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:74 | +| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:73 | +| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:75 | +| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:71 | +| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:14 | | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | test.rs:581:20:581:58 | await ... [Ok] | provenance | | | test.rs:581:20:581:58 | await ... [Ok] | test.rs:581:20:581:59 | TryExpr | provenance | | | test.rs:581:20:581:59 | TryExpr | test.rs:581:9:581:16 | mut file | provenance | | @@ -639,45 +642,45 @@ edges | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | test.rs:620:28:620:33 | [post] buffer | provenance | | | test.rs:620:28:620:33 | [post] buffer | test.rs:621:15:621:20 | buffer | provenance | | | test.rs:621:15:621:20 | buffer | test.rs:621:14:621:20 | &buffer | provenance | | -| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:67 | +| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:70 | | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | test.rs:627:22:627:71 | await ... [Ok] | provenance | | | test.rs:627:22:627:71 | await ... [Ok] | test.rs:627:22:627:72 | TryExpr | provenance | | | test.rs:627:22:627:72 | TryExpr | test.rs:627:13:627:18 | mut f1 | provenance | | -| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:12 | +| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:15 | | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | test.rs:629:35:629:40 | [post] buffer | provenance | | | test.rs:629:35:629:40 | [post] buffer | test.rs:630:15:630:20 | buffer | provenance | | | test.rs:630:15:630:20 | buffer | test.rs:630:14:630:20 | &buffer | provenance | | | test.rs:660:9:660:16 | mut file | test.rs:664:22:664:25 | file | provenance | | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:35 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:36 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:46 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:47 | -| test.rs:660:20:660:44 | ...::open | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:38 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:39 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:49 | +| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:50 | +| test.rs:660:20:660:44 | ...::open | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:4 | | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | test.rs:660:20:660:62 | await ... [Ok] | provenance | | | test.rs:660:20:660:62 | await ... [Ok] | test.rs:660:20:660:63 | TryExpr | provenance | | | test.rs:660:20:660:63 | TryExpr | test.rs:660:9:660:16 | mut file | provenance | | -| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:35 | -| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:46 | +| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:38 | +| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:49 | | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | test.rs:664:37:664:42 | [post] buffer | provenance | | | test.rs:664:37:664:42 | [post] buffer | test.rs:665:15:665:20 | buffer | provenance | | | test.rs:665:15:665:20 | buffer | test.rs:665:14:665:20 | &buffer | provenance | | | test.rs:671:13:671:18 | mut f1 | test.rs:673:22:673:23 | f1 | provenance | | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:35 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:36 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:46 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:47 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:38 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:39 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:49 | +| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:50 | | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | test.rs:671:22:671:75 | await ... [Ok] | provenance | | | test.rs:671:22:671:75 | await ... [Ok] | test.rs:671:22:671:76 | TryExpr | provenance | | | test.rs:671:22:671:76 | TryExpr | test.rs:671:13:671:18 | mut f1 | provenance | | -| test.rs:671:56:671:59 | open | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | -| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:35 | -| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:46 | +| test.rs:671:56:671:59 | open | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:5 | +| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:38 | +| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:49 | | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | test.rs:673:35:673:40 | [post] buffer | provenance | | | test.rs:673:35:673:40 | [post] buffer | test.rs:674:15:674:20 | buffer | provenance | | | test.rs:674:15:674:20 | buffer | test.rs:674:14:674:20 | &buffer | provenance | | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:57 | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:115 | -| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:9 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:60 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:118 | +| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:12 | | test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | | | test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | | | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | test.rs:695:34:695:39 | [post] buffer | provenance | | @@ -685,21 +688,21 @@ edges | test.rs:695:34:695:39 | [post] buffer | test.rs:699:14:699:22 | buffer[0] | provenance | | | test.rs:698:15:698:20 | buffer | test.rs:698:14:698:20 | &buffer | provenance | | | test.rs:707:13:707:22 | mut stream | test.rs:715:58:715:63 | stream | provenance | | -| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:10 | +| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:13 | | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | test.rs:707:26:707:106 | TryExpr | provenance | | | test.rs:707:26:707:106 | TryExpr | test.rs:707:13:707:22 | mut stream | provenance | | -| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:51 | -| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:61 | +| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:54 | +| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:64 | | test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | | -| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:105 | +| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:108 | | test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | | | test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | | | test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:121 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:67 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:122 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:123 | -| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:124 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:70 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:125 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:126 | +| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:18 | | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | | | test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | | | test.rs:759:28:759:73 | TryExpr | test.rs:759:9:759:24 | mut tokio_stream | provenance | | @@ -719,7 +722,7 @@ edges | test.rs:817:27:817:32 | buffer | test.rs:817:26:817:32 | &buffer | provenance | | | test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:20:11:20:13 | tcp | provenance | | | test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:26:53:26:55 | tcp | provenance | | -| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:3 | +| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:6 | | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | test_futures_io.rs:19:15:19:43 | await ... [Ok] | provenance | | | test_futures_io.rs:19:15:19:43 | await ... [Ok] | test_futures_io.rs:19:15:19:44 | TryExpr | provenance | | | test_futures_io.rs:19:15:19:44 | TryExpr | test_futures_io.rs:19:9:19:11 | tcp | provenance | | @@ -728,15 +731,15 @@ edges | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:36 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:47 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:39 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | +| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:50 | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | | | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | | | test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | | | test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | | -| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:88 | +| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:91 | | test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | | @@ -744,60 +747,60 @@ edges | test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:80 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:82 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:83 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:85 | +| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:84 | | test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | | | test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:35 | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:46 | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:49 | | test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | | | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | | | test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | | | test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | | -| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | -| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | +| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | | | test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | | | test_futures_io.rs:51:15:51:36 | buffer2[...] | test_futures_io.rs:51:14:51:36 | &... | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:55:11:55:17 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:59:40:59:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:69:37:69:43 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:41 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:44 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:36 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:47 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:39 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:50 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:41 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:44 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:27:132:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:44 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:45 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:47 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:48 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:27:139:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:42 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:43 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:45 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:46 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:27:146:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:48 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:49 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:51 | +| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:52 | | test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | | -| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:89 | +| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:92 | | test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | | | test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | +| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:60:15:60:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | +| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) | test_futures_io.rs:59:13:59:22 | mut pinned | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:80 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:82 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:83 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:85 | +| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:84 | | test_futures_io.rs:59:40:59:46 | reader2 | test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:60:15:60:20 | pinned | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | | test_futures_io.rs:60:15:60:20 | pinned [&ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | @@ -810,11 +813,11 @@ edges | test_futures_io.rs:63:31:63:33 | buf | test_futures_io.rs:65:18:65:20 | buf | provenance | | | test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | test_futures_io.rs:64:18:64:24 | &buffer | provenance | | | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | -| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | +| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:80 | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:82 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:83 | +| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:85 | | test_futures_io.rs:69:37:69:43 | reader2 | test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | provenance | | | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | provenance | | @@ -832,35 +835,35 @@ edges | test_futures_io.rs:90:26:90:47 | ...::new(...) | test_futures_io.rs:90:13:90:22 | mut pinned | provenance | | | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:80 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:82 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:83 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:85 | +| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:84 | | test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:35 | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:46 | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:49 | | test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | | | test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | | | test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | | -| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:35 | -| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:46 | +| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | | | test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | | | test_futures_io.rs:108:15:108:36 | buffer2[...] | test_futures_io.rs:108:14:108:36 | &... | provenance | | | test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:114:15:114:20 | pinned | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | +| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:114:15:114:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:40 | +| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) | test_futures_io.rs:113:13:113:22 | mut pinned | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | provenance | | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:80 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:82 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:81 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:83 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:85 | +| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:84 | | test_futures_io.rs:113:40:113:46 | reader2 | test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:114:15:114:20 | pinned | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | | test_futures_io.rs:114:15:114:20 | pinned [&ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | @@ -876,42 +879,58 @@ edges | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:125:22:125:45 | await ... [Ok] | provenance | | | test_futures_io.rs:125:22:125:45 | await ... [Ok] | test_futures_io.rs:125:22:125:46 | TryExpr | provenance | | | test_futures_io.rs:125:22:125:46 | TryExpr | test_futures_io.rs:125:13:125:18 | buffer | provenance | | -| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:44 | +| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:47 | | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | test_futures_io.rs:132:58:132:61 | [post] line | provenance | | | test_futures_io.rs:132:58:132:61 | [post] line | test_futures_io.rs:133:15:133:18 | line | provenance | | | test_futures_io.rs:133:15:133:18 | line | test_futures_io.rs:133:14:133:18 | &line | provenance | | -| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:42 | +| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:45 | | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | test_futures_io.rs:139:50:139:53 | [post] line | provenance | | | test_futures_io.rs:139:50:139:53 | [post] line | test_futures_io.rs:140:15:140:18 | line | provenance | | | test_futures_io.rs:140:15:140:18 | line | test_futures_io.rs:140:14:140:18 | &line | provenance | | -| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:48 | +| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:51 | | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | test_futures_io.rs:146:52:146:57 | [post] buffer | provenance | | | test_futures_io.rs:146:52:146:57 | [post] buffer | test_futures_io.rs:147:15:147:20 | buffer | provenance | | | test_futures_io.rs:147:15:147:20 | buffer | test_futures_io.rs:147:14:147:20 | &buffer | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:77 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:86 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:77 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:86 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:80 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:89 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:80 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:89 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:76 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:85 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:76 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:85 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:79 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:88 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:79 | +| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:88 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:77 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:86 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:77 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:86 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:76 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:85 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:76 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:85 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:80 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:89 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:80 | +| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:89 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:79 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:88 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:79 | +| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:88 | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | +| web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 | +| web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 | +| web_frameworks.rs:242:38:242:46 | ...: String | web_frameworks.rs:244:18:244:18 | a | provenance | | +| web_frameworks.rs:242:38:242:46 | ...: String | web_frameworks.rs:244:18:244:18 | a | provenance | | +| web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 | +| web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 | +| web_frameworks.rs:251:25:251:33 | ...: String | web_frameworks.rs:252:22:252:22 | a | provenance | | +| web_frameworks.rs:251:25:251:33 | ...: String | web_frameworks.rs:252:22:252:22 | a | provenance | | +| web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:1 | +| web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:1 | +| web_frameworks.rs:260:26:260:32 | ...: u64 | web_frameworks.rs:263:22:263:23 | id | provenance | | +| web_frameworks.rs:260:26:260:32 | ...: u64 | web_frameworks.rs:263:22:263:23 | id | provenance | | +| web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:273:15:273:23 | ...: String | provenance | Src:MaD:2 | +| web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:273:15:273:23 | ...: String | provenance | Src:MaD:2 | +| web_frameworks.rs:273:15:273:23 | ...: String | web_frameworks.rs:275:22:275:22 | a | provenance | | +| web_frameworks.rs:273:15:273:23 | ...: String | web_frameworks.rs:275:22:275:22 | a | provenance | | nodes | test.rs:8:10:8:22 | ...::var | semmle.label | ...::var | | test.rs:8:10:8:30 | ...::var(...) | semmle.label | ...::var(...) | @@ -1700,6 +1719,30 @@ nodes | web_frameworks.rs:68:15:68:15 | a | semmle.label | a | | web_frameworks.rs:70:14:70:14 | a | semmle.label | a | | web_frameworks.rs:70:14:70:14 | a | semmle.label | a | +| web_frameworks.rs:242:33:242:35 | map | semmle.label | map | +| web_frameworks.rs:242:33:242:35 | map | semmle.label | map | +| web_frameworks.rs:242:38:242:46 | ...: String | semmle.label | ...: String | +| web_frameworks.rs:242:38:242:46 | ...: String | semmle.label | ...: String | +| web_frameworks.rs:244:18:244:18 | a | semmle.label | a | +| web_frameworks.rs:244:18:244:18 | a | semmle.label | a | +| web_frameworks.rs:250:46:250:49 | then | semmle.label | then | +| web_frameworks.rs:250:46:250:49 | then | semmle.label | then | +| web_frameworks.rs:251:25:251:33 | ...: String | semmle.label | ...: String | +| web_frameworks.rs:251:25:251:33 | ...: String | semmle.label | ...: String | +| web_frameworks.rs:252:22:252:22 | a | semmle.label | a | +| web_frameworks.rs:252:22:252:22 | a | semmle.label | a | +| web_frameworks.rs:259:50:259:57 | and_then | semmle.label | and_then | +| web_frameworks.rs:259:50:259:57 | and_then | semmle.label | and_then | +| web_frameworks.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 | +| web_frameworks.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 | +| web_frameworks.rs:263:22:263:23 | id | semmle.label | id | +| web_frameworks.rs:263:22:263:23 | id | semmle.label | id | +| web_frameworks.rs:272:75:272:77 | map | semmle.label | map | +| web_frameworks.rs:272:75:272:77 | map | semmle.label | map | +| web_frameworks.rs:273:15:273:23 | ...: String | semmle.label | ...: String | +| web_frameworks.rs:273:15:273:23 | ...: String | semmle.label | ...: String | +| web_frameworks.rs:275:22:275:22 | a | semmle.label | a | +| web_frameworks.rs:275:22:275:22 | a | semmle.label | a | subpaths testFailures #select @@ -1839,3 +1882,11 @@ testFailures | web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a | | web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a | | web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a | +| web_frameworks.rs:244:18:244:18 | a | web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:244:18:244:18 | a | $@ | web_frameworks.rs:242:33:242:35 | map | map | +| web_frameworks.rs:244:18:244:18 | a | web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:244:18:244:18 | a | $@ | web_frameworks.rs:242:33:242:35 | map | map | +| web_frameworks.rs:252:22:252:22 | a | web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:252:22:252:22 | a | $@ | web_frameworks.rs:250:46:250:49 | then | then | +| web_frameworks.rs:252:22:252:22 | a | web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:252:22:252:22 | a | $@ | web_frameworks.rs:250:46:250:49 | then | then | +| web_frameworks.rs:263:22:263:23 | id | web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:263:22:263:23 | id | $@ | web_frameworks.rs:259:50:259:57 | and_then | and_then | +| web_frameworks.rs:263:22:263:23 | id | web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:263:22:263:23 | id | $@ | web_frameworks.rs:259:50:259:57 | and_then | and_then | +| web_frameworks.rs:275:22:275:22 | a | web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:275:22:275:22 | a | $@ | web_frameworks.rs:272:75:272:77 | map | map | +| web_frameworks.rs:275:22:275:22 | a | web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:275:22:275:22 | a | $@ | web_frameworks.rs:272:75:272:77 | map | map | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs index 857fc3b479e8..3b901bd823f9 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs @@ -241,7 +241,7 @@ mod warp_test { let map_route = warp::path::param().map(|a: String| // $ Alert[rust/summary/taint-sources] { - sink(a); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow "".to_string() }); @@ -249,7 +249,7 @@ mod warp_test { // A route with parameter and `then` let then_route = warp::path::param().then( // $ Alert[rust/summary/taint-sources] async move |a: String| { - sink(a); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow "".to_string() }, @@ -260,7 +260,7 @@ mod warp_test { async move | id: u64 | { if id != 0 { - sink(id); // $ MISSING: hasTaintFlow + sink(id); // $ hasTaintFlow Ok("".to_string()) } else { Err(warp::reject::not_found()) @@ -272,7 +272,7 @@ mod warp_test { let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ Alert[rust/summary/taint-sources] | a: String | { - sink(a); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow "".to_string() }, diff --git a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected index 4d44df7349f7..a33742a7c4b3 100644 --- a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected +++ b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected @@ -8,6 +8,8 @@ | request_forgery_tests.rs:31:29:31:40 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:31:29:31:40 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | | request_forgery_tests.rs:37:37:37:48 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:37:37:48 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | | request_forgery_tests.rs:37:37:37:48 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:37:37:48 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:68:28:68:39 | ...::get | request_forgery_tests.rs:65:33:65:40 | and_then | request_forgery_tests.rs:68:28:68:39 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:65:33:65:40 | and_then | user-provided value | +| request_forgery_tests.rs:68:28:68:39 | ...::get | request_forgery_tests.rs:65:33:65:40 | and_then | request_forgery_tests.rs:68:28:68:39 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:65:33:65:40 | and_then | user-provided value | edges | request_forgery_tests.rs:4:5:4:14 | res | request_forgery_tests.rs:16:27:16:49 | { ... } | provenance | | | request_forgery_tests.rs:4:5:4:14 | res | request_forgery_tests.rs:20:27:20:57 | { ... } | provenance | | @@ -28,22 +30,22 @@ edges | request_forgery_tests.rs:16:13:16:15 | url | request_forgery_tests.rs:17:39:17:41 | url | provenance | | | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | request_forgery_tests.rs:4:5:4:14 | res | provenance | | | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | request_forgery_tests.rs:16:13:16:15 | url | provenance | | -| request_forgery_tests.rs:16:27:16:49 | MacroExpr | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | provenance | MaD:2 | -| request_forgery_tests.rs:16:27:16:49 | { ... } | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | provenance | MaD:3 | +| request_forgery_tests.rs:16:27:16:49 | MacroExpr | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | provenance | MaD:3 | +| request_forgery_tests.rs:16:27:16:49 | { ... } | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | provenance | MaD:4 | | request_forgery_tests.rs:17:38:17:41 | &url [&ref] | request_forgery_tests.rs:17:25:17:36 | ...::get | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:17:39:17:41 | url | request_forgery_tests.rs:17:38:17:41 | &url [&ref] | provenance | | | request_forgery_tests.rs:20:13:20:15 | url | request_forgery_tests.rs:21:39:21:41 | url | provenance | | | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | request_forgery_tests.rs:4:5:4:14 | res | provenance | | | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | request_forgery_tests.rs:20:13:20:15 | url | provenance | | -| request_forgery_tests.rs:20:27:20:57 | MacroExpr | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | provenance | MaD:2 | -| request_forgery_tests.rs:20:27:20:57 | { ... } | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | provenance | MaD:3 | +| request_forgery_tests.rs:20:27:20:57 | MacroExpr | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | provenance | MaD:3 | +| request_forgery_tests.rs:20:27:20:57 | { ... } | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | provenance | MaD:4 | | request_forgery_tests.rs:21:38:21:41 | &url [&ref] | request_forgery_tests.rs:21:25:21:36 | ...::get | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:21:39:21:41 | url | request_forgery_tests.rs:21:38:21:41 | &url [&ref] | provenance | | | request_forgery_tests.rs:24:13:24:15 | url | request_forgery_tests.rs:25:39:25:41 | url | provenance | | | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | request_forgery_tests.rs:4:5:4:14 | res | provenance | | | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | request_forgery_tests.rs:24:13:24:15 | url | provenance | | -| request_forgery_tests.rs:24:27:24:70 | MacroExpr | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | provenance | MaD:2 | -| request_forgery_tests.rs:24:27:24:70 | { ... } | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | provenance | MaD:3 | +| request_forgery_tests.rs:24:27:24:70 | MacroExpr | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | provenance | MaD:3 | +| request_forgery_tests.rs:24:27:24:70 | { ... } | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | provenance | MaD:4 | | request_forgery_tests.rs:25:38:25:41 | &url [&ref] | request_forgery_tests.rs:25:25:25:36 | ...::get | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:25:39:25:41 | url | request_forgery_tests.rs:25:38:25:41 | &url [&ref] | provenance | | | request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:29:31:40 | ...::get | provenance | MaD:1 Sink:MaD:1 | @@ -54,10 +56,19 @@ edges | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:37:37:48 | ...::get | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:37:51:37:58 | user_url | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | provenance | | | request_forgery_tests.rs:37:51:37:58 | user_url | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | provenance | | +| request_forgery_tests.rs:65:33:65:40 | and_then | request_forgery_tests.rs:65:49:65:57 | ...: String | provenance | Src:MaD:2 | +| request_forgery_tests.rs:65:33:65:40 | and_then | request_forgery_tests.rs:65:49:65:57 | ...: String | provenance | Src:MaD:2 | +| request_forgery_tests.rs:65:49:65:57 | ...: String | request_forgery_tests.rs:68:42:68:42 | a | provenance | | +| request_forgery_tests.rs:65:49:65:57 | ...: String | request_forgery_tests.rs:68:42:68:42 | a | provenance | | +| request_forgery_tests.rs:68:41:68:42 | &a [&ref] | request_forgery_tests.rs:68:28:68:39 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:68:41:68:42 | &a [&ref] | request_forgery_tests.rs:68:28:68:39 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:68:42:68:42 | a | request_forgery_tests.rs:68:41:68:42 | &a [&ref] | provenance | | +| request_forgery_tests.rs:68:42:68:42 | a | request_forgery_tests.rs:68:41:68:42 | &a [&ref] | provenance | | models | 1 | Sink: reqwest::get; Argument[0]; request-url | -| 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 3 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 2 | Source: <_ as warp::filter::Filter>::and_then; Argument[0].Parameter[0..7]; remote | +| 3 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 4 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | request_forgery_tests.rs:4:5:4:14 | res | semmle.label | res | | request_forgery_tests.rs:4:5:4:14 | res | semmle.label | res | @@ -106,4 +117,14 @@ nodes | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | semmle.label | &user_url [&ref] | | request_forgery_tests.rs:37:51:37:58 | user_url | semmle.label | user_url | | request_forgery_tests.rs:37:51:37:58 | user_url | semmle.label | user_url | +| request_forgery_tests.rs:65:33:65:40 | and_then | semmle.label | and_then | +| request_forgery_tests.rs:65:33:65:40 | and_then | semmle.label | and_then | +| request_forgery_tests.rs:65:49:65:57 | ...: String | semmle.label | ...: String | +| request_forgery_tests.rs:65:49:65:57 | ...: String | semmle.label | ...: String | +| request_forgery_tests.rs:68:28:68:39 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:68:28:68:39 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:68:41:68:42 | &a [&ref] | semmle.label | &a [&ref] | +| request_forgery_tests.rs:68:41:68:42 | &a [&ref] | semmle.label | &a [&ref] | +| request_forgery_tests.rs:68:42:68:42 | a | semmle.label | a | +| request_forgery_tests.rs:68:42:68:42 | a | semmle.label | a | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs b/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs index ab99d73db439..f9abf14de4fc 100644 --- a/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs +++ b/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs @@ -62,10 +62,10 @@ mod warp_test { async fn test_warp() { // A route with parameter and `and_then` let map_route = - warp::path::param().and_then(async |a: String| // $ MISSING: Source=a + warp::path::param().and_then(async |a: String| // $ Source=a { - let response = reqwest::get(&a).await; // $ MISSING: Alert[rust/request-forgery]=a + let response = reqwest::get(&a).await; // $ Alert[rust/request-forgery]=a match response { Ok(resp) => Ok(resp.text().await.unwrap_or_default()), Err(_err) => Err(warp::reject::not_found()), diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 3eda6709517c..9c46e04bf4bd 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1206,12 +1206,12 @@ module Make< * Holds if this node is an exit node, i.e. after all stores have been performed. * * A local flow step should be added from this node to a data flow node representing - * `sc` inside `source`. + * `s` inside `source`. */ - predicate isExit(SourceElement source, SummaryComponent sc, string model) { + predicate isExit(SourceElement source, SummaryComponentStack s, string model) { source = source_ and model = model_ and - state_.isSourceOutputState(source, TSingletonSummaryComponentStack(sc), _, model) + state_.isSourceOutputState(source, s, _, model) } override predicate isHidden() { not this.isEntry(_, _) } @@ -1460,7 +1460,7 @@ module Make< DataFlowType getSyntheticGlobalType(SyntheticGlobal sg); - DataFlowType getSourceType(SourceBase source, SummaryComponent sc); + DataFlowType getSourceType(SourceBase source, SummaryComponentStack sc); DataFlowType getSinkType(SinkBase sink, SummaryComponent sc); } @@ -1543,9 +1543,9 @@ module Make< ) or exists(SourceElement source | - exists(SummaryComponent sc | - n.(SourceOutputNode).isExit(source, sc, _) and - result = getSourceType(source, sc) + exists(SummaryComponentStack s | + n.(SourceOutputNode).isExit(source, s, _) and + result = getSourceType(source, s) ) or exists(SummaryComponentStack s, ContentSet cont | @@ -1574,13 +1574,16 @@ module Make< /** Gets a call that targets summarized callable `sc`. */ DataFlowCall getACall(SummarizedCallable sc); + /** Gets the enclosing callable of `source`. */ + DataFlowCallable getSourceNodeEnclosingCallable(SourceBase source); + /** - * Gets a data flow node corresponding to the `sc` part of `source`. + * Gets a data flow node corresponding to the `s` part of `source`. * - * `sc` is typically `ReturnValue` and the result is the node that + * `s` is typically `ReturnValue` and the result is the node that * represents the return value of `source`. */ - Node getSourceNode(SourceBase source, SummaryComponent sc); + Node getSourceNode(SourceBase source, SummaryComponentStack s); /** * Gets a data flow node corresponding to the `sc` part of `sink`. @@ -1622,13 +1625,20 @@ module Make< ) } - predicate sourceLocalStep(SourceOutputNode nodeFrom, Node nodeTo, string model) { - exists(SummaryComponent sc, SourceElement source | + predicate sourceStep(SourceOutputNode nodeFrom, Node nodeTo, string model, boolean local) { + exists(SummaryComponentStack sc, SourceElement source | nodeFrom.isExit(source, sc, model) and - nodeTo = StepsInput::getSourceNode(source, sc) + nodeTo = StepsInput::getSourceNode(source, sc) and + if StepsInput::getSourceNodeEnclosingCallable(source) = getNodeEnclosingCallable(nodeTo) + then local = true + else local = false ) } + predicate sourceLocalStep(SourceOutputNode nodeFrom, Node nodeTo, string model) { + sourceStep(nodeFrom, nodeTo, model, true) + } + predicate sinkLocalStep(Node nodeFrom, SinkInputNode nodeTo, string model) { exists(SummaryComponent sc, SinkElement sink | nodeFrom = StepsInput::getSinkNode(sink, sc) and @@ -1689,6 +1699,10 @@ module Make< ) } + predicate sourceJumpStep(SourceOutputNode nodeFrom, Node nodeTo) { + sourceStep(nodeFrom, nodeTo, _, false) + } + /** * Holds if values stored inside content `c` are cleared at `n`. `n` is a * synthesized summary node, so in order for values to be cleared at calls From 7d6e2060e526419ac1f14cf127b7d8e42bbcacfe Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 17 Sep 2025 14:05:39 +0200 Subject: [PATCH 173/219] Adapt all languages to changes in shared library --- .../semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll | 4 +++- .../code/csharp/dataflow/internal/FlowSummaryImpl.qll | 6 ++++-- go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll | 4 +++- .../semmle/code/java/dataflow/internal/FlowSummaryImpl.qll | 6 ++++-- .../javascript/dataflow/internal/FlowSummaryPrivate.qll | 4 +++- .../semmle/python/dataflow/new/internal/FlowSummaryImpl.qll | 4 +++- .../lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll | 4 +++- .../lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll | 4 +++- 8 files changed, 26 insertions(+), 10 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index 58c3dfdea16b..d89ab06ed829 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -104,7 +104,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.getStaticCallTarget().getUnderlyingCallable() = sc } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 90db68f7c93a..3ee16f21489c 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -183,7 +183,7 @@ private module TypesInput implements Impl::Private::TypesInputSig { ) } - DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponent sc) { + DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } @@ -195,7 +195,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { sc = viableCallable(result).asSummarizedCallable() } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index 35887d076c03..496870286e95 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -117,7 +117,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { ) } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index a2d25cadd883..8dc28ea2f601 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -132,7 +132,7 @@ private module TypesInput implements Impl::Private::TypesInputSig { exists(rk) } - DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponent sc) { + DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } @@ -144,7 +144,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { sc = viableCallable(result).asSummarizedCallable() } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll index 6315b34b0a4f..a5131e4fd64e 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll @@ -150,7 +150,9 @@ private module FlowSummaryStepInput implements Private::StepsInputSig { ) } - DataFlow::Node getSourceNode(SourceBase source, Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(SourceBase source) { none() } + + DataFlow::Node getSourceNode(SourceBase source, Private::SummaryComponentStack s) { none() } DataFlow::Node getSinkNode(SinkBase sink, Private::SummaryComponent sc) { none() } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll index f7fdf84549e6..396154c06ee8 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -105,7 +105,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { ]) } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index c85d2230b23d..f8e3894a8331 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -161,7 +161,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.asCall().getAstNode() = sc.(LibraryCallable).getACallSimple() } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index cb889baaebc2..46e2e63f2cab 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -113,7 +113,9 @@ private import Make as Imp private module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } From a4c61f69456415bdcf18b837d4adbe15e0bc6adf Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 18 Sep 2025 16:01:07 +0200 Subject: [PATCH 174/219] Rust: Accept test changes --- .../PathResolutionConsistency.expected | 2 +- .../dataflow/models/models.expected | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected index ebe4e66e6e2a..7db157837813 100644 --- a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ multipleCallTargets -| main.rs:362:14:362:30 | ... .lt(...) | +| main.rs:389:14:389:30 | ... .lt(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index 2918e5c3c394..955b0b81b443 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -233,18 +233,18 @@ edges | main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | | main.rs:261:18:261:18 | ... | main.rs:261:26:261:26 | a | provenance | | | main.rs:261:18:261:18 | ... | main.rs:261:26:261:26 | a | provenance | | -| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 MaD:8 | -| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 MaD:8 | -| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 MaD:8 | -| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 | +| main.rs:262:9:262:19 | pass_source | main.rs:261:18:261:18 | ... | provenance | Src:MaD:8 | +| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 | +| main.rs:264:9:264:19 | pass_source | main.rs:264:25:264:25 | ... | provenance | Src:MaD:8 | | main.rs:264:25:264:25 | ... | main.rs:265:18:265:18 | a | provenance | | | main.rs:264:25:264:25 | ... | main.rs:265:18:265:18 | a | provenance | | | main.rs:268:14:268:19 | ...: i64 | main.rs:269:18:269:18 | a | provenance | | | main.rs:268:14:268:19 | ...: i64 | main.rs:269:18:269:18 | a | provenance | | -| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 MaD:8 | -| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 MaD:8 | -| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 MaD:8 | -| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 MaD:8 | +| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 | +| main.rs:271:9:271:19 | pass_source | main.rs:268:14:268:19 | ...: i64 | provenance | Src:MaD:8 | +| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 | +| main.rs:273:9:273:19 | pass_source | main.rs:273:36:273:36 | ... | provenance | Src:MaD:8 | | main.rs:273:36:273:36 | ... | main.rs:274:18:274:18 | a | provenance | | | main.rs:273:36:273:36 | ... | main.rs:274:18:274:18 | a | provenance | | | main.rs:283:9:283:9 | s | main.rs:284:41:284:41 | s | provenance | | From 4244a6569c53e3f3b2fdf270769bbe23d2d84f22 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 19 Sep 2025 09:19:17 +0200 Subject: [PATCH 175/219] Rust: Add change note --- rust/ql/lib/change-notes/2025-09-19-parameter-mad.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 rust/ql/lib/change-notes/2025-09-19-parameter-mad.md diff --git a/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md b/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md new file mode 100644 index 000000000000..06f664a52138 --- /dev/null +++ b/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md @@ -0,0 +1,7 @@ +--- +category: feature +--- +* The models-as-data format for sources now supports access paths of the form + `Argument[i].Parameter[j]`. This denotes that the source passes tainted data to + the `j`th parameter of it's `i`th argument (which must be a function or a + closure). \ No newline at end of file From 45b84ffb3195f7b0069494624cd47e805c539872 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 22 Sep 2025 14:23:50 +0200 Subject: [PATCH 176/219] Rust: Ensure singleton --- rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll | 4 ++-- shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index 129bd468e012..2763908ae02e 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -168,12 +168,12 @@ private module StepsInput implements Impl::Private::StepsInputSig { or exists(ArgumentPosition pos, Expr arg | s.head() = Impl::Private::SummaryComponent::parameter(pos) and - arg = getSourceNodeArgument(source, s.tail().head()) and + arg = getSourceNodeArgument(source, s.tail().headOfSingleton()) and result.asParameter() = getCallable(arg).getParam(pos.getPosition()) ) or result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr().getExpr() = - getSourceNodeArgument(source, s.head()) + getSourceNodeArgument(source, s.headOfSingleton()) } RustDataFlow::Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 9c46e04bf4bd..6cc9d6f88a45 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -709,6 +709,9 @@ module Make< this = TConsSummaryComponentStack(result, _) } + /** Gets the head of this stack if it is a singleton. */ + SummaryComponent headOfSingleton() { this = TSingletonSummaryComponentStack(result) } + /** Gets the tail of this stack, if any. */ SummaryComponentStack tail() { this = TConsSummaryComponentStack(_, result) } From b837c56bec5a598bdd951e30e998e449f8f19305 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 22 Sep 2025 10:13:33 -0400 Subject: [PATCH 177/219] Refactor RootApi and GrapeApiClass constructors for improved readability; add getHelperSelf method to retrieve self parameter in helpers block. --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 39 +++++++++++--------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 4e178792572f..95aa42fdfad7 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -25,9 +25,7 @@ module Grape { * In other words, it does not subclass any other Grape API class in source code. */ class RootApi extends GrapeApiClass { - RootApi() { - not this = any(GrapeApiClass parent).getAnImmediateDescendent() - } + RootApi() { not this = any(GrapeApiClass parent).getAnImmediateDescendent() } } /** @@ -44,9 +42,7 @@ module Grape { * ``` */ class GrapeApiClass extends DataFlow::ClassNode { - GrapeApiClass() { - this = grapeApiBaseClass().getADescendentModule() - } + GrapeApiClass() { this = grapeApiBaseClass().getADescendentModule() } /** * Gets a `GrapeEndpoint` defined in this class. @@ -63,6 +59,20 @@ module Grape { // is invoked with an instance as the `self`. result = this.getModuleLevelSelf() } + + /** + * Gets the `self` parameter belonging to a method defined within a + * `helpers` block in this API class. + * + * These methods become available in endpoint contexts through Grape's DSL. + */ + DataFlow::SelfParameterNode getHelperSelf() { + exists(DataFlow::CallNode helpersCall | + helpersCall = this.getAModuleLevelCall("helpers") and + result.getSelfVariable().getDeclaringScope().getOuterScope+() = + helpersCall.getBlock().asExpr().getExpr() + ) + } } private DataFlow::ConstRef grapeApiBaseClass() { @@ -122,17 +132,12 @@ module Grape { */ private class GrapeParamsCall extends ParamsCallImpl { GrapeParamsCall() { - // Params calls within endpoint blocks - exists(GrapeApiClass api | - this.getMethodName() = "params" and - this.getParent+() = api.getADeclaration() - ) - or - // Params calls within helper methods (defined in helpers blocks) - exists(GrapeApiClass api, DataFlow::CallNode helpersCall | - helpersCall = api.getAModuleLevelCall("helpers") and - this.getMethodName() = "params" and - this.getParent+() = helpersCall.getBlock().asExpr().getExpr() + exists(API::Node n | this = n.getAMethodCall("params").asExpr().getExpr() | + // Params calls within endpoint blocks + n = grapeApiInstance() + or + // Params calls within helper methods (defined in helpers blocks) + n = any(GrapeApiClass c).getHelperSelf().track() ) } } From ecd0ce65fe91f6ff604185c59f526ca0442c8389 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 22 Sep 2025 12:52:30 -0400 Subject: [PATCH 178/219] Refactor GrapeHeadersBlockCall and GrapeCookiesBlockCall to simplify method call checks --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 95aa42fdfad7..7e3d6c54fe45 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -237,11 +237,8 @@ module Grape { */ private class GrapeHeadersBlockCall extends MethodCall { GrapeHeadersBlockCall() { - exists(GrapeApiClass api | - this.getParent+() = api.getADeclaration() and - this.getMethodName() = "headers" and - exists(this.getBlock()) - ) + this = grapeApiInstance().getAMethodCall("headers").asExpr().getExpr() and + exists(this.getBlock()) } } @@ -251,11 +248,8 @@ module Grape { */ private class GrapeCookiesBlockCall extends MethodCall { GrapeCookiesBlockCall() { - exists(GrapeApiClass api | - this.getParent+() = api.getADeclaration() and - this.getMethodName() = "cookies" and - exists(this.getBlock()) - ) + this = grapeApiInstance().getAMethodCall("cookies").asExpr().getExpr() and + exists(this.getBlock()) } } From 1183e50435d615679a27644e290138684aa7d203 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 22 Sep 2025 19:45:34 +0200 Subject: [PATCH 179/219] Update rust/ql/lib/change-notes/2025-09-19-parameter-mad.md --- rust/ql/lib/change-notes/2025-09-19-parameter-mad.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md b/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md index 06f664a52138..fa3970790fa1 100644 --- a/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md +++ b/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md @@ -3,5 +3,5 @@ category: feature --- * The models-as-data format for sources now supports access paths of the form `Argument[i].Parameter[j]`. This denotes that the source passes tainted data to - the `j`th parameter of it's `i`th argument (which must be a function or a + the `j`th parameter of its `i`th argument (which must be a function or a closure). \ No newline at end of file From 0665c39a072181e9adac06470466ff4377b17148 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:08:34 -0400 Subject: [PATCH 180/219] Refactor GrapeHelperMethod constructor to reuse getHelperSelf to traverse dataflow instead of AST - add tests to check for nested helpers --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 7 +- .../frameworks/grape/Flow.expected | 276 ++++++++++++------ .../frameworks/grape/Grape.expected | 32 +- .../library-tests/frameworks/grape/app.rb | 71 +++++ 4 files changed, 275 insertions(+), 111 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 7e3d6c54fe45..4d64e9461b38 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -291,12 +291,7 @@ module Grape { private class GrapeHelperMethod extends Method { private GrapeApiClass apiClass; - GrapeHelperMethod() { - exists(DataFlow::CallNode helpersCall | - helpersCall = apiClass.getAModuleLevelCall("helpers") and - this.getParent+() = helpersCall.getBlock().asExpr().getExpr() - ) - } + GrapeHelperMethod() { this = apiClass.getHelperSelf().getSelfVariable().getDeclaringScope() } /** * Gets the API class that contains this helper method. diff --git a/ruby/ql/test/library-tests/frameworks/grape/Flow.expected b/ruby/ql/test/library-tests/frameworks/grape/Flow.expected index c104b36afb2d..f04bd930ea97 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Flow.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Flow.expected @@ -2,44 +2,80 @@ models edges | app.rb:103:13:103:18 | call to params | app.rb:103:13:103:70 | call to select | provenance | | | app.rb:103:13:103:18 | call to params | app.rb:103:13:103:70 | call to select : [collection] [element] | provenance | | -| app.rb:103:13:103:70 | call to select | app.rb:149:21:149:31 | call to user_params | provenance | | -| app.rb:103:13:103:70 | call to select | app.rb:165:21:165:31 | call to user_params | provenance | | -| app.rb:103:13:103:70 | call to select : [collection] [element] | app.rb:149:21:149:31 | call to user_params : [collection] [element] | provenance | | -| app.rb:103:13:103:70 | call to select : [collection] [element] | app.rb:165:21:165:31 | call to user_params : [collection] [element] | provenance | | -| app.rb:107:13:107:32 | call to source | app.rb:143:18:143:43 | call to vulnerable_helper | provenance | | -| app.rb:107:13:107:32 | call to source | app.rb:143:18:143:43 | call to vulnerable_helper | provenance | | -| app.rb:111:13:111:33 | call to source | app.rb:150:25:150:37 | call to simple_helper | provenance | | -| app.rb:111:13:111:33 | call to source | app.rb:150:25:150:37 | call to simple_helper | provenance | | -| app.rb:126:9:126:15 | user_id | app.rb:133:14:133:20 | user_id | provenance | | -| app.rb:126:19:126:24 | call to params | app.rb:126:19:126:34 | ...[...] | provenance | | -| app.rb:126:19:126:34 | ...[...] | app.rb:126:9:126:15 | user_id | provenance | | -| app.rb:127:9:127:16 | route_id | app.rb:134:14:134:21 | route_id | provenance | | -| app.rb:127:20:127:40 | call to route_param | app.rb:127:9:127:16 | route_id | provenance | | -| app.rb:128:9:128:12 | auth | app.rb:135:14:135:17 | auth | provenance | | -| app.rb:128:16:128:22 | call to headers | app.rb:128:16:128:38 | ...[...] | provenance | | -| app.rb:128:16:128:38 | ...[...] | app.rb:128:9:128:12 | auth | provenance | | -| app.rb:129:9:129:15 | session | app.rb:136:14:136:20 | session | provenance | | -| app.rb:129:19:129:25 | call to cookies | app.rb:129:19:129:38 | ...[...] | provenance | | -| app.rb:129:19:129:38 | ...[...] | app.rb:129:9:129:15 | session | provenance | | -| app.rb:143:9:143:14 | result | app.rb:144:14:144:19 | result | provenance | | -| app.rb:143:9:143:14 | result | app.rb:144:14:144:19 | result | provenance | | -| app.rb:143:18:143:43 | call to vulnerable_helper | app.rb:143:9:143:14 | result | provenance | | -| app.rb:143:18:143:43 | call to vulnerable_helper | app.rb:143:9:143:14 | result | provenance | | -| app.rb:149:9:149:17 | user_data | app.rb:151:14:151:22 | user_data | provenance | | -| app.rb:149:9:149:17 | user_data : [collection] [element] | app.rb:151:14:151:22 | user_data | provenance | | -| app.rb:149:21:149:31 | call to user_params | app.rb:149:9:149:17 | user_data | provenance | | -| app.rb:149:21:149:31 | call to user_params : [collection] [element] | app.rb:149:9:149:17 | user_data : [collection] [element] | provenance | | -| app.rb:150:9:150:21 | simple_result | app.rb:152:14:152:26 | simple_result | provenance | | -| app.rb:150:9:150:21 | simple_result | app.rb:152:14:152:26 | simple_result | provenance | | -| app.rb:150:25:150:37 | call to simple_helper | app.rb:150:9:150:21 | simple_result | provenance | | -| app.rb:150:25:150:37 | call to simple_helper | app.rb:150:9:150:21 | simple_result | provenance | | -| app.rb:159:13:159:19 | user_id | app.rb:160:18:160:24 | user_id | provenance | | -| app.rb:159:23:159:28 | call to params | app.rb:159:23:159:33 | ...[...] | provenance | | -| app.rb:159:23:159:33 | ...[...] | app.rb:159:13:159:19 | user_id | provenance | | -| app.rb:165:9:165:17 | user_data | app.rb:166:14:166:22 | user_data | provenance | | -| app.rb:165:9:165:17 | user_data : [collection] [element] | app.rb:166:14:166:22 | user_data | provenance | | -| app.rb:165:21:165:31 | call to user_params | app.rb:165:9:165:17 | user_data | provenance | | -| app.rb:165:21:165:31 | call to user_params : [collection] [element] | app.rb:165:9:165:17 | user_data : [collection] [element] | provenance | | +| app.rb:103:13:103:70 | call to select | app.rb:189:21:189:31 | call to user_params | provenance | | +| app.rb:103:13:103:70 | call to select | app.rb:205:21:205:31 | call to user_params | provenance | | +| app.rb:103:13:103:70 | call to select : [collection] [element] | app.rb:189:21:189:31 | call to user_params : [collection] [element] | provenance | | +| app.rb:103:13:103:70 | call to select : [collection] [element] | app.rb:205:21:205:31 | call to user_params : [collection] [element] | provenance | | +| app.rb:107:13:107:32 | call to source | app.rb:183:18:183:43 | call to vulnerable_helper | provenance | | +| app.rb:107:13:107:32 | call to source | app.rb:183:18:183:43 | call to vulnerable_helper | provenance | | +| app.rb:111:13:111:33 | call to source | app.rb:190:25:190:37 | call to simple_helper | provenance | | +| app.rb:111:13:111:33 | call to source | app.rb:190:25:190:37 | call to simple_helper | provenance | | +| app.rb:118:17:118:43 | call to source | app.rb:212:23:212:39 | call to authenticate_user | provenance | | +| app.rb:118:17:118:43 | call to source | app.rb:212:23:212:39 | call to authenticate_user | provenance | | +| app.rb:122:17:122:47 | call to source | app.rb:216:23:216:48 | call to check_permissions | provenance | | +| app.rb:122:17:122:47 | call to source | app.rb:216:23:216:48 | call to check_permissions | provenance | | +| app.rb:128:17:128:42 | call to source | app.rb:220:29:220:80 | call to validate_email | provenance | | +| app.rb:128:17:128:42 | call to source | app.rb:220:29:220:80 | call to validate_email | provenance | | +| app.rb:134:17:134:42 | call to source | app.rb:225:28:225:39 | call to debug_helper | provenance | | +| app.rb:134:17:134:42 | call to source | app.rb:225:28:225:39 | call to debug_helper | provenance | | +| app.rb:140:17:140:37 | call to source | app.rb:230:25:230:37 | call to rescue_helper | provenance | | +| app.rb:140:17:140:37 | call to source | app.rb:230:25:230:37 | call to rescue_helper | provenance | | +| app.rb:150:17:150:35 | call to source | app.rb:235:27:235:37 | call to test_helper | provenance | | +| app.rb:150:17:150:35 | call to source | app.rb:235:27:235:37 | call to test_helper | provenance | | +| app.rb:166:9:166:15 | user_id | app.rb:173:14:173:20 | user_id | provenance | | +| app.rb:166:19:166:24 | call to params | app.rb:166:19:166:34 | ...[...] | provenance | | +| app.rb:166:19:166:34 | ...[...] | app.rb:166:9:166:15 | user_id | provenance | | +| app.rb:167:9:167:16 | route_id | app.rb:174:14:174:21 | route_id | provenance | | +| app.rb:167:20:167:40 | call to route_param | app.rb:167:9:167:16 | route_id | provenance | | +| app.rb:168:9:168:12 | auth | app.rb:175:14:175:17 | auth | provenance | | +| app.rb:168:16:168:22 | call to headers | app.rb:168:16:168:38 | ...[...] | provenance | | +| app.rb:168:16:168:38 | ...[...] | app.rb:168:9:168:12 | auth | provenance | | +| app.rb:169:9:169:15 | session | app.rb:176:14:176:20 | session | provenance | | +| app.rb:169:19:169:25 | call to cookies | app.rb:169:19:169:38 | ...[...] | provenance | | +| app.rb:169:19:169:38 | ...[...] | app.rb:169:9:169:15 | session | provenance | | +| app.rb:183:9:183:14 | result | app.rb:184:14:184:19 | result | provenance | | +| app.rb:183:9:183:14 | result | app.rb:184:14:184:19 | result | provenance | | +| app.rb:183:18:183:43 | call to vulnerable_helper | app.rb:183:9:183:14 | result | provenance | | +| app.rb:183:18:183:43 | call to vulnerable_helper | app.rb:183:9:183:14 | result | provenance | | +| app.rb:189:9:189:17 | user_data | app.rb:191:14:191:22 | user_data | provenance | | +| app.rb:189:9:189:17 | user_data : [collection] [element] | app.rb:191:14:191:22 | user_data | provenance | | +| app.rb:189:21:189:31 | call to user_params | app.rb:189:9:189:17 | user_data | provenance | | +| app.rb:189:21:189:31 | call to user_params : [collection] [element] | app.rb:189:9:189:17 | user_data : [collection] [element] | provenance | | +| app.rb:190:9:190:21 | simple_result | app.rb:192:14:192:26 | simple_result | provenance | | +| app.rb:190:9:190:21 | simple_result | app.rb:192:14:192:26 | simple_result | provenance | | +| app.rb:190:25:190:37 | call to simple_helper | app.rb:190:9:190:21 | simple_result | provenance | | +| app.rb:190:25:190:37 | call to simple_helper | app.rb:190:9:190:21 | simple_result | provenance | | +| app.rb:199:13:199:19 | user_id | app.rb:200:18:200:24 | user_id | provenance | | +| app.rb:199:23:199:28 | call to params | app.rb:199:23:199:33 | ...[...] | provenance | | +| app.rb:199:23:199:33 | ...[...] | app.rb:199:13:199:19 | user_id | provenance | | +| app.rb:205:9:205:17 | user_data | app.rb:206:14:206:22 | user_data | provenance | | +| app.rb:205:9:205:17 | user_data : [collection] [element] | app.rb:206:14:206:22 | user_data | provenance | | +| app.rb:205:21:205:31 | call to user_params | app.rb:205:9:205:17 | user_data | provenance | | +| app.rb:205:21:205:31 | call to user_params : [collection] [element] | app.rb:205:9:205:17 | user_data : [collection] [element] | provenance | | +| app.rb:212:9:212:19 | auth_result | app.rb:213:14:213:24 | auth_result | provenance | | +| app.rb:212:9:212:19 | auth_result | app.rb:213:14:213:24 | auth_result | provenance | | +| app.rb:212:23:212:39 | call to authenticate_user | app.rb:212:9:212:19 | auth_result | provenance | | +| app.rb:212:23:212:39 | call to authenticate_user | app.rb:212:9:212:19 | auth_result | provenance | | +| app.rb:216:9:216:19 | perm_result | app.rb:217:14:217:24 | perm_result | provenance | | +| app.rb:216:9:216:19 | perm_result | app.rb:217:14:217:24 | perm_result | provenance | | +| app.rb:216:23:216:48 | call to check_permissions | app.rb:216:9:216:19 | perm_result | provenance | | +| app.rb:216:23:216:48 | call to check_permissions | app.rb:216:9:216:19 | perm_result | provenance | | +| app.rb:220:9:220:25 | validation_result | app.rb:221:14:221:30 | validation_result | provenance | | +| app.rb:220:9:220:25 | validation_result | app.rb:221:14:221:30 | validation_result | provenance | | +| app.rb:220:29:220:80 | call to validate_email | app.rb:220:9:220:25 | validation_result | provenance | | +| app.rb:220:29:220:80 | call to validate_email | app.rb:220:9:220:25 | validation_result | provenance | | +| app.rb:225:13:225:24 | debug_result | app.rb:226:18:226:29 | debug_result | provenance | | +| app.rb:225:13:225:24 | debug_result | app.rb:226:18:226:29 | debug_result | provenance | | +| app.rb:225:28:225:39 | call to debug_helper | app.rb:225:13:225:24 | debug_result | provenance | | +| app.rb:225:28:225:39 | call to debug_helper | app.rb:225:13:225:24 | debug_result | provenance | | +| app.rb:230:9:230:21 | rescue_result | app.rb:231:14:231:26 | rescue_result | provenance | | +| app.rb:230:9:230:21 | rescue_result | app.rb:231:14:231:26 | rescue_result | provenance | | +| app.rb:230:25:230:37 | call to rescue_helper | app.rb:230:9:230:21 | rescue_result | provenance | | +| app.rb:230:25:230:37 | call to rescue_helper | app.rb:230:9:230:21 | rescue_result | provenance | | +| app.rb:235:13:235:23 | case_result | app.rb:236:18:236:28 | case_result | provenance | | +| app.rb:235:13:235:23 | case_result | app.rb:236:18:236:28 | case_result | provenance | | +| app.rb:235:27:235:37 | call to test_helper | app.rb:235:13:235:23 | case_result | provenance | | +| app.rb:235:27:235:37 | call to test_helper | app.rb:235:13:235:23 | case_result | provenance | | nodes | app.rb:103:13:103:18 | call to params | semmle.label | call to params | | app.rb:103:13:103:70 | call to select | semmle.label | call to select | @@ -48,58 +84,118 @@ nodes | app.rb:107:13:107:32 | call to source | semmle.label | call to source | | app.rb:111:13:111:33 | call to source | semmle.label | call to source | | app.rb:111:13:111:33 | call to source | semmle.label | call to source | -| app.rb:126:9:126:15 | user_id | semmle.label | user_id | -| app.rb:126:19:126:24 | call to params | semmle.label | call to params | -| app.rb:126:19:126:34 | ...[...] | semmle.label | ...[...] | -| app.rb:127:9:127:16 | route_id | semmle.label | route_id | -| app.rb:127:20:127:40 | call to route_param | semmle.label | call to route_param | -| app.rb:128:9:128:12 | auth | semmle.label | auth | -| app.rb:128:16:128:22 | call to headers | semmle.label | call to headers | -| app.rb:128:16:128:38 | ...[...] | semmle.label | ...[...] | -| app.rb:129:9:129:15 | session | semmle.label | session | -| app.rb:129:19:129:25 | call to cookies | semmle.label | call to cookies | -| app.rb:129:19:129:38 | ...[...] | semmle.label | ...[...] | -| app.rb:133:14:133:20 | user_id | semmle.label | user_id | -| app.rb:134:14:134:21 | route_id | semmle.label | route_id | -| app.rb:135:14:135:17 | auth | semmle.label | auth | -| app.rb:136:14:136:20 | session | semmle.label | session | -| app.rb:143:9:143:14 | result | semmle.label | result | -| app.rb:143:9:143:14 | result | semmle.label | result | -| app.rb:143:18:143:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | -| app.rb:143:18:143:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | -| app.rb:144:14:144:19 | result | semmle.label | result | -| app.rb:144:14:144:19 | result | semmle.label | result | -| app.rb:149:9:149:17 | user_data | semmle.label | user_data | -| app.rb:149:9:149:17 | user_data : [collection] [element] | semmle.label | user_data : [collection] [element] | -| app.rb:149:21:149:31 | call to user_params | semmle.label | call to user_params | -| app.rb:149:21:149:31 | call to user_params : [collection] [element] | semmle.label | call to user_params : [collection] [element] | -| app.rb:150:9:150:21 | simple_result | semmle.label | simple_result | -| app.rb:150:9:150:21 | simple_result | semmle.label | simple_result | -| app.rb:150:25:150:37 | call to simple_helper | semmle.label | call to simple_helper | -| app.rb:150:25:150:37 | call to simple_helper | semmle.label | call to simple_helper | -| app.rb:151:14:151:22 | user_data | semmle.label | user_data | -| app.rb:152:14:152:26 | simple_result | semmle.label | simple_result | -| app.rb:152:14:152:26 | simple_result | semmle.label | simple_result | -| app.rb:159:13:159:19 | user_id | semmle.label | user_id | -| app.rb:159:23:159:28 | call to params | semmle.label | call to params | -| app.rb:159:23:159:33 | ...[...] | semmle.label | ...[...] | -| app.rb:160:18:160:24 | user_id | semmle.label | user_id | -| app.rb:165:9:165:17 | user_data | semmle.label | user_data | -| app.rb:165:9:165:17 | user_data : [collection] [element] | semmle.label | user_data : [collection] [element] | -| app.rb:165:21:165:31 | call to user_params | semmle.label | call to user_params | -| app.rb:165:21:165:31 | call to user_params : [collection] [element] | semmle.label | call to user_params : [collection] [element] | -| app.rb:166:14:166:22 | user_data | semmle.label | user_data | +| app.rb:118:17:118:43 | call to source | semmle.label | call to source | +| app.rb:118:17:118:43 | call to source | semmle.label | call to source | +| app.rb:122:17:122:47 | call to source | semmle.label | call to source | +| app.rb:122:17:122:47 | call to source | semmle.label | call to source | +| app.rb:128:17:128:42 | call to source | semmle.label | call to source | +| app.rb:128:17:128:42 | call to source | semmle.label | call to source | +| app.rb:134:17:134:42 | call to source | semmle.label | call to source | +| app.rb:134:17:134:42 | call to source | semmle.label | call to source | +| app.rb:140:17:140:37 | call to source | semmle.label | call to source | +| app.rb:140:17:140:37 | call to source | semmle.label | call to source | +| app.rb:150:17:150:35 | call to source | semmle.label | call to source | +| app.rb:150:17:150:35 | call to source | semmle.label | call to source | +| app.rb:166:9:166:15 | user_id | semmle.label | user_id | +| app.rb:166:19:166:24 | call to params | semmle.label | call to params | +| app.rb:166:19:166:34 | ...[...] | semmle.label | ...[...] | +| app.rb:167:9:167:16 | route_id | semmle.label | route_id | +| app.rb:167:20:167:40 | call to route_param | semmle.label | call to route_param | +| app.rb:168:9:168:12 | auth | semmle.label | auth | +| app.rb:168:16:168:22 | call to headers | semmle.label | call to headers | +| app.rb:168:16:168:38 | ...[...] | semmle.label | ...[...] | +| app.rb:169:9:169:15 | session | semmle.label | session | +| app.rb:169:19:169:25 | call to cookies | semmle.label | call to cookies | +| app.rb:169:19:169:38 | ...[...] | semmle.label | ...[...] | +| app.rb:173:14:173:20 | user_id | semmle.label | user_id | +| app.rb:174:14:174:21 | route_id | semmle.label | route_id | +| app.rb:175:14:175:17 | auth | semmle.label | auth | +| app.rb:176:14:176:20 | session | semmle.label | session | +| app.rb:183:9:183:14 | result | semmle.label | result | +| app.rb:183:9:183:14 | result | semmle.label | result | +| app.rb:183:18:183:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | +| app.rb:183:18:183:43 | call to vulnerable_helper | semmle.label | call to vulnerable_helper | +| app.rb:184:14:184:19 | result | semmle.label | result | +| app.rb:184:14:184:19 | result | semmle.label | result | +| app.rb:189:9:189:17 | user_data | semmle.label | user_data | +| app.rb:189:9:189:17 | user_data : [collection] [element] | semmle.label | user_data : [collection] [element] | +| app.rb:189:21:189:31 | call to user_params | semmle.label | call to user_params | +| app.rb:189:21:189:31 | call to user_params : [collection] [element] | semmle.label | call to user_params : [collection] [element] | +| app.rb:190:9:190:21 | simple_result | semmle.label | simple_result | +| app.rb:190:9:190:21 | simple_result | semmle.label | simple_result | +| app.rb:190:25:190:37 | call to simple_helper | semmle.label | call to simple_helper | +| app.rb:190:25:190:37 | call to simple_helper | semmle.label | call to simple_helper | +| app.rb:191:14:191:22 | user_data | semmle.label | user_data | +| app.rb:192:14:192:26 | simple_result | semmle.label | simple_result | +| app.rb:192:14:192:26 | simple_result | semmle.label | simple_result | +| app.rb:199:13:199:19 | user_id | semmle.label | user_id | +| app.rb:199:23:199:28 | call to params | semmle.label | call to params | +| app.rb:199:23:199:33 | ...[...] | semmle.label | ...[...] | +| app.rb:200:18:200:24 | user_id | semmle.label | user_id | +| app.rb:205:9:205:17 | user_data | semmle.label | user_data | +| app.rb:205:9:205:17 | user_data : [collection] [element] | semmle.label | user_data : [collection] [element] | +| app.rb:205:21:205:31 | call to user_params | semmle.label | call to user_params | +| app.rb:205:21:205:31 | call to user_params : [collection] [element] | semmle.label | call to user_params : [collection] [element] | +| app.rb:206:14:206:22 | user_data | semmle.label | user_data | +| app.rb:212:9:212:19 | auth_result | semmle.label | auth_result | +| app.rb:212:9:212:19 | auth_result | semmle.label | auth_result | +| app.rb:212:23:212:39 | call to authenticate_user | semmle.label | call to authenticate_user | +| app.rb:212:23:212:39 | call to authenticate_user | semmle.label | call to authenticate_user | +| app.rb:213:14:213:24 | auth_result | semmle.label | auth_result | +| app.rb:213:14:213:24 | auth_result | semmle.label | auth_result | +| app.rb:216:9:216:19 | perm_result | semmle.label | perm_result | +| app.rb:216:9:216:19 | perm_result | semmle.label | perm_result | +| app.rb:216:23:216:48 | call to check_permissions | semmle.label | call to check_permissions | +| app.rb:216:23:216:48 | call to check_permissions | semmle.label | call to check_permissions | +| app.rb:217:14:217:24 | perm_result | semmle.label | perm_result | +| app.rb:217:14:217:24 | perm_result | semmle.label | perm_result | +| app.rb:220:9:220:25 | validation_result | semmle.label | validation_result | +| app.rb:220:9:220:25 | validation_result | semmle.label | validation_result | +| app.rb:220:29:220:80 | call to validate_email | semmle.label | call to validate_email | +| app.rb:220:29:220:80 | call to validate_email | semmle.label | call to validate_email | +| app.rb:221:14:221:30 | validation_result | semmle.label | validation_result | +| app.rb:221:14:221:30 | validation_result | semmle.label | validation_result | +| app.rb:225:13:225:24 | debug_result | semmle.label | debug_result | +| app.rb:225:13:225:24 | debug_result | semmle.label | debug_result | +| app.rb:225:28:225:39 | call to debug_helper | semmle.label | call to debug_helper | +| app.rb:225:28:225:39 | call to debug_helper | semmle.label | call to debug_helper | +| app.rb:226:18:226:29 | debug_result | semmle.label | debug_result | +| app.rb:226:18:226:29 | debug_result | semmle.label | debug_result | +| app.rb:230:9:230:21 | rescue_result | semmle.label | rescue_result | +| app.rb:230:9:230:21 | rescue_result | semmle.label | rescue_result | +| app.rb:230:25:230:37 | call to rescue_helper | semmle.label | call to rescue_helper | +| app.rb:230:25:230:37 | call to rescue_helper | semmle.label | call to rescue_helper | +| app.rb:231:14:231:26 | rescue_result | semmle.label | rescue_result | +| app.rb:231:14:231:26 | rescue_result | semmle.label | rescue_result | +| app.rb:235:13:235:23 | case_result | semmle.label | case_result | +| app.rb:235:13:235:23 | case_result | semmle.label | case_result | +| app.rb:235:27:235:37 | call to test_helper | semmle.label | call to test_helper | +| app.rb:235:27:235:37 | call to test_helper | semmle.label | call to test_helper | +| app.rb:236:18:236:28 | case_result | semmle.label | case_result | +| app.rb:236:18:236:28 | case_result | semmle.label | case_result | subpaths testFailures #select -| app.rb:133:14:133:20 | user_id | app.rb:126:19:126:24 | call to params | app.rb:133:14:133:20 | user_id | $@ | app.rb:126:19:126:24 | call to params | call to params | -| app.rb:134:14:134:21 | route_id | app.rb:127:20:127:40 | call to route_param | app.rb:134:14:134:21 | route_id | $@ | app.rb:127:20:127:40 | call to route_param | call to route_param | -| app.rb:135:14:135:17 | auth | app.rb:128:16:128:22 | call to headers | app.rb:135:14:135:17 | auth | $@ | app.rb:128:16:128:22 | call to headers | call to headers | -| app.rb:136:14:136:20 | session | app.rb:129:19:129:25 | call to cookies | app.rb:136:14:136:20 | session | $@ | app.rb:129:19:129:25 | call to cookies | call to cookies | -| app.rb:144:14:144:19 | result | app.rb:107:13:107:32 | call to source | app.rb:144:14:144:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | -| app.rb:144:14:144:19 | result | app.rb:107:13:107:32 | call to source | app.rb:144:14:144:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | -| app.rb:151:14:151:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:151:14:151:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | -| app.rb:152:14:152:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:152:14:152:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | -| app.rb:152:14:152:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:152:14:152:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | -| app.rb:160:18:160:24 | user_id | app.rb:159:23:159:28 | call to params | app.rb:160:18:160:24 | user_id | $@ | app.rb:159:23:159:28 | call to params | call to params | -| app.rb:166:14:166:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:166:14:166:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | +| app.rb:173:14:173:20 | user_id | app.rb:166:19:166:24 | call to params | app.rb:173:14:173:20 | user_id | $@ | app.rb:166:19:166:24 | call to params | call to params | +| app.rb:174:14:174:21 | route_id | app.rb:167:20:167:40 | call to route_param | app.rb:174:14:174:21 | route_id | $@ | app.rb:167:20:167:40 | call to route_param | call to route_param | +| app.rb:175:14:175:17 | auth | app.rb:168:16:168:22 | call to headers | app.rb:175:14:175:17 | auth | $@ | app.rb:168:16:168:22 | call to headers | call to headers | +| app.rb:176:14:176:20 | session | app.rb:169:19:169:25 | call to cookies | app.rb:176:14:176:20 | session | $@ | app.rb:169:19:169:25 | call to cookies | call to cookies | +| app.rb:184:14:184:19 | result | app.rb:107:13:107:32 | call to source | app.rb:184:14:184:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | +| app.rb:184:14:184:19 | result | app.rb:107:13:107:32 | call to source | app.rb:184:14:184:19 | result | $@ | app.rb:107:13:107:32 | call to source | call to source | +| app.rb:191:14:191:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:191:14:191:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | +| app.rb:192:14:192:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:192:14:192:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | +| app.rb:192:14:192:26 | simple_result | app.rb:111:13:111:33 | call to source | app.rb:192:14:192:26 | simple_result | $@ | app.rb:111:13:111:33 | call to source | call to source | +| app.rb:200:18:200:24 | user_id | app.rb:199:23:199:28 | call to params | app.rb:200:18:200:24 | user_id | $@ | app.rb:199:23:199:28 | call to params | call to params | +| app.rb:206:14:206:22 | user_data | app.rb:103:13:103:18 | call to params | app.rb:206:14:206:22 | user_data | $@ | app.rb:103:13:103:18 | call to params | call to params | +| app.rb:213:14:213:24 | auth_result | app.rb:118:17:118:43 | call to source | app.rb:213:14:213:24 | auth_result | $@ | app.rb:118:17:118:43 | call to source | call to source | +| app.rb:213:14:213:24 | auth_result | app.rb:118:17:118:43 | call to source | app.rb:213:14:213:24 | auth_result | $@ | app.rb:118:17:118:43 | call to source | call to source | +| app.rb:217:14:217:24 | perm_result | app.rb:122:17:122:47 | call to source | app.rb:217:14:217:24 | perm_result | $@ | app.rb:122:17:122:47 | call to source | call to source | +| app.rb:217:14:217:24 | perm_result | app.rb:122:17:122:47 | call to source | app.rb:217:14:217:24 | perm_result | $@ | app.rb:122:17:122:47 | call to source | call to source | +| app.rb:221:14:221:30 | validation_result | app.rb:128:17:128:42 | call to source | app.rb:221:14:221:30 | validation_result | $@ | app.rb:128:17:128:42 | call to source | call to source | +| app.rb:221:14:221:30 | validation_result | app.rb:128:17:128:42 | call to source | app.rb:221:14:221:30 | validation_result | $@ | app.rb:128:17:128:42 | call to source | call to source | +| app.rb:226:18:226:29 | debug_result | app.rb:134:17:134:42 | call to source | app.rb:226:18:226:29 | debug_result | $@ | app.rb:134:17:134:42 | call to source | call to source | +| app.rb:226:18:226:29 | debug_result | app.rb:134:17:134:42 | call to source | app.rb:226:18:226:29 | debug_result | $@ | app.rb:134:17:134:42 | call to source | call to source | +| app.rb:231:14:231:26 | rescue_result | app.rb:140:17:140:37 | call to source | app.rb:231:14:231:26 | rescue_result | $@ | app.rb:140:17:140:37 | call to source | call to source | +| app.rb:231:14:231:26 | rescue_result | app.rb:140:17:140:37 | call to source | app.rb:231:14:231:26 | rescue_result | $@ | app.rb:140:17:140:37 | call to source | call to source | +| app.rb:236:18:236:28 | case_result | app.rb:150:17:150:35 | call to source | app.rb:236:18:236:28 | case_result | $@ | app.rb:150:17:150:35 | call to source | call to source | +| app.rb:236:18:236:28 | case_result | app.rb:150:17:150:35 | call to source | app.rb:236:18:236:28 | case_result | $@ | app.rb:150:17:150:35 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected index d39d9430f926..7088eeb9018a 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.expected +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.expected @@ -1,7 +1,7 @@ grapeApiClasses | app.rb:1:1:90:3 | MyAPI | | app.rb:92:1:96:3 | AdminAPI | -| app.rb:98:1:168:3 | UserAPI | +| app.rb:98:1:239:3 | UserAPI | grapeEndpoints | app.rb:1:1:90:3 | MyAPI | app.rb:7:3:11:5 | call to get | GET | /hello/:name | | app.rb:1:1:90:3 | MyAPI | app.rb:17:3:20:5 | call to post | POST | /messages | @@ -14,10 +14,11 @@ grapeEndpoints | app.rb:1:1:90:3 | MyAPI | app.rb:78:3:82:5 | call to get | GET | /cookie_test | | app.rb:1:1:90:3 | MyAPI | app.rb:85:3:89:5 | call to get | GET | /header_test | | app.rb:92:1:96:3 | AdminAPI | app.rb:93:3:95:5 | call to get | GET | /admin | -| app.rb:98:1:168:3 | UserAPI | app.rb:124:5:138:7 | call to get | GET | /comprehensive_test/:user_id | -| app.rb:98:1:168:3 | UserAPI | app.rb:140:5:145:7 | call to get | GET | /helper_test/:user_id | -| app.rb:98:1:168:3 | UserAPI | app.rb:147:5:153:7 | call to post | POST | /users | -| app.rb:98:1:168:3 | UserAPI | app.rb:164:5:167:7 | call to post | POST | /users | +| app.rb:98:1:239:3 | UserAPI | app.rb:164:5:178:7 | call to get | GET | /comprehensive_test/:user_id | +| app.rb:98:1:239:3 | UserAPI | app.rb:180:5:185:7 | call to get | GET | /helper_test/:user_id | +| app.rb:98:1:239:3 | UserAPI | app.rb:187:5:193:7 | call to post | POST | /users | +| app.rb:98:1:239:3 | UserAPI | app.rb:204:5:207:7 | call to post | POST | /users | +| app.rb:98:1:239:3 | UserAPI | app.rb:210:5:238:7 | call to get | GET | /nested_test/:token | grapeParams | app.rb:8:12:8:17 | call to params | | app.rb:14:3:16:5 | call to params | @@ -28,29 +29,30 @@ grapeParams | app.rb:60:12:60:17 | call to params | | app.rb:94:5:94:10 | call to params | | app.rb:103:13:103:18 | call to params | -| app.rb:126:19:126:24 | call to params | -| app.rb:142:19:142:24 | call to params | -| app.rb:159:23:159:28 | call to params | +| app.rb:117:25:117:30 | call to params | +| app.rb:166:19:166:24 | call to params | +| app.rb:182:19:182:24 | call to params | +| app.rb:199:23:199:28 | call to params | grapeHeaders | app.rb:9:18:9:24 | call to headers | | app.rb:46:5:46:11 | call to headers | | app.rb:66:3:69:5 | call to headers | | app.rb:86:12:86:18 | call to headers | | app.rb:87:14:87:20 | call to headers | -| app.rb:116:5:118:7 | call to headers | -| app.rb:128:16:128:22 | call to headers | +| app.rb:156:5:158:7 | call to headers | +| app.rb:168:16:168:22 | call to headers | grapeRequest | app.rb:25:12:25:18 | call to request | -| app.rb:130:21:130:27 | call to request | +| app.rb:170:21:170:27 | call to request | grapeRouteParam | app.rb:51:15:51:35 | call to route_param | | app.rb:52:15:52:36 | call to route_param | | app.rb:57:3:63:5 | call to route_param | -| app.rb:127:20:127:40 | call to route_param | -| app.rb:156:5:162:7 | call to route_param | +| app.rb:167:20:167:40 | call to route_param | +| app.rb:196:5:202:7 | call to route_param | grapeCookies | app.rb:72:3:75:5 | call to cookies | | app.rb:79:15:79:21 | call to cookies | | app.rb:80:16:80:22 | call to cookies | -| app.rb:120:5:122:7 | call to cookies | -| app.rb:129:19:129:25 | call to cookies | +| app.rb:160:5:162:7 | call to cookies | +| app.rb:169:19:169:25 | call to cookies | diff --git a/ruby/ql/test/library-tests/frameworks/grape/app.rb b/ruby/ql/test/library-tests/frameworks/grape/app.rb index 81f464826876..1b1fd15d5d8c 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/app.rb +++ b/ruby/ql/test/library-tests/frameworks/grape/app.rb @@ -110,6 +110,46 @@ def vulnerable_helper(user_id) def simple_helper source "simpleHelper" # Test simple helper return end + + # Nested helper scenarios that require getParent+() + module AuthHelpers + def authenticate_user + token = params[:token] + source "nestedModuleHelper" # Test nested module helper + end + + def check_permissions(resource) + source "nestedPermissionHelper" # Test nested module helper with params + end + end + + class ValidationHelpers + def self.validate_email(email) + source "nestedClassHelper" # Test nested class helper + end + end + + if Rails.env.development? + def debug_helper + source "conditionalHelper" # Test helper inside conditional block + end + end + + begin + def rescue_helper + source "rescueHelper" # Test helper inside begin block + end + rescue + # error handling + end + + # Helper inside a case statement + case ENV['RACK_ENV'] + when 'test' + def test_helper + source "caseHelper" # Test helper inside case block + end + end end # Headers and cookies blocks for DSL testing @@ -165,4 +205,35 @@ def simple_helper user_data = user_params sink user_data # $ hasTaintFlow end + + # Test nested helper methods + get '/nested_test/:token' do + # Test nested module helper + auth_result = authenticate_user + sink auth_result # $ hasValueFlow=nestedModuleHelper + + # Test nested module helper with parameters + perm_result = check_permissions("admin") + sink perm_result # $ hasValueFlow=nestedPermissionHelper + + # Test nested class helper + validation_result = ValidationHelpers.validate_email("test@example.com") + sink validation_result # $ hasValueFlow=nestedClassHelper + + # Test conditional helper (if it exists) + if respond_to?(:debug_helper) + debug_result = debug_helper + sink debug_result # $ hasValueFlow=conditionalHelper + end + + # Test rescue helper + rescue_result = rescue_helper + sink rescue_result # $ hasValueFlow=rescueHelper + + # Test case helper (if it exists) + if respond_to?(:test_helper) + case_result = test_helper + sink case_result # $ hasValueFlow=caseHelper + end + end end From 6e56c549b2600540306812048ead37ed53dd37bc Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:21:23 -0400 Subject: [PATCH 181/219] Refactor Grape method call classes to simplify handling of API instance calls for headers, request, route_param, and cookies --- ruby/ql/lib/codeql/ruby/frameworks/Grape.qll | 28 +++----------------- 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll index 4d64e9461b38..9b7ae6185cdb 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Grape.qll @@ -163,12 +163,7 @@ module Grape { */ private class GrapeHeadersCall extends MethodCall { GrapeHeadersCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "headers" - ) - or - // Also handle cases where headers is called on an instance of a Grape API class + // Handle cases where headers is called on an instance of a Grape API class this = grapeApiInstance().getAMethodCall("headers").asExpr().getExpr() } } @@ -206,12 +201,7 @@ module Grape { */ private class GrapeRequestCall extends MethodCall { GrapeRequestCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "request" - ) - or - // Also handle cases where request is called on an instance of a Grape API class + // Handle cases where request is called on an instance of a Grape API class this = grapeApiInstance().getAMethodCall("request").asExpr().getExpr() } } @@ -221,12 +211,7 @@ module Grape { */ private class GrapeRouteParamCall extends MethodCall { GrapeRouteParamCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asExpr().getExpr() and - this.getMethodName() = "route_param" - ) - or - // Also handle cases where route_param is called on an instance of a Grape API class + // Handle cases where route_param is called on an instance of a Grape API class this = grapeApiInstance().getAMethodCall("route_param").asExpr().getExpr() } } @@ -274,12 +259,7 @@ module Grape { */ private class GrapeCookiesCall extends MethodCall { GrapeCookiesCall() { - exists(GrapeEndpoint endpoint | - this.getParent+() = endpoint.getBody().asCallableAstNode() and - this.getMethodName() = "cookies" - ) - or - // Also handle cases where cookies is called on an instance of a Grape API class + // Handle cases where cookies is called on an instance of a Grape API class this = grapeApiInstance().getAMethodCall("cookies").asExpr().getExpr() } } From 89fd9694cef692446e54e71a730abf1d427b7627 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:25:05 -0400 Subject: [PATCH 182/219] codeql query format --- ruby/ql/test/library-tests/frameworks/grape/Grape.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql index c5f0798f7a6b..63cd15a547e1 100644 --- a/ruby/ql/test/library-tests/frameworks/grape/Grape.ql +++ b/ruby/ql/test/library-tests/frameworks/grape/Grape.ql @@ -5,7 +5,9 @@ import codeql.ruby.AST query predicate grapeApiClasses(Grape::GrapeApiClass api) { any() } -query predicate grapeEndpoints(Grape::GrapeApiClass api, Grape::GrapeEndpoint endpoint, string method, string path) { +query predicate grapeEndpoints( + Grape::GrapeApiClass api, Grape::GrapeEndpoint endpoint, string method, string path +) { endpoint = api.getAnEndpoint() and method = endpoint.getHttpMethod() and path = endpoint.getPath() From 37e0c3084278fd5a326b7021eaf73b08d1be801f Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Tue, 23 Sep 2025 10:40:30 -0400 Subject: [PATCH 183/219] Add expected output for VariablesConsistency test case --- .../grape/CONSISTENCY/VariablesConsistency.expected | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/test/library-tests/frameworks/grape/CONSISTENCY/VariablesConsistency.expected diff --git a/ruby/ql/test/library-tests/frameworks/grape/CONSISTENCY/VariablesConsistency.expected b/ruby/ql/test/library-tests/frameworks/grape/CONSISTENCY/VariablesConsistency.expected new file mode 100644 index 000000000000..edcc754b792e --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/grape/CONSISTENCY/VariablesConsistency.expected @@ -0,0 +1,4 @@ +variableIsCaptured +| app.rb:126:9:130:11 | self | CapturedVariable is not captured | +consistencyOverview +| CapturedVariable is not captured | 1 | From e6b1e8ec561059d45b828e89e5c09e3f1274f63e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 22 Sep 2025 14:35:27 +0200 Subject: [PATCH 184/219] Rust: Check call arities in path resolution --- .../internal/ControlFlowGraphImpl.qll | 2 +- .../rust/elements/internal/CallImpl.qll | 2 +- .../rust/elements/internal/CallableImpl.qll | 10 ++++ .../rust/elements/internal/VariableImpl.qll | 2 +- .../codeql/rust/internal/PathResolution.qll | 40 +++++++++++-- .../codeql/rust/internal/TypeInference.qll | 12 ++-- .../PathResolutionConsistency.expected | 5 -- .../PathResolutionConsistency.expected | 10 ---- .../HardcodedCryptographicValue.expected | 59 +++++++------------ 9 files changed, 75 insertions(+), 67 deletions(-) delete mode 100644 rust/ql/test/query-tests/security/CWE-798/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index ddc4dae9b958..f87daaaf51a3 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -77,7 +77,7 @@ class CallableScopeTree extends StandardTree, PreOrderTree, PostOrderTree, Scope override AstNode getChildNode(int i) { i = 0 and - result = this.getParamList().getSelfParam() + result = this.getSelfParam() or result = this.getParam(i - 1) or diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll index 020b50594a6d..210820fd1053 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll @@ -102,7 +102,7 @@ module Impl { f = resolvePath(path) and path.getSegment().getIdentifier().getText() = methodName and exists(SelfParam self | - self = f.getParamList().getSelfParam() and + self = f.getSelfParam() and if self.isRef() then selfIsRef = true else selfIsRef = false ) ) diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll index 37e24a9150ce..46489cab981b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll @@ -17,5 +17,15 @@ module Impl { */ class Callable extends Generated::Callable { override Param getParam(int index) { result = this.getParamList().getParam(index) } + + /** + * Gets the self parameter of this callable, if it exists. + */ + SelfParam getSelfParam() { result = this.getParamList().getSelfParam() } + + /** + * Holds if `getSelfParam()` exists. + */ + predicate hasSelfParam() { exists(this.getSelfParam()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index eaced654b017..805692817213 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -109,7 +109,7 @@ module Impl { text = name.getText() and // exclude self parameters from functions without a body as these are // trait method declarations without implementations - not exists(Function f | not f.hasBody() and f.getParamList().getSelfParam() = sp) + not exists(Function f | not f.hasBody() and f.getSelfParam() = sp) ) or exists(IdentPat pat | diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index efd614db63a4..4b3683088781 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -4,6 +4,7 @@ private import rust private import codeql.rust.elements.internal.generated.ParentChild +private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl private import codeql.rust.internal.CachedStages private import codeql.rust.frameworks.stdlib.Builtins as Builtins private import codeql.util.Option @@ -604,7 +605,13 @@ private class EnumItemNode extends TypeItemNode instanceof Enum { } } -private class VariantItemNode extends ItemNode instanceof Variant { +/** An item that can be called with arguments. */ +abstract class CallableItemNode extends ItemNode { + /** Gets the number of parameters of this item. */ + abstract int getNumberOfParameters(); +} + +private class VariantItemNode extends CallableItemNode instanceof Variant { override string getName() { result = Variant.super.getName().getText() } override Namespace getNamespace() { @@ -617,6 +624,10 @@ private class VariantItemNode extends ItemNode instanceof Variant { override Visibility getVisibility() { result = super.getEnum().getVisibility() } + override int getNumberOfParameters() { + result = super.getFieldList().(TupleFieldList).getNumberOfFields() + } + override predicate hasCanonicalPath(Crate c) { this.hasCanonicalPathPrefix(c) } bindingset[c] @@ -638,7 +649,7 @@ private class VariantItemNode extends ItemNode instanceof Variant { } } -class FunctionItemNode extends AssocItemNode instanceof Function { +class FunctionItemNode extends AssocItemNode, CallableItemNode instanceof Function { override string getName() { result = Function.super.getName().getText() } override predicate hasImplementation() { Function.super.hasImplementation() } @@ -648,6 +659,13 @@ class FunctionItemNode extends AssocItemNode instanceof Function { override TypeParam getTypeParam(int i) { result = super.getGenericParamList().getTypeParam(i) } override Visibility getVisibility() { result = Function.super.getVisibility() } + + override int getNumberOfParameters() { + exists(int arr | + arr = super.getNumberOfParams() and + if super.hasSelfParam() then result = arr + 1 else result = arr + ) + } } abstract class ImplOrTraitItemNode extends ItemNode { @@ -712,8 +730,10 @@ final class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { TypeParamItemNode getBlanketImplementationTypeParam() { result = this.resolveSelfTy() } /** - * Holds if this impl block is a blanket implementation. That is, the + * Holds if this impl block is a [blanket implementation][1]. That is, the * implementation targets a generic parameter of the impl block. + * + * [1]: https://doc.rust-lang.org/book/ch10-02-traits.html#using-trait-bounds-to-conditionally-implement-methods */ predicate isBlanketImplementation() { exists(this.getBlanketImplementationTypeParam()) } @@ -865,7 +885,7 @@ private class ImplItemNodeImpl extends ImplItemNode { TraitItemNode resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } } -private class StructItemNode extends TypeItemNode instanceof Struct { +private class StructItemNode extends TypeItemNode, CallableItemNode instanceof Struct { override string getName() { result = Struct.super.getName().getText() } override Namespace getNamespace() { @@ -877,6 +897,10 @@ private class StructItemNode extends TypeItemNode instanceof Struct { override Visibility getVisibility() { result = Struct.super.getVisibility() } + override int getNumberOfParameters() { + result = super.getFieldList().(TupleFieldList).getNumberOfFields() + } + override TypeParam getTypeParam(int i) { result = super.getGenericParamList().getTypeParam(i) } override predicate hasCanonicalPath(Crate c) { this.hasCanonicalPathPrefix(c) } @@ -1687,6 +1711,14 @@ private ItemNode resolvePathCand(RelevantPath path) { or not pathUsesNamespace(path, _) and not path = any(MacroCall mc).getPath() + ) and + ( + not path = CallExprImpl::getFunctionPath(_) + or + exists(CallExpr ce | + path = CallExprImpl::getFunctionPath(ce) and + result.(CallableItemNode).getNumberOfParameters() = ce.getNumberOfArgs() + ) ) } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 16c0b30332ef..48281bd48465 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -230,7 +230,7 @@ module Consistency { // Suppress the inconsistency if `n` is a self parameter and the type // mention for the self type has multiple types for a path. not exists(ImplItemNode impl, TypePath selfTypePath | - n = impl.getAnAssocItem().(Function).getParamList().getSelfParam() and + n = impl.getAnAssocItem().(Function).getSelfParam() and strictcount(impl.(Impl).getSelfTy().(TypeMention).resolveTypeAt(selfTypePath)) > 1 ) } @@ -948,7 +948,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { ) or exists(SelfParam self | - self = pragma[only_bind_into](this.getParamList().getSelfParam()) and + self = pragma[only_bind_into](this.getSelfParam()) and dpos.isSelf() and result = inferAnnotatedType(self, path) // `self` parameter with type annotation ) @@ -972,7 +972,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { exists(ImplOrTraitItemNode i | this = i.getAnAssocItem() and dpos.isSelf() and - not this.getParamList().hasSelfParam() + not this.hasSelfParam() | result = TSelfTypeParameter(i) and path.isEmpty() @@ -1900,7 +1900,7 @@ private predicate methodCandidate(Type type, string name, int arity, Impl impl) type = impl.getSelfTy().(TypeMention).resolveType() and exists(Function f | f = impl.(ImplItemNode).getASuccessor(name) and - f.getParamList().hasSelfParam() and + f.hasSelfParam() and arity = f.getParamList().getNumberOfParams() ) } @@ -2222,7 +2222,7 @@ private module BlanketImplementation { ) { isCanonicalImpl(impl) and blanketImplementationTraitBound(impl, traitBound) and - f.getParamList().hasSelfParam() and + f.hasSelfParam() and arity = f.getParamList().getNumberOfParams() and ( f = impl.getAssocItem(name) @@ -2332,7 +2332,7 @@ private Function resolveMethodCallTarget(MethodCall mc) { pragma[nomagic] private predicate assocFuncResolutionDependsOnArgument(Function f, Impl impl, int pos) { functionResolutionDependsOnArgument(impl, _, f, pos, _, _) and - not f.getParamList().hasSelfParam() + not f.hasSelfParam() } private class FunctionCallExpr extends CallImpl::CallExprCall { diff --git a/rust/ql/test/query-tests/security/CWE-327/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-327/CONSISTENCY/PathResolutionConsistency.expected index 50dd9e9f0ed2..b9925a323cc8 100644 --- a/rust/ql/test/query-tests/security/CWE-327/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-327/CONSISTENCY/PathResolutionConsistency.expected @@ -1,7 +1,2 @@ multipleCallTargets -| test_cipher.rs:20:27:20:48 | ...::new(...) | -| test_cipher.rs:26:27:26:48 | ...::new(...) | -| test_cipher.rs:29:27:29:48 | ...::new(...) | -| test_cipher.rs:36:30:36:59 | ...::new(...) | -| test_cipher.rs:39:30:39:63 | ...::new(...) | | test_cipher.rs:114:23:114:50 | ...::new(...) | diff --git a/rust/ql/test/query-tests/security/CWE-798/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-798/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index b0ca63000651..000000000000 --- a/rust/ql/test/query-tests/security/CWE-798/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,10 +0,0 @@ -multipleCallTargets -| test_cipher.rs:15:30:15:77 | ...::new(...) | -| test_cipher.rs:19:30:19:80 | ...::new(...) | -| test_cipher.rs:22:30:22:98 | ...::new(...) | -| test_cipher.rs:26:30:26:101 | ...::new(...) | -| test_cipher.rs:30:30:30:102 | ...::new(...) | -| test_cipher.rs:38:30:38:81 | ...::new(...) | -| test_cipher.rs:42:30:42:80 | ...::new(...) | -| test_cipher.rs:47:30:47:85 | ...::new(...) | -| test_cipher.rs:51:31:51:83 | ...::new(...) | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index d16be723b8f2..3b52014e1fcd 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -1,16 +1,10 @@ #select | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | -| test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | -| test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | -| test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:38:30:38:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:38:30:38:47 | ...::new | a key | -| test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:38:30:38:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:38:30:38:47 | ...::new | a key | -| test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:42:30:42:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:42:30:42:47 | ...::new | a key | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:42:30:42:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:42:30:42:47 | ...::new | a key | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key | -| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key | | test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:74:23:74:44 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:74:23:74:44 | ...::new_from_slice | a key | | test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:18:16:18:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:18:16:18:24 | ...::from | a key | | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:22:16:22:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:22:16:22:24 | ...::from | a key | @@ -22,40 +16,34 @@ edges | test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | test_cipher.rs:18:28:18:36 | &... [&ref, element] | provenance | | | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | provenance | | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:19:73:19:78 | const1 [&ref, element] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:19:73:19:78 | const1 [&ref, element] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:25:9:25:14 | const4 [&ref, element] | test_cipher.rs:26:66:26:71 | const4 [&ref, element] | provenance | | | test_cipher.rs:25:28:25:36 | &... [&ref, element] | test_cipher.rs:25:9:25:14 | const4 [&ref, element] | provenance | | | test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | test_cipher.rs:25:28:25:36 | &... [&ref, element] | provenance | | | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | provenance | | -| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:26:66:26:71 | const4 [&ref, element] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:4 Sink:MaD:4 Sink:MaD:4 | +| test_cipher.rs:26:66:26:71 | const4 [&ref, element] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:29:9:29:14 | const5 [&ref, element] | test_cipher.rs:30:95:30:100 | const5 [&ref, element] | provenance | | | test_cipher.rs:29:28:29:36 | &... [&ref, element] | test_cipher.rs:29:9:29:14 | const5 [&ref, element] | provenance | | | test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | test_cipher.rs:29:28:29:36 | &... [&ref, element] | provenance | | | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | provenance | | -| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:4 Sink:MaD:4 Sink:MaD:4 | -| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | -| test_cipher.rs:30:95:30:100 | const5 [&ref, element] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | +| test_cipher.rs:30:95:30:100 | const5 [&ref, element] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:10 | +| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:9 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:10 | +| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:9 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | -| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:8 | +| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:7 | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | | test_cipher.rs:73:9:73:14 | const2 [&ref, element] | test_cipher.rs:74:46:74:51 | const2 [&ref, element] | provenance | | | test_cipher.rs:73:18:73:26 | &... [&ref, element] | test_cipher.rs:73:9:73:14 | const2 [&ref, element] | provenance | | @@ -65,41 +53,39 @@ edges | test_cookie.rs:17:9:17:14 | array1 [element] | test_cookie.rs:18:27:18:32 | array1 [element] | provenance | | | test_cookie.rs:17:28:17:34 | [0; 64] [element] | test_cookie.rs:17:9:17:14 | array1 [element] | provenance | | | test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:17:28:17:34 | [0; 64] [element] | provenance | | -| test_cookie.rs:18:26:18:32 | &array1 [&ref, element] | test_cookie.rs:18:16:18:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | +| test_cookie.rs:18:26:18:32 | &array1 [&ref, element] | test_cookie.rs:18:16:18:24 | ...::from | provenance | MaD:6 Sink:MaD:6 | | test_cookie.rs:18:27:18:32 | array1 [element] | test_cookie.rs:18:26:18:32 | &array1 [&ref, element] | provenance | | | test_cookie.rs:21:9:21:14 | array2 [element] | test_cookie.rs:22:27:22:32 | array2 [element] | provenance | | | test_cookie.rs:21:28:21:34 | [0; 64] [element] | test_cookie.rs:21:9:21:14 | array2 [element] | provenance | | | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:21:28:21:34 | [0; 64] [element] | provenance | | -| test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | test_cookie.rs:22:16:22:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | +| test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | test_cookie.rs:22:16:22:24 | ...::from | provenance | MaD:6 Sink:MaD:6 | | test_cookie.rs:22:27:22:32 | array2 [element] | test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | provenance | | | test_cookie.rs:38:9:38:14 | array2 [element] | test_cookie.rs:42:34:42:39 | array2 [element] | provenance | | | test_cookie.rs:38:18:38:37 | ...::from(...) [element] | test_cookie.rs:38:9:38:14 | array2 [element] | provenance | | -| test_cookie.rs:38:28:38:36 | [0u8; 64] [element] | test_cookie.rs:38:18:38:37 | ...::from(...) [element] | provenance | MaD:9 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] [element] | test_cookie.rs:38:18:38:37 | ...::from(...) [element] | provenance | MaD:8 | | test_cookie.rs:38:29:38:31 | 0u8 | test_cookie.rs:38:28:38:36 | [0u8; 64] [element] | provenance | | | test_cookie.rs:42:34:42:39 | array2 [element] | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:11 | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:10 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | | test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | models | 1 | Sink: <_ as crypto_common::KeyInit>::new_from_slice; Argument[0]; credentials-key | | 2 | Sink: ::from; Argument[0]; credentials-key | | 3 | Sink: ::new; Argument[0]; credentials-key | -| 4 | Sink: ::new; Argument[1]; credentials-iv | -| 5 | Sink: ::new; Argument[0]; credentials-key | -| 6 | Sink: ::new; Argument[1]; credentials-iv | -| 7 | Sink: ::from; Argument[0].Reference; credentials-key | -| 8 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | -| 9 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; value | -| 10 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | -| 11 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | +| 4 | Sink: ::new; Argument[0]; credentials-key | +| 5 | Sink: ::new; Argument[1]; credentials-iv | +| 6 | Sink: ::from; Argument[0].Reference; credentials-key | +| 7 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | +| 8 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; value | +| 9 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | +| 10 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | nodes | test_cipher.rs:18:9:18:14 | const1 [&ref, element] | semmle.label | const1 [&ref, element] | | test_cipher.rs:18:28:18:36 | &... [&ref, element] | semmle.label | &... [&ref, element] | | test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | semmle.label | [0u8; 16] [element] | | test_cipher.rs:18:30:18:32 | 0u8 | semmle.label | 0u8 | | test_cipher.rs:19:30:19:47 | ...::new | semmle.label | ...::new | -| test_cipher.rs:19:30:19:47 | ...::new | semmle.label | ...::new | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | | test_cipher.rs:19:73:19:78 | const1 [&ref, element] | semmle.label | const1 [&ref, element] | | test_cipher.rs:25:9:25:14 | const4 [&ref, element] | semmle.label | const4 [&ref, element] | @@ -107,7 +93,6 @@ nodes | test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | semmle.label | [0u8; 16] [element] | | test_cipher.rs:25:30:25:32 | 0u8 | semmle.label | 0u8 | | test_cipher.rs:26:30:26:40 | ...::new | semmle.label | ...::new | -| test_cipher.rs:26:30:26:40 | ...::new | semmle.label | ...::new | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | | test_cipher.rs:26:66:26:71 | const4 [&ref, element] | semmle.label | const4 [&ref, element] | | test_cipher.rs:29:9:29:14 | const5 [&ref, element] | semmle.label | const5 [&ref, element] | @@ -115,13 +100,11 @@ nodes | test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | semmle.label | [0u8; 16] [element] | | test_cipher.rs:29:30:29:32 | 0u8 | semmle.label | 0u8 | | test_cipher.rs:30:30:30:40 | ...::new | semmle.label | ...::new | -| test_cipher.rs:30:30:30:40 | ...::new | semmle.label | ...::new | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | | test_cipher.rs:30:95:30:100 | const5 [&ref, element] | semmle.label | const5 [&ref, element] | | test_cipher.rs:37:9:37:14 | const7 | semmle.label | const7 | | test_cipher.rs:37:27:37:74 | [...] | semmle.label | [...] | | test_cipher.rs:38:30:38:47 | ...::new | semmle.label | ...::new | -| test_cipher.rs:38:30:38:47 | ...::new | semmle.label | ...::new | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:38:73:38:79 | &const7 [&ref] | semmle.label | &const7 [&ref] | | test_cipher.rs:38:74:38:79 | const7 | semmle.label | const7 | @@ -129,14 +112,12 @@ nodes | test_cipher.rs:41:28:41:76 | &... [&ref] | semmle.label | &... [&ref] | | test_cipher.rs:41:29:41:76 | [...] | semmle.label | [...] | | test_cipher.rs:42:30:42:47 | ...::new | semmle.label | ...::new | -| test_cipher.rs:42:30:42:47 | ...::new | semmle.label | ...::new | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:42:73:42:78 | const8 [&ref] | semmle.label | const8 [&ref] | | test_cipher.rs:50:9:50:15 | const10 [element] | semmle.label | const10 [element] | | test_cipher.rs:50:37:50:52 | ...::zeroed | semmle.label | ...::zeroed | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | semmle.label | ...::zeroed(...) [element] | | test_cipher.rs:51:31:51:48 | ...::new | semmle.label | ...::new | -| test_cipher.rs:51:31:51:48 | ...::new | semmle.label | ...::new | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | semmle.label | &const10 [&ref, element] | | test_cipher.rs:51:75:51:81 | const10 [element] | semmle.label | const10 [element] | From 6e0ce9a88557150e68e504bcbc3b958079a9908c Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Wed, 24 Sep 2025 13:30:11 +0100 Subject: [PATCH 185/219] Add changelog entry for CodeQL 2.23.1 release --- .../codeql-changelog/codeql-cli-2.23.1.rst | 176 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 2 files changed, 177 insertions(+) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst new file mode 100644 index 000000000000..3b70843b6516 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -0,0 +1,176 @@ +.. _codeql-cli-2.23.1: + +========================== +CodeQL 2.23.1 (2025-09-23) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.1 runs a total of 478 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). 3 security queries have been added with this release. + +CodeQL CLI +---------- + +New Features +~~~~~~~~~~~~ + +* CodeQL now adds the sources and sinks of path alerts to the :code:`relatedLocations` property of SARIF results if they are not included as the primary location or within the alert message. This means that path alerts will show on PRs if a source or sink is added or modified, even for queries that don't follow the common convention of selecting the sink as the primary location and mentioning the source in the alert message. + +* CodeQL now populates file coverage information for GitHub Actions on + \ `the tool status page for code scanning `__. + +Query Packs +----------- + +Bug Fixes +~~~~~~~~~ + +C/C++ +""""" + +* The predicate :code:`occurenceCount` in the file module :code:`MagicConstants` has been deprecated. Use :code:`occurrenceCount` instead. +* The predicate :code:`additionalAdditionOrSubstractionCheckForLeapYear` in the file module :code:`LeapYear` has been deprecated. Use :code:`additionalAdditionOrSubtractionCheckForLeapYear` instead. + +C# +"" + +* The message for :code:`csharp/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. + +Java/Kotlin +""""""""""" + +* The message for :code:`java/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. + +Rust +"""" + +* The message for :code:`rust/diagnostic/database-quality` has been updated to include detailed database health metrics. These changes are visible on the tool status page. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The queries :code:`cpp/wrong-type-format-argument`, :code:`cpp/comparison-with-wider-type`, :code:`cpp/integer-multiplication-cast-to-long`, :code:`cpp/implicit-function-declaration` and :code:`cpp/suspicious-add-sizeof` have had their precisions reduced from :code:`high` to :code:`medium`. They will also now give alerts for projects built with :code:`build-mode: none`. +* The queries :code:`cpp/wrong-type-format-argument`, :code:`cpp/comparison-with-wider-type`, :code:`cpp/integer-multiplication-cast-to-long` and :code:`cpp/suspicious-add-sizeof` are no longer included in the :code:`code-scanning` suite. + +Java/Kotlin +""""""""""" + +* The implementation of :code:`java/dereferenced-value-may-be-null` has been completely replaced with a new general control-flow reachability library. This improves precision by reducing false positives. However, since the entire calculation has been reworked, there can be small corner cases where precision regressions might occur and new false positives may occur, but these cases should be rare. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for TypeScript 5.9 +* Added support for :code:`import defer` syntax in JavaScript and TypeScript. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The query :code:`cs/call-to-object-tostring` has been improved to remove false positives for enum types. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. +* Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. +* The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. + +Python +"""""" + +* The queries :code:`py/missing-call-to-init`, :code:`py/missing-calls-to-del`, :code:`py/multiple-calls-to-init`, and :code:`py/multiple-calls-to-del` queries have been modernized; no longer relying on outdated libraries, producing more precise results with more descriptive alert messages, and improved documentation. + +GitHub Actions +"""""""""""""" + +* Actions analysis now reports file coverage information on the CodeQL status page. + +Deprecated Queries +~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The query :code:`cs/captured-foreach-variable` has been deprecated as the semantics of capturing a 'foreach' variable and using it outside the loop has been stable since C# version 5. + +New Queries +~~~~~~~~~~~ + +Rust +"""" + +* Added a new query, :code:`rust/request-forgery`, for detecting server-side request forgery vulnerabilities. + +Language Libraries +------------------ + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. + +Java/Kotlin +""""""""""" + +* Improved support for various assertion libraries, in particular JUnit. This affects the control-flow graph slightly, and in turn affects several queries (mainly quality queries). Most queries should see improved precision (new true positives and fewer false positives), in particular :code:`java/constant-comparison`, :code:`java/index-out-of-bounds`, :code:`java/dereferenced-value-may-be-null`, and :code:`java/useless-null-check`. Some medium precision queries like :code:`java/toctou-race-condition` and :code:`java/unreleased-lock` may see mixed result changes (both slight improvements and slight regressions). +* Added taint flow model for :code:`java.crypto.KDF`. +* Added taint flow model for :code:`java.lang.ScopedValue`. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added modeling for promisification libraries :code:`@gar/promisify`, :code:`es6-promisify`, :code:`util.promisify`, :code:`thenify-all`, :code:`call-me-maybe`, :code:`@google-cloud/promisify`, and :code:`util-promisify`. +* Data flow is now tracked through promisified user-defined functions. + +Swift +""""" + +* Updated to allow analysis of Swift 6.1.3. + +Rust +"""" + +* Added cryptography related models for the :code:`cookie` and :code:`biscotti` crates. + +Deprecated APIs +~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The predicate :code:`getAContructorCall` in the class :code:`SslContextClass` has been deprecated. Use :code:`getAConstructorCall` instead. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added predicates :code:`getTransitiveNumberOfVlaDimensionStmts`, :code:`getTransitiveVlaDimensionStmt`, and :code:`getParentVlaDecl` to :code:`VlaDeclStmt` for handling :code:`VlaDeclStmt`\ s whose base type is defined in terms of another :code:`VlaDeclStmt` via a :code:`typedef`. + +Java/Kotlin +""""""""""" + +* The Java extractor and QL libraries now support Java 25. +* Added support for Java 25 compact source files (JEP 512). The new predicate :code:`Class.isImplicit()` identifies classes that are implicitly declared when using compact source files, and the new predicate :code:`CompilationUnit.isCompactSourceFile()` identifies compilation units that contain compact source files. +* Added support for Java 25 module import declarations. +* Add :code:`ModuleImportDeclaration` class. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 87cd03ebfaf1..41230fc72f1c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Fri, 5 Sep 2025 20:27:45 +0100 Subject: [PATCH 186/219] Improve logging to include proxy vars --- go/extractor/util/registryproxy.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index 301d45896d2e..fb140cba7283 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -113,11 +113,6 @@ func getEnvVars() []string { // Applies private package proxy related environment variables to `cmd`. func ApplyProxyEnvVars(cmd *exec.Cmd) { - slog.Debug( - "Applying private registry proxy environment variables", - slog.String("cmd_args", strings.Join(cmd.Args, " ")), - ) - // If we haven't done so yet, check whether the proxy environment variables are set // and extract information from them. if !proxy_vars_checked { @@ -131,4 +126,10 @@ func ApplyProxyEnvVars(cmd *exec.Cmd) { if proxy_vars != nil { cmd.Env = append(os.Environ(), proxy_vars...) } + + slog.Debug( + "Applying private registry proxy environment variables", + slog.String("cmd_args", strings.Join(cmd.Args, " ")), + slog.String("proxy_vars", strings.Join(proxy_vars, ",")), + ) } From 23a04613c08ef2c5ef75309c4336c4561321461b Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 4 Sep 2025 17:40:38 +0100 Subject: [PATCH 187/219] Set lower-case variants of `HTTP_PROXY` and `HTTPS_PROXY` --- go/extractor/util/registryproxy.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index fb140cba7283..c3faab4900a9 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -53,7 +53,13 @@ func getEnvVars() []string { if proxy_host, proxy_host_set := os.LookupEnv(PROXY_HOST); proxy_host_set && proxy_host != "" { if proxy_port, proxy_port_set := os.LookupEnv(PROXY_PORT); proxy_port_set && proxy_port != "" { proxy_address = fmt.Sprintf("http://%s:%s", proxy_host, proxy_port) - result = append(result, fmt.Sprintf("HTTP_PROXY=%s", proxy_address), fmt.Sprintf("HTTPS_PROXY=%s", proxy_address)) + result = append( + result, + fmt.Sprintf("HTTP_PROXY=%s", proxy_address), + fmt.Sprintf("HTTPS_PROXY=%s", proxy_address), + fmt.Sprintf("http_proxy=%s", proxy_address), + fmt.Sprintf("https_proxy=%s", proxy_address), + ) slog.Info("Found private registry proxy", slog.String("proxy_address", proxy_address)) } From 895399ff0569686e0b7995e7fadc7ab82e811716 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 4 Sep 2025 15:31:59 +0100 Subject: [PATCH 188/219] Rename `proxy_configs` to `goproxy_servers` and only store URLs --- go/extractor/util/registryproxy.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index c3faab4900a9..7ebc3cb508db 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -26,9 +26,8 @@ var proxy_address string // The path to the temporary file that stores the proxy certificate, if any. var proxy_cert_file string -// An array of registry configurations that are relevant to Go. -// This excludes other registry configurations that may be available, but are not relevant to Go. -var proxy_configs []RegistryConfig +// An array of goproxy server URLs. +var goproxy_servers []string // Stores the environment variables that we wish to pass on to `go` commands. var proxy_vars []string = nil @@ -97,16 +96,16 @@ func getEnvVars() []string { // filter others out at this point. for _, cfg := range val { if cfg.Type == GOPROXY_SERVER { - proxy_configs = append(proxy_configs, cfg) + goproxy_servers = append(goproxy_servers, cfg.URL) slog.Info("Found GOPROXY server", slog.String("url", cfg.URL)) } } - if len(proxy_configs) > 0 { + if len(goproxy_servers) > 0 { goproxy_val := "https://proxy.golang.org,direct" - for _, cfg := range proxy_configs { - goproxy_val = cfg.URL + "," + goproxy_val + for _, url := range goproxy_servers { + goproxy_val = url + "," + goproxy_val } result = append(result, fmt.Sprintf("GOPROXY=%s", goproxy_val), "GOPRIVATE=", "GONOPROXY=") From a8fa1a76c482146e9cc59c1d58309e6c0eb02f90 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 4 Sep 2025 15:52:53 +0100 Subject: [PATCH 189/219] Use `git_source` configurations for `GOPRIVATE` --- go/extractor/util/registryproxy.go | 17 ++++++++++++++- go/extractor/util/registryproxy_test.go | 28 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index 7ebc3cb508db..9aa50ca4cc37 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -14,6 +14,7 @@ const PROXY_PORT = "CODEQL_PROXY_PORT" const PROXY_CA_CERTIFICATE = "CODEQL_PROXY_CA_CERTIFICATE" const PROXY_URLS = "CODEQL_PROXY_URLS" const GOPROXY_SERVER = "goproxy_server" +const GIT_SOURCE = "git_source" type RegistryConfig struct { Type string `json:"type"` @@ -29,6 +30,9 @@ var proxy_cert_file string // An array of goproxy server URLs. var goproxy_servers []string +// An array of Git URLs. +var git_sources []string + // Stores the environment variables that we wish to pass on to `go` commands. var proxy_vars []string = nil @@ -98,9 +102,14 @@ func getEnvVars() []string { if cfg.Type == GOPROXY_SERVER { goproxy_servers = append(goproxy_servers, cfg.URL) slog.Info("Found GOPROXY server", slog.String("url", cfg.URL)) + } else if cfg.Type == GIT_SOURCE { + git_sources = append(git_sources, cfg.URL) + slog.Info("Found Git source", slog.String("url", cfg.URL)) } } + goprivate := []string{} + if len(goproxy_servers) > 0 { goproxy_val := "https://proxy.golang.org,direct" @@ -108,8 +117,14 @@ func getEnvVars() []string { goproxy_val = url + "," + goproxy_val } - result = append(result, fmt.Sprintf("GOPROXY=%s", goproxy_val), "GOPRIVATE=", "GONOPROXY=") + result = append(result, fmt.Sprintf("GOPROXY=%s", goproxy_val), "GONOPROXY=") } + + if len(git_sources) > 0 { + goprivate = append(goprivate, git_sources...) + } + + result = append(result, fmt.Sprintf("GOPRIVATE=%s", strings.Join(goprivate, ","))) } } diff --git a/go/extractor/util/registryproxy_test.go b/go/extractor/util/registryproxy_test.go index a21b1a215c11..ef63bd9d3f87 100644 --- a/go/extractor/util/registryproxy_test.go +++ b/go/extractor/util/registryproxy_test.go @@ -47,3 +47,31 @@ func TestParseRegistryConfigs(t *testing.T) { t.Fatalf("Expected `URL` to be `https://proxy.example.com/mod`, but got `%s`", first.URL) } } + +func TestParseRegistryConfigsMultiple(t *testing.T) { + multiple := parseRegistryConfigsSuccess(t, "[{ \"type\": \"git_source\", \"url\": \"https://github.com/github\" }, { \"type\": \"goproxy_server\", \"url\": \"https://proxy.example.com/mod\" }]") + + if len(multiple) != 2 { + t.Fatalf("Expected `parseRegistryConfigs` to return two configurations, but got %d.", len(multiple)) + } + + first := multiple[0] + + if first.Type != "git_source" { + t.Fatalf("Expected `Type` to be `git_source`, but got `%s`", first.Type) + } + + if first.URL != "https://github.com/github" { + t.Fatalf("Expected `URL` to be `https://github.com/github`, but got `%s`", first.URL) + } + + second := multiple[1] + + if second.Type != "goproxy_server" { + t.Fatalf("Expected `Type` to be `goproxy_server`, but got `%s`", second.Type) + } + + if second.URL != "https://proxy.example.com/mod" { + t.Fatalf("Expected `URL` to be `https://proxy.example.com/mod`, but got `%s`", second.URL) + } +} From 4ef8ff9a0fe87940510a2dffe2e1defdfd64c5f2 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Fri, 5 Sep 2025 20:35:14 +0100 Subject: [PATCH 190/219] Append `*` to `git_source` URL if not present Since `GOPRIVATE` / `GONOPROXY` expect a glob pattern --- go/extractor/util/registryproxy.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index 9aa50ca4cc37..0ba49cb55d65 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -103,7 +103,11 @@ func getEnvVars() []string { goproxy_servers = append(goproxy_servers, cfg.URL) slog.Info("Found GOPROXY server", slog.String("url", cfg.URL)) } else if cfg.Type == GIT_SOURCE { - git_sources = append(git_sources, cfg.URL) + if strings.HasSuffix(cfg.URL, "*") { + git_sources = append(git_sources, cfg.URL) + } else { + git_sources = append(git_sources, cfg.URL+"*") + } slog.Info("Found Git source", slog.String("url", cfg.URL)) } } From bc38b79c9a185d589e16f38f634f878d2995c029 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Fri, 5 Sep 2025 22:38:06 +0100 Subject: [PATCH 191/219] Convert URLs to expected format --- go/extractor/util/registryproxy.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index 0ba49cb55d65..3909f9e5cf17 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "log/slog" + "net/url" "os" "os/exec" "strings" @@ -103,12 +104,14 @@ func getEnvVars() []string { goproxy_servers = append(goproxy_servers, cfg.URL) slog.Info("Found GOPROXY server", slog.String("url", cfg.URL)) } else if cfg.Type == GIT_SOURCE { - if strings.HasSuffix(cfg.URL, "*") { - git_sources = append(git_sources, cfg.URL) + parsed, err := url.Parse(cfg.URL) + if err == nil && parsed.Hostname() != "" { + git_source := parsed.Hostname() + parsed.Path + "*" + git_sources = append(git_sources, git_source) + slog.Info("Found Git source", slog.String("source", git_source)) } else { - git_sources = append(git_sources, cfg.URL+"*") + slog.Warn("Not a valid URL for Git source", slog.String("url", cfg.URL)) } - slog.Info("Found Git source", slog.String("url", cfg.URL)) } } From 8c8499229d3dd32440a39909b069235dbbd21e83 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 4 Sep 2025 18:05:38 +0100 Subject: [PATCH 192/219] Configure `git` to use the certificate, if needed --- go/extractor/util/registryproxy.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index 3909f9e5cf17..1f20832e8d81 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -129,6 +129,18 @@ func getEnvVars() []string { if len(git_sources) > 0 { goprivate = append(goprivate, git_sources...) + + if proxy_cert_file != "" { + slog.Info("Configuring `git` to use proxy certificate", slog.String("path", proxy_cert_file)) + cmd := exec.Command("git", "config", "--global", "http.sslCAInfo", proxy_cert_file) + + out, cmdErr := cmd.CombinedOutput() + slog.Info(string(out)) + + if cmdErr != nil { + slog.Error("Failed to configure `git` to accept the certificate file", slog.String("error", cmdErr.Error())) + } + } } result = append(result, fmt.Sprintf("GOPRIVATE=%s", strings.Join(goprivate, ","))) From 8ad6952ddaa99736b3ac42a6504b78841cc616f3 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Wed, 24 Sep 2025 15:58:09 +0100 Subject: [PATCH 193/219] Fix escape character in changelog for Go query --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 3b70843b6516..18623d63c454 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\\` to the beginning. Java/Kotlin """"""""""" From f3ef6ef3c978b8585e917661b1030c5dd581a4f2 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Wed, 24 Sep 2025 16:00:40 +0100 Subject: [PATCH 194/219] Fix formatting issue in changelog for Go query --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 18623d63c454..95952ee4ac9c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\\` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:\ to the beginning. Java/Kotlin """"""""""" From 6c488e6e71d4ae10227ebe496f7e29b68dc2b347 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Wed, 24 Sep 2025 16:01:38 +0100 Subject: [PATCH 195/219] Fix formatting in codeql-cli-2.23.1.rst --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 95952ee4ac9c..67f4ee93e9fc 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:\ to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:\`` to the beginning. Java/Kotlin """"""""""" From 86fe68bb61367e57e4831d7ea93eaf6ca65b1888 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Wed, 24 Sep 2025 16:12:17 +0100 Subject: [PATCH 196/219] Fix formatting in changelog for Go path injection query 2 people + 2 models managed to tackle this insurmountable task. --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 67f4ee93e9fc..3767c877b5a9 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:\`` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\ ` to the beginning. Java/Kotlin """"""""""" From e41b5f2bc0ef6507c0a2873a8b592bd3cd01c681 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 25 Sep 2025 09:52:22 +0200 Subject: [PATCH 197/219] C++: Update tests after extractor changes --- cpp/ql/test/library-tests/permissive/accesses.expected | 1 - cpp/ql/test/library-tests/permissive/calls.expected | 1 - cpp/ql/test/library-tests/permissive/permissive.cpp | 8 -------- 3 files changed, 10 deletions(-) delete mode 100644 cpp/ql/test/library-tests/permissive/permissive.cpp diff --git a/cpp/ql/test/library-tests/permissive/accesses.expected b/cpp/ql/test/library-tests/permissive/accesses.expected index f3e66dcedaf7..e69de29bb2d1 100644 --- a/cpp/ql/test/library-tests/permissive/accesses.expected +++ b/cpp/ql/test/library-tests/permissive/accesses.expected @@ -1 +0,0 @@ -| permissive.cpp:6:5:6:7 | str | diff --git a/cpp/ql/test/library-tests/permissive/calls.expected b/cpp/ql/test/library-tests/permissive/calls.expected index 9d780e76405e..e69de29bb2d1 100644 --- a/cpp/ql/test/library-tests/permissive/calls.expected +++ b/cpp/ql/test/library-tests/permissive/calls.expected @@ -1 +0,0 @@ -| permissive.cpp:6:3:6:3 | call to f | permissive.cpp:2:13:2:13 | f | diff --git a/cpp/ql/test/library-tests/permissive/permissive.cpp b/cpp/ql/test/library-tests/permissive/permissive.cpp deleted file mode 100644 index 15f5b94ef61c..000000000000 --- a/cpp/ql/test/library-tests/permissive/permissive.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// semmle-extractor-options: --edg --permissive -static void f(char* foo) {} - -static void g(void) { - const char* str = "foo"; - f(str); -} - From 2a814dd37cf7e3d0025b79cf2831b28cd2a92ac3 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 23 Sep 2025 09:30:05 +0200 Subject: [PATCH 198/219] Rust: Model union, never, and pointer types --- .../rust/elements/internal/UnionImpl.qll | 7 ++ rust/ql/lib/codeql/rust/internal/Type.qll | 64 ++++++++++++++++++- .../codeql/rust/internal/TypeInference.qll | 5 ++ .../lib/codeql/rust/internal/TypeMention.qll | 18 ++++++ .../TypeInferenceConsistency.expected | 2 - .../type-inference/type-inference.expected | 2 + .../PathResolutionConsistency.expected | 3 + .../PathResolutionConsistency.expected | 7 ++ 8 files changed, 105 insertions(+), 3 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/TypeInferenceConsistency.expected create mode 100644 rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected create mode 100644 rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll index 17551c4834ed..712e39e6685e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll @@ -21,6 +21,13 @@ module Impl { * ``` */ class Union extends Generated::Union { + /** Gets the record field named `name`, if any. */ + pragma[nomagic] + StructField getStructField(string name) { + result = this.getStructFieldList().getAField() and + result.getName().getText() = name + } + override string toStringImpl() { result = "union " + this.getName().getText() } } } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index eaa7e83fc6da..29e6ed283bc6 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -42,11 +42,14 @@ newtype TType = TStruct(Struct s) or TEnum(Enum e) or TTrait(Trait t) or + TUnion(Union u) or TArrayType() or // todo: add size? TRefType() or // todo: add mut? TImplTraitType(ImplTraitTypeRepr impl) or TDynTraitType(Trait t) { t = any(DynTraitTypeRepr dt).getTrait() } or TSliceType() or + TNeverType() or + TPtrType() or TTupleTypeParameter(int arity, int i) { exists(TTuple(arity)) and i in [0 .. arity - 1] } or TTypeParamTypeParameter(TypeParam t) or TAssociatedTypeTypeParameter(TypeAlias t) { any(TraitItemNode trait).getAnAssocItem() = t } or @@ -57,7 +60,8 @@ newtype TType = } or TRefTypeParameter() or TSelfTypeParameter(Trait t) or - TSliceTypeParameter() + TSliceTypeParameter() or + TPtrTypeParameter() private predicate implTraitTypeParam(ImplTraitTypeRepr implTrait, int i, TypeParam tp) { implTrait.isInReturnPos() and @@ -224,6 +228,31 @@ class TraitType extends Type, TTrait { override Location getLocation() { result = trait.getLocation() } } +/** A union type. */ +class UnionType extends StructOrEnumType, TUnion { + private Union union; + + UnionType() { this = TUnion(union) } + + override ItemNode asItemNode() { result = union } + + override StructField getStructField(string name) { result = union.getStructField(name) } + + override TupleField getTupleField(int i) { none() } + + override TypeParameter getPositionalTypeParameter(int i) { + result = TTypeParamTypeParameter(union.getGenericParamList().getTypeParam(i)) + } + + override TypeMention getTypeParameterDefault(int i) { + result = union.getGenericParamList().getTypeParam(i).getDefaultType() + } + + override string toString() { result = union.getName().getText() } + + override Location getLocation() { result = union.getLocation() } +} + /** * An array type. * @@ -374,6 +403,33 @@ class SliceType extends Type, TSliceType { override Location getLocation() { result instanceof EmptyLocation } } +class NeverType extends Type, TNeverType { + override StructField getStructField(string name) { none() } + + override TupleField getTupleField(int i) { none() } + + override TypeParameter getPositionalTypeParameter(int i) { none() } + + override string toString() { result = "!" } + + override Location getLocation() { result instanceof EmptyLocation } +} + +class PtrType extends Type, TPtrType { + override StructField getStructField(string name) { none() } + + override TupleField getTupleField(int i) { none() } + + override TypeParameter getPositionalTypeParameter(int i) { + i = 0 and + result = TPtrTypeParameter() + } + + override string toString() { result = "*" } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** A type parameter. */ abstract class TypeParameter extends Type { override StructField getStructField(string name) { none() } @@ -529,6 +585,12 @@ class SliceTypeParameter extends TypeParameter, TSliceTypeParameter { override Location getLocation() { result instanceof EmptyLocation } } +class PtrTypeParameter extends TypeParameter, TPtrTypeParameter { + override string toString() { result = "*T" } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** * The implicit `Self` type parameter of a trait, that refers to the * implementing type of the trait. diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 16c0b30332ef..2d204469d32b 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -99,6 +99,11 @@ private module Input1 implements InputSig1 { id1 = 0 and id2 = 2 or + tp0 instanceof PtrTypeParameter and + kind = 0 and + id1 = 0 and + id2 = 3 + or kind = 1 and id1 = 0 and id2 = diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index c36e19842377..ba7f4b4659d4 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -241,6 +241,8 @@ class NonAliasPathTypeMention extends PathTypeMention { else result = TTrait(trait) ) or + result = TUnion(resolved) + or result = TTypeParamTypeParameter(resolved) or result = TAssociatedTypeTypeParameter(resolved) @@ -387,3 +389,19 @@ class DynTypeBoundListMention extends TypeMention instanceof TypeBoundList { ) } } + +class NeverTypeReprMention extends TypeMention, NeverTypeRepr { + override Type resolveTypeAt(TypePath path) { result = TNeverType() and path.isEmpty() } +} + +class PtrTypeReprMention extends TypeMention instanceof PtrTypeRepr { + override Type resolveTypeAt(TypePath path) { + path.isEmpty() and + result = TPtrType() + or + exists(TypePath suffix | + result = super.getTypeRepr().(TypeMention).resolveTypeAt(suffix) and + path = TypePath::cons(TPtrTypeParameter(), suffix) + ) + } +} diff --git a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/TypeInferenceConsistency.expected deleted file mode 100644 index 416404c2bd19..000000000000 --- a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/TypeInferenceConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -illFormedTypeMention -| macro_expansion.rs:99:7:99:19 | MyDeriveUnion | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 1a9a6456ce8d..09fbdf17a8b9 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2250,6 +2250,7 @@ inferType | main.rs:1127:43:1127:82 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | | main.rs:1127:50:1127:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | | main.rs:1127:50:1127:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1127:50:1127:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:1127:50:1127:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1127:50:1127:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1127:50:1127:81 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | @@ -2261,6 +2262,7 @@ inferType | main.rs:1128:43:1128:81 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | | main.rs:1128:50:1128:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | | main.rs:1128:50:1128:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1128:50:1128:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:1128:50:1128:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1128:50:1128:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1128:50:1128:80 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | diff --git a/rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..16bbea0aba3b --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-696/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,3 @@ +multipleCallTargets +| test.rs:117:9:117:20 | ptr.is_null() | +| test.rs:117:9:117:21 | ptr.is_null() | diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..1abeb1aeb874 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multipleCallTargets +| main.rs:242:44:242:78 | ... .cast() | +| main.rs:245:44:245:78 | ... .cast() | +| main.rs:248:44:248:78 | ... .cast() | +| main.rs:251:14:251:48 | ... .cast() | +| main.rs:254:14:254:48 | ... .cast() | +| main.rs:257:14:257:48 | ... .cast() | From 109b6a1d7944ea63a67707f7d3531070ceb30624 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 25 Sep 2025 11:34:34 +0200 Subject: [PATCH 199/219] ControlFlow: Split only on relevant values. --- .../codeql/controlflow/ControlFlow.qll | 306 +++++++----------- .../controlflow/codeql/controlflow/Guards.qll | 3 + 2 files changed, 128 insertions(+), 181 deletions(-) diff --git a/shared/controlflow/codeql/controlflow/ControlFlow.qll b/shared/controlflow/codeql/controlflow/ControlFlow.qll index bfb878e67568..ca0de9d47446 100644 --- a/shared/controlflow/codeql/controlflow/ControlFlow.qll +++ b/shared/controlflow/codeql/controlflow/ControlFlow.qll @@ -80,6 +80,9 @@ signature module InputSig; - private GuardValueExt mkRange(int low, int high) { - result = IntRange(low, high) - or - low = high and - result.asBase().asIntValue() = low - } - - private GuardValueExt intersectBase1(GuardValue gv1, GuardValue gv2) { - exists(SourceVariable var | - possibleValue(var, gv1) and - possibleValue(var, gv2) - | - smaller(gv1, gv2) and result.asBase() = gv1 - or - exists(int low, int high | - gv1.isIntRange(low, false) and - gv2.isIntRange(high, true) and - result = mkRange(low, high) - ) - or - exists(int bound, boolean upper, int d | - gv1.isIntRange(bound, upper) and - gv2.getDualValue().asIntValue() = bound and - result.asBase().isIntRange(bound + d, upper) - | - upper = true and d = -1 - or - upper = false and d = 1 - ) - ) - } - - private GuardValueExt intersectBase2(GuardValueExt v1, GuardValue v2) { - result = intersectBase1(v1.asBase(), v2) - or - result = intersectBase1(v2, v1.asBase()) - } - - bindingset[v1, v2] - pragma[inline_late] - private GuardValueExt intersectRange(GuardValueExt v1, GuardValue v2) { - exists(int low, int high | v1 = IntRange(low, high) | - exists(int bound, boolean upper | v2.isIntRange(bound, upper) | - upper = true and result = mkRange(low, high.minimum(bound)) - or - upper = false and result = mkRange(low.maximum(bound), high) - ) - or - exists(int k | - v2.asIntValue() = k and - result.asBase() = v2 and - low <= k and - k <= high - ) - or - not v2.isIntRange(_, _) and not exists(v2.asIntValue()) and result = v1 - ) - } + private class GuardValueOption = GuardValueOption::Option; + /** + * Gets the best constraint of `v1` and `v2`. If both are non-singletons, + * then we arbitrarily choose `v1`. This operation approximates intersection. + */ bindingset[v1, v2] pragma[inline_late] - private GuardValueExt intersect(GuardValueExt v1, GuardValue v2) { - v1 = AnyValue() and result.asBase() = v2 - or - result = intersectBase2(v1, v2) - or - result = v1 and - v1 instanceof BaseValue and - not exists(intersectBase2(v1, v2)) - or - result = intersectRange(v1, v2) - } - - bindingset[v1, gv2] - private predicate disjointValuesExt(GuardValueExt v1, GuardValue gv2) { - disjointValues(v1.asBase(), gv2) - or - exists(int low, int high | v1 = IntRange(low, high) | - gv2.asIntValue() < low - or - high < gv2.asIntValue() - or - exists(int bound, boolean upper | gv2.isIntRange(bound, upper) | - upper = true and bound < low - or - upper = false and high < bound - ) - ) + private GuardValueOption intersect(GuardValueOption v1, GuardValue v2) { + if v2.isSingleton() + then result.asSome() = v2 + else + if v1.isNone() + then result.asSome() = v2 + else result = v1 } /** An input configuration for control flow reachability. */ @@ -558,6 +449,7 @@ module Make< * Holds if the edge from `bb1` to `bb2` implies that `def` has a value * that is considered a barrier. */ + pragma[nomagic] private predicate ssaValueBarrierEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2) { exists(GuardValue v | ssaControlsBranchEdge(def, bb1, bb2, v) and @@ -565,6 +457,11 @@ module Make< ) } + pragma[nomagic] + private predicate phiBlock(BasicBlock bb, SourceVariable v) { + exists(SsaPhiNode phi | phi.getBasicBlock() = bb and phi.getSourceVariable() = v) + } + /** Holds if `def1` in `bb1` may step to `def2` in `bb2`. */ private predicate step(SsaDefinition def1, BasicBlock bb1, SsaDefinition def2, BasicBlock bb2) { not sinkBlock(def1, bb1, _) and @@ -577,7 +474,7 @@ module Make< ssaRelevantAtEndOfBlock(def1, bb1) and bb1.getASuccessor() = bb2 and v = def1.getSourceVariable() and - not exists(SsaPhiNode phi | phi.getBasicBlock() = bb2 and phi.getSourceVariable() = v) and + not phiBlock(bb2, v) and def1 = def2 ) or @@ -687,8 +584,8 @@ module Make< * Holds if the edge from `bb1` to `bb2` implies that `def` has the value * `gv` and that the edge is relevant for computing reachability of `src`. * - * If multiple values may be implied by this edge, then we only include the - * most precise ones. + * If multiple values may be implied by this edge, including a singleton, + * then we only include the singleton. * * The underlying variable of `t` is `var`. */ @@ -697,7 +594,11 @@ module Make< BasicBlock bb2 ) { ssaControlsBranchEdge(t, bb1, bb2, gv) and - not exists(GuardValue gv0 | ssaControlsBranchEdge(t, bb1, bb2, gv0) and smaller(gv0, gv)) and + ( + exists(GuardValue gv0 | ssaControlsBranchEdge(t, bb1, bb2, gv0) and gv0.isSingleton()) + implies + gv.isSingleton() + ) and pathEdge(src, bb1, bb2) and t.getSourceVariable() = var } @@ -711,18 +612,36 @@ module Make< exists(BasicBlock pred | pathEdge(src, pred, entry) and entry.strictlyDominates(pred)) } + /** + * Gets either `gv` or its dual value. This is intended as a mostly unique + * representation of the set of values `gv` and `gv.getDualValue()`. + */ + private GuardValue getPrimary(GuardValue gv) { + exists(GuardValue dual | dual = gv.getDualValue() | + if dual.isSingleton() then result = dual else result = gv + ) + } + /** * Holds if precision may be improved by splitting control flow on the * value of `var` during the reachability computation of `src`. + * + * The `condgv`/`condgv.getDualValue()` separation of the values of `var` + * determines whether a possibly relevant edge may be taken or not. */ - private predicate relevantSplit(SourceVariable src, SourceVariable var) { + private predicate relevantSplit(SourceVariable src, SourceVariable var, GuardValue condgv) { // `var` may be a relevant split if we encounter 2+ conditional edges // that imply information about `var`. - 2 <= strictcount(BasicBlock bb1 | ssaControlsPathEdge(src, _, var, _, bb1, _)) + exists(GuardValue gv | + ssaControlsPathEdge(src, _, var, gv, _, _) and + condgv = getPrimary(gv) and + 2 <= strictcount(BasicBlock bb1 | ssaControlsPathEdge(src, _, var, _, bb1, _)) + ) or // Or if we encounter a conditional edge that imply a value that's // incompatible with an initial or later assigned value. exists(GuardValue gv1, GuardValue gv2, BasicBlock bb | + condgv = getPrimary(gv1) and ssaControlsPathEdge(src, _, var, gv1, _, _) and initSsaValue(var, bb, _, gv2) and disjointValues(gv1, gv2) and @@ -731,8 +650,11 @@ module Make< or // Or if we encounter a conditional edge in a loop that imply a value for // `var` that may be unchanged from one iteration to the next. - exists(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, BasicBlock loopEntry | - ssaControlsPathEdge(src, def, var, _, bb1, bb2) and + exists( + SsaDefinition def, BasicBlock bb1, BasicBlock bb2, BasicBlock loopEntry, GuardValue gv + | + ssaControlsPathEdge(src, def, var, gv, bb1, bb2) and + condgv = getPrimary(gv) and loopEntryBlock(src, loopEntry) and loopEntry.strictlyDominates(bb1) and bb2.getASuccessor*() = loopEntry @@ -755,6 +677,18 @@ module Make< def = max(SsaDefinition d, int i | d.definesAt(var, bb, i) | d order by i) } + /** + * Holds if `gv` is relatable to the `condgv`/`condgv.getDualValue()` pair + * in the sense that a conditional branch based on `condgv` may be + * determined by `gv`. + */ + bindingset[gv, condgv] + pragma[inline_late] + private predicate relatable(GuardValue gv, GuardValue condgv) { + disjointValues(gv, condgv) or + disjointValues(gv, condgv.getDualValue()) + } + /** * Holds if `bb1` to `bb2` is a relevant edge for computing reachability of * `src`, and `var` is a relevant splitting variable that gets (re-)defined @@ -763,17 +697,20 @@ module Make< * `val` is the best known value for `t` in `bb2`. */ private predicate stepSsaValueRedef( - SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, SsaDefinition t, - GuardValueOrAny val + SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, GuardValue condgv, + SsaDefinition t, GuardValueOption val ) { pathEdge(src, bb1, bb2) and - relevantSplit(src, var) and + relevantSplit(src, var, condgv) and lastDefInBlock(var, t, bb2) and not t instanceof SsaPhiNode and ( - ssaHasValue(t, val.asBase()) + exists(GuardValue gv | + ssaHasValue(t, gv) and + if relatable(gv, condgv) then val.asSome() = gv else val.isNone() + ) or - not ssaHasValue(t, _) and val = AnyValue() + not ssaHasValue(t, _) and val.isNone() ) } @@ -786,18 +723,21 @@ module Make< * `val` is the best value for `t1`/`t2` implied by taking this edge. */ private predicate stepSsaValuePhi( - SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, SsaDefinition t1, - SsaDefinition t2, GuardValueOrAny val + SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, GuardValue condgv, + SsaDefinition t1, SsaDefinition t2, GuardValueOption val ) { pathEdge(src, bb1, bb2) and - relevantSplit(src, var) and + relevantSplit(src, var, condgv) and lastDefInBlock(var, t2, bb2) and t2.(SsaPhiNode).hasInputFromBlock(t1, bb1) and ( - ssaControlsPathEdge(src, t1, _, val.asBase(), bb1, bb2) + exists(GuardValue gv | + ssaControlsPathEdge(src, t1, _, gv, bb1, bb2) and + if relatable(gv, condgv) then val.asSome() = gv else val.isNone() + ) or not ssaControlsPathEdge(src, t1, _, _, bb1, bb2) and - val = AnyValue() + val.isNone() ) } @@ -810,13 +750,14 @@ module Make< * value `val`. */ private predicate stepSsaValueNoRedef( - SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, SsaDefinition t, - GuardValue val + SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, GuardValue condgv, + SsaDefinition t, GuardValue val ) { pathEdge(src, bb1, bb2) and - relevantSplit(src, var) and + relevantSplit(src, var, condgv) and not lastDefInBlock(var, _, bb2) and - ssaControlsPathEdge(src, t, var, val, bb1, bb2) + ssaControlsPathEdge(src, t, var, val, bb1, bb2) and + relatable(val, condgv) } /** @@ -827,64 +768,67 @@ module Make< */ private predicate sourceReachesBlockWithTrackedVar( SsaDefinition srcDef, BasicBlock srcBb, SsaDefinition def, BasicBlock bb, FinallyStack fs, - SsaDefOption tracked, GuardValueExt val, SourceVariable var + SsaDefOption tracked, GuardValueOption val, SourceVariable var, GuardValue condgv ) { sourceBlock(srcDef, srcBb, _) and def = srcDef and bb = srcBb and fs = TNil() and - relevantSplit(def.getSourceVariable(), var) and + relevantSplit(def.getSourceVariable(), var, condgv) and ( // tracking variable is not yet live not ssaLiveAtEndOfBlock(var, _, bb) and tracked.isNone() and - val = AnyValue() + val.isNone() or // tracking variable is live but without known value ssaLiveAtEndOfBlock(var, tracked.asSome(), bb) and not initSsaValue(var, bb, _, _) and - val = AnyValue() + val.isNone() or - // tracking variable has known value - initSsaValue(var, bb, tracked.asSome(), val.asBase()) + // tracking variable has known value, track it if it is relatable to condgv + exists(GuardValue gv | initSsaValue(var, bb, tracked.asSome(), gv) | + if relatable(gv, condgv) then val.asSome() = gv else val.isNone() + ) ) or exists( SourceVariable src, SsaDefinition middef, BasicBlock midbb, FinallyStack midfs, - SsaDefOption tracked0, GuardValueExt val0 + SsaDefOption tracked0, GuardValueOption val0 | - sourceReachesBlockWithTrackedVar(srcDef, srcBb, middef, midbb, midfs, tracked0, val0, var) and + sourceReachesBlockWithTrackedVar(srcDef, srcBb, middef, midbb, midfs, tracked0, val0, var, + condgv) and src = srcDef.getSourceVariable() and step(middef, midbb, def, bb) and stepFinallyStack(midbb, bb, midfs, fs) and - pathBlock(src, bb) and + pathBlock(pragma[only_bind_into](src), bb) and not exists(GuardValue gv | ssaControlsPathEdge(src, tracked0.asSome(), _, gv, midbb, bb) and - disjointValuesExt(val0, gv) + disjointValues(val0.asSome(), gv) ) | // tracking variable is redefined - stepSsaValueRedef(src, midbb, bb, var, tracked.asSome(), val) + stepSsaValueRedef(src, midbb, bb, var, condgv, tracked.asSome(), val) or - exists(GuardValueOrAny val1 | + exists(GuardValueOption val1 | // tracking variable has a phi node, and maybe value information from the edge - stepSsaValuePhi(src, midbb, bb, var, tracked0.asSome(), tracked.asSome(), val1) + stepSsaValuePhi(src, midbb, bb, var, condgv, tracked0.asSome(), tracked.asSome(), val1) | - val = val0 and val1 = AnyValue() + val = val0 and val1.isNone() or - val = intersect(val0, val1.asBase()) + val = intersect(val0, val1.asSome()) ) or exists(GuardValue val1 | // tracking variable is unchanged, and has value information from the edge - stepSsaValueNoRedef(src, midbb, bb, var, tracked0.asSome(), val1) and + stepSsaValueNoRedef(src, midbb, bb, var, condgv, tracked0.asSome(), val1) and tracked = tracked0 and val = intersect(val0, val1) ) or // tracking variable is unchanged, and has no value information from the edge not lastDefInBlock(var, _, bb) and - not stepSsaValueNoRedef(src, midbb, bb, var, tracked0.asSome(), _) and + not stepSsaValueNoRedef(src, midbb, bb, var, condgv, tracked0.asSome(), _) and tracked = tracked0 and val = val0 ) @@ -903,8 +847,8 @@ module Make< sourceReachesBlock(srcDef, srcBb, sinkDef, sinkBb, _) and sinkBlock(sinkDef, sinkBb, sink) and srcVar = srcDef.getSourceVariable() and - forall(SourceVariable t | relevantSplit(srcVar, t) | - sourceReachesBlockWithTrackedVar(srcDef, srcBb, sinkDef, sinkBb, _, _, _, t) + forall(SourceVariable t, GuardValue condgv | relevantSplit(srcVar, t, condgv) | + sourceReachesBlockWithTrackedVar(srcDef, srcBb, sinkDef, sinkBb, _, _, _, t, condgv) ) ) } @@ -920,8 +864,8 @@ module Make< sourceBlock(srcDef, srcBb, src) and sourceEscapesSink(srcDef, srcBb, escDef, escBb) and srcVar = srcDef.getSourceVariable() and - forall(SourceVariable t | relevantSplit(srcVar, t) | - sourceReachesBlockWithTrackedVar(srcDef, srcBb, escDef, escBb, _, _, _, t) + forall(SourceVariable t, GuardValue condgv | relevantSplit(srcVar, t, condgv) | + sourceReachesBlockWithTrackedVar(srcDef, srcBb, escDef, escBb, _, _, _, t, condgv) ) ) } diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll index 0bbfb29e4e64..668fb60655c9 100644 --- a/shared/controlflow/codeql/controlflow/Guards.qll +++ b/shared/controlflow/codeql/controlflow/Guards.qll @@ -259,6 +259,9 @@ module Make< ) } + /** Holds if this value represents a single concrete value. */ + predicate isSingleton() { this = TValue(_, true) } + /** Holds if this value represents `null`. */ predicate isNullValue() { this.isNullness(true) } From b22227d0f4b084d41eb7a026975a8562f926fd2c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:30:57 +0100 Subject: [PATCH 200/219] Add .orig files to .gitignore. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index fe4a5de96721..4dbe45b8d28a 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,6 @@ node_modules/ # some upgrade/downgrade checks create these files **/upgrades/*/*.dbscheme.stats **/downgrades/*/*.dbscheme.stats + +# Mergetool files +*.orig From e9cccb46c067ffb046218711f693c90fc51d5beb Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 25 Sep 2025 15:19:40 +0100 Subject: [PATCH 201/219] Go: mistyped-exponentiation: notice constants with likely-bitmask values --- go/ql/src/InconsistentCode/MistypedExponentiation.ql | 6 +++++- .../InconsistentCode/MistypedExponentiation/main.go | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/go/ql/src/InconsistentCode/MistypedExponentiation.ql b/go/ql/src/InconsistentCode/MistypedExponentiation.ql index b445a713ce6f..91fb63d319c2 100644 --- a/go/ql/src/InconsistentCode/MistypedExponentiation.ql +++ b/go/ql/src/InconsistentCode/MistypedExponentiation.ql @@ -13,12 +13,16 @@ import go +private Expr getConstantInitialiser(Expr e) { + exists(DeclaredConstant c | e = c.getAReference() | result = c.getInit()) +} + /** Holds if `e` is not 0 and is either an octal or hexadecimal literal, or the number one. */ predicate maybeXorBitPattern(Expr e) { // 0 makes no sense as an xor bit pattern not e.getNumericValue() = 0 and // include octal and hex literals - e.(IntLit).getText().matches("0%") + [e, getConstantInitialiser(e)].(IntLit).getText().matches("0%") or e.getNumericValue() = 1 } diff --git a/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go b/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go index 2449ccdac62b..b8b4be44847e 100644 --- a/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go +++ b/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go @@ -22,6 +22,13 @@ func main() { mask := (((1 << 10) - 1) ^ 7) // OK + const ( + c1 = 0x1234 + c2 = 0x5678 + ) + + fmt.Println(c1 ^ c2) // OK + // This is not ok, but isn't detected because the multiplication binds tighter // than the xor operator and so the query doesn't see a constant on the left // hand side of ^. From 9e7a5214f31abbede39a6ba776664e61dea405be Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 25 Sep 2025 15:40:26 +0100 Subject: [PATCH 202/219] Change note --- go/ql/src/change-notes/2025-09-25-exponentiation-constants.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/src/change-notes/2025-09-25-exponentiation-constants.md diff --git a/go/ql/src/change-notes/2025-09-25-exponentiation-constants.md b/go/ql/src/change-notes/2025-09-25-exponentiation-constants.md new file mode 100644 index 000000000000..cb6c5e43346f --- /dev/null +++ b/go/ql/src/change-notes/2025-09-25-exponentiation-constants.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `go/mistyped-exponentiation` now recognises constants whose initialisers are hex or octal constants, making them likely targets of the `^` bitwise-xor operator. From 656a7bc37862ffeb31eadacdd65f071ea8130e42 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 25 Sep 2025 17:25:03 +0100 Subject: [PATCH 203/219] Rust: Add missing Cargo.lock files to query tests. --- .../test/query-tests/diagnostics/Cargo.lock | 7 + .../query-tests/security/CWE-798/Cargo.lock | 726 ++++++++++++++++++ 2 files changed, 733 insertions(+) create mode 100644 rust/ql/test/query-tests/diagnostics/Cargo.lock create mode 100644 rust/ql/test/query-tests/security/CWE-798/Cargo.lock diff --git a/rust/ql/test/query-tests/diagnostics/Cargo.lock b/rust/ql/test/query-tests/diagnostics/Cargo.lock new file mode 100644 index 000000000000..b9856cfaf77d --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "test" +version = "0.0.1" diff --git a/rust/ql/test/query-tests/security/CWE-798/Cargo.lock b/rust/ql/test/query-tests/security/CWE-798/Cargo.lock new file mode 100644 index 000000000000..6d0fce1423e5 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-798/Cargo.lock @@ -0,0 +1,726 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle", + "zeroize", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "biscotti" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddb6f28a3d15d18cace7a8010282a4d9cee1452dcd33f5861c173b4a31095b79" +dependencies = [ + "aes-gcm-siv", + "anyhow", + "base64", + "hkdf", + "hmac", + "jiff", + "percent-encoding", + "rand 0.9.2", + "serde", + "sha2", + "subtle", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfb-mode" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "738b8d467867f80a71351933f70461f5b56f24d5c93e0cf216e59229c968d330" +dependencies = [ + "cipher", +] + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "aes-gcm", + "base64", + "hmac", + "rand 0.8.5", + "sha2", + "subtle", + "time", + "version_check", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.7+wasi-0.2.4", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", + "windows-sys", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1283705eb0a21404d2bfd6eef2a7593d240bc42a0bdb39db0ad6fa2ec026524" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "libc" +version = "0.2.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rabbit" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "931a21d28d73d260f6743712e0f04292413fc6d004bb278bb9022302221a05d5" +dependencies = [ + "cipher", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "serde" +version = "1.0.226" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.226" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.226" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "aes", + "aes-gcm", + "base64", + "biscotti", + "cfb-mode", + "cipher", + "cookie", + "getrandom 0.2.16", + "getrandom 0.3.3", + "rabbit", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" From ff554055a6c24bb2e2f428f6f9d8c51851e201a2 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 26 Sep 2025 08:43:35 +0100 Subject: [PATCH 204/219] Rust: Correct 'from' model to taint. --- rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml index a92ed8fc2356..b0b63fa02010 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml @@ -12,7 +12,7 @@ extensions: - ["::into", "Argument[self].Element", "ReturnValue.Element", "taint", "manual"] - ["::into", "Argument[self].Reference.Element", "ReturnValue.Element", "taint", "manual"] # From - - ["<_ as core::convert::From>::from", "Argument[0]", "ReturnValue", "value", "manual"] + - ["<_ as core::convert::From>::from", "Argument[0]", "ReturnValue", "taint", "manual"] # Iterator - ["::iter", "Argument[self].Element", "ReturnValue.Element", "value", "manual"] - ["::iter", "Argument[self].Element", "ReturnValue.Element", "value", "manual"] From 7a74efcc824783ab1e40fe4c29a2f9885e734f8c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 26 Sep 2025 09:57:13 +0200 Subject: [PATCH 205/219] Update rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll Co-authored-by: Simon Friis Vindum --- rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll index 712e39e6685e..40680f3edc90 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll @@ -21,7 +21,7 @@ module Impl { * ``` */ class Union extends Generated::Union { - /** Gets the record field named `name`, if any. */ + /** Gets the struct field named `name`, if any. */ pragma[nomagic] StructField getStructField(string name) { result = this.getStructFieldList().getAField() and From 74a350a4325c597bc3c9e774e2477ad9c9b2ba18 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 26 Sep 2025 09:41:59 +0100 Subject: [PATCH 206/219] Rust: Effect on tests. --- .../strings/inline-taint-flow.expected | 2 +- .../library-tests/dataflow/strings/main.rs | 2 +- .../security/CWE-022/TaintedPath.expected | 2 +- .../HardcodedCryptographicValue.expected | 34 +++++++------------ 4 files changed, 15 insertions(+), 25 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index ea6e06ef616c..e6241590137f 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -1,5 +1,5 @@ models -| 1 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; value | +| 1 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | | 2 | Summary: ::from; Argument[0].Reference; ReturnValue; value | | 3 | Summary: ::add; Argument[self]; ReturnValue; value | | 4 | Summary: ::as_str; Argument[self]; ReturnValue; value | diff --git a/rust/ql/test/library-tests/dataflow/strings/main.rs b/rust/ql/test/library-tests/dataflow/strings/main.rs index 772a45f19932..ca9db9a90265 100644 --- a/rust/ql/test/library-tests/dataflow/strings/main.rs +++ b/rust/ql/test/library-tests/dataflow/strings/main.rs @@ -50,7 +50,7 @@ fn string_add_reference() { fn string_from() { let s1 = source_slice(36); let s2 = String::from(s1); - sink(s2); // $ hasValueFlow=36 + sink(s2); // $ hasTaintFlow=36 } fn string_to_string() { diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index 8e2a7d13ddad..a1f9b448ac75 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -123,7 +123,7 @@ models | 6 | Sink: std::fs::read_to_string; Argument[0]; path-injection | | 7 | Source: std::env::args; ReturnValue.Element; commandargs | | 8 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 9 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; value | +| 9 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | | 10 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | | 11 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 12 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index d16be723b8f2..0c423a29a6df 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -14,7 +14,6 @@ | test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:74:23:74:44 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:74:23:74:44 | ...::new_from_slice | a key | | test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:18:16:18:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:18:16:18:24 | ...::from | a key | | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:22:16:22:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:22:16:22:24 | ...::from | a key | -| test_cookie.rs:38:29:38:31 | 0u8 | test_cookie.rs:38:29:38:31 | 0u8 | test_cookie.rs:42:14:42:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:42:14:42:32 | ...::from | a key | | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:53:14:53:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:53:14:53:32 | ...::from | a key | edges | test_cipher.rs:18:9:18:14 | const1 [&ref, element] | test_cipher.rs:19:73:19:78 | const1 [&ref, element] | provenance | | @@ -23,39 +22,39 @@ edges | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | provenance | | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:19:73:19:78 | const1 [&ref, element] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:19:73:19:78 | const1 [&ref, element] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:25:9:25:14 | const4 [&ref, element] | test_cipher.rs:26:66:26:71 | const4 [&ref, element] | provenance | | | test_cipher.rs:25:28:25:36 | &... [&ref, element] | test_cipher.rs:25:9:25:14 | const4 [&ref, element] | provenance | | | test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | test_cipher.rs:25:28:25:36 | &... [&ref, element] | provenance | | | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | provenance | | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:26:66:26:71 | const4 [&ref, element] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:26:66:26:71 | const4 [&ref, element] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:29:9:29:14 | const5 [&ref, element] | test_cipher.rs:30:95:30:100 | const5 [&ref, element] | provenance | | | test_cipher.rs:29:28:29:36 | &... [&ref, element] | test_cipher.rs:29:9:29:14 | const5 [&ref, element] | provenance | | | test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | test_cipher.rs:29:28:29:36 | &... [&ref, element] | provenance | | | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | provenance | | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:4 Sink:MaD:4 Sink:MaD:4 | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | -| test_cipher.rs:30:95:30:100 | const5 [&ref, element] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:30:95:30:100 | const5 [&ref, element] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:10 | +| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:9 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:10 | +| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:9 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:8 | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | +| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | | test_cipher.rs:73:9:73:14 | const2 [&ref, element] | test_cipher.rs:74:46:74:51 | const2 [&ref, element] | provenance | | | test_cipher.rs:73:18:73:26 | &... [&ref, element] | test_cipher.rs:73:9:73:14 | const2 [&ref, element] | provenance | | @@ -72,13 +71,8 @@ edges | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:21:28:21:34 | [0; 64] [element] | provenance | | | test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | test_cookie.rs:22:16:22:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | | test_cookie.rs:22:27:22:32 | array2 [element] | test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | provenance | | -| test_cookie.rs:38:9:38:14 | array2 [element] | test_cookie.rs:42:34:42:39 | array2 [element] | provenance | | -| test_cookie.rs:38:18:38:37 | ...::from(...) [element] | test_cookie.rs:38:9:38:14 | array2 [element] | provenance | | -| test_cookie.rs:38:28:38:36 | [0u8; 64] [element] | test_cookie.rs:38:18:38:37 | ...::from(...) [element] | provenance | MaD:9 | -| test_cookie.rs:38:29:38:31 | 0u8 | test_cookie.rs:38:28:38:36 | [0u8; 64] [element] | provenance | | -| test_cookie.rs:42:34:42:39 | array2 [element] | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:11 | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:10 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | | test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | models @@ -90,9 +84,8 @@ models | 6 | Sink: ::new; Argument[1]; credentials-iv | | 7 | Sink: ::from; Argument[0].Reference; credentials-key | | 8 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | -| 9 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; value | -| 10 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | -| 11 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | +| 9 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | +| 10 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | nodes | test_cipher.rs:18:9:18:14 | const1 [&ref, element] | semmle.label | const1 [&ref, element] | | test_cipher.rs:18:28:18:36 | &... [&ref, element] | semmle.label | &... [&ref, element] | @@ -158,15 +151,12 @@ nodes | test_cookie.rs:22:16:22:24 | ...::from | semmle.label | ...::from | | test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | semmle.label | &array2 [&ref, element] | | test_cookie.rs:22:27:22:32 | array2 [element] | semmle.label | array2 [element] | -| test_cookie.rs:38:9:38:14 | array2 [element] | semmle.label | array2 [element] | -| test_cookie.rs:38:18:38:37 | ...::from(...) [element] | semmle.label | ...::from(...) [element] | -| test_cookie.rs:38:28:38:36 | [0u8; 64] [element] | semmle.label | [0u8; 64] [element] | -| test_cookie.rs:38:29:38:31 | 0u8 | semmle.label | 0u8 | -| test_cookie.rs:42:14:42:32 | ...::from | semmle.label | ...::from | -| test_cookie.rs:42:34:42:39 | array2 [element] | semmle.label | array2 [element] | | test_cookie.rs:49:9:49:14 | array3 [element] | semmle.label | array3 [element] | | test_cookie.rs:49:23:49:25 | 0u8 | semmle.label | 0u8 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | semmle.label | ...::from_elem(...) [element] | | test_cookie.rs:53:14:53:32 | ...::from | semmle.label | ...::from | | test_cookie.rs:53:34:53:39 | array3 [element] | semmle.label | array3 [element] | subpaths +testFailures +| test_cookie.rs:38:40:38:86 | //... | Missing result: Alert[rust/hard-coded-cryptographic-value] | +| test_cookie.rs:42:43:42:51 | //... | Missing result: Sink | From 3a03bb5a0bce190b7cd60df209bf96aa63556c30 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 26 Sep 2025 10:03:38 +0100 Subject: [PATCH 207/219] Rust: Repair rust/hard-coded-cryptographic-value, which had an unintentional dependence on the taint flow. --- .../HardcodedCryptographicValueExtensions.qll | 8 +- .../HardcodedCryptographicValue.expected | 170 +++++++++--------- 2 files changed, 89 insertions(+), 89 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index 785a7f815bcd..bc487e42ef0a 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -69,11 +69,15 @@ module HardcodedCryptographicValue { /** * An array initialized from a list of literals, considered as a single flow source. For example: * ``` - * `[0, 0, 0, 0]` + * [0, 0, 0, 0] + * [0; 10] * ``` */ private class ArrayListSource extends Source { - ArrayListSource() { this.asExpr().getExpr().(ArrayListExpr).getExpr(_) instanceof LiteralExpr } + ArrayListSource() { + this.asExpr().getExpr().(ArrayListExpr).getExpr(_) instanceof LiteralExpr or + this.asExpr().getExpr().(ArrayRepeatExpr).getRepeatOperand() instanceof LiteralExpr + } } /** diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index 0c423a29a6df..09e2ebdef34d 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -1,78 +1,77 @@ #select -| test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | -| test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | -| test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | -| test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | -| test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | -| test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | +| test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | +| test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | +| test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | +| test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | +| test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | +| test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:38:30:38:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:38:30:38:47 | ...::new | a key | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:38:30:38:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:38:30:38:47 | ...::new | a key | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:42:30:42:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:42:30:42:47 | ...::new | a key | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:42:30:42:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:42:30:42:47 | ...::new | a key | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key | -| test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:74:23:74:44 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:74:23:74:44 | ...::new_from_slice | a key | -| test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:18:16:18:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:18:16:18:24 | ...::from | a key | -| test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:22:16:22:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:22:16:22:24 | ...::from | a key | +| test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:74:23:74:44 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:74:23:74:44 | ...::new_from_slice | a key | +| test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:18:16:18:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:18:16:18:24 | ...::from | a key | +| test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:22:16:22:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:22:16:22:24 | ...::from | a key | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:42:14:42:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:42:14:42:32 | ...::from | a key | | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:53:14:53:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:53:14:53:32 | ...::from | a key | edges -| test_cipher.rs:18:9:18:14 | const1 [&ref, element] | test_cipher.rs:19:73:19:78 | const1 [&ref, element] | provenance | | -| test_cipher.rs:18:28:18:36 | &... [&ref, element] | test_cipher.rs:18:9:18:14 | const1 [&ref, element] | provenance | | -| test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | test_cipher.rs:18:28:18:36 | &... [&ref, element] | provenance | | -| test_cipher.rs:18:30:18:32 | 0u8 | test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | provenance | | -| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:19:73:19:78 | const1 [&ref, element] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | -| test_cipher.rs:25:9:25:14 | const4 [&ref, element] | test_cipher.rs:26:66:26:71 | const4 [&ref, element] | provenance | | -| test_cipher.rs:25:28:25:36 | &... [&ref, element] | test_cipher.rs:25:9:25:14 | const4 [&ref, element] | provenance | | -| test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | test_cipher.rs:25:28:25:36 | &... [&ref, element] | provenance | | -| test_cipher.rs:25:30:25:32 | 0u8 | test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | provenance | | -| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:26:66:26:71 | const4 [&ref, element] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | -| test_cipher.rs:29:9:29:14 | const5 [&ref, element] | test_cipher.rs:30:95:30:100 | const5 [&ref, element] | provenance | | -| test_cipher.rs:29:28:29:36 | &... [&ref, element] | test_cipher.rs:29:9:29:14 | const5 [&ref, element] | provenance | | -| test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | test_cipher.rs:29:28:29:36 | &... [&ref, element] | provenance | | -| test_cipher.rs:29:30:29:32 | 0u8 | test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | provenance | | -| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:4 Sink:MaD:4 Sink:MaD:4 | -| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | -| test_cipher.rs:30:95:30:100 | const5 [&ref, element] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | +| test_cipher.rs:18:9:18:14 | const1 [&ref] | test_cipher.rs:19:73:19:78 | const1 [&ref] | provenance | | +| test_cipher.rs:18:28:18:36 | &... [&ref] | test_cipher.rs:18:9:18:14 | const1 [&ref] | provenance | | +| test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:28:18:36 | &... [&ref] | provenance | | +| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | +| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | +| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:10 | +| test_cipher.rs:25:9:25:14 | const4 [&ref] | test_cipher.rs:26:66:26:71 | const4 [&ref] | provenance | | +| test_cipher.rs:25:28:25:36 | &... [&ref] | test_cipher.rs:25:9:25:14 | const4 [&ref] | provenance | | +| test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:28:25:36 | &... [&ref] | provenance | | +| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:3 Sink:MaD:3 | +| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:5 Sink:MaD:5 | +| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:10 | +| test_cipher.rs:29:9:29:14 | const5 [&ref] | test_cipher.rs:30:95:30:100 | const5 [&ref] | provenance | | +| test_cipher.rs:29:28:29:36 | &... [&ref] | test_cipher.rs:29:9:29:14 | const5 [&ref] | provenance | | +| test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:28:29:36 | &... [&ref] | provenance | | +| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:4 Sink:MaD:4 | +| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:6 Sink:MaD:6 | +| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:10 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:10 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:9 | +| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:10 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:8 | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:5 Sink:MaD:5 Sink:MaD:5 | -| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:9 | +| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:10 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | -| test_cipher.rs:73:9:73:14 | const2 [&ref, element] | test_cipher.rs:74:46:74:51 | const2 [&ref, element] | provenance | | -| test_cipher.rs:73:18:73:26 | &... [&ref, element] | test_cipher.rs:73:9:73:14 | const2 [&ref, element] | provenance | | -| test_cipher.rs:73:19:73:26 | [0u8; 32] [element] | test_cipher.rs:73:18:73:26 | &... [&ref, element] | provenance | | -| test_cipher.rs:73:20:73:22 | 0u8 | test_cipher.rs:73:19:73:26 | [0u8; 32] [element] | provenance | | -| test_cipher.rs:74:46:74:51 | const2 [&ref, element] | test_cipher.rs:74:23:74:44 | ...::new_from_slice | provenance | MaD:1 Sink:MaD:1 Sink:MaD:1 | -| test_cookie.rs:17:9:17:14 | array1 [element] | test_cookie.rs:18:27:18:32 | array1 [element] | provenance | | -| test_cookie.rs:17:28:17:34 | [0; 64] [element] | test_cookie.rs:17:9:17:14 | array1 [element] | provenance | | -| test_cookie.rs:17:29:17:29 | 0 | test_cookie.rs:17:28:17:34 | [0; 64] [element] | provenance | | -| test_cookie.rs:18:26:18:32 | &array1 [&ref, element] | test_cookie.rs:18:16:18:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | -| test_cookie.rs:18:27:18:32 | array1 [element] | test_cookie.rs:18:26:18:32 | &array1 [&ref, element] | provenance | | -| test_cookie.rs:21:9:21:14 | array2 [element] | test_cookie.rs:22:27:22:32 | array2 [element] | provenance | | -| test_cookie.rs:21:28:21:34 | [0; 64] [element] | test_cookie.rs:21:9:21:14 | array2 [element] | provenance | | -| test_cookie.rs:21:29:21:29 | 0 | test_cookie.rs:21:28:21:34 | [0; 64] [element] | provenance | | -| test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | test_cookie.rs:22:16:22:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | -| test_cookie.rs:22:27:22:32 | array2 [element] | test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | provenance | | +| test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 [&ref] | provenance | | +| test_cipher.rs:73:18:73:26 | &... [&ref] | test_cipher.rs:73:9:73:14 | const2 [&ref] | provenance | | +| test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:73:18:73:26 | &... [&ref] | provenance | | +| test_cipher.rs:74:46:74:51 | const2 [&ref] | test_cipher.rs:74:23:74:44 | ...::new_from_slice | provenance | MaD:1 Sink:MaD:1 | +| test_cookie.rs:17:9:17:14 | array1 | test_cookie.rs:18:27:18:32 | array1 | provenance | | +| test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:17:9:17:14 | array1 | provenance | | +| test_cookie.rs:18:26:18:32 | &array1 [&ref] | test_cookie.rs:18:16:18:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | +| test_cookie.rs:18:27:18:32 | array1 | test_cookie.rs:18:26:18:32 | &array1 [&ref] | provenance | | +| test_cookie.rs:21:9:21:14 | array2 | test_cookie.rs:22:27:22:32 | array2 | provenance | | +| test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:9:21:14 | array2 | provenance | | +| test_cookie.rs:22:26:22:32 | &array2 [&ref] | test_cookie.rs:22:16:22:24 | ...::from | provenance | MaD:7 Sink:MaD:7 | +| test_cookie.rs:22:27:22:32 | array2 | test_cookie.rs:22:26:22:32 | &array2 [&ref] | provenance | | +| test_cookie.rs:38:9:38:14 | array2 | test_cookie.rs:42:34:42:39 | array2 | provenance | | +| test_cookie.rs:38:18:38:37 | ...::from(...) | test_cookie.rs:38:9:38:14 | array2 | provenance | | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:9 | +| test_cookie.rs:42:34:42:39 | array2 | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:10 | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:11 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | | test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | models @@ -84,33 +83,31 @@ models | 6 | Sink: ::new; Argument[1]; credentials-iv | | 7 | Sink: ::from; Argument[0].Reference; credentials-key | | 8 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | -| 9 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | -| 10 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | +| 9 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | +| 10 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | +| 11 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | nodes -| test_cipher.rs:18:9:18:14 | const1 [&ref, element] | semmle.label | const1 [&ref, element] | -| test_cipher.rs:18:28:18:36 | &... [&ref, element] | semmle.label | &... [&ref, element] | -| test_cipher.rs:18:29:18:36 | [0u8; 16] [element] | semmle.label | [0u8; 16] [element] | -| test_cipher.rs:18:30:18:32 | 0u8 | semmle.label | 0u8 | +| test_cipher.rs:18:9:18:14 | const1 [&ref] | semmle.label | const1 [&ref] | +| test_cipher.rs:18:28:18:36 | &... [&ref] | semmle.label | &... [&ref] | +| test_cipher.rs:18:29:18:36 | [0u8; 16] | semmle.label | [0u8; 16] | | test_cipher.rs:19:30:19:47 | ...::new | semmle.label | ...::new | | test_cipher.rs:19:30:19:47 | ...::new | semmle.label | ...::new | -| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | -| test_cipher.rs:19:73:19:78 | const1 [&ref, element] | semmle.label | const1 [&ref, element] | -| test_cipher.rs:25:9:25:14 | const4 [&ref, element] | semmle.label | const4 [&ref, element] | -| test_cipher.rs:25:28:25:36 | &... [&ref, element] | semmle.label | &... [&ref, element] | -| test_cipher.rs:25:29:25:36 | [0u8; 16] [element] | semmle.label | [0u8; 16] [element] | -| test_cipher.rs:25:30:25:32 | 0u8 | semmle.label | 0u8 | +| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | +| test_cipher.rs:19:73:19:78 | const1 [&ref] | semmle.label | const1 [&ref] | +| test_cipher.rs:25:9:25:14 | const4 [&ref] | semmle.label | const4 [&ref] | +| test_cipher.rs:25:28:25:36 | &... [&ref] | semmle.label | &... [&ref] | +| test_cipher.rs:25:29:25:36 | [0u8; 16] | semmle.label | [0u8; 16] | | test_cipher.rs:26:30:26:40 | ...::new | semmle.label | ...::new | | test_cipher.rs:26:30:26:40 | ...::new | semmle.label | ...::new | -| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | -| test_cipher.rs:26:66:26:71 | const4 [&ref, element] | semmle.label | const4 [&ref, element] | -| test_cipher.rs:29:9:29:14 | const5 [&ref, element] | semmle.label | const5 [&ref, element] | -| test_cipher.rs:29:28:29:36 | &... [&ref, element] | semmle.label | &... [&ref, element] | -| test_cipher.rs:29:29:29:36 | [0u8; 16] [element] | semmle.label | [0u8; 16] [element] | -| test_cipher.rs:29:30:29:32 | 0u8 | semmle.label | 0u8 | +| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | +| test_cipher.rs:26:66:26:71 | const4 [&ref] | semmle.label | const4 [&ref] | +| test_cipher.rs:29:9:29:14 | const5 [&ref] | semmle.label | const5 [&ref] | +| test_cipher.rs:29:28:29:36 | &... [&ref] | semmle.label | &... [&ref] | +| test_cipher.rs:29:29:29:36 | [0u8; 16] | semmle.label | [0u8; 16] | | test_cipher.rs:30:30:30:40 | ...::new | semmle.label | ...::new | | test_cipher.rs:30:30:30:40 | ...::new | semmle.label | ...::new | -| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | -| test_cipher.rs:30:95:30:100 | const5 [&ref, element] | semmle.label | const5 [&ref, element] | +| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | +| test_cipher.rs:30:95:30:100 | const5 [&ref] | semmle.label | const5 [&ref] | | test_cipher.rs:37:9:37:14 | const7 | semmle.label | const7 | | test_cipher.rs:37:27:37:74 | [...] | semmle.label | [...] | | test_cipher.rs:38:30:38:47 | ...::new | semmle.label | ...::new | @@ -133,30 +130,29 @@ nodes | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | semmle.label | &const10 [&ref, element] | | test_cipher.rs:51:75:51:81 | const10 [element] | semmle.label | const10 [element] | -| test_cipher.rs:73:9:73:14 | const2 [&ref, element] | semmle.label | const2 [&ref, element] | -| test_cipher.rs:73:18:73:26 | &... [&ref, element] | semmle.label | &... [&ref, element] | -| test_cipher.rs:73:19:73:26 | [0u8; 32] [element] | semmle.label | [0u8; 32] [element] | -| test_cipher.rs:73:20:73:22 | 0u8 | semmle.label | 0u8 | +| test_cipher.rs:73:9:73:14 | const2 [&ref] | semmle.label | const2 [&ref] | +| test_cipher.rs:73:18:73:26 | &... [&ref] | semmle.label | &... [&ref] | +| test_cipher.rs:73:19:73:26 | [0u8; 32] | semmle.label | [0u8; 32] | | test_cipher.rs:74:23:74:44 | ...::new_from_slice | semmle.label | ...::new_from_slice | -| test_cipher.rs:74:46:74:51 | const2 [&ref, element] | semmle.label | const2 [&ref, element] | -| test_cookie.rs:17:9:17:14 | array1 [element] | semmle.label | array1 [element] | -| test_cookie.rs:17:28:17:34 | [0; 64] [element] | semmle.label | [0; 64] [element] | -| test_cookie.rs:17:29:17:29 | 0 | semmle.label | 0 | +| test_cipher.rs:74:46:74:51 | const2 [&ref] | semmle.label | const2 [&ref] | +| test_cookie.rs:17:9:17:14 | array1 | semmle.label | array1 | +| test_cookie.rs:17:28:17:34 | [0; 64] | semmle.label | [0; 64] | | test_cookie.rs:18:16:18:24 | ...::from | semmle.label | ...::from | -| test_cookie.rs:18:26:18:32 | &array1 [&ref, element] | semmle.label | &array1 [&ref, element] | -| test_cookie.rs:18:27:18:32 | array1 [element] | semmle.label | array1 [element] | -| test_cookie.rs:21:9:21:14 | array2 [element] | semmle.label | array2 [element] | -| test_cookie.rs:21:28:21:34 | [0; 64] [element] | semmle.label | [0; 64] [element] | -| test_cookie.rs:21:29:21:29 | 0 | semmle.label | 0 | +| test_cookie.rs:18:26:18:32 | &array1 [&ref] | semmle.label | &array1 [&ref] | +| test_cookie.rs:18:27:18:32 | array1 | semmle.label | array1 | +| test_cookie.rs:21:9:21:14 | array2 | semmle.label | array2 | +| test_cookie.rs:21:28:21:34 | [0; 64] | semmle.label | [0; 64] | | test_cookie.rs:22:16:22:24 | ...::from | semmle.label | ...::from | -| test_cookie.rs:22:26:22:32 | &array2 [&ref, element] | semmle.label | &array2 [&ref, element] | -| test_cookie.rs:22:27:22:32 | array2 [element] | semmle.label | array2 [element] | +| test_cookie.rs:22:26:22:32 | &array2 [&ref] | semmle.label | &array2 [&ref] | +| test_cookie.rs:22:27:22:32 | array2 | semmle.label | array2 | +| test_cookie.rs:38:9:38:14 | array2 | semmle.label | array2 | +| test_cookie.rs:38:18:38:37 | ...::from(...) | semmle.label | ...::from(...) | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | semmle.label | [0u8; 64] | +| test_cookie.rs:42:14:42:32 | ...::from | semmle.label | ...::from | +| test_cookie.rs:42:34:42:39 | array2 | semmle.label | array2 | | test_cookie.rs:49:9:49:14 | array3 [element] | semmle.label | array3 [element] | | test_cookie.rs:49:23:49:25 | 0u8 | semmle.label | 0u8 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | semmle.label | ...::from_elem(...) [element] | | test_cookie.rs:53:14:53:32 | ...::from | semmle.label | ...::from | | test_cookie.rs:53:34:53:39 | array3 [element] | semmle.label | array3 [element] | subpaths -testFailures -| test_cookie.rs:38:40:38:86 | //... | Missing result: Alert[rust/hard-coded-cryptographic-value] | -| test_cookie.rs:42:43:42:51 | //... | Missing result: Sink | From 2f96e32ec995fd8fecabd88c475f1a245a1fc3a4 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 26 Sep 2025 10:08:31 +0100 Subject: [PATCH 208/219] Update 2.1.0.md --- javascript/ql/src/change-notes/released/2.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/change-notes/released/2.1.0.md b/javascript/ql/src/change-notes/released/2.1.0.md index e0ef5ddd6e15..6b5696816cff 100644 --- a/javascript/ql/src/change-notes/released/2.1.0.md +++ b/javascript/ql/src/change-notes/released/2.1.0.md @@ -10,4 +10,4 @@ * Data flow is now tracked through the `Promise.try` and `Array.prototype.with` functions. * Query `js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query `js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as `Object.keys()`. -* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. +* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who submitted the original experimental query! From 09833e2541e36e678993b9fa613113dba0fac32f Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 26 Sep 2025 10:09:30 +0100 Subject: [PATCH 209/219] Update CHANGELOG for query promotion and acknowledgment Promote 'Permissive CORS configuration' query to default suite and acknowledge contributor. --- javascript/ql/src/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 619bc14bf299..4067c050c2a1 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -10,7 +10,7 @@ * Data flow is now tracked through the `Promise.try` and `Array.prototype.with` functions. * Query `js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query `js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as `Object.keys()`. -* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. +* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who [submitted the original experimental query](https://github.com/github/codeql/pull/14342)! ## 2.0.3 From ba520c60d23a6e7bbd091eade91b5d6544525e41 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 26 Sep 2025 10:11:03 +0100 Subject: [PATCH 210/219] Update 2.1.0.md --- javascript/ql/src/change-notes/released/2.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/change-notes/released/2.1.0.md b/javascript/ql/src/change-notes/released/2.1.0.md index 6b5696816cff..c95b5add20b7 100644 --- a/javascript/ql/src/change-notes/released/2.1.0.md +++ b/javascript/ql/src/change-notes/released/2.1.0.md @@ -10,4 +10,4 @@ * Data flow is now tracked through the `Promise.try` and `Array.prototype.with` functions. * Query `js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query `js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as `Object.keys()`. -* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who submitted the original experimental query! +* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who [submitted the original experimental query](https://github.com/github/codeql/pull/14342)! From 4c7b66c66af102eaf2ecf7bcb2f5090cdeee88b6 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 26 Sep 2025 13:11:45 +0200 Subject: [PATCH 211/219] Address review comments --- .../rust/elements/internal/CallableImpl.qll | 10 ++++++ .../codeql/rust/internal/PathResolution.qll | 31 +++++++------------ 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll index 46489cab981b..9448de795d3a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll @@ -27,5 +27,15 @@ module Impl { * Holds if `getSelfParam()` exists. */ predicate hasSelfParam() { exists(this.getSelfParam()) } + + /** + * Gets the number of parameters of this callable, including `self` if it exists. + */ + int getNumberOfParamsInclSelf() { + exists(int arr | + arr = this.getNumberOfParams() and + if this.hasSelfParam() then result = arr + 1 else result = arr + ) + } } } diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 4b3683088781..f1574ff38f3a 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -605,13 +605,13 @@ private class EnumItemNode extends TypeItemNode instanceof Enum { } } -/** An item that can be called with arguments. */ -abstract class CallableItemNode extends ItemNode { - /** Gets the number of parameters of this item. */ - abstract int getNumberOfParameters(); +/** An item that can be referenced with arguments. */ +abstract class ParameterizableItemNode extends ItemNode { + /** Gets the arity this item. */ + abstract int getArity(); } -private class VariantItemNode extends CallableItemNode instanceof Variant { +private class VariantItemNode extends ParameterizableItemNode instanceof Variant { override string getName() { result = Variant.super.getName().getText() } override Namespace getNamespace() { @@ -624,9 +624,7 @@ private class VariantItemNode extends CallableItemNode instanceof Variant { override Visibility getVisibility() { result = super.getEnum().getVisibility() } - override int getNumberOfParameters() { - result = super.getFieldList().(TupleFieldList).getNumberOfFields() - } + override int getArity() { result = super.getFieldList().(TupleFieldList).getNumberOfFields() } override predicate hasCanonicalPath(Crate c) { this.hasCanonicalPathPrefix(c) } @@ -649,7 +647,7 @@ private class VariantItemNode extends CallableItemNode instanceof Variant { } } -class FunctionItemNode extends AssocItemNode, CallableItemNode instanceof Function { +class FunctionItemNode extends AssocItemNode, ParameterizableItemNode instanceof Function { override string getName() { result = Function.super.getName().getText() } override predicate hasImplementation() { Function.super.hasImplementation() } @@ -660,12 +658,7 @@ class FunctionItemNode extends AssocItemNode, CallableItemNode instanceof Functi override Visibility getVisibility() { result = Function.super.getVisibility() } - override int getNumberOfParameters() { - exists(int arr | - arr = super.getNumberOfParams() and - if super.hasSelfParam() then result = arr + 1 else result = arr - ) - } + override int getArity() { result = super.getNumberOfParamsInclSelf() } } abstract class ImplOrTraitItemNode extends ItemNode { @@ -885,7 +878,7 @@ private class ImplItemNodeImpl extends ImplItemNode { TraitItemNode resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } } -private class StructItemNode extends TypeItemNode, CallableItemNode instanceof Struct { +private class StructItemNode extends TypeItemNode, ParameterizableItemNode instanceof Struct { override string getName() { result = Struct.super.getName().getText() } override Namespace getNamespace() { @@ -897,9 +890,7 @@ private class StructItemNode extends TypeItemNode, CallableItemNode instanceof S override Visibility getVisibility() { result = Struct.super.getVisibility() } - override int getNumberOfParameters() { - result = super.getFieldList().(TupleFieldList).getNumberOfFields() - } + override int getArity() { result = super.getFieldList().(TupleFieldList).getNumberOfFields() } override TypeParam getTypeParam(int i) { result = super.getGenericParamList().getTypeParam(i) } @@ -1717,7 +1708,7 @@ private ItemNode resolvePathCand(RelevantPath path) { or exists(CallExpr ce | path = CallExprImpl::getFunctionPath(ce) and - result.(CallableItemNode).getNumberOfParameters() = ce.getNumberOfArgs() + result.(ParameterizableItemNode).getArity() = ce.getNumberOfArgs() ) ) } From 2c29f210046a362db85023cbb4a08d7d12865f1d Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 26 Sep 2025 13:59:53 +0200 Subject: [PATCH 212/219] Shared: Address review comments. --- .../codeql/controlflow/ControlFlow.qll | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/shared/controlflow/codeql/controlflow/ControlFlow.qll b/shared/controlflow/codeql/controlflow/ControlFlow.qll index ca0de9d47446..7fd6ec70bfcb 100644 --- a/shared/controlflow/codeql/controlflow/ControlFlow.qll +++ b/shared/controlflow/codeql/controlflow/ControlFlow.qll @@ -278,7 +278,7 @@ module Make< exists(Expr e | def.getDefinition() = e and exprHasValue(e, gv) and - (exists(GuardValue gv0 | exprHasValue(e, gv0) and gv0.isSingleton()) implies gv.isSingleton()) + (any(GuardValue gv0 | exprHasValue(e, gv0)).isSingleton() implies gv.isSingleton()) ) } @@ -595,7 +595,7 @@ module Make< ) { ssaControlsBranchEdge(t, bb1, bb2, gv) and ( - exists(GuardValue gv0 | ssaControlsBranchEdge(t, bb1, bb2, gv0) and gv0.isSingleton()) + any(GuardValue gv0 | ssaControlsBranchEdge(t, bb1, bb2, gv0)).isSingleton() implies gv.isSingleton() ) and @@ -694,7 +694,7 @@ module Make< * `src`, and `var` is a relevant splitting variable that gets (re-)defined * in `bb2` by `t`, which is not a phi node. * - * `val` is the best known value for `t` in `bb2`. + * `val` is the best known value that is relatable to `condgv` for `t` in `bb2`. */ private predicate stepSsaValueRedef( SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, GuardValue condgv, @@ -720,7 +720,8 @@ module Make< * `t2`, in `bb2` taking input from `t1` along this edge. Furthermore, * there is no further redefinition of `var` in `bb2`. * - * `val` is the best value for `t1`/`t2` implied by taking this edge. + * `val` is the best value that is relatable to `condgv` for `t1`/`t2` + * implied by taking this edge. */ private predicate stepSsaValuePhi( SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, GuardValue condgv, @@ -747,7 +748,7 @@ module Make< * redefinition along this edge nor in `bb2`. * * Additionally, this edge implies that the SSA definition `t` of `var` has - * value `val`. + * value `val` and that `val` is relatable to `condgv`. */ private predicate stepSsaValueNoRedef( SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, GuardValue condgv, @@ -763,6 +764,12 @@ module Make< /** * Holds if the source `srcDef` in `srcBb` may reach `def` in `bb`. The * taken path takes splitting based on the value of `var` into account. + * + * When multiple `GuardValue`s can be chosen for `var`, we prioritize those + * that are relatable to `condgv`, as that will help determine whether a + * particular edge may be taken or not. Singleton values are prioritized + * highly as they are in principle relatable to every other `GuardValue`. + * * The pair `(tracked, val)` is the current SSA definition and known value * for `var` in `bb`. */ From 3e9332edfa722f7df6e3ceb0e45b230f0036f605 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 26 Sep 2025 13:16:45 +0100 Subject: [PATCH 213/219] Fix formatting in codeql-cli-2.23.1.rst --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 3767c877b5a9..920638fdc87b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\ ` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:``\`` to the beginning. Java/Kotlin """"""""""" From a4f5e9aaf5277a72e4a1aa995fc2de00b982dbfb Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 26 Sep 2025 13:46:12 +0100 Subject: [PATCH 214/219] Update changelog for CodeQL CLI 2.23.1 Added acknowledgment for the original contributor of the 'Permissive CORS configuration' query and clarified the detection of path injection in Go. --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 920638fdc87b..c93bd8af0c31 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who [submitted the original experimental query](https://github.com/github/codeql/pull/14342)! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:``\`` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. Java/Kotlin """"""""""" From 5a0bae27ac97393c76c1470cfccc0828dabb33e5 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 26 Sep 2025 13:57:57 +0100 Subject: [PATCH 215/219] Update changelog for CodeQL CLI 2.23.1 --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index c93bd8af0c31..1c4ac1996875 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who [submitted the original experimental query](https://github.com/github/codeql/pull/14342)! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! Python """""" From f5f61193a03b0c1697e28138503f3977d98fdac5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:33:26 +0100 Subject: [PATCH 216/219] Delete change note --- go/ql/src/change-notes/2025-09-25-exponentiation-constants.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 go/ql/src/change-notes/2025-09-25-exponentiation-constants.md diff --git a/go/ql/src/change-notes/2025-09-25-exponentiation-constants.md b/go/ql/src/change-notes/2025-09-25-exponentiation-constants.md deleted file mode 100644 index cb6c5e43346f..000000000000 --- a/go/ql/src/change-notes/2025-09-25-exponentiation-constants.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/mistyped-exponentiation` now recognises constants whose initialisers are hex or octal constants, making them likely targets of the `^` bitwise-xor operator. From d2130a589be81b1575495e4e1da96b350d1bbbd5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 29 Sep 2025 10:28:45 +0000 Subject: [PATCH 217/219] Release preparation for version 2.23.2 --- actions/ql/lib/CHANGELOG.md | 4 ++++ actions/ql/lib/change-notes/released/0.4.18.md | 3 +++ actions/ql/lib/codeql-pack.release.yml | 2 +- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/CHANGELOG.md | 4 ++++ actions/ql/src/change-notes/released/0.6.10.md | 3 +++ actions/ql/src/codeql-pack.release.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/CHANGELOG.md | 4 ++++ cpp/ql/lib/change-notes/released/5.6.1.md | 3 +++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 4 ++++ cpp/ql/src/change-notes/released/1.5.1.md | 3 +++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../Solorigate/lib/change-notes/released/1.7.49.md | 3 +++ .../ql/campaigns/Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../Solorigate/src/change-notes/released/1.7.49.md | 3 +++ .../ql/campaigns/Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 4 ++++ csharp/ql/lib/change-notes/released/5.2.5.md | 3 +++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 7 +++++++ .../change-notes/2025-09-16-code-quality-doc-query.md | 4 ---- .../1.4.1.md} | 8 +++++--- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../consistency-queries/change-notes/released/1.0.32.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ++++ go/ql/lib/change-notes/released/4.3.5.md | 3 +++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/1.4.6.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/7.7.1.md | 3 +++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.8.1.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 8 ++++++++ javascript/ql/lib/change-notes/2025-07-28-dynamodb.md | 4 ---- .../ql/lib/change-notes/2025-09-17-graphql-enhance.md | 4 ---- .../lib/change-notes/2025-09-19-graphql-type-object.md | 4 ---- javascript/ql/lib/change-notes/released/2.6.12.md | 7 +++++++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ javascript/ql/src/change-notes/released/2.1.1.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/1.0.32.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 6 ++++++ .../4.0.16.md} | 9 +++++---- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 8 ++++++++ .../ql/src/change-notes/2025-08-19-signature-mismatch.md | 5 ----- ...-19-fix-unmatchable-dollar-and-caret-in-assertions.md | 5 ----- python/ql/src/change-notes/released/1.6.6.md | 7 +++++++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ++++++ .../5.1.0.md} | 9 +++++---- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/1.4.6.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/CHANGELOG.md | 9 +++++++++ .../{2025-09-19-parameter-mad.md => released/0.1.17.md} | 9 +++++---- rust/ql/lib/codeql-pack.release.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/CHANGELOG.md | 6 ++++++ rust/ql/src/change-notes/2025-09-15-non-https-url.md | 4 ---- rust/ql/src/change-notes/released/0.1.17.md | 5 +++++ rust/ql/src/codeql-pack.release.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/CHANGELOG.md | 4 ++++ shared/concepts/change-notes/released/0.0.6.md | 3 +++ shared/concepts/codeql-pack.release.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/2.0.16.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/2.0.16.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.32.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/CHANGELOG.md | 4 ++++ shared/quantum/change-notes/released/0.0.10.md | 3 +++ shared/quantum/codeql-pack.release.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/1.0.32.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.32.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/2.0.8.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ shared/threat-models/change-notes/released/1.0.32.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/1.0.32.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ shared/typeflow/change-notes/released/1.0.32.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/CHANGELOG.md | 4 ++++ shared/typeinference/change-notes/released/0.0.13.md | 3 +++ shared/typeinference/codeql-pack.release.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/2.0.16.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.32.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/2.0.19.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.32.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.32.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/5.0.8.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/1.2.6.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 171 files changed, 409 insertions(+), 127 deletions(-) create mode 100644 actions/ql/lib/change-notes/released/0.4.18.md create mode 100644 actions/ql/src/change-notes/released/0.6.10.md create mode 100644 cpp/ql/lib/change-notes/released/5.6.1.md create mode 100644 cpp/ql/src/change-notes/released/1.5.1.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md create mode 100644 csharp/ql/lib/change-notes/released/5.2.5.md delete mode 100644 csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md rename csharp/ql/src/change-notes/{2025-09-17-nullguard-pattern.md => released/1.4.1.md} (55%) create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.32.md create mode 100644 go/ql/lib/change-notes/released/4.3.5.md create mode 100644 go/ql/src/change-notes/released/1.4.6.md create mode 100644 java/ql/lib/change-notes/released/7.7.1.md create mode 100644 java/ql/src/change-notes/released/1.8.1.md delete mode 100644 javascript/ql/lib/change-notes/2025-07-28-dynamodb.md delete mode 100644 javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md delete mode 100644 javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md create mode 100644 javascript/ql/lib/change-notes/released/2.6.12.md create mode 100644 javascript/ql/src/change-notes/released/2.1.1.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.32.md rename python/ql/lib/change-notes/{2025-08-11-jump-step-global-nested.md => released/4.0.16.md} (68%) delete mode 100644 python/ql/src/change-notes/2025-08-19-signature-mismatch.md delete mode 100644 python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md create mode 100644 python/ql/src/change-notes/released/1.6.6.md rename ruby/ql/lib/change-notes/{2025-09-15-grape-framework-support.md => released/5.1.0.md} (70%) create mode 100644 ruby/ql/src/change-notes/released/1.4.6.md rename rust/ql/lib/change-notes/{2025-09-19-parameter-mad.md => released/0.1.17.md} (85%) delete mode 100644 rust/ql/src/change-notes/2025-09-15-non-https-url.md create mode 100644 rust/ql/src/change-notes/released/0.1.17.md create mode 100644 shared/concepts/change-notes/released/0.0.6.md create mode 100644 shared/controlflow/change-notes/released/2.0.16.md create mode 100644 shared/dataflow/change-notes/released/2.0.16.md create mode 100644 shared/mad/change-notes/released/1.0.32.md create mode 100644 shared/quantum/change-notes/released/0.0.10.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.32.md create mode 100644 shared/regex/change-notes/released/1.0.32.md create mode 100644 shared/ssa/change-notes/released/2.0.8.md create mode 100644 shared/threat-models/change-notes/released/1.0.32.md create mode 100644 shared/tutorial/change-notes/released/1.0.32.md create mode 100644 shared/typeflow/change-notes/released/1.0.32.md create mode 100644 shared/typeinference/change-notes/released/0.0.13.md create mode 100644 shared/typetracking/change-notes/released/2.0.16.md create mode 100644 shared/typos/change-notes/released/1.0.32.md create mode 100644 shared/util/change-notes/released/2.0.19.md create mode 100644 shared/xml/change-notes/released/1.0.32.md create mode 100644 shared/yaml/change-notes/released/1.0.32.md create mode 100644 swift/ql/lib/change-notes/released/5.0.8.md create mode 100644 swift/ql/src/change-notes/released/1.2.6.md diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 60f6a45ea945..e6ae9a82059e 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.18 + +No user-facing changes. + ## 0.4.17 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.18.md b/actions/ql/lib/change-notes/released/0.4.18.md new file mode 100644 index 000000000000..a6a7b2e276b6 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.18.md @@ -0,0 +1,3 @@ +## 0.4.18 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index d5b31a0cac9f..1a848f928999 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.17 +lastReleaseVersion: 0.4.18 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 266007af096c..bfebfa99d04d 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.18-dev +version: 0.4.18 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 78b4591c5210..534ba89566b2 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.10 + +No user-facing changes. + ## 0.6.9 ### Minor Analysis Improvements diff --git a/actions/ql/src/change-notes/released/0.6.10.md b/actions/ql/src/change-notes/released/0.6.10.md new file mode 100644 index 000000000000..048cd0c98baf --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.10.md @@ -0,0 +1,3 @@ +## 0.6.10 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index f03da398190a..c2eebb652b05 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.9 +lastReleaseVersion: 0.6.10 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index e4a69c7cd61c..9dba67fea767 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.10-dev +version: 0.6.10 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index cfe24937b744..0909c8e3c881 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.6.1 + +No user-facing changes. + ## 5.6.0 ### Deprecated APIs diff --git a/cpp/ql/lib/change-notes/released/5.6.1.md b/cpp/ql/lib/change-notes/released/5.6.1.md new file mode 100644 index 000000000000..368d902c7fe9 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.6.1.md @@ -0,0 +1,3 @@ +## 5.6.1 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index df73323b21f0..2dcac412aa9c 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.6.0 +lastReleaseVersion: 5.6.1 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 63500a12a2f9..23bf4d8fc9ec 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.6.1-dev +version: 5.6.1 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 0cafbd23191b..39549ed1bdc2 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.1 + +No user-facing changes. + ## 1.5.0 ### Major Analysis Improvements diff --git a/cpp/ql/src/change-notes/released/1.5.1.md b/cpp/ql/src/change-notes/released/1.5.1.md new file mode 100644 index 000000000000..7b24a64aca3a --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.1.md @@ -0,0 +1,3 @@ +## 1.5.1 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 639f80c43417..c5775c46013c 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.0 +lastReleaseVersion: 1.5.1 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 8b6b27302cc9..7322e2571d12 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.1-dev +version: 1.5.1 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 41b8b166a6c6..bcfd38e14942 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.49 + +No user-facing changes. + ## 1.7.48 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md new file mode 100644 index 000000000000..431bff76c0b7 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md @@ -0,0 +1,3 @@ +## 1.7.49 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index f5fe8023097c..fe16fdfefdc8 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.48 +lastReleaseVersion: 1.7.49 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index bc2dd9a229ce..02e6cddfc17e 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.49-dev +version: 1.7.49 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 41b8b166a6c6..bcfd38e14942 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.49 + +No user-facing changes. + ## 1.7.48 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md new file mode 100644 index 000000000000..431bff76c0b7 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md @@ -0,0 +1,3 @@ +## 1.7.49 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index f5fe8023097c..fe16fdfefdc8 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.48 +lastReleaseVersion: 1.7.49 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 82cad1a64729..84e6c8ef7e08 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.49-dev +version: 1.7.49 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index cb639225e7d2..095eab5cdbaf 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.2.5 + +No user-facing changes. + ## 5.2.4 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/5.2.5.md b/csharp/ql/lib/change-notes/released/5.2.5.md new file mode 100644 index 000000000000..bd0e11570992 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.5.md @@ -0,0 +1,3 @@ +## 5.2.5 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index fc4dc64578b7..63222f8b4a01 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.2.4 +lastReleaseVersion: 5.2.5 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index f5795e125581..aba9ee98b5a4 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.2.5-dev +version: 5.2.5 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index e044a3dbb4f7..e432045f72ee 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.4.1 + +### Minor Analysis Improvements + +* The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. +* Remove the query `cs/xmldoc/missing-summary` from the `code-quality` suite (align with other languages). + ## 1.4.0 ### Deprecated Queries diff --git a/csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md b/csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md deleted file mode 100644 index 8972be616b9a..000000000000 --- a/csharp/ql/src/change-notes/2025-09-16-code-quality-doc-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Remove the query `cs/xmldoc/missing-summary` from the `code-quality` suite (align with other languages). diff --git a/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md b/csharp/ql/src/change-notes/released/1.4.1.md similarity index 55% rename from csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md rename to csharp/ql/src/change-notes/released/1.4.1.md index 49b76c25b0bc..48b31092714d 100644 --- a/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md +++ b/csharp/ql/src/change-notes/released/1.4.1.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 1.4.1 + +### Minor Analysis Improvements + * The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. +* Remove the query `cs/xmldoc/missing-summary` from the `code-quality` suite (align with other languages). diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index b8b2e97d5086..43ccf4467bed 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.0 +lastReleaseVersion: 1.4.1 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 724ec4c0097a..7ecdec07f350 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.4.1-dev +version: 1.4.1 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index d50406235570..331bb4c220e0 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.32.md b/go/ql/consistency-queries/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 3a3f60920be8..3b1e2d9586bb 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.32-dev +version: 1.0.32 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 50d61186f738..adf218a99e44 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.3.5 + +No user-facing changes. + ## 4.3.4 ### Minor Analysis Improvements diff --git a/go/ql/lib/change-notes/released/4.3.5.md b/go/ql/lib/change-notes/released/4.3.5.md new file mode 100644 index 000000000000..e386c2fbd985 --- /dev/null +++ b/go/ql/lib/change-notes/released/4.3.5.md @@ -0,0 +1,3 @@ +## 4.3.5 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index f755e0936a72..d6a085129424 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.3.4 +lastReleaseVersion: 4.3.5 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 1e8bdd280f7b..bc9bf12c80cc 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.3.5-dev +version: 4.3.5 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index c3b9c32ff329..65d6436fce3e 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.6 + +No user-facing changes. + ## 1.4.5 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.6.md b/go/ql/src/change-notes/released/1.4.6.md new file mode 100644 index 000000000000..5146f9e1cbfa --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.6.md @@ -0,0 +1,3 @@ +## 1.4.6 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index a74b6b08d860..3b00bbce928c 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.5 +lastReleaseVersion: 1.4.6 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 9320b29d8e88..816d4b958675 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.4.6-dev +version: 1.4.6 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index a6b4649e42ee..0e74414917b6 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.7.1 + +No user-facing changes. + ## 7.7.0 ### New Features diff --git a/java/ql/lib/change-notes/released/7.7.1.md b/java/ql/lib/change-notes/released/7.7.1.md new file mode 100644 index 000000000000..7349fc621cc4 --- /dev/null +++ b/java/ql/lib/change-notes/released/7.7.1.md @@ -0,0 +1,3 @@ +## 7.7.1 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 5c876a864fc2..c94dbb3cd65d 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.7.0 +lastReleaseVersion: 7.7.1 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 3009b1b327f1..7d0153cc5669 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.7.1-dev +version: 7.7.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 022442a1628a..1e6df88fc31d 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.8.1 + +No user-facing changes. + ## 1.8.0 ### Major Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.8.1.md b/java/ql/src/change-notes/released/1.8.1.md new file mode 100644 index 000000000000..0b1a7cdad10a --- /dev/null +++ b/java/ql/src/change-notes/released/1.8.1.md @@ -0,0 +1,3 @@ +## 1.8.1 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index dc8a37cc443d..28a7c123ae84 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.8.0 +lastReleaseVersion: 1.8.1 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 01bf070bb074..bbfafc65503d 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.8.1-dev +version: 1.8.1 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index b98534e791d6..975d14e10988 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.6.12 + +### Minor Analysis Improvements + +* Added modeling of `GraphQLObjectType` resolver function parameters as remote sources. +* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. + ## 2.6.11 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md b/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md deleted file mode 100644 index bbf5d57163ae..000000000000 --- a/javascript/ql/lib/change-notes/2025-07-28-dynamodb.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. diff --git a/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md b/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md deleted file mode 100644 index cb0b886a6f75..000000000000 --- a/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. diff --git a/javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md b/javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md deleted file mode 100644 index 6afa4ece331d..000000000000 --- a/javascript/ql/lib/change-notes/2025-09-19-graphql-type-object.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added modeling of `GraphQLObjectType` resolver function parameters as remote sources. diff --git a/javascript/ql/lib/change-notes/released/2.6.12.md b/javascript/ql/lib/change-notes/released/2.6.12.md new file mode 100644 index 000000000000..adc136621d85 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.12.md @@ -0,0 +1,7 @@ +## 2.6.12 + +### Minor Analysis Improvements + +* Added modeling of `GraphQLObjectType` resolver function parameters as remote sources. +* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index a31eb42966ca..8b34428a8454 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.11 +lastReleaseVersion: 2.6.12 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 1d05d1003f35..74ccf251956f 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.12-dev +version: 2.6.12 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 4067c050c2a1..46aae437f779 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.1.1 + +No user-facing changes. + ## 2.1.0 ### Major Analysis Improvements diff --git a/javascript/ql/src/change-notes/released/2.1.1.md b/javascript/ql/src/change-notes/released/2.1.1.md new file mode 100644 index 000000000000..f023e9166c2d --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.1.1.md @@ -0,0 +1,3 @@ +## 2.1.1 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 487a1a58b2b8..576c2ea18d68 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.0 +lastReleaseVersion: 2.1.1 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 916ad1339b2e..cafde25bbf9e 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.1.1-dev +version: 2.1.1 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 6b54042fef32..4cbaa48190df 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.32.md b/misc/suite-helpers/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 72c2f165759a..7d71d83613d3 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.32-dev +version: 1.0.32 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 6a4fefd44467..070309c08a05 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.0.16 + +### Minor Analysis Improvements + +* Data flow tracking through global variables now supports nested field access patterns such as `global_var.obj.field`. This improves the precision of taint tracking analysis when data flows through complex global variable structures. + ## 4.0.15 No user-facing changes. diff --git a/python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md b/python/ql/lib/change-notes/released/4.0.16.md similarity index 68% rename from python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md rename to python/ql/lib/change-notes/released/4.0.16.md index 4109bb788259..025815a5c02e 100644 --- a/python/ql/lib/change-notes/2025-08-11-jump-step-global-nested.md +++ b/python/ql/lib/change-notes/released/4.0.16.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Data flow tracking through global variables now supports nested field access patterns such as `global_var.obj.field`. This improves the precision of taint tracking analysis when data flows through complex global variable structures. \ No newline at end of file +## 4.0.16 + +### Minor Analysis Improvements + +* Data flow tracking through global variables now supports nested field access patterns such as `global_var.obj.field`. This improves the precision of taint tracking analysis when data flows through complex global variable structures. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index eef62765883a..916d99df3ad6 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.0.15 +lastReleaseVersion: 4.0.16 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 61875fc7f4e7..5eba946c3cf0 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.16-dev +version: 4.0.16 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index de3fc1ddf2b5..e620dee4fca9 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.6.6 + +### Minor Analysis Improvements + +- The queries that check for unmatchable `$` and `^` in regular expressions did not account correctly for occurrences inside lookahead and lookbehind assertions. These occurrences are now handled correctly, eliminating this source of false positives. +* The `py/inheritance/signature-mismatch` query has been modernized. It produces more precise results and more descriptive alert messages. +* The `py/inheritance/incorrect-overriding-signature` query has been deprecated. Its results have been consolidated into the `py/inheritance/signature-mismatch` query. + ## 1.6.5 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/2025-08-19-signature-mismatch.md b/python/ql/src/change-notes/2025-08-19-signature-mismatch.md deleted file mode 100644 index 60c3efa32eb9..000000000000 --- a/python/ql/src/change-notes/2025-08-19-signature-mismatch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The `py/inheritance/signature-mismatch` query has been modernized. It produces more precise results and more descriptive alert messages. -* The `py/inheritance/incorrect-overriding-signature` query has been deprecated. Its results have been consolidated into the `py/inheritance/signature-mismatch` query. \ No newline at end of file diff --git a/python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md b/python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md deleted file mode 100644 index cf63dd9ed4da..000000000000 --- a/python/ql/src/change-notes/2025-09-19-fix-unmatchable-dollar-and-caret-in-assertions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- - -- The queries that check for unmatchable `$` and `^` in regular expressions did not account correctly for occurrences inside lookahead and lookbehind assertions. These occurrences are now handled correctly, eliminating this source of false positives. diff --git a/python/ql/src/change-notes/released/1.6.6.md b/python/ql/src/change-notes/released/1.6.6.md new file mode 100644 index 000000000000..e1b0e3c4955b --- /dev/null +++ b/python/ql/src/change-notes/released/1.6.6.md @@ -0,0 +1,7 @@ +## 1.6.6 + +### Minor Analysis Improvements + +- The queries that check for unmatchable `$` and `^` in regular expressions did not account correctly for occurrences inside lookahead and lookbehind assertions. These occurrences are now handled correctly, eliminating this source of false positives. +* The `py/inheritance/signature-mismatch` query has been modernized. It produces more precise results and more descriptive alert messages. +* The `py/inheritance/incorrect-overriding-signature` query has been deprecated. Its results have been consolidated into the `py/inheritance/signature-mismatch` query. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 031532705578..f8e54f30a672 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.5 +lastReleaseVersion: 1.6.6 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index edf6366c64ba..b42e054bdadc 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.6.6-dev +version: 1.6.6 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index b9333de9c5dd..a62232991b81 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.1.0 + +### New Features + +* Initial modeling for the Ruby Grape framework in `Grape.qll` has been added to detect API endpoints, parameters, and headers within Grape API classes. + ## 5.0.4 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md b/ruby/ql/lib/change-notes/released/5.1.0.md similarity index 70% rename from ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md rename to ruby/ql/lib/change-notes/released/5.1.0.md index 08ceed887f21..4958aaac95f5 100644 --- a/ruby/ql/lib/change-notes/2025-09-15-grape-framework-support.md +++ b/ruby/ql/lib/change-notes/released/5.1.0.md @@ -1,4 +1,5 @@ ---- -category: feature ---- -* Initial modeling for the Ruby Grape framework in `Grape.qll` has been added to detect API endpoints, parameters, and headers within Grape API classes. \ No newline at end of file +## 5.1.0 + +### New Features + +* Initial modeling for the Ruby Grape framework in `Grape.qll` has been added to detect API endpoints, parameters, and headers within Grape API classes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 8cb0167caf0c..dd8d287d0103 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.4 +lastReleaseVersion: 5.1.0 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index a2288bd3799f..6dd0db034c30 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.0.5-dev +version: 5.1.0 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 40209ec84bde..7811ea73f864 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.6 + +No user-facing changes. + ## 1.4.5 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.4.6.md b/ruby/ql/src/change-notes/released/1.4.6.md new file mode 100644 index 000000000000..5146f9e1cbfa --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.4.6.md @@ -0,0 +1,3 @@ +## 1.4.6 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index a74b6b08d860..3b00bbce928c 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.5 +lastReleaseVersion: 1.4.6 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 084d64e8b029..ce46bf8c37a3 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.4.6-dev +version: 1.4.6 groups: - ruby - queries diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 809479e5fec4..ec04cd624a76 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.1.17 + +### New Features + +* The models-as-data format for sources now supports access paths of the form + `Argument[i].Parameter[j]`. This denotes that the source passes tainted data to + the `j`th parameter of its `i`th argument (which must be a function or a + closure). + ## 0.1.16 ### Minor Analysis Improvements diff --git a/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md b/rust/ql/lib/change-notes/released/0.1.17.md similarity index 85% rename from rust/ql/lib/change-notes/2025-09-19-parameter-mad.md rename to rust/ql/lib/change-notes/released/0.1.17.md index fa3970790fa1..a2707c04150e 100644 --- a/rust/ql/lib/change-notes/2025-09-19-parameter-mad.md +++ b/rust/ql/lib/change-notes/released/0.1.17.md @@ -1,7 +1,8 @@ ---- -category: feature ---- +## 0.1.17 + +### New Features + * The models-as-data format for sources now supports access paths of the form `Argument[i].Parameter[j]`. This denotes that the source passes tainted data to the `j`th parameter of its `i`th argument (which must be a function or a - closure). \ No newline at end of file + closure). diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index a01dca921616..eddeebba7bfe 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.16 +lastReleaseVersion: 0.1.17 diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 421a604aa3df..3c3ba893b14a 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.17-dev +version: 0.1.17 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 48f64efbcdb7..29117e66d4cb 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.17 + +### New Queries + +* Added a new query, `rust/non-https-url`, for detecting the use of non-HTTPS URLs that can be intercepted by third parties. + ## 0.1.16 ### New Queries diff --git a/rust/ql/src/change-notes/2025-09-15-non-https-url.md b/rust/ql/src/change-notes/2025-09-15-non-https-url.md deleted file mode 100644 index c4ab664f7324..000000000000 --- a/rust/ql/src/change-notes/2025-09-15-non-https-url.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `rust/non-https-url`, for detecting the use of non-HTTPS URLs that can be intercepted by third parties. \ No newline at end of file diff --git a/rust/ql/src/change-notes/released/0.1.17.md b/rust/ql/src/change-notes/released/0.1.17.md new file mode 100644 index 000000000000..13cfb719c3cf --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.17.md @@ -0,0 +1,5 @@ +## 0.1.17 + +### New Queries + +* Added a new query, `rust/non-https-url`, for detecting the use of non-HTTPS URLs that can be intercepted by third parties. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index a01dca921616..eddeebba7bfe 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.16 +lastReleaseVersion: 0.1.17 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 3c122e1853b9..09d251a5cb1b 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.17-dev +version: 0.1.17 groups: - rust - queries diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md index bac19b9b77f2..cfaa89c5ac2a 100644 --- a/shared/concepts/CHANGELOG.md +++ b/shared/concepts/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.6 + +No user-facing changes. + ## 0.0.5 No user-facing changes. diff --git a/shared/concepts/change-notes/released/0.0.6.md b/shared/concepts/change-notes/released/0.0.6.md new file mode 100644 index 000000000000..ccbce856079d --- /dev/null +++ b/shared/concepts/change-notes/released/0.0.6.md @@ -0,0 +1,3 @@ +## 0.0.6 + +No user-facing changes. diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml index bb45a1ab0182..cf398ce02aa4 100644 --- a/shared/concepts/codeql-pack.release.yml +++ b/shared/concepts/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.5 +lastReleaseVersion: 0.0.6 diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 8b0fc6c6f7ae..3924d67029dc 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.6-dev +version: 0.0.6 groups: shared library: true dependencies: diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 9b9c04fd8d8d..df7e781268e2 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.16 + +No user-facing changes. + ## 2.0.15 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.16.md b/shared/controlflow/change-notes/released/2.0.16.md new file mode 100644 index 000000000000..221400d393f2 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.16.md @@ -0,0 +1,3 @@ +## 2.0.16 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 0377ae283a31..c10461a785cf 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.15 +lastReleaseVersion: 2.0.16 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 56945c0709d4..a0158fea04f4 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.16-dev +version: 2.0.16 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 1a867888e89d..13be0b19eb2e 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.16 + +No user-facing changes. + ## 2.0.15 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.16.md b/shared/dataflow/change-notes/released/2.0.16.md new file mode 100644 index 000000000000..221400d393f2 --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.16.md @@ -0,0 +1,3 @@ +## 2.0.16 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 0377ae283a31..c10461a785cf 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.15 +lastReleaseVersion: 2.0.16 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 4c0a9bdfe8c2..3e46004181ff 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.16-dev +version: 2.0.16 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index e6cf183a1d4d..9979556a4214 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.32.md b/shared/mad/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index b6f4e8c2bc11..1aaa401b7505 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index a59e560c4155..1857b399fe88 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.10 + +No user-facing changes. + ## 0.0.9 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.10.md b/shared/quantum/change-notes/released/0.0.10.md new file mode 100644 index 000000000000..22391080fd45 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index ecdd64fbab86..b740014e5aed 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.10 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 3741ff55855d..bf877f51d5fa 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.10-dev +version: 0.0.10 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 104664809001..50ea4c310f68 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.32.md b/shared/rangeanalysis/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index e67c274bf518..5e9de8ad5131 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 3b3fcb5a55f7..830e0da6f287 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.32.md b/shared/regex/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 5aebaf9bffb1..f69602228c9a 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index e7e17bf044b2..8e4b1482e78b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.8 + +No user-facing changes. + ## 2.0.7 No user-facing changes. diff --git a/shared/ssa/change-notes/released/2.0.8.md b/shared/ssa/change-notes/released/2.0.8.md new file mode 100644 index 000000000000..4d6867c721bf --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.8.md @@ -0,0 +1,3 @@ +## 2.0.8 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 08d5e9594498..7ffb2d9f65be 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.7 +lastReleaseVersion: 2.0.8 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 8337226f574d..bbccd5e094c6 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.8-dev +version: 2.0.8 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index d50406235570..331bb4c220e0 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.32.md b/shared/threat-models/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 8f72fd8ad3fc..10ca1546f9f7 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.32-dev +version: 1.0.32 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index f4a80412ca8c..6f6d29c25040 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.32.md b/shared/tutorial/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index aabb0356b861..ce733dcd8b26 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index bf4296980228..592596c37d21 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.32.md b/shared/typeflow/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 98566858903b..d665055f1253 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 83a42fb05515..29ece641a7e3 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.13 + +No user-facing changes. + ## 0.0.12 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.13.md b/shared/typeinference/change-notes/released/0.0.13.md new file mode 100644 index 000000000000..f679eaf0313a --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.13.md @@ -0,0 +1,3 @@ +## 0.0.13 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index 997fb8da83cd..044e54e4f7e5 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.12 +lastReleaseVersion: 0.0.13 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 954a850cf0f5..8a7bfdca9756 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.13-dev +version: 0.0.13 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 1372c8c89ea1..6b132f75a558 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.16 + +No user-facing changes. + ## 2.0.15 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.16.md b/shared/typetracking/change-notes/released/2.0.16.md new file mode 100644 index 000000000000..221400d393f2 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.16.md @@ -0,0 +1,3 @@ +## 2.0.16 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 0377ae283a31..c10461a785cf 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.15 +lastReleaseVersion: 2.0.16 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 2bf6f01d218c..4e24584b50e9 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.16-dev +version: 2.0.16 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index c44b941f9e33..2661fcc93085 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.32.md b/shared/typos/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index b01883668b7d..b13ab265b257 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index d9169a8d5d87..3ded7f7af706 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.19 + +No user-facing changes. + ## 2.0.18 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.19.md b/shared/util/change-notes/released/2.0.19.md new file mode 100644 index 000000000000..b37b6798b125 --- /dev/null +++ b/shared/util/change-notes/released/2.0.19.md @@ -0,0 +1,3 @@ +## 2.0.19 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 16342205c738..4aecf1e1f86f 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.18 +lastReleaseVersion: 2.0.19 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 1c1f5670d3e0..2352753b4724 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.19-dev +version: 2.0.19 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 59ae3e2581a1..2c1d2132c7e1 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.32.md b/shared/xml/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 0908201b1822..680cc4751ef5 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 2254f38fb9ff..31243ec36be5 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.32 + +No user-facing changes. + ## 1.0.31 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.32.md b/shared/yaml/change-notes/released/1.0.32.md new file mode 100644 index 000000000000..05c4073731c4 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index f5bdc98ffc82..7bc5c51ba7bf 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.31 +lastReleaseVersion: 1.0.32 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index cbbdd8963410..1c625bfdf4ae 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.32-dev +version: 1.0.32 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 7138ed02a2b1..eb3b3da96897 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.8 + +No user-facing changes. + ## 5.0.7 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/5.0.8.md b/swift/ql/lib/change-notes/released/5.0.8.md new file mode 100644 index 000000000000..9c73f4b13411 --- /dev/null +++ b/swift/ql/lib/change-notes/released/5.0.8.md @@ -0,0 +1,3 @@ +## 5.0.8 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index accf4086d8ac..c608aca69694 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.7 +lastReleaseVersion: 5.0.8 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 88950de258f4..a05b05e1eea9 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.8-dev +version: 5.0.8 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index eac658646174..be2f79710a9c 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.6 + +No user-facing changes. + ## 1.2.5 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.2.6.md b/swift/ql/src/change-notes/released/1.2.6.md new file mode 100644 index 000000000000..0832850ff8c2 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.2.6.md @@ -0,0 +1,3 @@ +## 1.2.6 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 40355f0807f9..24962f7ba24b 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.5 +lastReleaseVersion: 1.2.6 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index f49b81cec754..3dbc93c16d32 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.6-dev +version: 1.2.6 groups: - swift - queries From a76d736136b32570135d62649db39ba374627b1e Mon Sep 17 00:00:00 2001 From: Nick Rolfe Date: Mon, 29 Sep 2025 15:32:52 +0100 Subject: [PATCH 218/219] C#: tweak changelog wording --- csharp/ql/src/CHANGELOG.md | 2 +- csharp/ql/src/change-notes/released/1.4.1.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index e432045f72ee..7fa8992c49af 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. -* Remove the query `cs/xmldoc/missing-summary` from the `code-quality` suite (align with other languages). +* The query `cs/xmldoc/missing-summary` has been removed from the `code-quality` suite, to align with other languages. ## 1.4.0 diff --git a/csharp/ql/src/change-notes/released/1.4.1.md b/csharp/ql/src/change-notes/released/1.4.1.md index 48b31092714d..f161787a1085 100644 --- a/csharp/ql/src/change-notes/released/1.4.1.md +++ b/csharp/ql/src/change-notes/released/1.4.1.md @@ -3,4 +3,4 @@ ### Minor Analysis Improvements * The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. -* Remove the query `cs/xmldoc/missing-summary` from the `code-quality` suite (align with other languages). +* The query `cs/xmldoc/missing-summary` has been removed from the `code-quality` suite, to align with other languages. From 9bc74bd8246a7166ce82a6186bbf0fa08f1834c2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 2 Oct 2025 18:50:36 +0100 Subject: [PATCH 219/219] PS: Mirror the changes from github/codeql#20452. --- .../code/powershell/dataflow/internal/FlowSummaryImpl.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/powershell/ql/lib/semmle/code/powershell/dataflow/internal/FlowSummaryImpl.qll b/powershell/ql/lib/semmle/code/powershell/dataflow/internal/FlowSummaryImpl.qll index 26199158b3b0..3207362a272a 100644 --- a/powershell/ql/lib/semmle/code/powershell/dataflow/internal/FlowSummaryImpl.qll +++ b/powershell/ql/lib/semmle/code/powershell/dataflow/internal/FlowSummaryImpl.qll @@ -128,7 +128,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.asCall().getAstNode() = sc.(LibraryCallable).getACallSimple() } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack sc) { none() } + + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } Node getSinkNode(Input::SinkBase source, Impl::Private::SummaryComponent sc) { none() } }