diff --git a/Cargo.lock b/Cargo.lock index a6fc6ddca7ff..4c787086bddc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -505,6 +505,7 @@ dependencies = [ "ra_ap_project_model", "ra_ap_span", "ra_ap_syntax", + "ra_ap_syntax-bridge", "ra_ap_vfs", "rust-extractor-macros", "serde", diff --git a/MODULE.bazel b/MODULE.bazel index 9ecf728200fb..e06b7ce9bbdc 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -135,6 +135,7 @@ use_repo( "vendor_ts__ra_ap_span-0.0.328", "vendor_ts__ra_ap_stdx-0.0.328", "vendor_ts__ra_ap_syntax-0.0.328", + "vendor_ts__ra_ap_syntax-bridge-0.0.328", "vendor_ts__ra_ap_vfs-0.0.328", "vendor_ts__rand-0.10.1", "vendor_ts__rayon-1.12.0", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel index 8d1a63e1e5ef..579a8a61fd86 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel @@ -457,6 +457,18 @@ alias( tags = ["manual"], ) +alias( + name = "ra_ap_syntax-bridge-0.0.328", + actual = "@vendor_ts__ra_ap_syntax-bridge-0.0.328//:ra_ap_syntax_bridge", + tags = ["manual"], +) + +alias( + name = "ra_ap_syntax-bridge", + actual = "@vendor_ts__ra_ap_syntax-bridge-0.0.328//:ra_ap_syntax_bridge", + tags = ["manual"], +) + alias( name = "ra_ap_vfs-0.0.328", actual = "@vendor_ts__ra_ap_vfs-0.0.328//:ra_ap_vfs", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index 75ec0cf7fd85..a1542cc9cda4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -350,6 +350,7 @@ _NORMAL_DEPENDENCIES = { "ra_ap_project_model": Label("@vendor_ts__ra_ap_project_model-0.0.328//:ra_ap_project_model"), "ra_ap_span": Label("@vendor_ts__ra_ap_span-0.0.328//:ra_ap_span"), "ra_ap_syntax": Label("@vendor_ts__ra_ap_syntax-0.0.328//:ra_ap_syntax"), + "ra_ap_syntax-bridge": Label("@vendor_ts__ra_ap_syntax-bridge-0.0.328//:ra_ap_syntax_bridge"), "ra_ap_vfs": Label("@vendor_ts__ra_ap_vfs-0.0.328//:ra_ap_vfs"), "serde": Label("@vendor_ts__serde-1.0.228//:serde"), "serde_json": Label("@vendor_ts__serde_json-1.0.150//:serde_json"), @@ -4498,6 +4499,7 @@ def crate_repositories(): struct(repo = "vendor_ts__ra_ap_span-0.0.328", is_dev_dep = False), struct(repo = "vendor_ts__ra_ap_stdx-0.0.328", is_dev_dep = False), struct(repo = "vendor_ts__ra_ap_syntax-0.0.328", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_syntax-bridge-0.0.328", is_dev_dep = False), struct(repo = "vendor_ts__ra_ap_vfs-0.0.328", is_dev_dep = False), struct(repo = "vendor_ts__rayon-1.12.0", is_dev_dep = False), struct(repo = "vendor_ts__regex-1.12.3", is_dev_dep = False), diff --git a/rust/extractor/Cargo.toml b/rust/extractor/Cargo.toml index 41199b7c8f98..60376b5b67e8 100644 --- a/rust/extractor/Cargo.toml +++ b/rust/extractor/Cargo.toml @@ -20,6 +20,7 @@ ra_ap_load-cargo = "0.0.328" ra_ap_paths = "0.0.328" ra_ap_project_model = "0.0.328" ra_ap_syntax = "0.0.328" +ra_ap_syntax-bridge = "0.0.328" ra_ap_vfs = "0.0.328" ra_ap_parser = "0.0.328" ra_ap_span = "0.0.328" diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 403e69c50c39..62ff3d5fa10e 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -6,16 +6,19 @@ use crate::trap::{Label, TrapClass}; use ra_ap_base_db::EditionedFileId; use ra_ap_hir::Semantics; use ra_ap_hir::db::ExpandDatabase; -use ra_ap_hir_expand::{ExpandResult, ExpandTo, InFile}; +use ra_ap_hir_expand::builtin::{BuiltinDeriveExpander, find_builtin_derive}; +use ra_ap_hir_expand::span_map::ExpansionSpanMap; +use ra_ap_hir_expand::{ExpandResult, ExpandTo, InFile, map_node_range_up_rooted}; use ra_ap_ide_db::RootDatabase; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; -use ra_ap_parser::SyntaxKind; +use ra_ap_parser::{SyntaxKind, TopEntryPoint}; use ra_ap_span::TextSize; use ra_ap_syntax::ast::HasAttrs; use ra_ap_syntax::{ AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxNode, SyntaxToken, TextRange, ast, }; +use ra_ap_syntax_bridge::{DocCommentDesugarMode, syntax_node_to_token_tree, token_tree_to_syntax_node}; impl Emission for Translator<'_> { fn pre_emit(&mut self, node: &ast::Item) -> Option> { @@ -128,6 +131,10 @@ pub struct Translator<'a> { source_kind: SourceKind, pub(crate) macro_context_depth: usize, diagnostic_count: usize, + /// When emitting a reconstructed built-in derive expansion, holds the span map of the + /// synthesized syntax tree. Those nodes are not registered in the semantics cache, so + /// locations are resolved through this map instead of `Semantics::original_range`. + builtin_derive_span_map: Option, } const UNKNOWN_LOCATION: (LineCol, LineCol) = @@ -154,6 +161,7 @@ impl<'a> Translator<'a> { source_kind, macro_context_depth: 0, diagnostic_count: 0, + builtin_derive_span_map: None, } } fn location(&self, range: TextRange) -> Option<(LineCol, LineCol)> { @@ -177,6 +185,15 @@ impl<'a> Translator<'a> { } pub fn text_range_for_node(&mut self, node: &impl ast::AstNode) -> Option { + if let Some(span_map) = self.builtin_derive_span_map.as_ref() { + // Nodes synthesized by a reconstructed built-in derive expansion are not in the + // semantics cache; resolve their original source range through the expansion span map. + let semantics = self.semantics.as_ref()?; + let file_id = self.file_id?; + let file_range = + map_node_range_up_rooted(semantics.db, span_map, node.syntax().text_range())?; + return (file_id == file_range.file_id).then_some(file_range.range); + } if let Some(semantics) = self.semantics.as_ref() { let file_range = semantics.original_range(node.syntax()); let file_id = self.file_id?; @@ -411,6 +428,11 @@ impl<'a> Translator<'a> { // way as from version 0.0.274 rust-analyser only expands in the context of an expansion return; } + if self.builtin_derive_span_map.is_some() { + // inside a reconstructed built-in derive expansion the macro call is not registered in + // the semantics cache, so it cannot (and need not) be expanded further + return; + } if let Some(expanded) = self .semantics .as_ref() @@ -582,7 +604,8 @@ impl<'a> Translator<'a> { fn is_attribute_macro_target(&self, node: &ast::Item) -> bool { // rust-analyzer considers as an `attr_macro_call` also a plain macro call, but we want to // process that differently (in `extract_macro_call_expanded`) - !matches!(node, ast::Item::MacroCall(_)) + self.builtin_derive_span_map.is_none() + && !matches!(node, ast::Item::MacroCall(_)) && self.semantics.is_some_and(|semantics| { let file = semantics.hir_file_for(node.syntax()); let node = InFile::new(file, node); @@ -703,6 +726,51 @@ impl<'a> Translator<'a> { } } + /// Reconstructs the expansion of a built-in derive macro (e.g. `Debug`, `PartialEq`). + /// + /// Since rust-analyzer 0.0.317 built-in derives are modeled as synthetic impls rather than + /// syntactic macro expansions, `Semantics::expand_derive_macro` no longer returns anything for + /// them. We re-run the still-public built-in derive expander over the ADT and emit the resulting + /// `impl` items ourselves. The synthesized nodes are not registered in the semantics + /// cache, so `builtin_derive_span_map` is set for the duration of the emission to route their + /// locations through the expansion span map. + fn emit_builtin_derive_expansion( + &mut self, + adt: &ast::Adt, + expander: BuiltinDeriveExpander, + ) -> Option> { + let semantics = self.semantics?; + let db = semantics.db; + let file_id = semantics.hir_file_for(adt.syntax()); + let span_map = db.span_map(file_id); + let call_site = span_map.span_for_range(adt.syntax().text_range()); + let input = syntax_node_to_token_tree( + adt.syntax(), + span_map.as_ref(), + call_site, + DocCommentDesugarMode::ProcMacro, + ); + let ExpandResult { value: output, err } = expander.expander()(db, call_site, &input); + let edition = self.file_id?.edition(db); + let (parsed, output_span_map) = + token_tree_to_syntax_node(&output, TopEntryPoint::MacroItems, &mut |_| edition); + let items = ast::MacroItems::cast(parsed.syntax_node())?; + if let Some(err) = err { + let rendered = err.render_to_string(db); + self.emit_diagnostic_for_node( + adt, + DiagnosticSeverity::Warning, + "item_expansion".to_owned(), + format!("built-in derive expansion failed ({})", rendered.kind), + rendered.message, + ); + } + let previous = self.builtin_derive_span_map.replace(output_span_map); + let result = self.emit_macro_items(&items); + self.builtin_derive_span_map = previous; + result + } + pub(crate) fn emit_derive_expansion( &mut self, node: &(impl Into + Clone), @@ -712,14 +780,29 @@ impl<'a> Translator<'a> { return; }; let node: ast::Adt = node.clone().into(); - let expansions = node - .attrs() - .filter_map(|attr| attr.meta()) - .filter_map(|meta| semantics.expand_derive_macro(&meta)) - .flatten() - .flatten() - .filter_map(|expanded| self.process_item_macro_expansion(&node, expanded)) - .collect::>(); + let mut expansions = Vec::new(); + for meta in node.attrs().filter_map(|attr| attr.meta()) { + let Some(expanded) = semantics.expand_derive_macro(&meta) else { + continue; + }; + // `resolve_derive_macro` yields one entry per derive, including built-in ones for which + // `expand_derive_macro` returns `None`; we use it to recover the built-in expander. + let resolved = semantics.resolve_derive_macro(&meta).unwrap_or_default(); + for (i, expanded) in expanded.into_iter().enumerate() { + let label = if let Some(expanded) = expanded { + self.process_item_macro_expansion(&node, expanded) + } else if let Some(expander) = resolved + .get(i) + .and_then(|m| m.as_ref()) + .and_then(|m| find_builtin_derive(&m.name(semantics.db))) + { + self.emit_builtin_derive_expansion(&node, expander) + } else { + None + }; + expansions.extend(label); + } + } generated::TypeItem::emit_derive_macro_expansions( label.into(), expansions, diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index 5778e6f3a83a..b6187932ec9b 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -3,6 +3,9 @@ | {EXTERNAL LOCATION} | fn trim | ::trim | | lib.rs:1:1:1:18 | mod anonymous | test::anonymous | | lib.rs:2:1:2:16 | mod regular | test::regular | +| regular.rs:1:1:2:18 | fn eq | ::eq | +| regular.rs:1:1:2:18 | impl ...::Eq for Struct::<...> { ... } | | +| regular.rs:1:1:2:18 | impl ...::PartialEq for Struct::<...> { ... } | | | regular.rs:1:1:2:18 | struct Struct | test::regular::Struct | | regular.rs:4:1:6:1 | trait Trait | test::regular::Trait | | regular.rs:5:5:5:16 | fn f | <_ as test::regular::Trait>::f | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected index c7b6ab807aac..a3560c0fdef1 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected @@ -1,5 +1,7 @@ instances | gen_macro_items.rs:5:5:5:12 | MacroItems | +| gen_macro_items.rs:12:5:13:15 | MacroItems | getItem | gen_macro_items.rs:5:5:5:12 | MacroItems | 0 | gen_macro_items.rs:5:5:5:38 | use ...::Path | | gen_macro_items.rs:5:5:5:12 | MacroItems | 1 | gen_macro_items.rs:5:5:5:38 | fn get_parent | +| gen_macro_items.rs:12:5:13:15 | MacroItems | 0 | gen_macro_items.rs:12:5:13:15 | impl ...::Debug for Bar::<...> { ... } | diff --git a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected index a12af2dc3ed9..672ce3d5bbe6 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected @@ -720,6 +720,94 @@ macro_expansion.rs: # 79| getSegment(): [PathSegment] i32 # 79| getIdentifier(): [NameRef] i32 # 83| getItem(17): [Struct] struct MyDerive +# 83| getDeriveMacroExpansion(0): [MacroItems] MacroItems +# 83| getItem(0): [Impl] impl ...::Debug for MyDerive::<...> { ... } +# 83| getAssocItemList(): [AssocItemList] AssocItemList +# 83| getAssocItem(0): [Function] fn fmt +# 83| getParamList(): [ParamList] ParamList +# 83| getParam(0): [Param] ...: ... +# 83| getTypeRepr(): [RefTypeRepr] RefTypeRepr +# 83| getTypeRepr(): [PathTypeRepr] ...::Formatter +# 83| getPath(): [Path] ...::Formatter +# 83| getQualifier(): [Path] ...::fmt +# 83| getQualifier(): [Path] $crate +# 83| getSegment(): [PathSegment] $crate +# 83| getIdentifier(): [NameRef] $crate +# 83| getSegment(): [PathSegment] fmt +# 83| getIdentifier(): [NameRef] fmt +# 83| getSegment(): [PathSegment] Formatter +# 83| getIdentifier(): [NameRef] Formatter +# 83| getPat(): [IdentPat] f +# 83| getName(): [Name] f +# 83| getSelfParam(): [SelfParam] SelfParam +# 83| getName(): [Name] self +# 83| getFunctionBody(): [BlockExpr] { ... } +# 83| getStmtList(): [StmtList] StmtList +# 83| getTailExpr(): [MatchExpr] match self { ... } +# 83| getScrutinee(): [VariableAccess] self +# 83| getPath(): [Path] self +# 83| getSegment(): [PathSegment] self +# 83| getIdentifier(): [NameRef] self +# 83| getMatchArmList(): [MatchArmList] MatchArmList +# 83| getArm(0): [MatchArm] ... => ... +# 83| getExpr(): [MethodCallExpr] ... .finish() +# 83| getArgList(): [ArgList] ArgList +# 83| getIdentifier(): [NameRef] finish +# 83| getReceiver(): [MethodCallExpr] ... .field(...) +# 83| getArgList(): [ArgList] ArgList +# 83| getArg(0): [StringLiteralExpr] "field" +# 83| getArg(1): [RefExpr] &field +# 85| getExpr(): [VariableAccess] field +# 85| getPath(): [Path] field +# 85| getSegment(): [PathSegment] field +# 85| getIdentifier(): [NameRef] field +# 83| getIdentifier(): [NameRef] field +# 83| getReceiver(): [MethodCallExpr] f.debug_struct(...) +# 83| getArgList(): [ArgList] ArgList +# 83| getArg(0): [StringLiteralExpr] "MyDerive" +# 83| getIdentifier(): [NameRef] debug_struct +# 83| getReceiver(): [VariableAccess] f +# 83| getPath(): [Path] f +# 83| getSegment(): [PathSegment] f +# 83| getIdentifier(): [NameRef] f +# 83| getPat(): [StructPat] MyDerive {...} +# 84| getPath(): [Path] MyDerive +# 84| getSegment(): [PathSegment] MyDerive +# 84| getIdentifier(): [NameRef] MyDerive +# 83| getStructPatFieldList(): [StructPatFieldList] StructPatFieldList +# 83| getField(0): [StructPatField] field: ... +# 85| getIdentifier(): [NameRef] field +# 85| getPat(): [IdentPat] field +# 85| getName(): [Name] field +# 83| getName(): [Name] fmt +# 83| getRetType(): [RetTypeRepr] RetTypeRepr +# 83| getTypeRepr(): [PathTypeRepr] ...::Result +# 83| getPath(): [Path] ...::Result +# 83| getQualifier(): [Path] ...::fmt +# 83| getQualifier(): [Path] $crate +# 83| getSegment(): [PathSegment] $crate +# 83| getIdentifier(): [NameRef] $crate +# 83| getSegment(): [PathSegment] fmt +# 83| getIdentifier(): [NameRef] fmt +# 83| getSegment(): [PathSegment] Result +# 83| getIdentifier(): [NameRef] Result +# 83| getGenericParamList(): [GenericParamList] <...> +# 83| getSelfTy(): [PathTypeRepr] MyDerive::<...> +# 83| getPath(): [Path] MyDerive::<...> +# 83| getSegment(): [PathSegment] MyDerive::<...> +# 83| getGenericArgList(): [GenericArgList] <...> +# 84| getIdentifier(): [NameRef] MyDerive +# 83| getTrait(): [PathTypeRepr] ...::Debug +# 83| getPath(): [Path] ...::Debug +# 83| getQualifier(): [Path] ...::fmt +# 83| getQualifier(): [Path] $crate +# 83| getSegment(): [PathSegment] $crate +# 83| getIdentifier(): [NameRef] $crate +# 83| getSegment(): [PathSegment] fmt +# 83| getIdentifier(): [NameRef] fmt +# 83| getSegment(): [PathSegment] Debug +# 83| getIdentifier(): [NameRef] Debug +# 83| getWhereClause(): [WhereClause] WhereClause # 83| getAttr(0): [Attr] Attr # 83| getMeta(): [TokenTreeMeta] TokenTreeMeta # 83| getPath(): [Path] derive @@ -735,6 +823,115 @@ macro_expansion.rs: # 85| getSegment(): [PathSegment] usize # 85| getIdentifier(): [NameRef] usize # 88| getItem(18): [Enum] enum MyDeriveEnum +# 88| getDeriveMacroExpansion(0): [MacroItems] MacroItems +# 88| getItem(0): [Impl] impl ...::PartialEq for MyDeriveEnum::<...> { ... } +# 88| getAssocItemList(): [AssocItemList] AssocItemList +# 88| getAssocItem(0): [Function] fn eq +# 88| getParamList(): [ParamList] ParamList +# 88| getParam(0): [Param] ...: ... +# 88| getTypeRepr(): [RefTypeRepr] RefTypeRepr +# 88| getTypeRepr(): [PathTypeRepr] Self +# 88| getPath(): [Path] Self +# 88| getSegment(): [PathSegment] Self +# 88| getIdentifier(): [NameRef] Self +# 88| getPat(): [IdentPat] other +# 88| getName(): [Name] other +# 88| getSelfParam(): [SelfParam] SelfParam +# 88| getName(): [Name] self +# 88| getFunctionBody(): [BlockExpr] { ... } +# 88| getStmtList(): [StmtList] StmtList +# 88| getTailExpr(): [MatchExpr] match ... { ... } +# 88| getScrutinee(): [TupleExpr] TupleExpr +# 88| getField(0): [VariableAccess] self +# 88| getPath(): [Path] self +# 88| getSegment(): [PathSegment] self +# 88| getIdentifier(): [NameRef] self +# 88| getField(1): [VariableAccess] other +# 88| getPath(): [Path] other +# 88| getSegment(): [PathSegment] other +# 88| getIdentifier(): [NameRef] other +# 88| getMatchArmList(): [MatchArmList] MatchArmList +# 88| getArm(0): [MatchArm] ... => true +# 88| getExpr(): [BooleanLiteralExpr] true +# 88| getPat(): [TuplePat] TuplePat +# 88| getField(0): [PathPat] ...::Variant1 +# 88| getPath(): [Path] ...::Variant1 +# 89| getQualifier(): [Path] MyDeriveEnum +# 89| getSegment(): [PathSegment] MyDeriveEnum +# 89| getIdentifier(): [NameRef] MyDeriveEnum +# 90| getSegment(): [PathSegment] Variant1 +# 90| getIdentifier(): [NameRef] Variant1 +# 88| getField(1): [PathPat] ...::Variant1 +# 88| getPath(): [Path] ...::Variant1 +# 89| getQualifier(): [Path] MyDeriveEnum +# 89| getSegment(): [PathSegment] MyDeriveEnum +# 89| getIdentifier(): [NameRef] MyDeriveEnum +# 90| getSegment(): [PathSegment] Variant1 +# 90| getIdentifier(): [NameRef] Variant1 +# 88| getArm(1): [MatchArm] ... => true +# 88| getExpr(): [BooleanLiteralExpr] true +# 88| getPat(): [TuplePat] TuplePat +# 88| getField(0): [PathPat] ...::Variant2 +# 88| getPath(): [Path] ...::Variant2 +# 89| getQualifier(): [Path] MyDeriveEnum +# 89| getSegment(): [PathSegment] MyDeriveEnum +# 89| getIdentifier(): [NameRef] MyDeriveEnum +# 91| getSegment(): [PathSegment] Variant2 +# 91| getIdentifier(): [NameRef] Variant2 +# 88| getField(1): [PathPat] ...::Variant2 +# 88| getPath(): [Path] ...::Variant2 +# 89| getQualifier(): [Path] MyDeriveEnum +# 89| getSegment(): [PathSegment] MyDeriveEnum +# 89| getIdentifier(): [NameRef] MyDeriveEnum +# 91| getSegment(): [PathSegment] Variant2 +# 91| getIdentifier(): [NameRef] Variant2 +# 88| getArm(2): [MatchArm] ... => false +# 88| getExpr(): [BooleanLiteralExpr] false +# 88| getPat(): [IdentPat] _unused +# 88| getName(): [Name] _unused +# 88| getName(): [Name] eq +# 88| getRetType(): [RetTypeRepr] RetTypeRepr +# 88| getTypeRepr(): [PathTypeRepr] bool +# 88| getPath(): [Path] bool +# 88| getSegment(): [PathSegment] bool +# 88| getIdentifier(): [NameRef] bool +# 88| getGenericParamList(): [GenericParamList] <...> +# 88| getSelfTy(): [PathTypeRepr] MyDeriveEnum::<...> +# 88| getPath(): [Path] MyDeriveEnum::<...> +# 88| getSegment(): [PathSegment] MyDeriveEnum::<...> +# 88| getGenericArgList(): [GenericArgList] <...> +# 89| getIdentifier(): [NameRef] MyDeriveEnum +# 88| getTrait(): [PathTypeRepr] ...::PartialEq +# 88| getPath(): [Path] ...::PartialEq +# 88| getQualifier(): [Path] ...::cmp +# 88| getQualifier(): [Path] $crate +# 88| getSegment(): [PathSegment] $crate +# 88| getIdentifier(): [NameRef] $crate +# 88| getSegment(): [PathSegment] cmp +# 88| getIdentifier(): [NameRef] cmp +# 88| getSegment(): [PathSegment] PartialEq +# 88| getIdentifier(): [NameRef] PartialEq +# 88| getWhereClause(): [WhereClause] WhereClause +# 88| getDeriveMacroExpansion(1): [MacroItems] MacroItems +# 88| getItem(0): [Impl] impl ...::Eq for MyDeriveEnum::<...> { ... } +# 88| getAssocItemList(): [AssocItemList] AssocItemList +# 88| getGenericParamList(): [GenericParamList] <...> +# 88| getSelfTy(): [PathTypeRepr] MyDeriveEnum::<...> +# 88| getPath(): [Path] MyDeriveEnum::<...> +# 88| getSegment(): [PathSegment] MyDeriveEnum::<...> +# 88| getGenericArgList(): [GenericArgList] <...> +# 89| getIdentifier(): [NameRef] MyDeriveEnum +# 88| getTrait(): [PathTypeRepr] ...::Eq +# 88| getPath(): [Path] ...::Eq +# 88| getQualifier(): [Path] ...::cmp +# 88| getQualifier(): [Path] $crate +# 88| getSegment(): [PathSegment] $crate +# 88| getIdentifier(): [NameRef] $crate +# 88| getSegment(): [PathSegment] cmp +# 88| getIdentifier(): [NameRef] cmp +# 88| getSegment(): [PathSegment] Eq +# 88| getIdentifier(): [NameRef] Eq +# 88| getWhereClause(): [WhereClause] WhereClause # 88| getAttr(0): [Attr] Attr # 88| getMeta(): [TokenTreeMeta] TokenTreeMeta # 88| getPath(): [Path] derive diff --git a/rust/ql/test/extractor-tests/macro-expansion/test.expected b/rust/ql/test/extractor-tests/macro-expansion/test.expected index 985be0f6b7dd..108fa52ced94 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/test.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/test.expected @@ -15,6 +15,9 @@ attribute_macros | macro_expansion.rs:31:5:34:5 | (item with attribute macro expansion) | 1 | macro_expansion.rs:32:5:34:5 | fn bzz_1 | | macro_expansion.rs:31:5:34:5 | (item with attribute macro expansion) | 2 | macro_expansion.rs:32:5:34:5 | fn bzz_2 | derive_macros +| macro_expansion.rs:83:1:86:1 | struct MyDerive | 0 | 0 | macro_expansion.rs:83:1:86:1 | impl ...::Debug for MyDerive::<...> { ... } | +| macro_expansion.rs:88:1:92:1 | enum MyDeriveEnum | 0 | 0 | macro_expansion.rs:88:1:92:1 | impl ...::PartialEq for MyDeriveEnum::<...> { ... } | +| macro_expansion.rs:88:1:92:1 | enum MyDeriveEnum | 1 | 0 | macro_expansion.rs:88:1:92:1 | impl ...::Eq for MyDeriveEnum::<...> { ... } | | macro_expansion.rs:98:1:102:1 | union MyDeriveUnion | 0 | 0 | macro_expansion.rs:99:7:99:19 | const CONST_MyDeriveUnion | | macro_expansion.rs:98:1:102:1 | union MyDeriveUnion | 0 | 1 | macro_expansion.rs:99:7:99:19 | impl MyTrait for MyDeriveUnion { ... } | macro_calls 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 137b6cab0153..3344fc45f74f 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3669,6 +3669,7 @@ inferCertainType | main.rs:2405:18:2405:42 | ...::method(...) | | main.rs:2369:5:2369:20 | S1 | | main.rs:2405:18:2405:42 | ...::method(...) | T | main.rs:2371:5:2372:14 | S2 | | main.rs:2405:29:2405:41 | ...::default(...) | | main.rs:2369:5:2369:20 | S1 | +| main.rs:2409:21:2409:33 | ...::default(...) | | main.rs:2371:5:2372:14 | S2 | | main.rs:2410:13:2410:15 | x10 | | main.rs:2392:5:2394:5 | S5 | | main.rs:2410:13:2410:15 | x10 | T5 | main.rs:2371:5:2372:14 | S2 | | main.rs:2410:19:2413:9 | S5::<...> {...} | | main.rs:2392:5:2394:5 | S5 | @@ -3679,6 +3680,7 @@ inferCertainType | main.rs:2415:19:2415:33 | S5 {...} | | main.rs:2392:5:2394:5 | S5 | | main.rs:2416:13:2416:15 | x13 | | main.rs:2392:5:2394:5 | S5 | | main.rs:2416:19:2419:9 | S5 {...} | | main.rs:2392:5:2394:5 | S5 | +| main.rs:2418:20:2418:32 | ...::default(...) | | main.rs:2371:5:2372:14 | S2 | | main.rs:2420:13:2420:15 | x14 | | {EXTERNAL LOCATION} | i32 | | main.rs:2420:19:2420:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:2421:13:2421:15 | x15 | | main.rs:2369:5:2369:20 | S1 | @@ -12267,7 +12269,10 @@ inferType | main.rs:2408:18:2408:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | | main.rs:2408:21:2408:21 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2409:13:2409:14 | x9 | | main.rs:2390:5:2390:27 | S4 | +| main.rs:2409:13:2409:14 | x9 | T4 | main.rs:2371:5:2372:14 | S2 | | main.rs:2409:18:2409:34 | S4(...) | | main.rs:2390:5:2390:27 | S4 | +| main.rs:2409:18:2409:34 | S4(...) | T4 | main.rs:2371:5:2372:14 | S2 | +| main.rs:2409:21:2409:33 | ...::default(...) | | main.rs:2371:5:2372:14 | S2 | | main.rs:2410:13:2410:15 | x10 | | main.rs:2392:5:2394:5 | S5 | | main.rs:2410:13:2410:15 | x10 | T5 | main.rs:2371:5:2372:14 | S2 | | main.rs:2410:19:2413:9 | S5::<...> {...} | | main.rs:2392:5:2394:5 | S5 | @@ -12284,7 +12289,10 @@ inferType | main.rs:2415:19:2415:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | | main.rs:2415:31:2415:31 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2416:13:2416:15 | x13 | | main.rs:2392:5:2394:5 | S5 | +| main.rs:2416:13:2416:15 | x13 | T5 | main.rs:2371:5:2372:14 | S2 | | main.rs:2416:19:2419:9 | S5 {...} | | main.rs:2392:5:2394:5 | S5 | +| main.rs:2416:19:2419:9 | S5 {...} | T5 | main.rs:2371:5:2372:14 | S2 | +| main.rs:2418:20:2418:32 | ...::default(...) | | main.rs:2371:5:2372:14 | S2 | | main.rs:2420:13:2420:15 | x14 | | {EXTERNAL LOCATION} | i32 | | main.rs:2420:19:2420:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:2420:30:2420:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | @@ -15847,18 +15855,3 @@ inferType | regressions.rs:179:24:179:27 | S(...) | T | {EXTERNAL LOCATION} | i32 | | regressions.rs:179:26:179:26 | 1 | | {EXTERNAL LOCATION} | i32 | testFailures -| main.rs:1308:44:1308:62 | //... | Missing result: target=default | -| main.rs:2406:48:2406:84 | //... | Missing result: target=default | -| main.rs:2409:37:2409:73 | //... | Missing result: target=default | -| main.rs:2409:37:2409:73 | //... | Missing result: type=x9@S4:S2 | -| main.rs:2412:40:2412:58 | //... | Missing result: target=default | -| main.rs:2416:22:2416:44 | //... | Missing result: type=x13@S5:S2 | -| main.rs:2418:35:2418:53 | //... | Missing result: target=default | -| main.rs:2574:41:2574:59 | //... | Missing result: target=default | -| main.rs:2698:37:2698:64 | //... | Missing result: target=default | -| overloading.rs:58:67:58:125 | //... | Missing result: target=default | -| overloading.rs:60:68:60:132 | //... | Missing result: target=default | -| overloading.rs:64:68:64:126 | //... | Missing result: target=default | -| overloading.rs:66:69:66:133 | //... | Missing result: target=default | -| overloading.rs:368:37:368:64 | //... | Missing result: target=default | -| overloading.rs:398:57:398:84 | //... | Missing result: target=default | diff --git a/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected b/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected index 15f6280fa524..7decd880f595 100644 --- a/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected +++ b/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected @@ -23,111 +23,325 @@ | main.rs:49:41:49:45 | build | main.rs:49:5:49:25 | ...::build(...) | main.rs:49:41:49:45 | build | Cookie attribute 'Secure' is not set to true. | | main.rs:50:56:50:60 | build | main.rs:50:5:50:40 | ...::build(...) | main.rs:50:56:50:60 | build | Cookie attribute 'Secure' is not set to true. | | main.rs:53:65:53:69 | build | main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:65:53:69 | build | Cookie attribute 'Secure' is not set to true. | +| main.rs:59:9:59:11 | add | main.rs:58:17:58:27 | ...::new | main.rs:59:9:59:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:60:9:60:20 | add_original | main.rs:58:17:58:27 | ...::new | main.rs:60:9:60:20 | add_original | Cookie attribute 'Secure' is not set to true. | +| main.rs:64:9:64:11 | add | main.rs:63:5:63:5 | [SSA] a | main.rs:64:9:64:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:64:9:64:11 | add | main.rs:63:5:63:5 | a | main.rs:64:9:64:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:69:16:69:18 | add | main.rs:68:17:68:29 | ...::named | main.rs:69:16:69:18 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:70:16:70:27 | add_original | main.rs:63:5:63:5 | [SSA] a | main.rs:70:16:70:27 | add_original | Cookie attribute 'Secure' is not set to true. | +| main.rs:70:16:70:27 | add_original | main.rs:63:5:63:5 | a | main.rs:70:16:70:27 | add_original | Cookie attribute 'Secure' is not set to true. | +| main.rs:72:16:72:18 | add | main.rs:71:5:71:5 | [SSA] b | main.rs:72:16:72:18 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:72:16:72:18 | add | main.rs:71:5:71:5 | b | main.rs:72:16:72:18 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:78:17:78:19 | add | main.rs:77:17:77:28 | ...::from | main.rs:78:17:78:19 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:79:17:79:28 | add_original | main.rs:63:5:63:5 | [SSA] a | main.rs:79:17:79:28 | add_original | Cookie attribute 'Secure' is not set to true. | +| main.rs:79:17:79:28 | add_original | main.rs:63:5:63:5 | a | main.rs:79:17:79:28 | add_original | Cookie attribute 'Secure' is not set to true. | +| main.rs:83:17:83:19 | add | main.rs:77:17:77:28 | ...::from | main.rs:83:17:83:19 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:88:9:88:11 | add | main.rs:87:17:87:28 | ...::from | main.rs:88:9:88:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:94:9:94:11 | add | main.rs:87:17:87:28 | ...::from | main.rs:94:9:94:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:123:13:123:18 | insert | main.rs:122:13:122:41 | ...::new | main.rs:123:13:123:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:131:13:131:18 | insert | main.rs:130:13:130:13 | b | main.rs:131:13:131:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:147:13:147:18 | insert | main.rs:146:13:146:13 | f | main.rs:147:13:147:18 | insert | Cookie attribute 'Secure' is not set to true. | | main.rs:152:13:152:18 | insert | main.rs:151:13:151:42 | ...::from | main.rs:152:13:152:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:156:13:156:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:156:13:156:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:157:13:157:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:157:13:157:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:158:13:158:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:158:13:158:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:159:13:159:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:159:13:159:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:160:13:160:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:160:13:160:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:161:13:161:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:161:13:161:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:162:13:162:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:162:13:162:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:163:13:163:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:163:13:163:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:164:13:164:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:164:13:164:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:165:13:165:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:165:13:165:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:166:13:166:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:166:13:166:18 | insert | Cookie attribute 'Secure' is not set to true. | +| main.rs:167:13:167:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:167:13:167:18 | insert | Cookie attribute 'Secure' is not set to true. | | main.rs:173:61:173:65 | build | main.rs:173:22:173:34 | ...::build | main.rs:173:61:173:65 | build | Cookie attribute 'Secure' is not set to true. | | main.rs:197:55:197:60 | finish | main.rs:197:5:197:39 | ...::build(...) | main.rs:197:55:197:60 | finish | Cookie attribute 'Secure' is not set to true. | | main.rs:198:65:198:70 | finish | main.rs:198:5:198:39 | ...::build(...) | main.rs:198:65:198:70 | finish | Cookie attribute 'Secure' is not set to true. | +| main.rs:202:9:202:11 | add | main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:9:202:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:202:9:202:11 | add | main.rs:201:5:201:11 | cookie1 | main.rs:202:9:202:11 | add | Cookie attribute 'Secure' is not set to true. | | main.rs:212:41:212:46 | finish | main.rs:212:5:212:22 | ...::build | main.rs:212:41:212:46 | finish | Cookie attribute 'Secure' is not set to true. | +| main.rs:215:9:215:11 | add | main.rs:214:19:214:34 | ...::new | main.rs:215:9:215:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:219:9:219:11 | add | main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:9:219:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:219:9:219:11 | add | main.rs:218:5:218:11 | cookie2 | main.rs:219:9:219:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:229:9:229:11 | add | main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:9:229:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:229:9:229:11 | add | main.rs:228:5:228:11 | cookie1 | main.rs:229:9:229:11 | add | Cookie attribute 'Secure' is not set to true. | | main.rs:242:9:242:41 | ...::new | main.rs:241:29:241:62 | ...::new(...) | main.rs:242:9:242:41 | ...::new | Cookie attribute 'Secure' is not set to true. | | main.rs:245:9:245:41 | ...::new | main.rs:244:30:244:63 | ...::new(...) | main.rs:245:9:245:41 | ...::new | Cookie attribute 'Secure' is not set to true. | | main.rs:259:59:259:64 | finish | main.rs:259:5:259:43 | ...::build(...) | main.rs:259:59:259:64 | finish | Cookie attribute 'Secure' is not set to true. | | main.rs:260:69:260:74 | finish | main.rs:260:5:260:43 | ...::build(...) | main.rs:260:69:260:74 | finish | Cookie attribute 'Secure' is not set to true. | +| main.rs:264:9:264:11 | add | main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:9:264:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:264:9:264:11 | add | main.rs:263:5:263:11 | cookie1 | main.rs:264:9:264:11 | add | Cookie attribute 'Secure' is not set to true. | | main.rs:274:45:274:50 | finish | main.rs:274:5:274:26 | ...::build | main.rs:274:45:274:50 | finish | Cookie attribute 'Secure' is not set to true. | +| main.rs:277:9:277:11 | add | main.rs:276:19:276:38 | ...::new | main.rs:277:9:277:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:281:9:281:11 | add | main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:9:281:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:281:9:281:11 | add | main.rs:280:5:280:11 | cookie2 | main.rs:281:9:281:11 | add | Cookie attribute 'Secure' is not set to true. | edges -| main.rs:8:19:8:50 | ...::build(...) | main.rs:8:19:8:64 | ... .secure(...) | provenance | MaD:9 | +| main.rs:8:19:8:50 | ...::build(...) | main.rs:8:19:8:64 | ... .secure(...) | provenance | MaD:35 | | main.rs:8:19:8:64 | ... .secure(...) | main.rs:8:66:8:70 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:16:19:16:31 | ...::build | main.rs:16:19:16:50 | ...::build(...) | provenance | Src:MaD:6 MaD:6 | +| main.rs:16:19:16:31 | ...::build | main.rs:16:19:16:50 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:16:19:16:50 | ...::build(...) | main.rs:16:52:16:56 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:20:5:20:36 | ...::build(...) | main.rs:20:5:20:54 | ... .secure(...) | provenance | MaD:9 | +| main.rs:20:5:20:36 | ...::build(...) | main.rs:20:5:20:54 | ... .secure(...) | provenance | MaD:35 | | main.rs:20:5:20:54 | ... .secure(...) | main.rs:20:56:20:60 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:21:5:21:36 | ...::build(...) | main.rs:21:5:21:55 | ... .secure(...) | provenance | MaD:9 | +| main.rs:21:5:21:36 | ...::build(...) | main.rs:21:5:21:55 | ... .secure(...) | provenance | MaD:35 | | main.rs:21:5:21:55 | ... .secure(...) | main.rs:21:57:21:61 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:25:5:25:36 | ...::build(...) | main.rs:25:5:25:52 | ... .secure(...) | provenance | MaD:9 | +| main.rs:25:5:25:36 | ...::build(...) | main.rs:25:5:25:52 | ... .secure(...) | provenance | MaD:35 | | main.rs:25:5:25:52 | ... .secure(...) | main.rs:25:54:25:58 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:26:5:26:36 | ...::build(...) | main.rs:26:5:26:50 | ... .secure(...) | provenance | MaD:9 | +| main.rs:26:5:26:36 | ...::build(...) | main.rs:26:5:26:50 | ... .secure(...) | provenance | MaD:35 | | main.rs:26:5:26:50 | ... .secure(...) | main.rs:26:52:26:56 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:27:5:27:36 | ...::build(...) | main.rs:27:5:27:51 | ... .secure(...) | provenance | MaD:9 | +| main.rs:27:5:27:36 | ...::build(...) | main.rs:27:5:27:51 | ... .secure(...) | provenance | MaD:35 | | main.rs:27:5:27:51 | ... .secure(...) | main.rs:27:53:27:57 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:28:5:28:36 | ...::build(...) | main.rs:28:5:28:60 | ... .secure(...) | provenance | MaD:9 | +| main.rs:28:5:28:36 | ...::build(...) | main.rs:28:5:28:60 | ... .secure(...) | provenance | MaD:35 | | main.rs:28:5:28:60 | ... .secure(...) | main.rs:28:62:28:66 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:29:5:29:36 | ...::build(...) | main.rs:29:5:29:60 | ... .secure(...) | provenance | MaD:9 | +| main.rs:29:5:29:36 | ...::build(...) | main.rs:29:5:29:60 | ... .secure(...) | provenance | MaD:35 | | main.rs:29:5:29:60 | ... .secure(...) | main.rs:29:62:29:66 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:33:9:33:40 | ...::build(...) | main.rs:33:9:33:58 | ... .secure(...) | provenance | MaD:9 | +| main.rs:33:9:33:40 | ...::build(...) | main.rs:33:9:33:58 | ... .secure(...) | provenance | MaD:35 | | main.rs:33:9:33:58 | ... .secure(...) | main.rs:33:60:33:64 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:35:9:35:40 | ...::build(...) | main.rs:35:9:35:58 | ... .secure(...) | provenance | MaD:9 | +| main.rs:35:9:35:40 | ...::build(...) | main.rs:35:9:35:58 | ... .secure(...) | provenance | MaD:35 | | main.rs:35:9:35:58 | ... .secure(...) | main.rs:35:60:35:64 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:39:5:39:39 | ...::new(...) | main.rs:39:5:39:53 | ... .secure(...) | provenance | MaD:9 | +| main.rs:39:5:39:39 | ...::new(...) | main.rs:39:5:39:53 | ... .secure(...) | provenance | MaD:35 | | main.rs:39:5:39:53 | ... .secure(...) | main.rs:39:55:39:59 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:40:5:40:50 | ... .expires(...) | main.rs:40:5:40:64 | ... .secure(...) | provenance | MaD:9 | +| main.rs:40:5:40:50 | ... .expires(...) | main.rs:40:5:40:64 | ... .secure(...) | provenance | MaD:35 | | main.rs:40:5:40:64 | ... .secure(...) | main.rs:40:66:40:70 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:41:5:41:79 | ... .max_age(...) | main.rs:41:5:41:93 | ... .secure(...) | provenance | MaD:9 | +| main.rs:41:5:41:79 | ... .max_age(...) | main.rs:41:5:41:93 | ... .secure(...) | provenance | MaD:35 | | main.rs:41:5:41:93 | ... .secure(...) | main.rs:41:95:41:99 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:42:5:42:58 | ... .domain(...) | main.rs:42:5:42:72 | ... .secure(...) | provenance | MaD:9 | +| main.rs:42:5:42:58 | ... .domain(...) | main.rs:42:5:42:72 | ... .secure(...) | provenance | MaD:35 | | main.rs:42:5:42:72 | ... .secure(...) | main.rs:42:74:42:78 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:43:5:43:46 | ... .path(...) | main.rs:43:5:43:60 | ... .secure(...) | provenance | MaD:9 | +| main.rs:43:5:43:46 | ... .path(...) | main.rs:43:5:43:60 | ... .secure(...) | provenance | MaD:35 | | main.rs:43:5:43:60 | ... .secure(...) | main.rs:43:62:43:66 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:44:5:44:52 | ... .http_only(...) | main.rs:44:5:44:66 | ... .secure(...) | provenance | MaD:9 | +| main.rs:44:5:44:52 | ... .http_only(...) | main.rs:44:5:44:66 | ... .secure(...) | provenance | MaD:35 | | main.rs:44:5:44:66 | ... .secure(...) | main.rs:44:68:44:72 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:45:5:45:72 | ... .same_site(...) | main.rs:45:5:45:86 | ... .secure(...) | provenance | MaD:9 | +| main.rs:45:5:45:72 | ... .same_site(...) | main.rs:45:5:45:86 | ... .secure(...) | provenance | MaD:35 | | main.rs:45:5:45:86 | ... .secure(...) | main.rs:45:88:45:92 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:46:5:46:48 | ... .permanent() | main.rs:46:5:46:62 | ... .secure(...) | provenance | MaD:9 | +| main.rs:46:5:46:48 | ... .permanent() | main.rs:46:5:46:62 | ... .secure(...) | provenance | MaD:35 | | main.rs:46:5:46:62 | ... .secure(...) | main.rs:46:64:46:68 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:47:5:47:46 | ... .removal() | main.rs:47:5:47:60 | ... .secure(...) | provenance | MaD:9 | +| main.rs:47:5:47:46 | ... .removal() | main.rs:47:5:47:60 | ... .secure(...) | provenance | MaD:35 | | main.rs:47:5:47:60 | ... .secure(...) | main.rs:47:62:47:66 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:48:5:48:36 | ...::build(...) | main.rs:48:5:48:50 | ... .secure(...) | provenance | MaD:9 | +| main.rs:48:5:48:36 | ...::build(...) | main.rs:48:5:48:50 | ... .secure(...) | provenance | MaD:35 | | main.rs:48:5:48:50 | ... .secure(...) | main.rs:48:52:48:57 | finish | provenance | MaD:3 Sink:MaD:3 | -| main.rs:49:5:49:25 | ...::build(...) | main.rs:49:5:49:39 | ... .secure(...) | provenance | MaD:9 | +| main.rs:49:5:49:25 | ...::build(...) | main.rs:49:5:49:39 | ... .secure(...) | provenance | MaD:35 | | main.rs:49:5:49:39 | ... .secure(...) | main.rs:49:41:49:45 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:50:5:50:40 | ...::build(...) | main.rs:50:5:50:54 | ... .secure(...) | provenance | MaD:9 | +| main.rs:50:5:50:40 | ...::build(...) | main.rs:50:5:50:54 | ... .secure(...) | provenance | MaD:35 | | main.rs:50:5:50:54 | ... .secure(...) | main.rs:50:56:50:60 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:5:53:63 | ... .secure(...) | provenance | MaD:9 | +| main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:5:53:63 | ... .secure(...) | provenance | MaD:35 | | main.rs:53:5:53:63 | ... .secure(...) | main.rs:53:65:53:69 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:114:5:114:17 | ...::build | main.rs:114:5:114:36 | ...::build(...) | provenance | Src:MaD:6 MaD:6 | -| main.rs:114:5:114:36 | ...::build(...) | main.rs:114:5:114:54 | ... .partitioned(...) | provenance | MaD:7 | +| main.rs:58:9:58:13 | mut a | main.rs:59:13:59:13 | a | provenance | | +| main.rs:58:9:58:13 | mut a | main.rs:60:22:60:22 | a | provenance | | +| main.rs:58:17:58:27 | ...::new | main.rs:58:17:58:44 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | +| main.rs:58:17:58:44 | ...::new(...) | main.rs:58:9:58:13 | mut a | provenance | | +| main.rs:59:13:59:13 | a | main.rs:59:13:59:21 | a.clone() | provenance | MaD:18 | +| main.rs:59:13:59:21 | a.clone() | main.rs:59:9:59:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:60:22:60:22 | a | main.rs:60:22:60:30 | a.clone() | provenance | MaD:18 | +| main.rs:60:22:60:30 | a.clone() | main.rs:60:9:60:20 | add_original | provenance | MaD:5 Sink:MaD:5 | +| main.rs:63:5:63:5 | [SSA] a | main.rs:64:13:64:13 | a | provenance | | +| main.rs:63:5:63:5 | [SSA] a | main.rs:70:29:70:29 | a | provenance | | +| main.rs:63:5:63:5 | [SSA] a | main.rs:79:30:79:30 | a | provenance | | +| main.rs:63:5:63:5 | a | main.rs:64:13:64:13 | a | provenance | | +| main.rs:63:5:63:5 | a | main.rs:70:29:70:29 | a | provenance | | +| main.rs:63:5:63:5 | a | main.rs:79:30:79:30 | a | provenance | | +| main.rs:64:13:64:13 | a | main.rs:64:13:64:21 | a.clone() | provenance | MaD:18 | +| main.rs:64:13:64:21 | a.clone() | main.rs:64:9:64:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:68:9:68:13 | mut b | main.rs:69:20:69:20 | b | provenance | | +| main.rs:68:17:68:29 | ...::named | main.rs:68:17:68:37 | ...::named(...) | provenance | Src:MaD:16 MaD:16 | +| main.rs:68:17:68:37 | ...::named(...) | main.rs:68:9:68:13 | mut b | provenance | | +| main.rs:69:20:69:20 | b | main.rs:69:20:69:28 | b.clone() | provenance | MaD:18 | +| main.rs:69:20:69:28 | b.clone() | main.rs:69:16:69:18 | add | provenance | MaD:8 Sink:MaD:8 | +| main.rs:70:29:70:29 | a | main.rs:70:29:70:37 | a.clone() | provenance | MaD:18 | +| main.rs:70:29:70:37 | a.clone() | main.rs:70:16:70:27 | add_original | provenance | MaD:9 Sink:MaD:9 | +| main.rs:71:5:71:5 | [SSA] b | main.rs:72:20:72:20 | b | provenance | | +| main.rs:71:5:71:5 | b | main.rs:72:20:72:20 | b | provenance | | +| main.rs:72:20:72:20 | b | main.rs:72:20:72:28 | b.clone() | provenance | MaD:18 | +| main.rs:72:20:72:28 | b.clone() | main.rs:72:16:72:18 | add | provenance | MaD:8 Sink:MaD:8 | +| main.rs:77:9:77:13 | mut c | main.rs:78:21:78:21 | c | provenance | | +| main.rs:77:9:77:13 | mut c | main.rs:83:21:83:21 | c | provenance | | +| main.rs:77:17:77:28 | ...::from | main.rs:77:17:77:36 | ...::from(...) | provenance | Src:MaD:14 MaD:14 | +| main.rs:77:17:77:36 | ...::from(...) | main.rs:77:9:77:13 | mut c | provenance | | +| main.rs:78:21:78:21 | c | main.rs:78:21:78:29 | c.clone() | provenance | MaD:18 | +| main.rs:78:21:78:29 | c.clone() | main.rs:78:17:78:19 | add | provenance | MaD:6 Sink:MaD:6 | +| main.rs:79:30:79:30 | a | main.rs:79:30:79:38 | a.clone() | provenance | MaD:18 | +| main.rs:79:30:79:38 | a.clone() | main.rs:79:17:79:28 | add_original | provenance | MaD:7 Sink:MaD:7 | +| main.rs:83:21:83:21 | c | main.rs:83:21:83:29 | c.clone() | provenance | MaD:18 | +| main.rs:83:21:83:29 | c.clone() | main.rs:83:17:83:19 | add | provenance | MaD:6 Sink:MaD:6 | +| main.rs:87:9:87:13 | mut d | main.rs:88:13:88:13 | d | provenance | | +| main.rs:87:9:87:13 | mut d | main.rs:94:13:94:13 | d | provenance | | +| main.rs:87:17:87:28 | ...::from | main.rs:87:17:87:36 | ...::from(...) | provenance | Src:MaD:14 MaD:14 | +| main.rs:87:17:87:36 | ...::from(...) | main.rs:87:9:87:13 | mut d | provenance | | +| main.rs:88:13:88:13 | d | main.rs:88:13:88:21 | d.clone() | provenance | MaD:18 | +| main.rs:88:13:88:21 | d.clone() | main.rs:88:9:88:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:94:13:94:13 | d | main.rs:94:13:94:21 | d.clone() | provenance | MaD:18 | +| main.rs:94:13:94:21 | d.clone() | main.rs:94:9:94:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:114:5:114:17 | ...::build | main.rs:114:5:114:36 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | +| main.rs:114:5:114:36 | ...::build(...) | main.rs:114:5:114:54 | ... .partitioned(...) | provenance | MaD:33 | | main.rs:114:5:114:54 | ... .partitioned(...) | main.rs:114:56:114:60 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:122:9:122:9 | a | main.rs:123:20:123:20 | a | provenance | | +| main.rs:122:13:122:41 | ...::new | main.rs:122:13:122:58 | ...::new(...) | provenance | Src:MaD:13 MaD:13 | +| main.rs:122:13:122:58 | ...::new(...) | main.rs:122:9:122:9 | a | provenance | | +| main.rs:123:20:123:20 | a | main.rs:123:20:123:28 | a.clone() | provenance | MaD:18 | +| main.rs:123:20:123:28 | a.clone() | main.rs:123:13:123:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:130:9:130:9 | c | main.rs:131:20:131:20 | c | provenance | | +| main.rs:130:9:130:9 | c | main.rs:134:13:134:13 | c | provenance | | +| main.rs:130:13:130:13 | b | main.rs:130:13:130:31 | b.set_secure(...) | provenance | MaD:28 | +| main.rs:130:13:130:31 | b.set_secure(...) | main.rs:130:9:130:9 | c | provenance | | +| main.rs:131:20:131:20 | c | main.rs:131:20:131:28 | c.clone() | provenance | MaD:18 | +| main.rs:131:20:131:28 | c.clone() | main.rs:131:13:131:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:134:9:134:9 | d | main.rs:135:20:135:20 | d | provenance | | +| main.rs:134:13:134:13 | c | main.rs:134:13:134:35 | c.set_partitioned(...) | provenance | MaD:25 | +| main.rs:134:13:134:35 | c.set_partitioned(...) | main.rs:134:9:134:9 | d | provenance | | +| main.rs:135:20:135:20 | d | main.rs:135:20:135:28 | d.clone() | provenance | MaD:18 | +| main.rs:135:20:135:28 | d.clone() | main.rs:135:13:135:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:146:9:146:9 | g | main.rs:147:20:147:20 | g | provenance | | +| main.rs:146:13:146:13 | f | main.rs:146:13:146:31 | f.set_secure(...) | provenance | MaD:28 | +| main.rs:146:13:146:31 | f.set_secure(...) | main.rs:146:9:146:9 | g | provenance | | +| main.rs:147:20:147:20 | g | main.rs:147:20:147:28 | g.clone() | provenance | MaD:18 | +| main.rs:147:20:147:28 | g.clone() | main.rs:147:13:147:18 | insert | provenance | MaD:1 Sink:MaD:1 | | main.rs:151:9:151:9 | h | main.rs:152:20:152:20 | h | provenance | | -| main.rs:151:13:151:42 | ...::from | main.rs:151:13:151:61 | ...::from(...) | provenance | Src:MaD:5 MaD:5 | +| main.rs:151:13:151:42 | ...::from | main.rs:151:13:151:61 | ...::from(...) | provenance | Src:MaD:12 MaD:12 | | main.rs:151:13:151:61 | ...::from(...) | main.rs:151:9:151:9 | h | provenance | | | main.rs:152:20:152:20 | h | main.rs:152:13:152:18 | insert | provenance | MaD:1 Sink:MaD:1 | -| main.rs:173:22:173:34 | ...::build | main.rs:173:22:173:59 | ...::build(...) | provenance | Src:MaD:6 MaD:6 | +| main.rs:155:9:155:9 | i | main.rs:156:20:156:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:157:20:157:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:158:20:158:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:159:20:159:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:160:20:160:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:161:20:161:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:162:20:162:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:163:20:163:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:164:20:164:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:165:20:165:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:166:20:166:20 | i | provenance | | +| main.rs:155:9:155:9 | i | main.rs:167:20:167:20 | i | provenance | | +| main.rs:155:13:155:41 | ...::new | main.rs:155:13:155:58 | ...::new(...) | provenance | Src:MaD:13 MaD:13 | +| main.rs:155:13:155:58 | ...::new(...) | main.rs:155:9:155:9 | i | provenance | | +| main.rs:156:20:156:20 | i | main.rs:156:20:156:28 | i.clone() | provenance | MaD:18 | +| main.rs:156:20:156:28 | i.clone() | main.rs:156:20:156:46 | ... .set_name(...) | provenance | MaD:24 | +| main.rs:156:20:156:46 | ... .set_name(...) | main.rs:156:13:156:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:157:20:157:20 | i | main.rs:157:20:157:28 | i.clone() | provenance | MaD:18 | +| main.rs:157:20:157:28 | i.clone() | main.rs:157:20:157:48 | ... .set_value(...) | provenance | MaD:29 | +| main.rs:157:20:157:48 | ... .set_value(...) | main.rs:157:13:157:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:158:20:158:20 | i | main.rs:158:20:158:28 | i.clone() | provenance | MaD:18 | +| main.rs:158:20:158:28 | i.clone() | main.rs:158:20:158:48 | ... .set_http_only(...) | provenance | MaD:22 | +| main.rs:158:20:158:48 | ... .set_http_only(...) | main.rs:158:13:158:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:159:20:159:20 | i | main.rs:159:20:159:28 | i.clone() | provenance | MaD:18 | +| main.rs:159:20:159:28 | i.clone() | main.rs:159:20:159:70 | ... .set_same_site(...) | provenance | MaD:27 | +| main.rs:159:20:159:70 | ... .set_same_site(...) | main.rs:159:13:159:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:160:20:160:20 | i | main.rs:160:20:160:28 | i.clone() | provenance | MaD:18 | +| main.rs:160:20:160:28 | i.clone() | main.rs:160:20:160:46 | ... .set_max_age(...) | provenance | MaD:23 | +| main.rs:160:20:160:46 | ... .set_max_age(...) | main.rs:160:13:160:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:161:20:161:20 | i | main.rs:161:20:161:28 | i.clone() | provenance | MaD:18 | +| main.rs:161:20:161:28 | i.clone() | main.rs:161:20:161:42 | ... .set_path(...) | provenance | MaD:26 | +| main.rs:161:20:161:42 | ... .set_path(...) | main.rs:161:13:161:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:162:20:162:20 | i | main.rs:162:20:162:28 | i.clone() | provenance | MaD:18 | +| main.rs:162:20:162:28 | i.clone() | main.rs:162:20:162:41 | ... .unset_path() | provenance | MaD:32 | +| main.rs:162:20:162:41 | ... .unset_path() | main.rs:162:13:162:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:163:20:163:20 | i | main.rs:163:20:163:28 | i.clone() | provenance | MaD:18 | +| main.rs:163:20:163:28 | i.clone() | main.rs:163:20:163:54 | ... .set_domain(...) | provenance | MaD:20 | +| main.rs:163:20:163:54 | ... .set_domain(...) | main.rs:163:13:163:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:164:20:164:20 | i | main.rs:164:20:164:28 | i.clone() | provenance | MaD:18 | +| main.rs:164:20:164:28 | i.clone() | main.rs:164:20:164:43 | ... .unset_domain() | provenance | MaD:30 | +| main.rs:164:20:164:43 | ... .unset_domain() | main.rs:164:13:164:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:165:20:165:20 | i | main.rs:165:20:165:28 | i.clone() | provenance | MaD:18 | +| main.rs:165:20:165:28 | i.clone() | main.rs:165:20:165:46 | ... .set_expires(...) | provenance | MaD:21 | +| main.rs:165:20:165:46 | ... .set_expires(...) | main.rs:165:13:165:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:166:20:166:20 | i | main.rs:166:20:166:28 | i.clone() | provenance | MaD:18 | +| main.rs:166:20:166:28 | i.clone() | main.rs:166:20:166:44 | ... .unset_expires() | provenance | MaD:31 | +| main.rs:166:20:166:44 | ... .unset_expires() | main.rs:166:13:166:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:167:20:167:20 | i | main.rs:167:20:167:28 | i.clone() | provenance | MaD:18 | +| main.rs:167:20:167:28 | i.clone() | main.rs:167:20:167:45 | ... .make_permanent() | provenance | MaD:19 | +| main.rs:167:20:167:45 | ... .make_permanent() | main.rs:167:13:167:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:173:22:173:34 | ...::build | main.rs:173:22:173:59 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:173:22:173:59 | ...::build(...) | main.rs:173:61:173:65 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:197:5:197:39 | ...::build(...) | main.rs:197:5:197:53 | ... .secure(...) | provenance | MaD:9 | +| main.rs:197:5:197:39 | ...::build(...) | main.rs:197:5:197:53 | ... .secure(...) | provenance | MaD:35 | | main.rs:197:5:197:53 | ... .secure(...) | main.rs:197:55:197:60 | finish | provenance | MaD:3 Sink:MaD:3 | -| main.rs:198:5:198:39 | ...::build(...) | main.rs:198:5:198:53 | ... .secure(...) | provenance | MaD:9 | -| main.rs:198:5:198:53 | ... .secure(...) | main.rs:198:5:198:63 | ... .path(...) | provenance | MaD:8 | +| main.rs:198:5:198:39 | ...::build(...) | main.rs:198:5:198:53 | ... .secure(...) | provenance | MaD:35 | +| main.rs:198:5:198:53 | ... .secure(...) | main.rs:198:5:198:63 | ... .path(...) | provenance | MaD:34 | | main.rs:198:5:198:63 | ... .path(...) | main.rs:198:65:198:70 | finish | provenance | MaD:3 Sink:MaD:3 | -| main.rs:212:5:212:22 | ...::build | main.rs:212:5:212:39 | ...::build(...) | provenance | Src:MaD:6 MaD:6 | +| main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:13:202:19 | cookie1 | provenance | | +| main.rs:201:5:201:11 | cookie1 | main.rs:202:13:202:19 | cookie1 | provenance | | +| main.rs:202:13:202:19 | cookie1 | main.rs:202:13:202:27 | cookie1.clone() | provenance | MaD:18 | +| main.rs:202:13:202:27 | cookie1.clone() | main.rs:202:9:202:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:212:5:212:22 | ...::build | main.rs:212:5:212:39 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:212:5:212:39 | ...::build(...) | main.rs:212:41:212:46 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:214:9:214:15 | cookie3 | main.rs:215:13:215:19 | cookie3 | provenance | | +| main.rs:214:19:214:34 | ...::new | main.rs:214:19:214:51 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | +| main.rs:214:19:214:51 | ...::new(...) | main.rs:214:9:214:15 | cookie3 | provenance | | +| main.rs:215:13:215:19 | cookie3 | main.rs:215:13:215:27 | cookie3.clone() | provenance | MaD:18 | +| main.rs:215:13:215:27 | cookie3.clone() | main.rs:215:9:215:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:13:219:19 | cookie2 | provenance | | +| main.rs:218:5:218:11 | cookie2 | main.rs:219:13:219:19 | cookie2 | provenance | | +| main.rs:219:13:219:19 | cookie2 | main.rs:219:13:219:27 | cookie2.clone() | provenance | MaD:18 | +| main.rs:219:13:219:27 | cookie2.clone() | main.rs:219:9:219:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | | +| main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | | +| main.rs:229:13:229:19 | cookie1 | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:18 | +| main.rs:229:13:229:27 | cookie1.clone() | main.rs:229:9:229:11 | add | provenance | MaD:11 Sink:MaD:11 | | main.rs:241:9:241:25 | cookie_config_bad | main.rs:242:43:242:59 | cookie_config_bad | provenance | | -| main.rs:241:29:241:62 | ...::new(...) | main.rs:241:29:241:76 | ... .secure(...) | provenance | MaD:12 | +| main.rs:241:29:241:62 | ...::new(...) | main.rs:241:29:241:76 | ... .secure(...) | provenance | MaD:38 | | main.rs:241:29:241:76 | ... .secure(...) | main.rs:241:9:241:25 | cookie_config_bad | provenance | | -| main.rs:242:43:242:59 | cookie_config_bad | main.rs:242:9:242:41 | ...::new | provenance | MaD:4 Sink:MaD:4 | +| main.rs:242:43:242:59 | cookie_config_bad | main.rs:242:9:242:41 | ...::new | provenance | MaD:10 Sink:MaD:10 | | main.rs:244:9:244:26 | cookie_config_bad2 | main.rs:245:43:245:60 | cookie_config_bad2 | provenance | | -| main.rs:244:30:244:63 | ...::new(...) | main.rs:244:30:244:77 | ... .secure(...) | provenance | MaD:12 | -| main.rs:244:30:244:77 | ... .secure(...) | main.rs:244:30:244:90 | ... .name(...) | provenance | MaD:10 | -| main.rs:244:30:244:90 | ... .name(...) | main.rs:244:30:244:100 | ... .path(...) | provenance | MaD:11 | +| main.rs:244:30:244:63 | ...::new(...) | main.rs:244:30:244:77 | ... .secure(...) | provenance | MaD:38 | +| main.rs:244:30:244:77 | ... .secure(...) | main.rs:244:30:244:90 | ... .name(...) | provenance | MaD:36 | +| main.rs:244:30:244:90 | ... .name(...) | main.rs:244:30:244:100 | ... .path(...) | provenance | MaD:37 | | main.rs:244:30:244:100 | ... .path(...) | main.rs:244:9:244:26 | cookie_config_bad2 | provenance | | -| main.rs:245:43:245:60 | cookie_config_bad2 | main.rs:245:9:245:41 | ...::new | provenance | MaD:4 Sink:MaD:4 | -| main.rs:259:5:259:43 | ...::build(...) | main.rs:259:5:259:57 | ... .secure(...) | provenance | MaD:9 | +| main.rs:245:43:245:60 | cookie_config_bad2 | main.rs:245:9:245:41 | ...::new | provenance | MaD:10 Sink:MaD:10 | +| main.rs:259:5:259:43 | ...::build(...) | main.rs:259:5:259:57 | ... .secure(...) | provenance | MaD:35 | | main.rs:259:5:259:57 | ... .secure(...) | main.rs:259:59:259:64 | finish | provenance | MaD:3 Sink:MaD:3 | -| main.rs:260:5:260:43 | ...::build(...) | main.rs:260:5:260:57 | ... .secure(...) | provenance | MaD:9 | -| main.rs:260:5:260:57 | ... .secure(...) | main.rs:260:5:260:67 | ... .path(...) | provenance | MaD:8 | +| main.rs:260:5:260:43 | ...::build(...) | main.rs:260:5:260:57 | ... .secure(...) | provenance | MaD:35 | +| main.rs:260:5:260:57 | ... .secure(...) | main.rs:260:5:260:67 | ... .path(...) | provenance | MaD:34 | | main.rs:260:5:260:67 | ... .path(...) | main.rs:260:69:260:74 | finish | provenance | MaD:3 Sink:MaD:3 | -| main.rs:274:5:274:26 | ...::build | main.rs:274:5:274:43 | ...::build(...) | provenance | Src:MaD:6 MaD:6 | +| main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:13:264:19 | cookie1 | provenance | | +| main.rs:263:5:263:11 | cookie1 | main.rs:264:13:264:19 | cookie1 | provenance | | +| main.rs:264:13:264:19 | cookie1 | main.rs:264:13:264:27 | cookie1.clone() | provenance | MaD:18 | +| main.rs:264:13:264:27 | cookie1.clone() | main.rs:264:9:264:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:274:5:274:26 | ...::build | main.rs:274:5:274:43 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:274:5:274:43 | ...::build(...) | main.rs:274:45:274:50 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:276:9:276:15 | cookie3 | main.rs:277:13:277:19 | cookie3 | provenance | | +| main.rs:276:19:276:38 | ...::new | main.rs:276:19:276:55 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | +| main.rs:276:19:276:55 | ...::new(...) | main.rs:276:9:276:15 | cookie3 | provenance | | +| main.rs:277:13:277:19 | cookie3 | main.rs:277:13:277:27 | cookie3.clone() | provenance | MaD:18 | +| main.rs:277:13:277:27 | cookie3.clone() | main.rs:277:9:277:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:13:281:19 | cookie2 | provenance | | +| main.rs:280:5:280:11 | cookie2 | main.rs:281:13:281:19 | cookie2 | provenance | | +| main.rs:281:13:281:19 | cookie2 | main.rs:281:13:281:27 | cookie2.clone() | provenance | MaD:18 | +| main.rs:281:13:281:27 | cookie2.clone() | main.rs:281:9:281:11 | add | provenance | MaD:4 Sink:MaD:4 | models | 1 | Sink: ::insert; Argument[0]; cookie-use | | 2 | Sink: ::build; Argument[self]; cookie-use | | 3 | Sink: ::finish; Argument[self]; cookie-use | -| 4 | Sink: ::new; Argument[0]; cookie-use | -| 5 | Source: ::from; ReturnValue; cookie-create | -| 6 | Source: ::build; ReturnValue; cookie-create | -| 7 | Summary: ::partitioned; Argument[self].OptionalBarrier[cookie-partitioned-arg0]; ReturnValue; taint | -| 8 | Summary: ::path; Argument[self]; ReturnValue; taint | -| 9 | Summary: ::secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; ReturnValue; taint | -| 10 | Summary: ::name; Argument[self]; ReturnValue; taint | -| 11 | Summary: ::path; Argument[self]; ReturnValue; taint | -| 12 | Summary: ::secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; ReturnValue; taint | +| 4 | Sink: ::add; Argument[0]; cookie-use | +| 5 | Sink: ::add_original; Argument[0]; cookie-use | +| 6 | Sink: ::add; Argument[0]; cookie-use | +| 7 | Sink: ::add_original; Argument[0]; cookie-use | +| 8 | Sink: ::add; Argument[0]; cookie-use | +| 9 | Sink: ::add_original; Argument[0]; cookie-use | +| 10 | Sink: ::new; Argument[0]; cookie-use | +| 11 | Sink: ::add; Argument[0]; cookie-use | +| 12 | Source: ::from; ReturnValue; cookie-create | +| 13 | Source: ::new; ReturnValue; cookie-create | +| 14 | Source: ::from; ReturnValue; cookie-create | +| 15 | Source: ::build; ReturnValue; cookie-create | +| 16 | Source: ::named; ReturnValue; cookie-create | +| 17 | Source: ::new; ReturnValue; cookie-create | +| 18 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 19 | Summary: ::make_permanent; Argument[self]; ReturnValue; taint | +| 20 | Summary: ::set_domain; Argument[self]; ReturnValue; taint | +| 21 | Summary: ::set_expires; Argument[self]; ReturnValue; taint | +| 22 | Summary: ::set_http_only; Argument[self]; ReturnValue; taint | +| 23 | Summary: ::set_max_age; Argument[self]; ReturnValue; taint | +| 24 | Summary: ::set_name; Argument[self]; ReturnValue; taint | +| 25 | Summary: ::set_partitioned; Argument[self].OptionalBarrier[cookie-partitioned-arg0]; ReturnValue; taint | +| 26 | Summary: ::set_path; Argument[self]; ReturnValue; taint | +| 27 | Summary: ::set_same_site; Argument[self]; ReturnValue; taint | +| 28 | Summary: ::set_secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; ReturnValue; taint | +| 29 | Summary: ::set_value; Argument[self]; ReturnValue; taint | +| 30 | Summary: ::unset_domain; Argument[self]; ReturnValue; taint | +| 31 | Summary: ::unset_expires; Argument[self]; ReturnValue; taint | +| 32 | Summary: ::unset_path; Argument[self]; ReturnValue; taint | +| 33 | Summary: ::partitioned; Argument[self].OptionalBarrier[cookie-partitioned-arg0]; ReturnValue; taint | +| 34 | Summary: ::path; Argument[self]; ReturnValue; taint | +| 35 | Summary: ::secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; ReturnValue; taint | +| 36 | Summary: ::name; Argument[self]; ReturnValue; taint | +| 37 | Summary: ::path; Argument[self]; ReturnValue; taint | +| 38 | Summary: ::secure; Argument[self].OptionalBarrier[cookie-secure-arg0]; ReturnValue; taint | nodes | main.rs:8:19:8:50 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:8:19:8:64 | ... .secure(...) | semmle.label | ... .secure(...) | @@ -201,15 +415,139 @@ nodes | main.rs:53:5:53:49 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:53:5:53:63 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:53:65:53:69 | build | semmle.label | build | +| main.rs:58:9:58:13 | mut a | semmle.label | mut a | +| main.rs:58:17:58:27 | ...::new | semmle.label | ...::new | +| main.rs:58:17:58:44 | ...::new(...) | semmle.label | ...::new(...) | +| main.rs:59:9:59:11 | add | semmle.label | add | +| main.rs:59:13:59:13 | a | semmle.label | a | +| main.rs:59:13:59:21 | a.clone() | semmle.label | a.clone() | +| main.rs:60:9:60:20 | add_original | semmle.label | add_original | +| main.rs:60:22:60:22 | a | semmle.label | a | +| main.rs:60:22:60:30 | a.clone() | semmle.label | a.clone() | +| main.rs:63:5:63:5 | [SSA] a | semmle.label | [SSA] a | +| main.rs:63:5:63:5 | a | semmle.label | a | +| main.rs:64:9:64:11 | add | semmle.label | add | +| main.rs:64:13:64:13 | a | semmle.label | a | +| main.rs:64:13:64:21 | a.clone() | semmle.label | a.clone() | +| main.rs:68:9:68:13 | mut b | semmle.label | mut b | +| main.rs:68:17:68:29 | ...::named | semmle.label | ...::named | +| main.rs:68:17:68:37 | ...::named(...) | semmle.label | ...::named(...) | +| main.rs:69:16:69:18 | add | semmle.label | add | +| main.rs:69:20:69:20 | b | semmle.label | b | +| main.rs:69:20:69:28 | b.clone() | semmle.label | b.clone() | +| main.rs:70:16:70:27 | add_original | semmle.label | add_original | +| main.rs:70:29:70:29 | a | semmle.label | a | +| main.rs:70:29:70:37 | a.clone() | semmle.label | a.clone() | +| main.rs:71:5:71:5 | [SSA] b | semmle.label | [SSA] b | +| main.rs:71:5:71:5 | b | semmle.label | b | +| main.rs:72:16:72:18 | add | semmle.label | add | +| main.rs:72:20:72:20 | b | semmle.label | b | +| main.rs:72:20:72:28 | b.clone() | semmle.label | b.clone() | +| main.rs:77:9:77:13 | mut c | semmle.label | mut c | +| main.rs:77:17:77:28 | ...::from | semmle.label | ...::from | +| main.rs:77:17:77:36 | ...::from(...) | semmle.label | ...::from(...) | +| main.rs:78:17:78:19 | add | semmle.label | add | +| main.rs:78:21:78:21 | c | semmle.label | c | +| main.rs:78:21:78:29 | c.clone() | semmle.label | c.clone() | +| main.rs:79:17:79:28 | add_original | semmle.label | add_original | +| main.rs:79:30:79:30 | a | semmle.label | a | +| main.rs:79:30:79:38 | a.clone() | semmle.label | a.clone() | +| main.rs:83:17:83:19 | add | semmle.label | add | +| main.rs:83:21:83:21 | c | semmle.label | c | +| main.rs:83:21:83:29 | c.clone() | semmle.label | c.clone() | +| main.rs:87:9:87:13 | mut d | semmle.label | mut d | +| main.rs:87:17:87:28 | ...::from | semmle.label | ...::from | +| main.rs:87:17:87:36 | ...::from(...) | semmle.label | ...::from(...) | +| main.rs:88:9:88:11 | add | semmle.label | add | +| main.rs:88:13:88:13 | d | semmle.label | d | +| main.rs:88:13:88:21 | d.clone() | semmle.label | d.clone() | +| main.rs:94:9:94:11 | add | semmle.label | add | +| main.rs:94:13:94:13 | d | semmle.label | d | +| main.rs:94:13:94:21 | d.clone() | semmle.label | d.clone() | | main.rs:114:5:114:17 | ...::build | semmle.label | ...::build | | main.rs:114:5:114:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:114:5:114:54 | ... .partitioned(...) | semmle.label | ... .partitioned(...) | | main.rs:114:56:114:60 | build | semmle.label | build | +| main.rs:122:9:122:9 | a | semmle.label | a | +| main.rs:122:13:122:41 | ...::new | semmle.label | ...::new | +| main.rs:122:13:122:58 | ...::new(...) | semmle.label | ...::new(...) | +| main.rs:123:13:123:18 | insert | semmle.label | insert | +| main.rs:123:20:123:20 | a | semmle.label | a | +| main.rs:123:20:123:28 | a.clone() | semmle.label | a.clone() | +| main.rs:130:9:130:9 | c | semmle.label | c | +| main.rs:130:13:130:13 | b | semmle.label | b | +| main.rs:130:13:130:31 | b.set_secure(...) | semmle.label | b.set_secure(...) | +| main.rs:131:13:131:18 | insert | semmle.label | insert | +| main.rs:131:20:131:20 | c | semmle.label | c | +| main.rs:131:20:131:28 | c.clone() | semmle.label | c.clone() | +| main.rs:134:9:134:9 | d | semmle.label | d | +| main.rs:134:13:134:13 | c | semmle.label | c | +| main.rs:134:13:134:35 | c.set_partitioned(...) | semmle.label | c.set_partitioned(...) | +| main.rs:135:13:135:18 | insert | semmle.label | insert | +| main.rs:135:20:135:20 | d | semmle.label | d | +| main.rs:135:20:135:28 | d.clone() | semmle.label | d.clone() | +| main.rs:146:9:146:9 | g | semmle.label | g | +| main.rs:146:13:146:13 | f | semmle.label | f | +| main.rs:146:13:146:31 | f.set_secure(...) | semmle.label | f.set_secure(...) | +| main.rs:147:13:147:18 | insert | semmle.label | insert | +| main.rs:147:20:147:20 | g | semmle.label | g | +| main.rs:147:20:147:28 | g.clone() | semmle.label | g.clone() | | main.rs:151:9:151:9 | h | semmle.label | h | | main.rs:151:13:151:42 | ...::from | semmle.label | ...::from | | main.rs:151:13:151:61 | ...::from(...) | semmle.label | ...::from(...) | | main.rs:152:13:152:18 | insert | semmle.label | insert | | main.rs:152:20:152:20 | h | semmle.label | h | +| main.rs:155:9:155:9 | i | semmle.label | i | +| main.rs:155:13:155:41 | ...::new | semmle.label | ...::new | +| main.rs:155:13:155:58 | ...::new(...) | semmle.label | ...::new(...) | +| main.rs:156:13:156:18 | insert | semmle.label | insert | +| main.rs:156:20:156:20 | i | semmle.label | i | +| main.rs:156:20:156:28 | i.clone() | semmle.label | i.clone() | +| main.rs:156:20:156:46 | ... .set_name(...) | semmle.label | ... .set_name(...) | +| main.rs:157:13:157:18 | insert | semmle.label | insert | +| main.rs:157:20:157:20 | i | semmle.label | i | +| main.rs:157:20:157:28 | i.clone() | semmle.label | i.clone() | +| main.rs:157:20:157:48 | ... .set_value(...) | semmle.label | ... .set_value(...) | +| main.rs:158:13:158:18 | insert | semmle.label | insert | +| main.rs:158:20:158:20 | i | semmle.label | i | +| main.rs:158:20:158:28 | i.clone() | semmle.label | i.clone() | +| main.rs:158:20:158:48 | ... .set_http_only(...) | semmle.label | ... .set_http_only(...) | +| main.rs:159:13:159:18 | insert | semmle.label | insert | +| main.rs:159:20:159:20 | i | semmle.label | i | +| main.rs:159:20:159:28 | i.clone() | semmle.label | i.clone() | +| main.rs:159:20:159:70 | ... .set_same_site(...) | semmle.label | ... .set_same_site(...) | +| main.rs:160:13:160:18 | insert | semmle.label | insert | +| main.rs:160:20:160:20 | i | semmle.label | i | +| main.rs:160:20:160:28 | i.clone() | semmle.label | i.clone() | +| main.rs:160:20:160:46 | ... .set_max_age(...) | semmle.label | ... .set_max_age(...) | +| main.rs:161:13:161:18 | insert | semmle.label | insert | +| main.rs:161:20:161:20 | i | semmle.label | i | +| main.rs:161:20:161:28 | i.clone() | semmle.label | i.clone() | +| main.rs:161:20:161:42 | ... .set_path(...) | semmle.label | ... .set_path(...) | +| main.rs:162:13:162:18 | insert | semmle.label | insert | +| main.rs:162:20:162:20 | i | semmle.label | i | +| main.rs:162:20:162:28 | i.clone() | semmle.label | i.clone() | +| main.rs:162:20:162:41 | ... .unset_path() | semmle.label | ... .unset_path() | +| main.rs:163:13:163:18 | insert | semmle.label | insert | +| main.rs:163:20:163:20 | i | semmle.label | i | +| main.rs:163:20:163:28 | i.clone() | semmle.label | i.clone() | +| main.rs:163:20:163:54 | ... .set_domain(...) | semmle.label | ... .set_domain(...) | +| main.rs:164:13:164:18 | insert | semmle.label | insert | +| main.rs:164:20:164:20 | i | semmle.label | i | +| main.rs:164:20:164:28 | i.clone() | semmle.label | i.clone() | +| main.rs:164:20:164:43 | ... .unset_domain() | semmle.label | ... .unset_domain() | +| main.rs:165:13:165:18 | insert | semmle.label | insert | +| main.rs:165:20:165:20 | i | semmle.label | i | +| main.rs:165:20:165:28 | i.clone() | semmle.label | i.clone() | +| main.rs:165:20:165:46 | ... .set_expires(...) | semmle.label | ... .set_expires(...) | +| main.rs:166:13:166:18 | insert | semmle.label | insert | +| main.rs:166:20:166:20 | i | semmle.label | i | +| main.rs:166:20:166:28 | i.clone() | semmle.label | i.clone() | +| main.rs:166:20:166:44 | ... .unset_expires() | semmle.label | ... .unset_expires() | +| main.rs:167:13:167:18 | insert | semmle.label | insert | +| main.rs:167:20:167:20 | i | semmle.label | i | +| main.rs:167:20:167:28 | i.clone() | semmle.label | i.clone() | +| main.rs:167:20:167:45 | ... .make_permanent() | semmle.label | ... .make_permanent() | | main.rs:173:22:173:34 | ...::build | semmle.label | ...::build | | main.rs:173:22:173:59 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:173:61:173:65 | build | semmle.label | build | @@ -220,9 +558,30 @@ nodes | main.rs:198:5:198:53 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:198:5:198:63 | ... .path(...) | semmle.label | ... .path(...) | | main.rs:198:65:198:70 | finish | semmle.label | finish | +| main.rs:201:5:201:11 | [SSA] cookie1 | semmle.label | [SSA] cookie1 | +| main.rs:201:5:201:11 | cookie1 | semmle.label | cookie1 | +| main.rs:202:9:202:11 | add | semmle.label | add | +| main.rs:202:13:202:19 | cookie1 | semmle.label | cookie1 | +| main.rs:202:13:202:27 | cookie1.clone() | semmle.label | cookie1.clone() | | main.rs:212:5:212:22 | ...::build | semmle.label | ...::build | | main.rs:212:5:212:39 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:212:41:212:46 | finish | semmle.label | finish | +| main.rs:214:9:214:15 | cookie3 | semmle.label | cookie3 | +| main.rs:214:19:214:34 | ...::new | semmle.label | ...::new | +| main.rs:214:19:214:51 | ...::new(...) | semmle.label | ...::new(...) | +| main.rs:215:9:215:11 | add | semmle.label | add | +| main.rs:215:13:215:19 | cookie3 | semmle.label | cookie3 | +| main.rs:215:13:215:27 | cookie3.clone() | semmle.label | cookie3.clone() | +| main.rs:218:5:218:11 | [SSA] cookie2 | semmle.label | [SSA] cookie2 | +| main.rs:218:5:218:11 | cookie2 | semmle.label | cookie2 | +| main.rs:219:9:219:11 | add | semmle.label | add | +| main.rs:219:13:219:19 | cookie2 | semmle.label | cookie2 | +| main.rs:219:13:219:27 | cookie2.clone() | semmle.label | cookie2.clone() | +| main.rs:228:5:228:11 | [SSA] cookie1 | semmle.label | [SSA] cookie1 | +| main.rs:228:5:228:11 | cookie1 | semmle.label | cookie1 | +| main.rs:229:9:229:11 | add | semmle.label | add | +| main.rs:229:13:229:19 | cookie1 | semmle.label | cookie1 | +| main.rs:229:13:229:27 | cookie1.clone() | semmle.label | cookie1.clone() | | main.rs:241:9:241:25 | cookie_config_bad | semmle.label | cookie_config_bad | | main.rs:241:29:241:62 | ...::new(...) | semmle.label | ...::new(...) | | main.rs:241:29:241:76 | ... .secure(...) | semmle.label | ... .secure(...) | @@ -242,58 +601,23 @@ nodes | main.rs:260:5:260:57 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:260:5:260:67 | ... .path(...) | semmle.label | ... .path(...) | | main.rs:260:69:260:74 | finish | semmle.label | finish | +| main.rs:263:5:263:11 | [SSA] cookie1 | semmle.label | [SSA] cookie1 | +| main.rs:263:5:263:11 | cookie1 | semmle.label | cookie1 | +| main.rs:264:9:264:11 | add | semmle.label | add | +| main.rs:264:13:264:19 | cookie1 | semmle.label | cookie1 | +| main.rs:264:13:264:27 | cookie1.clone() | semmle.label | cookie1.clone() | | main.rs:274:5:274:26 | ...::build | semmle.label | ...::build | | main.rs:274:5:274:43 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:274:45:274:50 | finish | semmle.label | finish | +| main.rs:276:9:276:15 | cookie3 | semmle.label | cookie3 | +| main.rs:276:19:276:38 | ...::new | semmle.label | ...::new | +| main.rs:276:19:276:55 | ...::new(...) | semmle.label | ...::new(...) | +| main.rs:277:9:277:11 | add | semmle.label | add | +| main.rs:277:13:277:19 | cookie3 | semmle.label | cookie3 | +| main.rs:277:13:277:27 | cookie3.clone() | semmle.label | cookie3.clone() | +| main.rs:280:5:280:11 | [SSA] cookie2 | semmle.label | [SSA] cookie2 | +| main.rs:280:5:280:11 | cookie2 | semmle.label | cookie2 | +| main.rs:281:9:281:11 | add | semmle.label | add | +| main.rs:281:13:281:19 | cookie2 | semmle.label | cookie2 | +| main.rs:281:13:281:27 | cookie2.clone() | semmle.label | cookie2.clone() | subpaths -testFailures -| main.rs:58:47:58:57 | //... | Missing result: Source | -| main.rs:59:25:59:56 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:60:34:60:65 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:63:26:63:36 | //... | Missing result: Source | -| main.rs:64:25:64:56 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:68:40:68:50 | //... | Missing result: Source | -| main.rs:69:32:69:63 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:70:41:70:72 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:71:30:71:40 | //... | Missing result: Source | -| main.rs:72:32:72:63 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:77:39:77:49 | //... | Missing result: Source | -| main.rs:78:33:78:64 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:79:42:79:73 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:83:33:83:64 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:87:39:87:49 | //... | Missing result: Source | -| main.rs:88:25:88:56 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:94:25:94:66 | //... | Fixed spurious result: Alert[rust/insecure-cookie] | -| main.rs:122:61:122:71 | //... | Missing result: Source | -| main.rs:123:32:123:63 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:130:34:130:44 | //... | Missing result: Source | -| main.rs:131:32:131:63 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:146:34:146:44 | //... | Missing result: Source | -| main.rs:147:32:147:63 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:155:61:155:71 | //... | Missing result: Source | -| main.rs:156:50:156:81 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:157:52:157:83 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:158:52:158:83 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:159:74:159:105 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:160:50:160:81 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:161:46:161:77 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:162:45:162:76 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:163:58:163:89 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:164:47:164:78 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:165:50:165:81 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:166:48:166:79 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:167:49:167:80 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:201:32:201:42 | //... | Missing result: Source | -| main.rs:202:31:202:62 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:214:54:214:64 | //... | Missing result: Source | -| main.rs:215:31:215:62 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:218:31:218:41 | //... | Missing result: Source | -| main.rs:219:31:219:62 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:228:32:228:42 | //... | Missing result: Source | -| main.rs:229:31:229:62 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:263:32:263:42 | //... | Missing result: Source | -| main.rs:264:31:264:62 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:276:58:276:68 | //... | Missing result: Source | -| main.rs:277:31:277:62 | //... | Missing result: Alert[rust/insecure-cookie] | -| main.rs:280:31:280:41 | //... | Missing result: Source | -| main.rs:281:31:281:62 | //... | Missing result: Alert[rust/insecure-cookie] |