From a1ba9980c37365ecef62193d2b6d03659a511c1e Mon Sep 17 00:00:00 2001 From: Enkelmann Date: Thu, 22 Feb 2024 12:37:38 +0100 Subject: [PATCH] update docs to new stable version --- doc/html/acceptance_tests_ghidra/all.html | 2 +- .../constant.ARCHITECTURES.html | 2 +- .../constant.COMPILERS.html | 2 +- .../constant.WINDOWS_ARCHITECTURES.html | 2 +- .../constant.WINDOWS_COMPILERS.html | 2 +- .../fn.all_test_cases.html | 8 +- .../fn.linux_test_cases.html | 8 +- .../fn.mark_architecture_skipped.html | 2 +- .../fn.mark_compiler_skipped.html | 2 +- .../fn.mark_skipped.html | 2 +- .../fn.new_test_cases.html | 12 +- .../fn.print_errors.html | 2 +- .../fn.windows_test_cases.html | 8 +- doc/html/acceptance_tests_ghidra/index.html | 3 +- .../struct.CweTestCase.html | 40 +- doc/html/cwe_checker/all.html | 2 +- .../cwe_checker/fn.check_file_existence.html | 2 +- .../fn.filter_modules_for_partial_run.html | 6 +- doc/html/cwe_checker/fn.main.html | 2 +- doc/html/cwe_checker/fn.run_with_ghidra.html | 2 +- doc/html/cwe_checker/index.html | 3 +- doc/html/cwe_checker/struct.CmdlineArgs.html | 88 +- doc/html/cwe_checker_install/all.html | 2 +- .../fn.copy_config_json.html | 2 +- .../cwe_checker_install/fn.copy_dir_all.html | 8 +- .../fn.copy_ghidra_plugin.html | 2 +- .../fn.create_ghidra_json.html | 8 +- .../cwe_checker_install/fn.find_ghidra.html | 2 +- .../fn.get_search_locations.html | 2 +- .../fn.get_user_choice.html | 6 +- .../fn.install_cwe_checker.html | 2 +- .../fn.is_good_ghidra_location.html | 2 +- .../cwe_checker_install/fn.is_hidden.html | 2 +- doc/html/cwe_checker_install/fn.main.html | 2 +- .../fn.search_for_ghidrarun.html | 2 +- .../fn.select_ghidra_version.html | 6 +- .../cwe_checker_install/fn.uninstall.html | 2 +- doc/html/cwe_checker_install/index.html | 3 +- .../struct.CmdlineArgs.html | 52 +- .../struct.GhidraConfig.html | 32 +- .../enum.AbstractLocation.html | 105 ++- .../enum.AbstractMemoryLocation.html | 94 ++- .../abstract_domain/enum.BitvectorDomain.html | 74 +- .../abstract_domain/enum.BrickDomain.html | 52 +- .../abstract_domain/enum.BricksDomain.html | 76 +- .../enum.CharacterInclusionDomain.html | 64 +- .../abstract_domain/enum.CharacterSet.html | 54 +- .../identifier/enum.AbstractLocation.html | 11 - .../enum.AbstractMemoryLocation.html | 11 - .../location/enum.AbstractLocation.html | 11 + .../enum.AbstractMemoryLocation.html | 11 + .../abstract_domain/index.html | 2 +- .../struct.AbstractIdentifier.html | 95 ++- .../struct.AbstractIdentifierData.html | 56 +- .../abstract_domain/struct.DataDomain.html | 146 ++-- .../abstract_domain/struct.DomainMap.html | 378 ++++----- .../struct.IntersectMergeStrategy.html | 46 +- .../abstract_domain/struct.Interval.html | 98 +-- .../struct.IntervalDomain.html | 122 +-- .../abstract_domain/struct.MemRegion.html | 98 +-- .../struct.MergeTopStrategy.html | 46 +- .../struct.UnionMergeStrategy.html | 46 +- .../abstract_domain/trait.AbstractDomain.html | 16 +- .../trait.DomainInsertion.html | 20 +- .../abstract_domain/trait.HasTop.html | 6 +- .../trait.MapMergeStrategy.html | 18 +- .../abstract_domain/trait.RegisterDomain.html | 18 +- .../abstract_domain/trait.SizedDomain.html | 8 +- .../trait.SpecializeByConditional.html | 34 +- .../abstract_domain/trait.TryToBitvec.html | 12 +- .../abstract_domain/trait.TryToInterval.html | 12 +- doc/html/cwe_checker_lib/all.html | 2 +- .../fn.create_computation.html | 4 +- ...utation_with_bottom_up_worklist_order.html | 4 +- ...putation_with_top_down_worklist_order.html | 4 +- .../index.html | 2 +- .../struct.GeneralizedContext.html | 44 +- .../trait.Context.html | 68 +- .../fn.find_call_sequences_to_target.html | 4 +- .../callgraph/fn.get_program_callgraph.html | 2 +- .../analysis/callgraph/index.html | 4 +- .../analysis/callgraph/type.CallGraph.html | 4 +- .../fn.compute_alive_vars.html | 2 +- .../fn.remove_dead_var_assignments.html | 2 +- .../dead_variable_elimination/index.html | 2 +- .../fn.merge_def_assignments_to_same_var.html | 2 +- .../fn.propagate_input_expression.html | 2 +- .../fn.propagate_input_expressions.html | 4 +- .../expression_propagation/index.html | 2 +- .../struct.Context.html | 56 +- .../analysis/fixpoint/index.html | 2 +- .../analysis/fixpoint/struct.Computation.html | 70 +- .../analysis/fixpoint/trait.Context.html | 24 +- .../fn.create_bottom_up_worklist.html | 2 +- .../fn.create_computation.html | 4 +- ...utation_with_bottom_up_worklist_order.html | 4 +- ...putation_with_top_down_worklist_order.html | 4 +- .../fn.create_top_down_worklist.html | 2 +- .../index.html | 2 +- .../struct.GeneralizedContext.html | 44 +- .../trait.Context.html | 72 +- .../fn.compute_function_signatures.html | 4 +- .../analysis/function_signature/index.html | 18 +- .../struct.AccessPattern.html | 82 +- .../struct.FunctionSignature.html | 54 +- ...ute_return_value_for_stubbed_function.html | 2 +- .../stubs/fn.generate_param_access_stubs.html | 5 +- .../fn.get_stubbed_variadic_symbols.html | 5 +- .../function_signature/stubs/index.html | 2 +- .../return_value_stubs/fn.copy_param.html | 4 +- .../fn.new_mem_object_id.html | 2 +- .../stubs/return_value_stubs/fn.or_null.html | 2 +- .../fn.param_plus_unknown_offset.html | 4 +- .../return_value_stubs/fn.untracked.html | 2 +- .../stubs/return_value_stubs/index.html | 2 +- .../analysis/graph/enum.Edge.html | 44 +- .../analysis/graph/enum.Node.html | 46 +- .../graph/fn.get_entry_nodes_of_subs.html | 2 +- .../analysis/graph/fn.get_program_cfg.html | 2 +- .../graph/fn.get_program_cfg_with_logs.html | 4 +- .../cwe_checker_lib/analysis/graph/index.html | 4 +- .../analysis/graph/type.Graph.html | 4 +- doc/html/cwe_checker_lib/analysis/index.html | 2 +- .../enum.NodeValue.html | 64 +- .../fn.merge_option.html | 10 +- .../index.html | 2 +- .../fn.extract_pi_analysis_results.html | 6 +- .../analysis/pointer_inference/fn.run.html | 6 +- .../analysis/pointer_inference/index.html | 4 +- .../object/enum.ObjectType.html | 58 +- .../pointer_inference/object/index.html | 2 +- .../object/struct.AbstractObject.html | 96 +-- .../pointer_inference/static.CWE_MODULE.html | 2 +- .../pointer_inference/struct.Config.html | 48 +- .../struct.PointerInference.html | 67 +- .../pointer_inference/struct.State.html | 212 +++-- .../analysis/pointer_inference/type.Data.html | 4 +- .../pointer_inference/type.ValueDomain.html | 4 +- .../fn.substitute_and_on_stackpointer.html | 4 +- .../stack_alignment_substitution/index.html | 2 +- .../string_abstraction/context/index.html | 2 +- .../context/struct.Context.html | 240 +++--- .../context/symbol_calls/index.html | 2 +- .../analysis/string_abstraction/fn.run.html | 4 +- .../analysis/string_abstraction/index.html | 2 +- .../string_abstraction/state/index.html | 2 +- .../state/struct.State.html | 172 ++-- .../string_abstraction/struct.Config.html | 52 +- .../struct.StringAbstraction.html | 44 +- .../analysis/vsa_results/index.html | 2 +- .../analysis/vsa_results/trait.VsaResult.html | 38 +- .../checkers/cwe_119/fn.check_cwe.html | 6 +- .../checkers/cwe_119/index.html | 12 +- .../checkers/cwe_119/static.CWE_MODULE.html | 2 +- .../checkers/cwe_134/enum.StringLocation.html | 40 +- .../checkers/cwe_134/fn.check_cwe.html | 6 +- .../checkers/cwe_134/index.html | 2 +- .../checkers/cwe_134/static.CWE_MODULE.html | 2 +- .../checkers/cwe_134/struct.Config.html | 40 +- .../checkers/cwe_190/fn.check_cwe.html | 6 +- .../checkers/cwe_190/index.html | 2 +- .../checkers/cwe_190/static.CWE_MODULE.html | 2 +- .../checkers/cwe_190/struct.Config.html | 44 +- .../checkers/cwe_215/fn.check_cwe.html | 6 +- .../checkers/cwe_215/index.html | 2 +- .../checkers/cwe_215/static.CWE_MODULE.html | 2 +- .../checkers/cwe_243/fn.check_cwe.html | 6 +- .../checkers/cwe_243/index.html | 2 +- .../checkers/cwe_243/static.CWE_MODULE.html | 2 +- .../checkers/cwe_243/struct.Config.html | 44 +- .../checkers/cwe_332/fn.check_cwe.html | 6 +- .../checkers/cwe_332/index.html | 2 +- .../checkers/cwe_332/static.CWE_MODULE.html | 2 +- .../checkers/cwe_332/struct.Config.html | 44 +- .../checkers/cwe_337/fn.check_cwe.html | 8 + .../checkers/cwe_337/index.html | 14 + .../checkers/cwe_337/sidebar-items.js | 1 + .../checkers/cwe_337/static.CWE_MODULE.html | 2 + .../checkers/cwe_337/struct.Config.html | 24 + .../checkers/cwe_337/struct.Context.html | 51 ++ .../checkers/cwe_367/fn.check_cwe.html | 6 +- .../checkers/cwe_367/index.html | 2 +- .../checkers/cwe_367/static.CWE_MODULE.html | 2 +- .../checkers/cwe_416/fn.check_cwe.html | 6 +- .../checkers/cwe_416/index.html | 20 +- .../checkers/cwe_416/static.CWE_MODULE.html | 2 +- .../checkers/cwe_416/struct.Config.html | 44 +- .../cwe_416/struct.WarningContext.html | 54 +- .../checkers/cwe_426/fn.check_cwe.html | 6 +- .../checkers/cwe_426/index.html | 2 +- .../checkers/cwe_426/static.CWE_MODULE.html | 2 +- .../checkers/cwe_426/struct.Config.html | 44 +- .../checkers/cwe_467/fn.check_cwe.html | 6 +- .../checkers/cwe_467/index.html | 2 +- .../checkers/cwe_467/static.CWE_MODULE.html | 2 +- .../checkers/cwe_467/struct.Config.html | 44 +- .../checkers/cwe_476/enum.Taint.html | 46 -- .../checkers/cwe_476/fn.check_cwe.html | 6 +- .../checkers/cwe_476/index.html | 4 +- .../checkers/cwe_476/sidebar-items.js | 2 +- .../checkers/cwe_476/state/index.html | 2 + .../checkers/cwe_476/state/sidebar-items.js | 1 + .../checkers/cwe_476/state/struct.State.html | 82 ++ .../checkers/cwe_476/static.CWE_MODULE.html | 2 +- .../checkers/cwe_476/struct.Config.html | 44 +- .../checkers/cwe_476/taint/enum.Taint.html | 59 +- .../checkers/cwe_476/taint/index.html | 2 + .../checkers/cwe_476/taint/sidebar-items.js | 1 + .../checkers/cwe_560/fn.check_cwe.html | 6 +- .../checkers/cwe_560/index.html | 2 +- .../checkers/cwe_560/static.CWE_MODULE.html | 2 +- ...c.UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE.html | 2 +- ...c.UPPER_BOUND_CORRECT_UMASK_ARG_VALUE.html | 2 +- .../checkers/cwe_676/fn.check_cwe.html | 6 +- .../cwe_676/fn.generate_cwe_warnings.html | 6 +- .../checkers/cwe_676/fn.get_calls.html | 8 +- .../checkers/cwe_676/fn.resolve_symbols.html | 8 +- .../checkers/cwe_676/index.html | 2 +- .../checkers/cwe_676/static.CWE_MODULE.html | 2 +- .../checkers/cwe_676/struct.Config.html | 44 +- .../checkers/cwe_78/fn.check_cwe.html | 6 +- ...string_domain_indicates_vulnerability.html | 2 +- .../fn.check_system_call_parameter.html | 4 +- .../cwe_78/fn.generate_cwe_warning.html | 6 +- .../checkers/cwe_78/index.html | 2 +- .../checkers/cwe_78/static.CWE_MODULE.html | 2 +- .../checkers/cwe_78/struct.Config.html | 40 +- .../checkers/cwe_782/fn.check_cwe.html | 6 +- .../cwe_782/fn.generate_cwe_warning.html | 2 +- .../checkers/cwe_782/fn.handle_sub.html | 6 +- .../checkers/cwe_782/index.html | 2 +- .../checkers/cwe_782/static.CWE_MODULE.html | 2 +- .../checkers/cwe_789/fn.check_cwe.html | 6 +- .../checkers/cwe_789/index.html | 2 +- .../checkers/cwe_789/static.CWE_MODULE.html | 2 +- .../checkers/cwe_789/struct.Config.html | 44 +- doc/html/cwe_checker_lib/checkers/index.html | 4 +- .../cwe_checker_lib/checkers/sidebar-items.js | 2 +- doc/html/cwe_checker_lib/fn.get_modules.html | 2 +- doc/html/cwe_checker_lib/index.html | 5 +- .../intermediate_representation/enum.Arg.html | 60 +- .../enum.BinOpType.html | 48 +- .../enum.CastOpType.html | 48 +- .../enum.Datatype.html | 46 +- .../intermediate_representation/enum.Def.html | 46 +- .../enum.Expression.html | 88 +- .../intermediate_representation/enum.Jmp.html | 64 +- .../enum.UnOpType.html | 48 +- .../intermediate_representation/index.html | 4 +- .../struct.Blk.html | 58 +- .../struct.ByteSize.html | 88 +- .../struct.CallingConvention.html | 72 +- .../struct.DatatypeProperties.html | 46 +- .../struct.ExternSymbol.html | 78 +- .../struct.Program.html | 60 +- .../struct.Project.html | 69 +- .../struct.RuntimeMemoryImage.html | 98 +-- .../struct.Sub.html | 56 +- .../struct.Term.html | 76 +- .../struct.Tid.html | 69 +- .../struct.Variable.html | 70 +- .../trait.BitvectorExtended.html | 42 +- .../type.Bitvector.html | 28 +- .../cwe_checker_lib/pcode/enum.ArgIntent.html | 44 +- .../pcode/enum.ExpressionType.html | 50 +- .../cwe_checker_lib/pcode/enum.JmpType.html | 44 +- .../cwe_checker_lib/pcode/enum.Label.html | 44 +- doc/html/cwe_checker_lib/pcode/index.html | 2 +- .../cwe_checker_lib/pcode/struct.Arg.html | 52 +- .../cwe_checker_lib/pcode/struct.Blk.html | 54 +- .../cwe_checker_lib/pcode/struct.Call.html | 56 +- .../pcode/struct.CallingConvention.html | 48 +- .../cwe_checker_lib/pcode/struct.Def.html | 50 +- .../pcode/struct.Expression.html | 58 +- .../pcode/struct.ExternSymbol.html | 68 +- .../cwe_checker_lib/pcode/struct.Jmp.html | 62 +- .../cwe_checker_lib/pcode/struct.Program.html | 66 +- .../cwe_checker_lib/pcode/struct.Project.html | 60 +- .../pcode/struct.RegisterProperties.html | 54 +- .../cwe_checker_lib/pcode/struct.Sub.html | 56 +- .../pcode/struct.Variable.html | 78 +- .../pipeline/fn.disassemble_binary.html | 10 +- doc/html/cwe_checker_lib/pipeline/index.html | 2 +- .../pipeline/struct.AnalysisResults.html | 72 +- .../cwe_checker_lib/struct.CweModule.html | 34 +- .../cwe_checker_lib/type.CweModuleFn.html | 2 +- .../fn.calculate_parameter_locations.html | 6 +- .../arguments/fn.get_input_format_string.html | 8 +- .../arguments/fn.get_variable_parameters.html | 8 +- ...string_destination_and_return_content.html | 4 +- .../fn.parse_format_string_parameters.html | 6 +- .../utils/arguments/index.html | 2 +- .../binary/fn.parse_hex_string_to_u64.html | 2 +- .../cwe_checker_lib/utils/binary/index.html | 2 +- .../utils/binary/struct.BareMetalConfig.html | 62 +- .../utils/binary/struct.MemorySegment.html | 76 +- .../utils/fn.get_binary_base_address.html | 2 +- .../utils/fn.get_ghidra_plugin_path.html | 2 +- .../utils/fn.read_config_file.html | 2 +- .../ghidra/fn.get_project_from_ghidra.html | 12 +- .../cwe_checker_lib/utils/ghidra/index.html | 2 +- ..._sink_call_reachable_from_source_call.html | 4 +- .../utils/graph_utils/index.html | 2 +- doc/html/cwe_checker_lib/utils/index.html | 2 +- .../utils/log/enum.LogLevel.html | 56 +- .../utils/log/enum.LogThreadMsg.html | 56 +- .../log/fn.add_debug_log_statistics.html | 2 +- .../utils/log/fn.print_all_messages.html | 10 +- doc/html/cwe_checker_lib/utils/log/index.html | 2 +- .../utils/log/struct.CweWarning.html | 102 +-- .../utils/log/struct.LogMessage.html | 80 +- .../utils/log/struct.LogThread.html | 38 +- .../utils/symbol_utils/fn.find_symbol.html | 6 +- .../symbol_utils/fn.get_calls_to_symbols.html | 6 +- .../utils/symbol_utils/fn.get_callsites.html | 6 +- .../utils/symbol_utils/fn.get_symbol_map.html | 6 +- .../utils/symbol_utils/index.html | 2 +- doc/html/help.html | 2 +- .../implementors/core/clone/trait.Clone.js | 4 - doc/html/implementors/core/cmp/trait.Eq.js | 4 - doc/html/implementors/core/cmp/trait.Ord.js | 3 - .../implementors/core/cmp/trait.PartialEq.js | 4 - .../implementors/core/cmp/trait.PartialOrd.js | 3 - .../implementors/core/convert/trait.From.js | 3 - .../core/default/trait.Default.js | 3 - doc/html/implementors/core/fmt/trait.Debug.js | 6 - .../implementors/core/fmt/trait.Display.js | 3 - doc/html/implementors/core/hash/trait.Hash.js | 4 - .../core/iter/traits/accum/trait.Sum.js | 3 - .../implementors/core/marker/trait.Copy.js | 3 - .../implementors/core/marker/trait.Freeze.js | 6 - .../implementors/core/marker/trait.Send.js | 6 - .../core/marker/trait.StructuralEq.js | 4 - .../core/marker/trait.StructuralPartialEq.js | 4 - .../implementors/core/marker/trait.Sync.js | 6 - .../implementors/core/marker/trait.Unpin.js | 6 - .../implementors/core/ops/arith/trait.Add.js | 3 - .../implementors/core/ops/arith/trait.Sub.js | 3 - .../core/ops/arith/trait.SubAssign.js | 3 - .../core/ops/deref/trait.Deref.js | 3 - .../panic/unwind_safe/trait.RefUnwindSafe.js | 6 - .../panic/unwind_safe/trait.UnwindSafe.js | 6 - .../serde/de/trait.Deserialize.js | 4 - .../implementors/serde/ser/trait.Serialize.js | 4 - doc/html/search-index.js | 8 +- doc/html/settings.html | 2 +- doc/html/source-files.js | 7 - doc/html/src-files.js | 7 + .../src/acceptance_tests_ghidra/lib.rs.html | 50 +- doc/html/src/cwe_checker/main.rs.html | 2 +- doc/html/src/cwe_checker_install/main.rs.html | 2 +- .../abstract_domain/bitvector.rs.html | 2 +- .../abstract_domain/bricks.rs.html | 12 +- .../abstract_domain/bricks/brick.rs.html | 2 +- .../abstract_domain/bricks/widening.rs.html | 2 +- .../character_inclusion.rs.html | 2 +- .../abstract_domain/data.rs.html | 2 +- .../abstract_domain/data/arithmetics.rs.html | 2 +- .../data/conditional_specialization.rs.html | 2 +- .../abstract_domain/data/trait_impl.rs.html | 2 +- .../abstract_domain/domain_map.rs.html | 2 +- .../identifier/location.rs.html | 665 +++++++++++++++ .../identifier/mem_location.rs.html | 413 ++++++++++ .../mod.rs.html} | 270 +----- .../abstract_domain/interval.rs.html | 2 +- .../abstract_domain/interval/bin_ops.rs.html | 2 +- .../interval/simple_interval.rs.html | 2 +- .../abstract_domain/mem_region.rs.html | 2 +- .../abstract_domain/mod.rs.html | 2 +- .../abstract_domain/strings.rs.html | 2 +- .../mod.rs.html | 2 +- .../analysis/callgraph.rs.html | 2 +- .../alive_vars_computation.rs.html | 2 +- .../dead_variable_elimination/mod.rs.html | 2 +- .../expression_propagation/mod.rs.html | 28 +- .../cwe_checker_lib/analysis/fixpoint.rs.html | 22 +- .../forward_interprocedural_fixpoint.rs.html | 2 +- .../function_signature/access_pattern.rs.html | 2 +- .../{context.rs.html => context/mod.rs.html} | 158 ++-- .../global_var_propagation.rs.html | 244 +++++- .../analysis/function_signature/mod.rs.html | 386 +++++---- .../mod.rs.html} | 344 ++++++-- .../state/memory_handling.rs.html | 655 +++++++++++++++ .../{state.rs.html => state/mod.rs.html} | 268 +++--- .../analysis/function_signature/stubs.rs.html | 2 +- .../cwe_checker_lib/analysis/graph.rs.html | 8 +- .../interprocedural_fixpoint_generic.rs.html | 2 +- .../src/cwe_checker_lib/analysis/mod.rs.html | 2 +- .../context/id_manipulation.rs.html | 156 +++- .../pointer_inference/context/mod.rs.html | 94 ++- .../pointer_inference/context/stubs.rs.html | 2 +- .../context/trait_impls.rs.html | 56 +- .../analysis/pointer_inference/mod.rs.html | 10 +- .../object/id_manipulation.rs.html | 2 +- .../pointer_inference/object/mod.rs.html | 26 +- .../object/value_access.rs.html | 2 +- .../object_list/id_manipulation.rs.html | 2 +- .../object_list/list_manipulation.rs.html | 12 +- .../pointer_inference/object_list/mod.rs.html | 42 +- .../state/access_handling.rs.html | 178 +++- .../state/id_manipulation.rs.html | 776 +++++++++++++++++- .../pointer_inference/state/mod.rs.html | 418 +++++++++- .../state/value_specialization.rs.html | 2 +- .../pointer_inference/statistics.rs.html | 2 +- .../pointer_inference/vsa_result_impl.rs.html | 26 +- .../stack_alignment_substitution/mod.rs.html | 4 +- .../string_abstraction/context/mod.rs.html | 6 +- .../context/symbol_calls.rs.html | 4 +- .../context/symbol_calls/memcpy.rs.html | 2 +- .../context/symbol_calls/scanf.rs.html | 2 +- .../context/symbol_calls/sprintf.rs.html | 2 +- .../context/symbol_calls/strcat.rs.html | 2 +- .../context/trait_impls.rs.html | 2 +- .../analysis/string_abstraction/mod.rs.html | 4 +- .../string_abstraction/state/mod.rs.html | 2 +- .../analysis/vsa_results/mod.rs.html | 20 +- doc/html/src/cwe_checker_lib/checkers.rs.html | 4 +- .../context/bounds_computation.rs.html | 12 +- .../checkers/cwe_119/context/mod.rs.html | 8 +- .../cwe_119/context/param_replacement.rs.html | 8 +- .../cwe_119/context/trait_impls.rs.html | 2 +- .../checkers/cwe_119/mod.rs.html | 40 +- .../checkers/cwe_119/state.rs.html | 6 +- .../checkers/cwe_119/stubs.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_134.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_190.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_215.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_243.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_332.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_337.rs.html | 469 +++++++++++ .../cwe_checker_lib/checkers/cwe_367.rs.html | 2 +- .../checkers/cwe_416/context.rs.html | 8 +- .../checkers/cwe_416/mod.rs.html | 248 +++--- .../checkers/cwe_416/state.rs.html | 460 ++++++++--- .../cwe_checker_lib/checkers/cwe_426.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_467.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_476.rs.html | 10 +- .../checkers/cwe_476/context.rs.html | 66 +- .../checkers/cwe_476/state.rs.html | 24 +- .../checkers/cwe_476/taint.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_560.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_676.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_78.rs.html | 4 +- .../cwe_checker_lib/checkers/cwe_782.rs.html | 2 +- .../cwe_checker_lib/checkers/cwe_789.rs.html | 2 +- .../bitvector.rs.html | 2 +- .../intermediate_representation/blk.rs.html | 2 +- .../intermediate_representation/def.rs.html | 2 +- .../expression.rs.html | 2 +- .../expression/builder.rs.html | 2 +- .../trivial_operation_substitution.rs.html | 2 +- .../intermediate_representation/jmp.rs.html | 2 +- .../intermediate_representation/mod.rs.html | 2 +- .../program.rs.html | 2 +- .../project.rs.html | 22 +- .../block_duplication_normalization.rs.html | 2 +- .../project/propagate_control_flow.rs.html | 2 +- .../runtime_memory_image.rs.html | 2 +- .../intermediate_representation/sub.rs.html | 2 +- .../intermediate_representation/term.rs.html | 12 +- .../term/builder_high_lvl.rs.html | 2 +- .../term/builder_low_lvl.rs.html | 2 +- .../variable.rs.html | 2 +- doc/html/src/cwe_checker_lib/lib.rs.html | 4 +- .../cwe_checker_lib/pcode/expressions.rs.html | 2 +- .../src/cwe_checker_lib/pcode/mod.rs.html | 2 +- .../subregister_substitution/mod.rs.html | 2 +- .../src/cwe_checker_lib/pcode/term.rs.html | 2 +- .../src/cwe_checker_lib/pipeline/mod.rs.html | 4 +- .../cwe_checker_lib/pipeline/results.rs.html | 2 +- .../cwe_checker_lib/utils/arguments.rs.html | 4 +- .../src/cwe_checker_lib/utils/binary.rs.html | 2 +- .../src/cwe_checker_lib/utils/ghidra.rs.html | 2 +- .../cwe_checker_lib/utils/graph_utils.rs.html | 2 +- .../src/cwe_checker_lib/utils/log.rs.html | 4 +- .../src/cwe_checker_lib/utils/mod.rs.html | 2 +- .../utils/symbol_utils.rs.html | 2 +- .../static.files/ayu-614652228113ac93.css | 1 - .../static.files/dark-1097f8e92a01e3cf.css | 1 - .../static.files/light-0f8c037637f9eb3e.css | 1 - .../static.files/main-9dd44ab47b99a0fb.js | 12 + .../static.files/main-f61008743c98d196.js | 7 - .../noscript-13285aec31fa243e.css | 1 - .../noscript-5d8b3c7633ad77ba.css | 1 + .../static.files/rustdoc-9ee3a5e31a2afa3e.css | 10 + .../static.files/rustdoc-ba5701c5741a7b69.css | 8 - .../static.files/search-8fbf244ebcf71464.js | 5 + .../static.files/search-e077946657036a58.js | 1 - ...b45b39.js => settings-74424d7eec62a23e.js} | 4 +- .../settings-7bfb4c59cc6bc502.css | 3 - .../source-script-905937fbbdc8e9ea.js | 1 - .../src-script-3280b574d94e47b4.js | 1 + .../static.files/storage-62ce34ea385b278a.js | 1 - .../static.files/storage-fec3eaa3851e447d.js | 1 + .../clap}/derive/trait.Args.js | 0 .../clap}/derive/trait.CommandFactory.js | 0 .../clap}/derive/trait.FromArgMatches.js | 0 .../clap}/derive/trait.Parser.js | 0 doc/html/trait.impl/core/clone/trait.Clone.js | 4 + doc/html/trait.impl/core/cmp/trait.Eq.js | 4 + doc/html/trait.impl/core/cmp/trait.Ord.js | 3 + .../trait.impl/core/cmp/trait.PartialEq.js | 4 + .../trait.impl/core/cmp/trait.PartialOrd.js | 3 + .../trait.impl/core/convert/trait.From.js | 3 + .../trait.impl/core/default/trait.Default.js | 3 + .../core/fmt/trait.Binary.js | 2 +- doc/html/trait.impl/core/fmt/trait.Debug.js | 6 + doc/html/trait.impl/core/fmt/trait.Display.js | 3 + .../core/fmt/trait.LowerHex.js | 2 +- .../core/fmt/trait.Octal.js | 2 +- .../core/fmt/trait.UpperHex.js | 2 +- doc/html/trait.impl/core/hash/trait.Hash.js | 4 + .../core/iter/traits/accum/trait.Sum.js} | 2 +- .../iter/traits/collect/trait.FromIterator.js | 2 +- doc/html/trait.impl/core/marker/trait.Copy.js | 3 + .../trait.impl/core/marker/trait.Freeze.js | 6 + doc/html/trait.impl/core/marker/trait.Send.js | 6 + .../core/marker/trait.StructuralEq.js | 4 + .../core/marker/trait.StructuralPartialEq.js | 4 + doc/html/trait.impl/core/marker/trait.Sync.js | 6 + .../trait.impl/core/marker/trait.Unpin.js | 6 + .../trait.impl/core/ops/arith/trait.Add.js | 3 + .../core/ops/arith/trait.AddAssign.js | 3 + .../core/ops/arith/trait.Div.js | 2 +- .../core/ops/arith/trait.DivAssign.js | 2 +- .../core/ops/arith/trait.Mul.js | 2 +- .../core/ops/arith/trait.MulAssign.js | 2 +- .../core/ops/arith/trait.Neg.js | 2 +- .../core/ops/arith/trait.Rem.js | 2 +- .../core/ops/arith/trait.RemAssign.js | 2 +- .../trait.impl/core/ops/arith/trait.Sub.js | 3 + .../core/ops/arith/trait.SubAssign.js | 3 + .../core/ops/bit/trait.Not.js | 2 +- .../core/ops/bit/trait.Shl.js | 2 +- .../core/ops/bit/trait.ShlAssign.js | 2 +- .../core/ops/bit/trait.Shr.js | 2 +- .../core/ops/bit/trait.ShrAssign.js | 2 +- .../trait.impl/core/ops/deref/trait.Deref.js | 3 + .../core/ops/deref/trait.DerefMut.js | 2 +- .../core/ops/drop/trait.Drop.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 6 + .../panic/unwind_safe/trait.UnwindSafe.js | 6 + .../domain_map/trait.MapMergeStrategy.js | 0 .../strings/trait.DomainInsertion.js | 0 .../abstract_domain/trait.AbstractDomain.js | 0 .../abstract_domain/trait.HasTop.js | 0 .../abstract_domain/trait.RegisterDomain.js | 0 .../abstract_domain/trait.SizedDomain.js | 0 .../trait.SpecializeByConditional.js | 0 .../abstract_domain/trait.TryToBitvec.js | 0 .../abstract_domain/trait.TryToInterval.js | 0 .../analysis/fixpoint/trait.Context.js | 0 .../trait.Context.js | 0 .../analysis/vsa_results/trait.VsaResult.js | 0 .../bitvector/trait.BitvectorExtended.js | 0 .../trait.impl/serde/de/trait.Deserialize.js | 4 + .../trait.impl/serde/ser/trait.Serialize.js | 4 + .../type.impl/apint/apint/struct.ApInt.js | 3 + .../abstract_domain/struct.DataDomain.js | 3 + .../abstract_domain/struct.IntervalDomain.js | 3 + .../petgraph/graph_impl/type.DiGraph.js | 3 + doc/html/type.impl/std/primitive.fn.js | 3 + 562 files changed, 10300 insertions(+), 5172 deletions(-) delete mode 100644 doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractLocation.html delete mode 100644 doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractMemoryLocation.html create mode 100644 doc/html/cwe_checker_lib/abstract_domain/identifier/location/enum.AbstractLocation.html create mode 100644 doc/html/cwe_checker_lib/abstract_domain/identifier/mem_location/enum.AbstractMemoryLocation.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_337/fn.check_cwe.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_337/index.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_337/sidebar-items.js create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_337/static.CWE_MODULE.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_337/struct.Config.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_337/struct.Context.html delete mode 100644 doc/html/cwe_checker_lib/checkers/cwe_476/enum.Taint.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_476/state/index.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_476/state/sidebar-items.js create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_476/state/struct.State.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_476/taint/index.html create mode 100644 doc/html/cwe_checker_lib/checkers/cwe_476/taint/sidebar-items.js delete mode 100644 doc/html/implementors/core/clone/trait.Clone.js delete mode 100644 doc/html/implementors/core/cmp/trait.Eq.js delete mode 100644 doc/html/implementors/core/cmp/trait.Ord.js delete mode 100644 doc/html/implementors/core/cmp/trait.PartialEq.js delete mode 100644 doc/html/implementors/core/cmp/trait.PartialOrd.js delete mode 100644 doc/html/implementors/core/convert/trait.From.js delete mode 100644 doc/html/implementors/core/default/trait.Default.js delete mode 100644 doc/html/implementors/core/fmt/trait.Debug.js delete mode 100644 doc/html/implementors/core/fmt/trait.Display.js delete mode 100644 doc/html/implementors/core/hash/trait.Hash.js delete mode 100644 doc/html/implementors/core/iter/traits/accum/trait.Sum.js delete mode 100644 doc/html/implementors/core/marker/trait.Copy.js delete mode 100644 doc/html/implementors/core/marker/trait.Freeze.js delete mode 100644 doc/html/implementors/core/marker/trait.Send.js delete mode 100644 doc/html/implementors/core/marker/trait.StructuralEq.js delete mode 100644 doc/html/implementors/core/marker/trait.StructuralPartialEq.js delete mode 100644 doc/html/implementors/core/marker/trait.Sync.js delete mode 100644 doc/html/implementors/core/marker/trait.Unpin.js delete mode 100644 doc/html/implementors/core/ops/arith/trait.Add.js delete mode 100644 doc/html/implementors/core/ops/arith/trait.Sub.js delete mode 100644 doc/html/implementors/core/ops/arith/trait.SubAssign.js delete mode 100644 doc/html/implementors/core/ops/deref/trait.Deref.js delete mode 100644 doc/html/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js delete mode 100644 doc/html/implementors/core/panic/unwind_safe/trait.UnwindSafe.js delete mode 100644 doc/html/implementors/serde/de/trait.Deserialize.js delete mode 100644 doc/html/implementors/serde/ser/trait.Serialize.js delete mode 100644 doc/html/source-files.js create mode 100644 doc/html/src-files.js create mode 100644 doc/html/src/cwe_checker_lib/abstract_domain/identifier/location.rs.html create mode 100644 doc/html/src/cwe_checker_lib/abstract_domain/identifier/mem_location.rs.html rename doc/html/src/cwe_checker_lib/abstract_domain/{identifier.rs.html => identifier/mod.rs.html} (59%) rename doc/html/src/cwe_checker_lib/analysis/function_signature/{context.rs.html => context/mod.rs.html} (82%) rename doc/html/src/cwe_checker_lib/analysis/function_signature/state/{call_handling.rs.html => call_handling/mod.rs.html} (52%) create mode 100644 doc/html/src/cwe_checker_lib/analysis/function_signature/state/memory_handling.rs.html rename doc/html/src/cwe_checker_lib/analysis/function_signature/{state.rs.html => state/mod.rs.html} (76%) create mode 100644 doc/html/src/cwe_checker_lib/checkers/cwe_337.rs.html delete mode 100644 doc/html/static.files/ayu-614652228113ac93.css delete mode 100644 doc/html/static.files/dark-1097f8e92a01e3cf.css delete mode 100644 doc/html/static.files/light-0f8c037637f9eb3e.css create mode 100644 doc/html/static.files/main-9dd44ab47b99a0fb.js delete mode 100644 doc/html/static.files/main-f61008743c98d196.js delete mode 100644 doc/html/static.files/noscript-13285aec31fa243e.css create mode 100644 doc/html/static.files/noscript-5d8b3c7633ad77ba.css create mode 100644 doc/html/static.files/rustdoc-9ee3a5e31a2afa3e.css delete mode 100644 doc/html/static.files/rustdoc-ba5701c5741a7b69.css create mode 100644 doc/html/static.files/search-8fbf244ebcf71464.js delete mode 100644 doc/html/static.files/search-e077946657036a58.js rename doc/html/static.files/{settings-298e1ea74db45b39.js => settings-74424d7eec62a23e.js} (54%) delete mode 100644 doc/html/static.files/settings-7bfb4c59cc6bc502.css delete mode 100644 doc/html/static.files/source-script-905937fbbdc8e9ea.js create mode 100644 doc/html/static.files/src-script-3280b574d94e47b4.js delete mode 100644 doc/html/static.files/storage-62ce34ea385b278a.js create mode 100644 doc/html/static.files/storage-fec3eaa3851e447d.js rename doc/html/{implementors/clap_builder => trait.impl/clap}/derive/trait.Args.js (100%) rename doc/html/{implementors/clap_builder => trait.impl/clap}/derive/trait.CommandFactory.js (100%) rename doc/html/{implementors/clap_builder => trait.impl/clap}/derive/trait.FromArgMatches.js (100%) rename doc/html/{implementors/clap_builder => trait.impl/clap}/derive/trait.Parser.js (100%) create mode 100644 doc/html/trait.impl/core/clone/trait.Clone.js create mode 100644 doc/html/trait.impl/core/cmp/trait.Eq.js create mode 100644 doc/html/trait.impl/core/cmp/trait.Ord.js create mode 100644 doc/html/trait.impl/core/cmp/trait.PartialEq.js create mode 100644 doc/html/trait.impl/core/cmp/trait.PartialOrd.js create mode 100644 doc/html/trait.impl/core/convert/trait.From.js create mode 100644 doc/html/trait.impl/core/default/trait.Default.js rename doc/html/{implementors => trait.impl}/core/fmt/trait.Binary.js (87%) create mode 100644 doc/html/trait.impl/core/fmt/trait.Debug.js create mode 100644 doc/html/trait.impl/core/fmt/trait.Display.js rename doc/html/{implementors => trait.impl}/core/fmt/trait.LowerHex.js (87%) rename doc/html/{implementors => trait.impl}/core/fmt/trait.Octal.js (87%) rename doc/html/{implementors => trait.impl}/core/fmt/trait.UpperHex.js (87%) create mode 100644 doc/html/trait.impl/core/hash/trait.Hash.js rename doc/html/{implementors/core/ops/arith/trait.AddAssign.js => trait.impl/core/iter/traits/accum/trait.Sum.js} (50%) rename doc/html/{implementors => trait.impl}/core/iter/traits/collect/trait.FromIterator.js (78%) create mode 100644 doc/html/trait.impl/core/marker/trait.Copy.js create mode 100644 doc/html/trait.impl/core/marker/trait.Freeze.js create mode 100644 doc/html/trait.impl/core/marker/trait.Send.js create mode 100644 doc/html/trait.impl/core/marker/trait.StructuralEq.js create mode 100644 doc/html/trait.impl/core/marker/trait.StructuralPartialEq.js create mode 100644 doc/html/trait.impl/core/marker/trait.Sync.js create mode 100644 doc/html/trait.impl/core/marker/trait.Unpin.js create mode 100644 doc/html/trait.impl/core/ops/arith/trait.Add.js create mode 100644 doc/html/trait.impl/core/ops/arith/trait.AddAssign.js rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.Div.js (73%) rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.DivAssign.js (78%) rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.Mul.js (73%) rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.MulAssign.js (78%) rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.Neg.js (51%) rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.Rem.js (73%) rename doc/html/{implementors => trait.impl}/core/ops/arith/trait.RemAssign.js (78%) create mode 100644 doc/html/trait.impl/core/ops/arith/trait.Sub.js create mode 100644 doc/html/trait.impl/core/ops/arith/trait.SubAssign.js rename doc/html/{implementors => trait.impl}/core/ops/bit/trait.Not.js (87%) rename doc/html/{implementors => trait.impl}/core/ops/bit/trait.Shl.js (72%) rename doc/html/{implementors => trait.impl}/core/ops/bit/trait.ShlAssign.js (78%) rename doc/html/{implementors => trait.impl}/core/ops/bit/trait.Shr.js (72%) rename doc/html/{implementors => trait.impl}/core/ops/bit/trait.ShrAssign.js (78%) create mode 100644 doc/html/trait.impl/core/ops/deref/trait.Deref.js rename doc/html/{implementors => trait.impl}/core/ops/deref/trait.DerefMut.js (81%) rename doc/html/{implementors => trait.impl}/core/ops/drop/trait.Drop.js (86%) create mode 100644 doc/html/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js create mode 100644 doc/html/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/domain_map/trait.MapMergeStrategy.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/strings/trait.DomainInsertion.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.AbstractDomain.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.HasTop.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.RegisterDomain.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.SizedDomain.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.TryToBitvec.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/abstract_domain/trait.TryToInterval.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/analysis/fixpoint/trait.Context.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/analysis/vsa_results/trait.VsaResult.js (100%) rename doc/html/{implementors => trait.impl}/cwe_checker_lib/intermediate_representation/bitvector/trait.BitvectorExtended.js (100%) create mode 100644 doc/html/trait.impl/serde/de/trait.Deserialize.js create mode 100644 doc/html/trait.impl/serde/ser/trait.Serialize.js create mode 100644 doc/html/type.impl/apint/apint/struct.ApInt.js create mode 100644 doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.DataDomain.js create mode 100644 doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.IntervalDomain.js create mode 100644 doc/html/type.impl/petgraph/graph_impl/type.DiGraph.js create mode 100644 doc/html/type.impl/std/primitive.fn.js diff --git a/doc/html/acceptance_tests_ghidra/all.html b/doc/html/acceptance_tests_ghidra/all.html index 2d53f4931..a66b80111 100644 --- a/doc/html/acceptance_tests_ghidra/all.html +++ b/doc/html/acceptance_tests_ghidra/all.html @@ -1 +1 @@ -List of all items in this crate
\ No newline at end of file +List of all items in this crate
\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/constant.ARCHITECTURES.html b/doc/html/acceptance_tests_ghidra/constant.ARCHITECTURES.html index 2dd05d553..ae88b3c1e 100644 --- a/doc/html/acceptance_tests_ghidra/constant.ARCHITECTURES.html +++ b/doc/html/acceptance_tests_ghidra/constant.ARCHITECTURES.html @@ -1,2 +1,2 @@ -ARCHITECTURES in acceptance_tests_ghidra - Rust
pub const ARCHITECTURES: &[&str];
Expand description

CPU architectures contained in the test samples

+ARCHITECTURES in acceptance_tests_ghidra - Rust
pub const ARCHITECTURES: &[&str];
Expand description

CPU architectures contained in the test samples

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/constant.COMPILERS.html b/doc/html/acceptance_tests_ghidra/constant.COMPILERS.html index a4c7c0405..c2b2a81ac 100644 --- a/doc/html/acceptance_tests_ghidra/constant.COMPILERS.html +++ b/doc/html/acceptance_tests_ghidra/constant.COMPILERS.html @@ -1,2 +1,2 @@ -COMPILERS in acceptance_tests_ghidra - Rust
pub const COMPILERS: &[&str];
Expand description

Compilers contained in the test samples

+COMPILERS in acceptance_tests_ghidra - Rust
pub const COMPILERS: &[&str];
Expand description

Compilers contained in the test samples

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/constant.WINDOWS_ARCHITECTURES.html b/doc/html/acceptance_tests_ghidra/constant.WINDOWS_ARCHITECTURES.html index 883292903..18dee220d 100644 --- a/doc/html/acceptance_tests_ghidra/constant.WINDOWS_ARCHITECTURES.html +++ b/doc/html/acceptance_tests_ghidra/constant.WINDOWS_ARCHITECTURES.html @@ -1,2 +1,2 @@ -WINDOWS_ARCHITECTURES in acceptance_tests_ghidra - Rust
pub const WINDOWS_ARCHITECTURES: &[&str];
Expand description

CPU architectures for the Windows-based test samples

+WINDOWS_ARCHITECTURES in acceptance_tests_ghidra - Rust
pub const WINDOWS_ARCHITECTURES: &[&str];
Expand description

CPU architectures for the Windows-based test samples

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/constant.WINDOWS_COMPILERS.html b/doc/html/acceptance_tests_ghidra/constant.WINDOWS_COMPILERS.html index 1c78d2c41..eaa485866 100644 --- a/doc/html/acceptance_tests_ghidra/constant.WINDOWS_COMPILERS.html +++ b/doc/html/acceptance_tests_ghidra/constant.WINDOWS_COMPILERS.html @@ -1,2 +1,2 @@ -WINDOWS_COMPILERS in acceptance_tests_ghidra - Rust
pub const WINDOWS_COMPILERS: &[&str];
Expand description

Compilers used for the Windows-based test samples

+WINDOWS_COMPILERS in acceptance_tests_ghidra - Rust
pub const WINDOWS_COMPILERS: &[&str];
Expand description

Compilers used for the Windows-based test samples

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.all_test_cases.html b/doc/html/acceptance_tests_ghidra/fn.all_test_cases.html index 28d33ed94..e8de1cbeb 100644 --- a/doc/html/acceptance_tests_ghidra/fn.all_test_cases.html +++ b/doc/html/acceptance_tests_ghidra/fn.all_test_cases.html @@ -1,5 +1,5 @@ -all_test_cases in acceptance_tests_ghidra - Rust
pub fn all_test_cases(
-    cwe: &'static str,
-    check_name: &'static str
-) -> Vec<CweTestCase>
Expand description

Return a list of all possible test cases (Linux and Windows) for the given CWE.

+all_test_cases in acceptance_tests_ghidra - Rust
pub fn all_test_cases(
+    cwe: &'static str,
+    check_name: &'static str
+) -> Vec<CweTestCase>
Expand description

Return a list of all possible test cases (Linux and Windows) for the given CWE.

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.linux_test_cases.html b/doc/html/acceptance_tests_ghidra/fn.linux_test_cases.html index ed1ca2a18..413702b9e 100644 --- a/doc/html/acceptance_tests_ghidra/fn.linux_test_cases.html +++ b/doc/html/acceptance_tests_ghidra/fn.linux_test_cases.html @@ -1,5 +1,5 @@ -linux_test_cases in acceptance_tests_ghidra - Rust
pub fn linux_test_cases(
-    cwe: &'static str,
-    check_name: &'static str
-) -> Vec<CweTestCase>
Expand description

Return a list with all possible Linux test cases for the given CWE.

+linux_test_cases in acceptance_tests_ghidra - Rust
pub fn linux_test_cases(
+    cwe: &'static str,
+    check_name: &'static str
+) -> Vec<CweTestCase>
Expand description

Return a list with all possible Linux test cases for the given CWE.

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.mark_architecture_skipped.html b/doc/html/acceptance_tests_ghidra/fn.mark_architecture_skipped.html index 776c52def..b7f66c72e 100644 --- a/doc/html/acceptance_tests_ghidra/fn.mark_architecture_skipped.html +++ b/doc/html/acceptance_tests_ghidra/fn.mark_architecture_skipped.html @@ -1,2 +1,2 @@ -mark_architecture_skipped in acceptance_tests_ghidra - Rust
pub fn mark_architecture_skipped(test_cases: &mut [CweTestCase], arch: &str)
Expand description

Mark test cases using the given CPU architecture as skipped.

+mark_architecture_skipped in acceptance_tests_ghidra - Rust
pub fn mark_architecture_skipped(test_cases: &mut [CweTestCase], arch: &str)
Expand description

Mark test cases using the given CPU architecture as skipped.

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.mark_compiler_skipped.html b/doc/html/acceptance_tests_ghidra/fn.mark_compiler_skipped.html index 96ba5c789..afd152abc 100644 --- a/doc/html/acceptance_tests_ghidra/fn.mark_compiler_skipped.html +++ b/doc/html/acceptance_tests_ghidra/fn.mark_compiler_skipped.html @@ -1,2 +1,2 @@ -mark_compiler_skipped in acceptance_tests_ghidra - Rust
pub fn mark_compiler_skipped(test_cases: &mut [CweTestCase], comp: &str)
Expand description

Mark test cases using the given compiler as skipped.

+mark_compiler_skipped in acceptance_tests_ghidra - Rust
pub fn mark_compiler_skipped(test_cases: &mut [CweTestCase], comp: &str)
Expand description

Mark test cases using the given compiler as skipped.

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.mark_skipped.html b/doc/html/acceptance_tests_ghidra/fn.mark_skipped.html index 48b6f9c57..cf1f30487 100644 --- a/doc/html/acceptance_tests_ghidra/fn.mark_skipped.html +++ b/doc/html/acceptance_tests_ghidra/fn.mark_skipped.html @@ -1,2 +1,2 @@ -mark_skipped in acceptance_tests_ghidra - Rust
pub fn mark_skipped(test_cases: &mut [CweTestCase], value1: &str, value2: &str)
Expand description

Mark test cases using the given CPU architecture + compiler combination as skipped.

+mark_skipped in acceptance_tests_ghidra - Rust
pub fn mark_skipped(test_cases: &mut [CweTestCase], value1: &str, value2: &str)
Expand description

Mark test cases using the given CPU architecture + compiler combination as skipped.

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.new_test_cases.html b/doc/html/acceptance_tests_ghidra/fn.new_test_cases.html index 330d3dfdf..ac39739a1 100644 --- a/doc/html/acceptance_tests_ghidra/fn.new_test_cases.html +++ b/doc/html/acceptance_tests_ghidra/fn.new_test_cases.html @@ -1,7 +1,7 @@ -new_test_cases in acceptance_tests_ghidra - Rust
pub fn new_test_cases(
-    cwe: &'static str,
-    architectures: &[&'static str],
-    compilers: &[&'static str],
-    check_name: &'static str
-) -> Vec<CweTestCase>
Expand description

Generate test cases for all combinations of CPU architecture and compiler given.

+new_test_cases in acceptance_tests_ghidra - Rust
pub fn new_test_cases(
+    cwe: &'static str,
+    architectures: &[&'static str],
+    compilers: &[&'static str],
+    check_name: &'static str
+) -> Vec<CweTestCase>
Expand description

Generate test cases for all combinations of CPU architecture and compiler given.

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.print_errors.html b/doc/html/acceptance_tests_ghidra/fn.print_errors.html index c8be9dc42..63538a73c 100644 --- a/doc/html/acceptance_tests_ghidra/fn.print_errors.html +++ b/doc/html/acceptance_tests_ghidra/fn.print_errors.html @@ -1,3 +1,3 @@ -print_errors in acceptance_tests_ghidra - Rust
pub fn print_errors(error_log: Vec<(String, String)>)
Expand description

Print the error messages of failed checks. +print_errors in acceptance_tests_ghidra - Rust

pub fn print_errors(error_log: Vec<(String, String)>)
Expand description

Print the error messages of failed checks. The error_log tuples are of the form (check_filename, error_message).

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/fn.windows_test_cases.html b/doc/html/acceptance_tests_ghidra/fn.windows_test_cases.html index 3897738b6..f769b5e30 100644 --- a/doc/html/acceptance_tests_ghidra/fn.windows_test_cases.html +++ b/doc/html/acceptance_tests_ghidra/fn.windows_test_cases.html @@ -1,5 +1,5 @@ -windows_test_cases in acceptance_tests_ghidra - Rust
pub fn windows_test_cases(
-    cwe: &'static str,
-    check_name: &'static str
-) -> Vec<CweTestCase>
Expand description

Return a list with all possible Windows test cases for the given CWE

+windows_test_cases in acceptance_tests_ghidra - Rust
pub fn windows_test_cases(
+    cwe: &'static str,
+    check_name: &'static str
+) -> Vec<CweTestCase>
Expand description

Return a list with all possible Windows test cases for the given CWE

\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/index.html b/doc/html/acceptance_tests_ghidra/index.html index e9d3a3ab8..ef5a8e6d9 100644 --- a/doc/html/acceptance_tests_ghidra/index.html +++ b/doc/html/acceptance_tests_ghidra/index.html @@ -1,3 +1,4 @@ -acceptance_tests_ghidra - Rust
Expand description

This crate contains acceptance tests using Ghidra as a backend for the cwe_checker.

+acceptance_tests_ghidra - Rust
Expand description

This crate contains acceptance tests using Ghidra as a backend for the cwe_checker.

Structs

  • A test case containing the necessary information to run an acceptance test.

Constants

Functions

  • Return a list of all possible test cases (Linux and Windows) for the given CWE.
  • Return a list with all possible Linux test cases for the given CWE.
  • Mark test cases using the given CPU architecture as skipped.
  • Mark test cases using the given compiler as skipped.
  • Mark test cases using the given CPU architecture + compiler combination as skipped.
  • Generate test cases for all combinations of CPU architecture and compiler given.
  • Print the error messages of failed checks. The error_log tuples are of the form (check_filename, error_message).
  • Return a list with all possible Windows test cases for the given CWE
\ No newline at end of file diff --git a/doc/html/acceptance_tests_ghidra/struct.CweTestCase.html b/doc/html/acceptance_tests_ghidra/struct.CweTestCase.html index 4a522fec3..207b7474b 100644 --- a/doc/html/acceptance_tests_ghidra/struct.CweTestCase.html +++ b/doc/html/acceptance_tests_ghidra/struct.CweTestCase.html @@ -1,23 +1,23 @@ -CweTestCase in acceptance_tests_ghidra - Rust
pub struct CweTestCase { /* private fields */ }
Expand description

A test case containing the necessary information to run an acceptance test.

-

Implementations§

source§

impl CweTestCase

source

pub fn run_test( +CweTestCase in acceptance_tests_ghidra - Rust
pub struct CweTestCase { /* private fields */ }
Expand description

A test case containing the necessary information to run an acceptance test.

+

Implementations§

source§

impl CweTestCase

source

pub fn run_test( &self, - search_string: &str, - num_expected_occurences: usize -) -> Result<(), String>

Run the test case and print to the shell, whether the test case succeeded or not. + search_string: &str, + num_expected_occurences: usize +) -> Result<(), String>

Run the test case and print to the shell, whether the test case succeeded or not. Returns stdout + stderr of the test execution on failure.

-

Trait Implementations§

source§

impl Clone for CweTestCase

source§

fn clone(&self) -> CweTestCase

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CweTestCase

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CweTestCase

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<CweTestCase> for CweTestCase

source§

fn eq(&self, other: &CweTestCase) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for CweTestCase

source§

impl StructuralEq for CweTestCase

source§

impl StructuralPartialEq for CweTestCase

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Clone for CweTestCase

source§

fn clone(&self) -> CweTestCase

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CweTestCase

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CweTestCase

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for CweTestCase

source§

fn eq(&self, other: &CweTestCase) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for CweTestCase

source§

impl StructuralEq for CweTestCase

source§

impl StructuralPartialEq for CweTestCase

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/doc/html/cwe_checker/all.html b/doc/html/cwe_checker/all.html index 1fa2d7879..00bdf0384 100644 --- a/doc/html/cwe_checker/all.html +++ b/doc/html/cwe_checker/all.html @@ -1 +1 @@ -List of all items in this crate
\ No newline at end of file +List of all items in this crate
\ No newline at end of file diff --git a/doc/html/cwe_checker/fn.check_file_existence.html b/doc/html/cwe_checker/fn.check_file_existence.html index 9e0d593df..e4e07ff1b 100644 --- a/doc/html/cwe_checker/fn.check_file_existence.html +++ b/doc/html/cwe_checker/fn.check_file_existence.html @@ -1,2 +1,2 @@ -check_file_existence in cwe_checker - Rust
pub(crate) fn check_file_existence(file_path: &str) -> Result<String, String>
Expand description

Return Ok(file_path) only if file_path points to an existing file.

+check_file_existence in cwe_checker - Rust
pub(crate) fn check_file_existence(file_path: &str) -> Result<String, String>
Expand description

Return Ok(file_path) only if file_path points to an existing file.

\ No newline at end of file diff --git a/doc/html/cwe_checker/fn.filter_modules_for_partial_run.html b/doc/html/cwe_checker/fn.filter_modules_for_partial_run.html index 2afeaac12..2356bbd84 100644 --- a/doc/html/cwe_checker/fn.filter_modules_for_partial_run.html +++ b/doc/html/cwe_checker/fn.filter_modules_for_partial_run.html @@ -1,6 +1,6 @@ -filter_modules_for_partial_run in cwe_checker - Rust
pub(crate) fn filter_modules_for_partial_run(
-    modules: &mut Vec<&CweModule>,
-    partial_param: &str
+filter_modules_for_partial_run in cwe_checker - Rust
pub(crate) fn filter_modules_for_partial_run(
+    modules: &mut Vec<&CweModule>,
+    partial_param: &str
 )
Expand description

Only keep the modules specified by the --partial parameter in the modules list. The parameter is a comma-separated list of module names, e.g. ‘CWE332,CWE476,CWE782’.

\ No newline at end of file diff --git a/doc/html/cwe_checker/fn.main.html b/doc/html/cwe_checker/fn.main.html index c628b179f..66c9d50a3 100644 --- a/doc/html/cwe_checker/fn.main.html +++ b/doc/html/cwe_checker/fn.main.html @@ -1 +1 @@ -main in cwe_checker - Rust

Function cwe_checker::main

source ·
pub(crate) fn main() -> Result<(), Error>
\ No newline at end of file +main in cwe_checker - Rust

Function cwe_checker::main

source ·
pub(crate) fn main() -> Result<(), Error>
\ No newline at end of file diff --git a/doc/html/cwe_checker/fn.run_with_ghidra.html b/doc/html/cwe_checker/fn.run_with_ghidra.html index 679b04ee4..bbef36c11 100644 --- a/doc/html/cwe_checker/fn.run_with_ghidra.html +++ b/doc/html/cwe_checker/fn.run_with_ghidra.html @@ -1,2 +1,2 @@ -run_with_ghidra in cwe_checker - Rust
pub(crate) fn run_with_ghidra(args: &CmdlineArgs) -> Result<(), Error>
Expand description

Run the cwe_checker with Ghidra as its backend.

+run_with_ghidra in cwe_checker - Rust
pub(crate) fn run_with_ghidra(args: &CmdlineArgs) -> Result<(), Error>
Expand description

Run the cwe_checker with Ghidra as its backend.

\ No newline at end of file diff --git a/doc/html/cwe_checker/index.html b/doc/html/cwe_checker/index.html index 52bc23562..ebf1459cb 100644 --- a/doc/html/cwe_checker/index.html +++ b/doc/html/cwe_checker/index.html @@ -1,4 +1,5 @@ -cwe_checker - Rust

Crate cwe_checker

source ·
Expand description

This crate defines the command line interface for the cwe_checker. +cwe_checker - Rust

Crate cwe_checker

source ·
Expand description

This crate defines the command line interface for the cwe_checker. General documentation about the cwe_checker is contained in the cwe_checker_lib crate.

Structs

  • Find vulnerable patterns in binary executables

Functions

  • Return Ok(file_path) only if file_path points to an existing file.
  • Only keep the modules specified by the --partial parameter in the modules list. The parameter is a comma-separated list of module names, e.g. ‘CWE332,CWE476,CWE782’.
  • main 🔒
  • Run the cwe_checker with Ghidra as its backend.
\ No newline at end of file diff --git a/doc/html/cwe_checker/struct.CmdlineArgs.html b/doc/html/cwe_checker/struct.CmdlineArgs.html index c353c3f04..afb506d52 100644 --- a/doc/html/cwe_checker/struct.CmdlineArgs.html +++ b/doc/html/cwe_checker/struct.CmdlineArgs.html @@ -1,56 +1,56 @@ -CmdlineArgs in cwe_checker - Rust
pub(crate) struct CmdlineArgs {
-    pub(crate) binary: Option<String>,
-    pub(crate) config: Option<String>,
-    pub(crate) out: Option<String>,
-    pub(crate) partial: Option<String>,
-    pub(crate) json: bool,
-    pub(crate) quiet: bool,
-    pub(crate) verbose: bool,
-    pub(crate) statistics: bool,
-    pub(crate) bare_metal_config: Option<String>,
-    pub(crate) module_versions: bool,
-    pub(crate) debug: bool,
+CmdlineArgs in cwe_checker - Rust
pub(crate) struct CmdlineArgs {
+    pub(crate) binary: Option<String>,
+    pub(crate) config: Option<String>,
+    pub(crate) out: Option<String>,
+    pub(crate) partial: Option<String>,
+    pub(crate) json: bool,
+    pub(crate) quiet: bool,
+    pub(crate) verbose: bool,
+    pub(crate) statistics: bool,
+    pub(crate) bare_metal_config: Option<String>,
+    pub(crate) module_versions: bool,
+    pub(crate) debug: bool,
 }
Expand description

Find vulnerable patterns in binary executables

-

Fields§

§binary: Option<String>

The path to the binary.

-
§config: Option<String>

Path to a custom configuration file to use instead of the standard one.

-
§out: Option<String>

Write the results to a file instead of stdout. +

Fields§

§binary: Option<String>

The path to the binary.

+
§config: Option<String>

Path to a custom configuration file to use instead of the standard one.

+
§out: Option<String>

Write the results to a file instead of stdout. This only affects CWE warnings. Log messages are still printed to stdout.

-
§partial: Option<String>

Specify a specific set of checks to be run as a comma separated list, e.g. ‘CWE332,CWE476,CWE782’.

+
§partial: Option<String>

Specify a specific set of checks to be run as a comma separated list, e.g. ‘CWE332,CWE476,CWE782’.

Use the “–module-versions” command line option to get a list of all valid check names.

-
§json: bool

Generate JSON output.

-
§quiet: bool

Do not print log messages. This prevents polluting stdout for json output.

-
§verbose: bool

Print additional debug log messages.

-
§statistics: bool

Include various statistics in the log messages. +

§json: bool

Generate JSON output.

+
§quiet: bool

Do not print log messages. This prevents polluting stdout for json output.

+
§verbose: bool

Print additional debug log messages.

+
§statistics: bool

Include various statistics in the log messages. This can be helpful for assessing the analysis quality for the input binary.

-
§bare_metal_config: Option<String>

Path to a configuration file for analysis of bare metal binaries.

+
§bare_metal_config: Option<String>

Path to a configuration file for analysis of bare metal binaries.

If this option is set then the input binary is treated as a bare metal binary regardless of its format.

-
§module_versions: bool

Prints out the version numbers of all known modules.

-
§debug: bool

Output for debugging purposes. +

§module_versions: bool

Prints out the version numbers of all known modules.

+
§debug: bool

Output for debugging purposes. The current behavior of this flag is unstable and subject to change.

-

Trait Implementations§

source§

impl Args for CmdlineArgs

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl CommandFactory for CmdlineArgs

source§

fn command<'b>() -> Command

Build a [Command] that can instantiate Self. Read more
source§

fn command_for_update<'b>() -> Command

Build a [Command] that can update self. Read more
source§

impl Debug for CmdlineArgs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for CmdlineArgs

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( +

Trait Implementations§

source§

impl Args for CmdlineArgs

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl CommandFactory for CmdlineArgs

source§

fn command<'b>() -> Command

Build a [Command] that can instantiate Self. Read more
source§

fn command_for_update<'b>() -> Command

Build a [Command] that can update self. Read more
source§

impl Debug for CmdlineArgs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for CmdlineArgs

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches -) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches -) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches -) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Parser for CmdlineArgs

§

fn parse() -> Self

Parse from std::env::args_os(), exit on error
§

fn try_parse() -> Result<Self, Error<RichFormatter>>

Parse from std::env::args_os(), return Err on error.
§

fn parse_from<I, T>(itr: I) -> Selfwhere - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Parse from iterator, exit on error
§

fn try_parse_from<I, T>(itr: I) -> Result<Self, Error<RichFormatter>>where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Parse from iterator, return Err on error.
§

fn update_from<I, T>(&mut self, itr: I)where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Update from iterator, exit on error
§

fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error<RichFormatter>>where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Update from iterator, return Err on error.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+) -> Result<(), Error>
Assign values from ArgMatches to self.
source§

impl Parser for CmdlineArgs

§

fn parse() -> Self

Parse from std::env::args_os(), exit on error
§

fn try_parse() -> Result<Self, Error>

Parse from std::env::args_os(), return Err on error.
§

fn parse_from<I, T>(itr: I) -> Selfwhere + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Parse from iterator, exit on error
§

fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Parse from iterator, return Err on error.
§

fn update_from<I, T>(&mut self, itr: I)where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Update from iterator, exit on error
§

fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error>where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Update from iterator, return Err on error.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/doc/html/cwe_checker_install/all.html b/doc/html/cwe_checker_install/all.html index 58201e521..cfa04cc89 100644 --- a/doc/html/cwe_checker_install/all.html +++ b/doc/html/cwe_checker_install/all.html @@ -1 +1 @@ -List of all items in this crate
\ No newline at end of file +List of all items in this crate
\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.copy_config_json.html b/doc/html/cwe_checker_install/fn.copy_config_json.html index 0622e8e64..3f96c078e 100644 --- a/doc/html/cwe_checker_install/fn.copy_config_json.html +++ b/doc/html/cwe_checker_install/fn.copy_config_json.html @@ -1,2 +1,2 @@ -copy_config_json in cwe_checker_install - Rust
pub(crate) fn copy_config_json(location: &Path) -> Result<()>
Expand description

Copies src/config.json to specified location

+copy_config_json in cwe_checker_install - Rust
pub(crate) fn copy_config_json(location: &Path) -> Result<()>
Expand description

Copies src/config.json to specified location

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.copy_dir_all.html b/doc/html/cwe_checker_install/fn.copy_dir_all.html index d358ff56b..deb7ad0da 100644 --- a/doc/html/cwe_checker_install/fn.copy_dir_all.html +++ b/doc/html/cwe_checker_install/fn.copy_dir_all.html @@ -1,5 +1,5 @@ -copy_dir_all in cwe_checker_install - Rust
pub(crate) fn copy_dir_all(
-    src: impl AsRef<Path>,
-    dst: impl AsRef<Path>
-) -> Result<()>
Expand description

Recursive copy of files and directories.

+copy_dir_all in cwe_checker_install - Rust
pub(crate) fn copy_dir_all(
+    src: impl AsRef<Path>,
+    dst: impl AsRef<Path>
+) -> Result<()>
Expand description

Recursive copy of files and directories.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.copy_ghidra_plugin.html b/doc/html/cwe_checker_install/fn.copy_ghidra_plugin.html index 139c54fb6..9938a24e2 100644 --- a/doc/html/cwe_checker_install/fn.copy_ghidra_plugin.html +++ b/doc/html/cwe_checker_install/fn.copy_ghidra_plugin.html @@ -1,2 +1,2 @@ -copy_ghidra_plugin in cwe_checker_install - Rust
pub(crate) fn copy_ghidra_plugin(target: &Path) -> Result<()>
Expand description

Copy src/ghidra to provided location.

+copy_ghidra_plugin in cwe_checker_install - Rust
pub(crate) fn copy_ghidra_plugin(target: &Path) -> Result<()>
Expand description

Copy src/ghidra to provided location.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.create_ghidra_json.html b/doc/html/cwe_checker_install/fn.create_ghidra_json.html index cc0b0770c..e49bced74 100644 --- a/doc/html/cwe_checker_install/fn.create_ghidra_json.html +++ b/doc/html/cwe_checker_install/fn.create_ghidra_json.html @@ -1,5 +1,5 @@ -create_ghidra_json in cwe_checker_install - Rust
pub(crate) fn create_ghidra_json(
-    location: &Path,
-    ghidra_location: PathBuf
-) -> Result<()>
Expand description

Creates ghidra.json for a Ghidra location at provided locaton.

+create_ghidra_json in cwe_checker_install - Rust
pub(crate) fn create_ghidra_json(
+    location: &Path,
+    ghidra_location: PathBuf
+) -> Result<()>
Expand description

Creates ghidra.json for a Ghidra location at provided locaton.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.find_ghidra.html b/doc/html/cwe_checker_install/fn.find_ghidra.html index 26adf144a..212e9a6a4 100644 --- a/doc/html/cwe_checker_install/fn.find_ghidra.html +++ b/doc/html/cwe_checker_install/fn.find_ghidra.html @@ -1,2 +1,2 @@ -find_ghidra in cwe_checker_install - Rust
pub(crate) fn find_ghidra() -> Result<PathBuf>
Expand description

Returns None if Ghidra were not found. Else returns path to Ghidra, which might be user selected.

+find_ghidra in cwe_checker_install - Rust
pub(crate) fn find_ghidra() -> Result<PathBuf>
Expand description

Returns None if Ghidra were not found. Else returns path to Ghidra, which might be user selected.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.get_search_locations.html b/doc/html/cwe_checker_install/fn.get_search_locations.html index ccab33a21..785c07747 100644 --- a/doc/html/cwe_checker_install/fn.get_search_locations.html +++ b/doc/html/cwe_checker_install/fn.get_search_locations.html @@ -1,2 +1,2 @@ -get_search_locations in cwe_checker_install - Rust
pub(crate) fn get_search_locations() -> Vec<PathBuf>
Expand description

Returns vector of os-specific locations

+get_search_locations in cwe_checker_install - Rust
pub(crate) fn get_search_locations() -> Vec<PathBuf>
Expand description

Returns vector of os-specific locations

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.get_user_choice.html b/doc/html/cwe_checker_install/fn.get_user_choice.html index 9b6ee6ed3..27664bf7d 100644 --- a/doc/html/cwe_checker_install/fn.get_user_choice.html +++ b/doc/html/cwe_checker_install/fn.get_user_choice.html @@ -1,4 +1,4 @@ -get_user_choice in cwe_checker_install - Rust
pub(crate) fn get_user_choice(
-    ghidra_locations: Vec<&PathBuf>
-) -> Result<PathBuf>
Expand description

Determines Ghidra versions and provides selection interface for the user.

+get_user_choice in cwe_checker_install - Rust
pub(crate) fn get_user_choice(
+    ghidra_locations: Vec<&PathBuf>
+) -> Result<PathBuf>
Expand description

Determines Ghidra versions and provides selection interface for the user.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.install_cwe_checker.html b/doc/html/cwe_checker_install/fn.install_cwe_checker.html index d4a9e067a..74088ce5b 100644 --- a/doc/html/cwe_checker_install/fn.install_cwe_checker.html +++ b/doc/html/cwe_checker_install/fn.install_cwe_checker.html @@ -1,2 +1,2 @@ -install_cwe_checker in cwe_checker_install - Rust
pub(crate) fn install_cwe_checker() -> Result<()>
Expand description

Runs Cargo install to install cwe_checker.

+install_cwe_checker in cwe_checker_install - Rust
pub(crate) fn install_cwe_checker() -> Result<()>
Expand description

Runs Cargo install to install cwe_checker.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.is_good_ghidra_location.html b/doc/html/cwe_checker_install/fn.is_good_ghidra_location.html index 9715102f8..d454469d2 100644 --- a/doc/html/cwe_checker_install/fn.is_good_ghidra_location.html +++ b/doc/html/cwe_checker_install/fn.is_good_ghidra_location.html @@ -1,2 +1,2 @@ -is_good_ghidra_location in cwe_checker_install - Rust
pub(crate) fn is_good_ghidra_location(loc: &Path) -> bool
Expand description

Determines if a path is a ghidra installation

+is_good_ghidra_location in cwe_checker_install - Rust
pub(crate) fn is_good_ghidra_location(loc: &Path) -> bool
Expand description

Determines if a path is a ghidra installation

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.is_hidden.html b/doc/html/cwe_checker_install/fn.is_hidden.html index 7576e94f0..f6fd55460 100644 --- a/doc/html/cwe_checker_install/fn.is_hidden.html +++ b/doc/html/cwe_checker_install/fn.is_hidden.html @@ -1,2 +1,2 @@ -is_hidden in cwe_checker_install - Rust
pub(crate) fn is_hidden(path: &DirEntry) -> bool
Expand description

check whether a path starts with “.”, indicating a hidden file or folder on Linux.

+is_hidden in cwe_checker_install - Rust
pub(crate) fn is_hidden(path: &DirEntry) -> bool
Expand description

check whether a path starts with “.”, indicating a hidden file or folder on Linux.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.main.html b/doc/html/cwe_checker_install/fn.main.html index 3b55280e5..0d9b33b25 100644 --- a/doc/html/cwe_checker_install/fn.main.html +++ b/doc/html/cwe_checker_install/fn.main.html @@ -1 +1 @@ -main in cwe_checker_install - Rust

Function cwe_checker_install::main

source ·
pub(crate) fn main() -> Result<()>
\ No newline at end of file +main in cwe_checker_install - Rust

Function cwe_checker_install::main

source ·
pub(crate) fn main() -> Result<()>
\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.search_for_ghidrarun.html b/doc/html/cwe_checker_install/fn.search_for_ghidrarun.html index ad8941b92..0c2a3f79f 100644 --- a/doc/html/cwe_checker_install/fn.search_for_ghidrarun.html +++ b/doc/html/cwe_checker_install/fn.search_for_ghidrarun.html @@ -1,2 +1,2 @@ -search_for_ghidrarun in cwe_checker_install - Rust
pub(crate) fn search_for_ghidrarun(entry_path: &Path) -> Vec<PathBuf>
Expand description

Searches for a file containing “ghidraRun” at provided path recursively.

+search_for_ghidrarun in cwe_checker_install - Rust
pub(crate) fn search_for_ghidrarun(entry_path: &Path) -> Vec<PathBuf>
Expand description

Searches for a file containing “ghidraRun” at provided path recursively.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.select_ghidra_version.html b/doc/html/cwe_checker_install/fn.select_ghidra_version.html index 265ff1634..c1b7c8e89 100644 --- a/doc/html/cwe_checker_install/fn.select_ghidra_version.html +++ b/doc/html/cwe_checker_install/fn.select_ghidra_version.html @@ -1,4 +1,4 @@ -select_ghidra_version in cwe_checker_install - Rust
pub(crate) fn select_ghidra_version(
-    ghidra_locations: Vec<PathBuf>
-) -> Result<PathBuf>
Expand description

Determines Ghidra versions and provides selection interface for the user.

+select_ghidra_version in cwe_checker_install - Rust
pub(crate) fn select_ghidra_version(
+    ghidra_locations: Vec<PathBuf>
+) -> Result<PathBuf>
Expand description

Determines Ghidra versions and provides selection interface for the user.

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/fn.uninstall.html b/doc/html/cwe_checker_install/fn.uninstall.html index d9f3487ac..f8bf46880 100644 --- a/doc/html/cwe_checker_install/fn.uninstall.html +++ b/doc/html/cwe_checker_install/fn.uninstall.html @@ -1,2 +1,2 @@ -uninstall in cwe_checker_install - Rust
pub(crate) fn uninstall(conf_dir: &Path, data_dir: &Path) -> Result<()>
Expand description

Removes provided locations and uninstalls cwe_checker via cargo

+uninstall in cwe_checker_install - Rust
pub(crate) fn uninstall(conf_dir: &Path, data_dir: &Path) -> Result<()>
Expand description

Removes provided locations and uninstalls cwe_checker via cargo

\ No newline at end of file diff --git a/doc/html/cwe_checker_install/index.html b/doc/html/cwe_checker_install/index.html index ef887cf54..e15ec07b5 100644 --- a/doc/html/cwe_checker_install/index.html +++ b/doc/html/cwe_checker_install/index.html @@ -1,3 +1,4 @@ -cwe_checker_install - Rust
Expand description

This crate automates the installation of cwe_checker. +cwe_checker_install - Rust

Expand description

This crate automates the installation of cwe_checker. It creates config files, copies the Ghida-Plugin and can search for a Ghidra installation at commonly used locations.

Structs

Functions

  • Copies src/config.json to specified location
  • Recursive copy of files and directories.
  • Copy src/ghidra to provided location.
  • Creates ghidra.json for a Ghidra location at provided locaton.
  • Returns None if Ghidra were not found. Else returns path to Ghidra, which might be user selected.
  • Returns vector of os-specific locations
  • Determines Ghidra versions and provides selection interface for the user.
  • Runs Cargo install to install cwe_checker.
  • Determines if a path is a ghidra installation
  • is_hidden 🔒
    check whether a path starts with “.”, indicating a hidden file or folder on Linux.
  • main 🔒
  • Searches for a file containing “ghidraRun” at provided path recursively.
  • Determines Ghidra versions and provides selection interface for the user.
  • uninstall 🔒
    Removes provided locations and uninstalls cwe_checker via cargo
\ No newline at end of file diff --git a/doc/html/cwe_checker_install/struct.CmdlineArgs.html b/doc/html/cwe_checker_install/struct.CmdlineArgs.html index 1327eea79..bc0f845a6 100644 --- a/doc/html/cwe_checker_install/struct.CmdlineArgs.html +++ b/doc/html/cwe_checker_install/struct.CmdlineArgs.html @@ -1,34 +1,34 @@ -CmdlineArgs in cwe_checker_install - Rust
pub(crate) struct CmdlineArgs {
-    pub(crate) ghidra_path: Option<String>,
-    pub(crate) uninstall: bool,
+CmdlineArgs in cwe_checker_install - Rust
pub(crate) struct CmdlineArgs {
+    pub(crate) ghidra_path: Option<String>,
+    pub(crate) uninstall: bool,
 }
Expand description

Installs cwe_checker

-

Fields§

§ghidra_path: Option<String>

Path to a ghidra installation.

+

Fields§

§ghidra_path: Option<String>

Path to a ghidra installation.

If this option is set then the installation will use ghidra at this location.

-
§uninstall: bool

If true, cwe_checker will be uninstalled.

-

Trait Implementations§

source§

impl Args for CmdlineArgs

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl CommandFactory for CmdlineArgs

source§

fn command<'b>() -> Command

Build a [Command] that can instantiate Self. Read more
source§

fn command_for_update<'b>() -> Command

Build a [Command] that can update self. Read more
source§

impl Debug for CmdlineArgs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for CmdlineArgs

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( +

§uninstall: bool

If true, cwe_checker will be uninstalled.

+

Trait Implementations§

source§

impl Args for CmdlineArgs

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl CommandFactory for CmdlineArgs

source§

fn command<'b>() -> Command

Build a [Command] that can instantiate Self. Read more
source§

fn command_for_update<'b>() -> Command

Build a [Command] that can update self. Read more
source§

impl Debug for CmdlineArgs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for CmdlineArgs

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches -) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches -) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches -) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Parser for CmdlineArgs

§

fn parse() -> Self

Parse from std::env::args_os(), exit on error
§

fn try_parse() -> Result<Self, Error<RichFormatter>>

Parse from std::env::args_os(), return Err on error.
§

fn parse_from<I, T>(itr: I) -> Selfwhere - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Parse from iterator, exit on error
§

fn try_parse_from<I, T>(itr: I) -> Result<Self, Error<RichFormatter>>where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Parse from iterator, return Err on error.
§

fn update_from<I, T>(&mut self, itr: I)where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Update from iterator, exit on error
§

fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error<RichFormatter>>where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Update from iterator, return Err on error.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+) -> Result<(), Error>
Assign values from ArgMatches to self.
source§

impl Parser for CmdlineArgs

§

fn parse() -> Self

Parse from std::env::args_os(), exit on error
§

fn try_parse() -> Result<Self, Error>

Parse from std::env::args_os(), return Err on error.
§

fn parse_from<I, T>(itr: I) -> Selfwhere + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Parse from iterator, exit on error
§

fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Parse from iterator, return Err on error.
§

fn update_from<I, T>(&mut self, itr: I)where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Update from iterator, exit on error
§

fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error>where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Update from iterator, return Err on error.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/doc/html/cwe_checker_install/struct.GhidraConfig.html b/doc/html/cwe_checker_install/struct.GhidraConfig.html index 3e23d597d..04c3d62b1 100644 --- a/doc/html/cwe_checker_install/struct.GhidraConfig.html +++ b/doc/html/cwe_checker_install/struct.GhidraConfig.html @@ -1,18 +1,18 @@ -GhidraConfig in cwe_checker_install - Rust
pub(crate) struct GhidraConfig {
-    pub(crate) ghidra_path: PathBuf,
+GhidraConfig in cwe_checker_install - Rust
pub(crate) struct GhidraConfig {
+    pub(crate) ghidra_path: PathBuf,
 }
Expand description

Structure for ghidra.json file

-

Fields§

§ghidra_path: PathBuf

Path to a ghidra installation

-

Trait Implementations§

source§

impl Debug for GhidraConfig

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for GhidraConfig

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for GhidraConfig

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Fields§

§ghidra_path: PathBuf

Path to a ghidra installation

+

Trait Implementations§

source§

impl Debug for GhidraConfig

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for GhidraConfig

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for GhidraConfig

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractLocation.html b/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractLocation.html index 58c7980cb..41e8381b5 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractLocation.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractLocation.html @@ -1,17 +1,17 @@ -AbstractLocation in cwe_checker_lib::abstract_domain - Rust
pub enum AbstractLocation {
+AbstractLocation in cwe_checker_lib::abstract_domain - Rust
pub enum AbstractLocation {
     Register(Variable),
     GlobalAddress {
-        address: u64,
+        address: u64,
         size: ByteSize,
     },
     Pointer(Variable, AbstractMemoryLocation),
-    GlobalPointer(u64, AbstractMemoryLocation),
+    GlobalPointer(u64, AbstractMemoryLocation),
 }
Expand description

An abstract location describes how to find the value of a variable in memory at a given time.

-

It is defined recursively, where the root is always a register. +

It is defined recursively, where the root is either a register or a (constant) global address. This way only locations that the local state knows about are representable. It is also impossible to accidentally describe circular references.

Variants§

§

Register(Variable)

The location is given by a register.

-
§

GlobalAddress

Fields

§address: u64

The address in global memory.

+
§

GlobalAddress

Fields

§address: u64

The address in global memory.

§size: ByteSize

The byte size of the address (not the pointed-to value!).

The value itself is a constant address to global memory. Note that the size is the size of the pointer and not the size @@ -20,45 +20,76 @@ One needs to follow the pointer in the given register and then follow the abstract memory location inside the pointed to memory object to find the actual memory location.

-
§

GlobalPointer(u64, AbstractMemoryLocation)

The location is in memory. +

§

GlobalPointer(u64, AbstractMemoryLocation)

The location is in memory. One needs to follow the pointer located at the given global address and then follow the abstract memory location inside the pointed to memory object to find the actual memory location.

-

Implementations§

source§

impl AbstractLocation

source

pub fn from_var(variable: &Variable) -> Result<AbstractLocation, Error>

Create an abstract location from a variable corresponding to a register. +

Implementations§

source§

impl AbstractLocation

source

pub fn from_var(variable: &Variable) -> Result<AbstractLocation, Error>

Create an abstract location from a variable corresponding to a register. This function returns an error if the variable is not a physical register.

-
source

pub fn from_stack_position( +

source

pub fn from_stack_position( stack_register: &Variable, - offset: i64, + offset: i64, size: ByteSize ) -> AbstractLocation

Create an abstract location on the stack. The returned location describes the value of the given size at the given offset relative to the memory location that the stack_register is pointing to.

-
source

pub fn from_global_address(address: &Bitvector) -> AbstractLocation

Create an abstract location representing an address pointing to global memory.

-
source

pub fn bytesize(&self) -> ByteSize

Get the bytesize of the value represented by the abstract location.

-

Trait Implementations§

source§

impl Clone for AbstractLocation

source§

fn clone(&self) -> AbstractLocation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AbstractLocation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for AbstractLocation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for AbstractLocation

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AbstractLocation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AbstractLocation

source§

fn cmp(&self, other: &AbstractLocation) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<AbstractLocation> for AbstractLocation

source§

fn eq(&self, other: &AbstractLocation) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<AbstractLocation> for AbstractLocation

source§

fn partial_cmp(&self, other: &AbstractLocation) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for AbstractLocation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for AbstractLocation

source§

impl StructuralEq for AbstractLocation

source§

impl StructuralPartialEq for AbstractLocation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+
source

pub fn from_global_address(address: &Bitvector) -> AbstractLocation

Create an abstract location representing an address pointing to global memory.

+
source

pub fn with_offset_addendum(self, addendum: i64) -> AbstractLocation

Add an offset to the abstract location.

+
source

pub fn dereferenced( + self, + new_size: ByteSize, + generic_pointer_size: ByteSize +) -> AbstractLocation

Return the abstract location that one gets when dereferencing the pointer that self is pointing to.

+

Panics if self is not pointer-sized.

+
source

pub fn bytesize(&self) -> ByteSize

Get the bytesize of the value represented by the abstract location.

+
source

pub fn recursion_depth(&self) -> u64

Get the recursion depth of the abstract location, +i.e. how many times one has to dereference a pointer until reaching the actual location.

+
source

pub fn extend( + &mut self, + extension: AbstractMemoryLocation, + generic_pointer_size: ByteSize +)

Extend the location string by adding further derefence operations to it according to the given extension.

+
source

pub fn get_parent_location( + &self, + generic_pointer_size: ByteSize +) -> Result<(AbstractLocation, i64), Error>

Get the abstract location representing the pointer pointing to the memory object +that contains the location represented by self +together with the offset that one has to add to the pointer to get the location of self.

+

Returns an error if the abstract location contains no dereference operation +(e.g. if self represents a register value).

+
source

pub fn get_all_parent_locations( + &self, + generic_pointer_size: ByteSize +) -> Vec<AbstractLocation>

Get a list of all (recursive) parent locations. +The list is sorted by recursion depth, starting with the root location.

+

Trait Implementations§

source§

impl Clone for AbstractLocation

source§

fn clone(&self) -> AbstractLocation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AbstractLocation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for AbstractLocation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for AbstractLocation

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AbstractLocation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AbstractLocation

source§

fn cmp(&self, other: &AbstractLocation) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for AbstractLocation

source§

fn eq(&self, other: &AbstractLocation) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for AbstractLocation

source§

fn partial_cmp(&self, other: &AbstractLocation) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
source§

impl Serialize for AbstractLocation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for AbstractLocation

source§

impl StructuralEq for AbstractLocation

source§

impl StructuralPartialEq for AbstractLocation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractMemoryLocation.html b/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractMemoryLocation.html index 0c6a30ea9..2a2cc3845 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractMemoryLocation.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.AbstractMemoryLocation.html @@ -1,47 +1,73 @@ -AbstractMemoryLocation in cwe_checker_lib::abstract_domain - Rust
pub enum AbstractMemoryLocation {
+AbstractMemoryLocation in cwe_checker_lib::abstract_domain - Rust
pub enum AbstractMemoryLocation {
     Location {
-        offset: i64,
+        offset: i64,
         size: ByteSize,
     },
     Pointer {
-        offset: i64,
-        target: Box<AbstractMemoryLocation>,
+        offset: i64,
+        target: Box<AbstractMemoryLocation>,
     },
 }
Expand description

An abstract memory location is either an offset from the given location, where the actual value can be found, or an offset to a pointer to another memory location, where the value can be found by (recursively) following the embedded target memory location.

The offset and size variables are given in bytes.

-

Variants§

§

Location

Fields

§offset: i64

The offset with respect to the zero offset of the memory object where the value can be found.

+

Variants§

§

Location

Fields

§offset: i64

The offset with respect to the zero offset of the memory object where the value can be found.

§size: ByteSize

The size in bytes of the value that the memory location points to.

A location inside the current memory object.

-
§

Pointer

Fields

§offset: i64

The offset inside the current memory object where the pointer can be found.

-
§target: Box<AbstractMemoryLocation>

The memory location inside the target of the pointer that this memory location points to.

+
§

Pointer

Fields

§offset: i64

The offset inside the current memory object where the pointer can be found.

+
§target: Box<AbstractMemoryLocation>

The memory location inside the target of the pointer that this memory location points to.

A pointer which needs to be followed to get to the actual memory location

-

Implementations§

source§

impl AbstractMemoryLocation

source

pub fn bytesize(&self) -> ByteSize

Get the bytesize of the value represented by the abstract memory location.

-

Trait Implementations§

source§

impl Clone for AbstractMemoryLocation

source§

fn clone(&self) -> AbstractMemoryLocation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AbstractMemoryLocation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for AbstractMemoryLocation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for AbstractMemoryLocation

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AbstractMemoryLocation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AbstractMemoryLocation

source§

fn cmp(&self, other: &AbstractMemoryLocation) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<AbstractMemoryLocation> for AbstractMemoryLocation

source§

fn eq(&self, other: &AbstractMemoryLocation) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<AbstractMemoryLocation> for AbstractMemoryLocation

source§

fn partial_cmp(&self, other: &AbstractMemoryLocation) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for AbstractMemoryLocation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for AbstractMemoryLocation

source§

impl StructuralEq for AbstractMemoryLocation

source§

impl StructuralPartialEq for AbstractMemoryLocation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Implementations§

source§

impl AbstractMemoryLocation

source

pub fn get_parent_location( + &self, + generic_pointer_size: ByteSize +) -> Result<(AbstractMemoryLocation, i64), i64>

Get the abstract memory location representing the pointer pointing to the memory object +that contains the location represented by self +together with the offset that one has to add to the pointer to get the location of self.

+

If self is a location (and not a pointer), return the offset in the location instead.

+
source

pub fn add_offset(&mut self, addendum: i64)

Add an offset to a memory location.

+
source

pub fn add_offset_at_root(&mut self, addendum: i64)

Add an offset to the root location of the memory location.

+
source

pub fn dereference( + &mut self, + new_size: ByteSize, + generic_pointer_size: ByteSize +)

Dereference the pointer that self is pointing to.

+

Panics if the old value of self is not pointer-sized.

+
source

pub fn extend( + &mut self, + extension: AbstractMemoryLocation, + generic_pointer_size: ByteSize +)

Extend the location string by adding further derefence operations to it according to the given extension.

+
source

pub fn bytesize(&self) -> ByteSize

Get the bytesize of the value represented by the abstract memory location.

+
source

pub fn recursion_depth(&self) -> u64

Get the recursion depth of the abstract memory location, +i.e. how many times one has to dereference a pointer until reaching the actual location.

+

Trait Implementations§

source§

impl Clone for AbstractMemoryLocation

source§

fn clone(&self) -> AbstractMemoryLocation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AbstractMemoryLocation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for AbstractMemoryLocation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for AbstractMemoryLocation

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AbstractMemoryLocation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AbstractMemoryLocation

source§

fn cmp(&self, other: &AbstractMemoryLocation) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for AbstractMemoryLocation

source§

fn eq(&self, other: &AbstractMemoryLocation) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for AbstractMemoryLocation

source§

fn partial_cmp(&self, other: &AbstractMemoryLocation) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
source§

impl Serialize for AbstractMemoryLocation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for AbstractMemoryLocation

source§

impl StructuralEq for AbstractMemoryLocation

source§

impl StructuralPartialEq for AbstractMemoryLocation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.BitvectorDomain.html b/doc/html/cwe_checker_lib/abstract_domain/enum.BitvectorDomain.html index 887ac111c..cdca1df4c 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.BitvectorDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.BitvectorDomain.html @@ -1,47 +1,49 @@ -BitvectorDomain in cwe_checker_lib::abstract_domain - Rust
pub enum BitvectorDomain {
+BitvectorDomain in cwe_checker_lib::abstract_domain - Rust
pub enum BitvectorDomain {
     Top(ByteSize),
     Value(Bitvector),
 }
Expand description

The BitvectorDomain is a simple abstract domain describing a bitvector of known length.

As values it can only assume a known bitvector or Top(bytesize).

Variants§

§

Top(ByteSize)

The Top value of the domain, representing the case that nothing is known about the actual value.

§

Value(Bitvector)

The exact value of the bitvector is known.

-

Trait Implementations§

source§

impl AbstractDomain for BitvectorDomain

source§

fn merge(&self, other: &Self) -> Self

merge two values. Returns Top if the values are not equal.

-
source§

fn is_top(&self) -> bool

Check if the value is Top.

-
source§

impl Add<BitvectorDomain> for BitvectorDomain

§

type Output = BitvectorDomain

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl Clone for BitvectorDomain

source§

fn clone(&self) -> BitvectorDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitvectorDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BitvectorDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for BitvectorDomain

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ApInt> for BitvectorDomain

source§

fn from(bitvector: Bitvector) -> BitvectorDomain

Converts to this type from the input type.
source§

impl HasTop for BitvectorDomain

source§

fn top(&self) -> BitvectorDomain

Return a Top value with the same bytesize as self.

-
source§

impl Hash for BitvectorDomain

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Neg for BitvectorDomain

§

type Output = BitvectorDomain

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl PartialEq<BitvectorDomain> for BitvectorDomain

source§

fn eq(&self, other: &BitvectorDomain) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl RegisterDomain for BitvectorDomain

source§

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Evaluate the given binary operation.

+

Trait Implementations§

source§

impl AbstractDomain for BitvectorDomain

source§

fn merge(&self, other: &Self) -> Self

merge two values. Returns Top if the values are not equal.

+
source§

fn is_top(&self) -> bool

Check if the value is Top.

+
source§

impl Add for BitvectorDomain

§

type Output = BitvectorDomain

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl Clone for BitvectorDomain

source§

fn clone(&self) -> BitvectorDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitvectorDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BitvectorDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for BitvectorDomain

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ApInt> for BitvectorDomain

source§

fn from(bitvector: Bitvector) -> BitvectorDomain

Converts to this type from the input type.
source§

impl HasTop for BitvectorDomain

source§

fn top(&self) -> BitvectorDomain

Return a Top value with the same bytesize as self.

+
source§

impl Hash for BitvectorDomain

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Neg for BitvectorDomain

§

type Output = BitvectorDomain

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl PartialEq for BitvectorDomain

source§

fn eq(&self, other: &BitvectorDomain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl RegisterDomain for BitvectorDomain

source§

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Evaluate the given binary operation.

For non-shift operations, this function will panic if the operands have different bitsizes.

-
source§

fn un_op(&self, op: UnOpType) -> Self

Evaluate the given unary operation.

-
source§

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

Extract a sub-bitvector out of a bitvector

-
source§

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Perform a size-changing cast on a bitvector.

-
source§

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. -Has a generic implementation that should not be overwritten!
source§

impl Serialize for BitvectorDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl SizedDomain for BitvectorDomain

source§

fn bytesize(&self) -> ByteSize

Return the bytesize of self.

-
source§

fn new_top(bytesize: ByteSize) -> BitvectorDomain

Get a Top element with the given bitsize.

-
source§

impl Sub<BitvectorDomain> for BitvectorDomain

§

type Output = BitvectorDomain

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl TryToBitvec for BitvectorDomain

source§

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If the domain represents an absoulute value, return it.

-
source§

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. +
source§

fn un_op(&self, op: UnOpType) -> Self

Evaluate the given unary operation.

+
source§

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

Extract a sub-bitvector out of a bitvector

+
source§

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Perform a size-changing cast on a bitvector.

+
source§

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. +Has a generic implementation that should not be overwritten!
source§

impl Serialize for BitvectorDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl SizedDomain for BitvectorDomain

source§

fn bytesize(&self) -> ByteSize

Return the bytesize of self.

+
source§

fn new_top(bytesize: ByteSize) -> BitvectorDomain

Get a Top element with the given bitsize.

+
source§

impl Sub for BitvectorDomain

§

type Output = BitvectorDomain

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl TryToBitvec for BitvectorDomain

source§

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If the domain represents an absoulute value, return it.

+
source§

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. Else return an error. -Note that the conversion loses information about the bytesize of the value.
source§

impl TryToInterval for BitvectorDomain

source§

fn try_to_interval(&self) -> Result<Interval, Error>

If the domain represents an absolute value, return it as an interval of length one.

-
source§

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) +Note that the conversion loses information about the bytesize of the value.
source§

impl TryToInterval for BitvectorDomain

source§

fn try_to_interval(&self) -> Result<Interval, Error>

If the domain represents an absolute value, return it as an interval of length one.

+
source§

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) then return it as an interval of signed integers if the interval is bounded. Else return an error. -Note that the conversion loses information about the bytesize of the values contained in the interval.
source§

impl Eq for BitvectorDomain

source§

impl StructuralEq for BitvectorDomain

source§

impl StructuralPartialEq for BitvectorDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+Note that the conversion loses information about the bytesize of the values contained in the interval.
source§

impl Eq for BitvectorDomain

source§

impl StructuralEq for BitvectorDomain

source§

impl StructuralPartialEq for BitvectorDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.BrickDomain.html b/doc/html/cwe_checker_lib/abstract_domain/enum.BrickDomain.html index 8b95c39ac..74eecc099 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.BrickDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.BrickDomain.html @@ -1,4 +1,4 @@ -BrickDomain in cwe_checker_lib::abstract_domain - Rust
pub enum BrickDomain {
+BrickDomain in cwe_checker_lib::abstract_domain - Rust
pub enum BrickDomain {
     Top,
     Value(Brick),
 }
Expand description

The single brick domain that represents a set of character sequences @@ -8,7 +8,7 @@

Variants§

§

Top

The Top value represents the powerset over the alphabet of allowed characters with a minimum of 0 and a maximum of positive infinity.

§

Value(Brick)

The set of character sequences as well as the minimum and maximum of the sum of their occurrences.

-

Implementations§

source§

impl BrickDomain

source

pub fn widen(&self, other: &BrickDomain) -> Self

The widen function of the BrickDomain takes the union of both +

Implementations§

source§

impl BrickDomain

source

pub fn widen(&self, other: &BrickDomain) -> Self

The widen function of the BrickDomain takes the union of both BrickDomains and returns Top if the number of sequences exceeds a certain threshold. If neither of the domains are Top, the minimum and maximum @@ -16,31 +16,33 @@ their difference exceeds a certain threshold. If so min is set to 0 and max is set to infinity (here Max value of 32 bits). Otherwise, their values are taken as new bounds for the merged domain.

-
source

pub fn is_less_or_equal(&self, other: &BrickDomain) -> bool

Checks whether the current BrickDomain is less or equal than the other BrickDomain +

source

pub fn is_less_or_equal(&self, other: &BrickDomain) -> bool

Checks whether the current BrickDomain is less or equal than the other BrickDomain by definition of the partial order. Empty strings are ignored for order comparisons.

-
source§

impl BrickDomain

source

pub fn new(string: String) -> Self

Returns a new instance of the Brick Domain

-

Trait Implementations§

source§

impl AbstractDomain for BrickDomain

source§

fn merge(&self, other: &Self) -> Self

Takes care of merging single bricks by taking the union +

source§

impl BrickDomain

source

pub fn new(string: String) -> Self

Returns a new instance of the Brick Domain

+

Trait Implementations§

source§

impl AbstractDomain for BrickDomain

source§

fn merge(&self, other: &Self) -> Self

Takes care of merging single bricks by taking the union of the two brick’s string sequences and the minimum and maximum of their respective min and max values.

-
source§

fn is_top(&self) -> bool

Check if the value is Top.

-
source§

impl Clone for BrickDomain

source§

fn clone(&self) -> BrickDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BrickDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BrickDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for BrickDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<BrickDomain> for BrickDomain

source§

fn eq(&self, other: &BrickDomain) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for BrickDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for BrickDomain

source§

impl StructuralEq for BrickDomain

source§

impl StructuralPartialEq for BrickDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+
source§

fn is_top(&self) -> bool

Check if the value is Top.

+
source§

impl Clone for BrickDomain

source§

fn clone(&self) -> BrickDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BrickDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BrickDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for BrickDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for BrickDomain

source§

fn eq(&self, other: &BrickDomain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for BrickDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for BrickDomain

source§

impl StructuralEq for BrickDomain

source§

impl StructuralPartialEq for BrickDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.BricksDomain.html b/doc/html/cwe_checker_lib/abstract_domain/enum.BricksDomain.html index fac15388f..f6386d2cc 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.BricksDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.BricksDomain.html @@ -1,22 +1,22 @@ -BricksDomain in cwe_checker_lib::abstract_domain - Rust
pub enum BricksDomain {
+BricksDomain in cwe_checker_lib::abstract_domain - Rust
pub enum BricksDomain {
     Top,
-    Value(Vec<BrickDomain>),
+    Value(Vec<BrickDomain>),
 }
Expand description

The BricksDomain contains a sorted list of single normalized BrickDomains. It represents the composition of a string through sub sequences.

Variants§

§

Top

The Top value represents an invalid sequence.

-
§

Value(Vec<BrickDomain>)

This values represents a sequence of string subsequences.

-

Implementations§

source§

impl BricksDomain

source

pub fn widen(&self, other: &BricksDomain) -> Self

The widen function of the BricksDomain widens the values during a merge. +

§

Value(Vec<BrickDomain>)

This values represents a sequence of string subsequences.

+

Implementations§

source§

impl BricksDomain

source

pub fn widen(&self, other: &BricksDomain) -> Self

The widen function of the BricksDomain widens the values during a merge. If the two BrickDomain lists are not comparable or either list exceeds the length threshold, Top is returned. Otherwise, the shorter list is padded and the widen function of the BrickDomain is applied to each element in both lists. If after the widening all BrickDomain values are Top, return the Top value for the BricksDomain.

-
source

pub fn all_bricks_are_top(bricks: &[BrickDomain]) -> bool

Checks whether all bricks of the BricksDomain are Top values. +

source

pub fn all_bricks_are_top(bricks: &[BrickDomain]) -> bool

Checks whether all bricks of the BricksDomain are Top values. If so, the BricksDomain itself should be converted into a Top value.

-
source

pub fn is_less_or_equal(&self, other: &BricksDomain) -> bool

Checks whether the current BricksDomain is less or equal than the other BricksDomain +

source

pub fn is_less_or_equal(&self, other: &BricksDomain) -> bool

Checks whether the current BricksDomain is less or equal than the other BricksDomain by definition of the partial order.

-
source§

impl BricksDomain

source

pub fn normalize(&self) -> Self

A set of strings can be built from multiple configurations of bricks +

source§

impl BricksDomain

source

pub fn normalize(&self) -> Self

A set of strings can be built from multiple configurations of bricks e.g. [{abc}]^{1,1} <=> [{a}]^{1,1}[{b}]^{1,1}[{c}]^{1,1}

Introducing a normalized form [T]^{1,1} or [T]^{0, max>0} will keep string representations unambiguous.

@@ -37,35 +37,37 @@

Since normalization is rather expensive w.r.t. runtime and since it could entail a precision loss, it is only computed after a merge or widening operation.

-

Trait Implementations§

source§

impl AbstractDomain for BricksDomain

source§

fn merge(&self, other: &Self) -> Self

Takes care of merging lists of bricks

-
source§

fn is_top(&self) -> bool

Check if the value is Top.

-
source§

impl Clone for BricksDomain

source§

fn clone(&self) -> BricksDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BricksDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BricksDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for BricksDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl DomainInsertion for BricksDomain

source§

fn append_string_domain(&self, string_domain: &Self) -> Self

Appends new bricks to the current BricksDomain. +

Trait Implementations§

source§

impl AbstractDomain for BricksDomain

source§

fn merge(&self, other: &Self) -> Self

Takes care of merging lists of bricks

+
source§

fn is_top(&self) -> bool

Check if the value is Top.

+
source§

impl Clone for BricksDomain

source§

fn clone(&self) -> BricksDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BricksDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BricksDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for BricksDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl DomainInsertion for BricksDomain

source§

fn append_string_domain(&self, string_domain: &Self) -> Self

Appends new bricks to the current BricksDomain. Used to insert format specifier in sprintf calls and for strcat call.

-
source§

fn create_float_value_domain() -> Self

Create a string domain that approximates float values.

-
source§

fn create_char_domain() -> Self

Create a string domain that approximates char values.

-
source§

fn create_integer_domain() -> Self

Create a string domain that approximates integer values.

-
source§

fn create_pointer_value_domain() -> Self

Create a string domain that approximates pointer values.

-
source§

fn create_top_value_domain() -> Self

Creates a top value of the domain.

-
source§

fn create_empty_string_domain() -> Self

Create a string domain that represents an empty string.

-
source§

impl From<String> for BricksDomain

source§

fn from(string: String) -> Self

Returns a new instance of the Bricks Domain

-
source§

impl HasTop for BricksDomain

source§

fn top(&self) -> Self

Return a Top value

-
source§

impl PartialEq<BricksDomain> for BricksDomain

source§

fn eq(&self, other: &BricksDomain) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for BricksDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for BricksDomain

source§

impl StructuralEq for BricksDomain

source§

impl StructuralPartialEq for BricksDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+
source§

fn create_float_value_domain() -> Self

Create a string domain that approximates float values.

+
source§

fn create_char_domain() -> Self

Create a string domain that approximates char values.

+
source§

fn create_integer_domain() -> Self

Create a string domain that approximates integer values.

+
source§

fn create_pointer_value_domain() -> Self

Create a string domain that approximates pointer values.

+
source§

fn create_top_value_domain() -> Self

Creates a top value of the domain.

+
source§

fn create_empty_string_domain() -> Self

Create a string domain that represents an empty string.

+
source§

impl From<String> for BricksDomain

source§

fn from(string: String) -> Self

Returns a new instance of the Bricks Domain

+
source§

impl HasTop for BricksDomain

source§

fn top(&self) -> Self

Return a Top value

+
source§

impl PartialEq for BricksDomain

source§

fn eq(&self, other: &BricksDomain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for BricksDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for BricksDomain

source§

impl StructuralEq for BricksDomain

source§

impl StructuralPartialEq for BricksDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterInclusionDomain.html b/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterInclusionDomain.html index 02496c487..ecb062574 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterInclusionDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterInclusionDomain.html @@ -1,4 +1,4 @@ -CharacterInclusionDomain in cwe_checker_lib::abstract_domain - Rust
pub enum CharacterInclusionDomain {
+CharacterInclusionDomain in cwe_checker_lib::abstract_domain - Rust
pub enum CharacterInclusionDomain {
     Top,
     Value((CharacterSet, CharacterSet)),
 }
Expand description

The CharacterInclusionDomain is a abstract domain describing the characters a string certainly has @@ -9,36 +9,38 @@

Variants§

§

Top

The Top value stands for an empty set of certainly contained characters and the whole alphabet of allowed characters for the possibly contained characters.

§

Value((CharacterSet, CharacterSet))

The set of certainly contained characters and a set of possibly contained characters

-

Implementations§

source§

impl CharacterInclusionDomain

source

pub fn unwrap_value(&self) -> (CharacterSet, CharacterSet)

Unwraps the values from the Character Inclusion Domain

-

Trait Implementations§

source§

impl AbstractDomain for CharacterInclusionDomain

source§

fn merge(&self, other: &Self) -> Self

Merge two values; Takes the intersection of the certainly contained characters +

Implementations§

source§

impl CharacterInclusionDomain

source

pub fn unwrap_value(&self) -> (CharacterSet, CharacterSet)

Unwraps the values from the Character Inclusion Domain

+

Trait Implementations§

source§

impl AbstractDomain for CharacterInclusionDomain

source§

fn merge(&self, other: &Self) -> Self

Merge two values; Takes the intersection of the certainly contained characters and the union of the possibly contained characters. Returns Top if either Domain represents it.

-
source§

fn is_top(&self) -> bool

Check if the value is Top.

-
source§

impl Clone for CharacterInclusionDomain

source§

fn clone(&self) -> CharacterInclusionDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CharacterInclusionDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CharacterInclusionDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CharacterInclusionDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl DomainInsertion for CharacterInclusionDomain

source§

fn append_string_domain(&self, string_domain: &Self) -> CharacterInclusionDomain

Append string domain as part of a concatenation. (different to merge)

-
source§

fn create_float_value_domain() -> Self

Create a string domain that approximates float values.

-
source§

fn create_char_domain() -> Self

Create a string domain that approximates char values.

-
source§

fn create_integer_domain() -> Self

Create a string domain that approximates integer values.

-
source§

fn create_pointer_value_domain() -> Self

Create a string domain that approximates pointer values.

-
source§

fn create_top_value_domain() -> Self

Creates a top value of the domain.

-
source§

fn create_empty_string_domain() -> Self

Create a string domain that represents an empty string.

-
source§

impl From<String> for CharacterInclusionDomain

source§

fn from(string: String) -> Self

Converts to this type from the input type.
source§

impl HasTop for CharacterInclusionDomain

source§

fn top(&self) -> Self

Return a Top value

-
source§

impl PartialEq<CharacterInclusionDomain> for CharacterInclusionDomain

source§

fn eq(&self, other: &CharacterInclusionDomain) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for CharacterInclusionDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CharacterInclusionDomain

source§

impl StructuralEq for CharacterInclusionDomain

source§

impl StructuralPartialEq for CharacterInclusionDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+
source§

fn is_top(&self) -> bool

Check if the value is Top.

+
source§

impl Clone for CharacterInclusionDomain

source§

fn clone(&self) -> CharacterInclusionDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CharacterInclusionDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CharacterInclusionDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CharacterInclusionDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl DomainInsertion for CharacterInclusionDomain

source§

fn append_string_domain(&self, string_domain: &Self) -> CharacterInclusionDomain

Append string domain as part of a concatenation. (different to merge)

+
source§

fn create_float_value_domain() -> Self

Create a string domain that approximates float values.

+
source§

fn create_char_domain() -> Self

Create a string domain that approximates char values.

+
source§

fn create_integer_domain() -> Self

Create a string domain that approximates integer values.

+
source§

fn create_pointer_value_domain() -> Self

Create a string domain that approximates pointer values.

+
source§

fn create_top_value_domain() -> Self

Creates a top value of the domain.

+
source§

fn create_empty_string_domain() -> Self

Create a string domain that represents an empty string.

+
source§

impl From<String> for CharacterInclusionDomain

source§

fn from(string: String) -> Self

Converts to this type from the input type.
source§

impl HasTop for CharacterInclusionDomain

source§

fn top(&self) -> Self

Return a Top value

+
source§

impl PartialEq for CharacterInclusionDomain

source§

fn eq(&self, other: &CharacterInclusionDomain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for CharacterInclusionDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CharacterInclusionDomain

source§

impl StructuralEq for CharacterInclusionDomain

source§

impl StructuralPartialEq for CharacterInclusionDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterSet.html b/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterSet.html index b9b302f62..af8cdc913 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterSet.html +++ b/doc/html/cwe_checker_lib/abstract_domain/enum.CharacterSet.html @@ -1,35 +1,37 @@ -CharacterSet in cwe_checker_lib::abstract_domain - Rust
pub enum CharacterSet {
+CharacterSet in cwe_checker_lib::abstract_domain - Rust
pub enum CharacterSet {
     Top,
-    Value(BTreeSet<char>),
+    Value(BTreeSet<char>),
 }
Expand description

A domain that represents character sets.

Variants§

§

Top

The Top value represents a character set of all allowed characters.

-
§

Value(BTreeSet<char>)

Represents a real subset of all allowed characters.

-

Implementations§

source§

impl CharacterSet

source

pub fn unwrap_value(&self) -> BTreeSet<char>

Unwraps the values from the CharacterSet

-
source

pub fn intersection(&self, other: Self) -> Self

Takes the intersection of two character sets. +

§

Value(BTreeSet<char>)

Represents a real subset of all allowed characters.

+

Implementations§

source§

impl CharacterSet

source

pub fn unwrap_value(&self) -> BTreeSet<char>

Unwraps the values from the CharacterSet

+
source

pub fn intersection(&self, other: Self) -> Self

Takes the intersection of two character sets. None of the sets should be Top since otherwise the whole CharacterInclusionDomain would be Top which is checked beforehand.

-
source

pub fn union(&self, other: Self) -> Self

Takes the union of two character sets. +

source

pub fn union(&self, other: Self) -> Self

Takes the union of two character sets. If either of them is Top the union is Top. Otherwise the standard set union is taken.

-

Trait Implementations§

source§

impl Clone for CharacterSet

source§

fn clone(&self) -> CharacterSet

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CharacterSet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CharacterSet

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CharacterSet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl HasTop for CharacterSet

source§

fn top(&self) -> Self

Return a Top value

-
source§

impl PartialEq<CharacterSet> for CharacterSet

source§

fn eq(&self, other: &CharacterSet) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for CharacterSet

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CharacterSet

source§

impl StructuralEq for CharacterSet

source§

impl StructuralPartialEq for CharacterSet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Clone for CharacterSet

source§

fn clone(&self) -> CharacterSet

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CharacterSet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CharacterSet

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CharacterSet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl HasTop for CharacterSet

source§

fn top(&self) -> Self

Return a Top value

+
source§

impl PartialEq for CharacterSet

source§

fn eq(&self, other: &CharacterSet) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for CharacterSet

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CharacterSet

source§

impl StructuralEq for CharacterSet

source§

impl StructuralPartialEq for CharacterSet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractLocation.html b/doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractLocation.html deleted file mode 100644 index 4fb5cfd24..000000000 --- a/doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractLocation.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../cwe_checker_lib/abstract_domain/enum.AbstractLocation.html...

- - - \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractMemoryLocation.html b/doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractMemoryLocation.html deleted file mode 100644 index a18d92d06..000000000 --- a/doc/html/cwe_checker_lib/abstract_domain/identifier/enum.AbstractMemoryLocation.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../cwe_checker_lib/abstract_domain/enum.AbstractMemoryLocation.html...

- - - \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/identifier/location/enum.AbstractLocation.html b/doc/html/cwe_checker_lib/abstract_domain/identifier/location/enum.AbstractLocation.html new file mode 100644 index 000000000..c726e9d06 --- /dev/null +++ b/doc/html/cwe_checker_lib/abstract_domain/identifier/location/enum.AbstractLocation.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../cwe_checker_lib/abstract_domain/enum.AbstractLocation.html...

+ + + \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/identifier/mem_location/enum.AbstractMemoryLocation.html b/doc/html/cwe_checker_lib/abstract_domain/identifier/mem_location/enum.AbstractMemoryLocation.html new file mode 100644 index 000000000..4beef747e --- /dev/null +++ b/doc/html/cwe_checker_lib/abstract_domain/identifier/mem_location/enum.AbstractMemoryLocation.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../cwe_checker_lib/abstract_domain/enum.AbstractMemoryLocation.html...

+ + + \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/index.html b/doc/html/cwe_checker_lib/abstract_domain/index.html index aa4c69e1d..201429478 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/index.html +++ b/doc/html/cwe_checker_lib/abstract_domain/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::abstract_domain - Rust
Expand description

This module defines traits describing general properties of abstract domains +cwe_checker_lib::abstract_domain - Rust

Expand description

This module defines traits describing general properties of abstract domains as well as several abstract domain types implementing these traits.

Structs

source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.AbstractIdentifierData.html b/doc/html/cwe_checker_lib/abstract_domain/struct.AbstractIdentifierData.html index 77bc9f5c5..8f48c3569 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.AbstractIdentifierData.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.AbstractIdentifierData.html @@ -1,27 +1,31 @@ -AbstractIdentifierData in cwe_checker_lib::abstract_domain - Rust
pub struct AbstractIdentifierData { /* private fields */ }
Expand description

The data contained in an abstract identifier

-

Trait Implementations§

source§

impl Clone for AbstractIdentifierData

source§

fn clone(&self) -> AbstractIdentifierData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AbstractIdentifierData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for AbstractIdentifierData

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Hash for AbstractIdentifierData

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AbstractIdentifierData

source§

fn cmp(&self, other: &AbstractIdentifierData) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<AbstractIdentifierData> for AbstractIdentifierData

source§

fn eq(&self, other: &AbstractIdentifierData) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<AbstractIdentifierData> for AbstractIdentifierData

source§

fn partial_cmp(&self, other: &AbstractIdentifierData) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for AbstractIdentifierData

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for AbstractIdentifierData

source§

impl StructuralEq for AbstractIdentifierData

source§

impl StructuralPartialEq for AbstractIdentifierData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+AbstractIdentifierData in cwe_checker_lib::abstract_domain - Rust
pub struct AbstractIdentifierData { /* private fields */ }
Expand description

The data contained in an abstract identifier

+

Trait Implementations§

source§

impl Clone for AbstractIdentifierData

source§

fn clone(&self) -> AbstractIdentifierData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AbstractIdentifierData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for AbstractIdentifierData

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Hash for AbstractIdentifierData

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for AbstractIdentifierData

source§

fn cmp(&self, other: &AbstractIdentifierData) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for AbstractIdentifierData

source§

fn eq(&self, other: &AbstractIdentifierData) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for AbstractIdentifierData

source§

fn partial_cmp(&self, other: &AbstractIdentifierData) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
source§

impl Serialize for AbstractIdentifierData

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for AbstractIdentifierData

source§

impl StructuralEq for AbstractIdentifierData

source§

impl StructuralPartialEq for AbstractIdentifierData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.DataDomain.html b/doc/html/cwe_checker_lib/abstract_domain/struct.DataDomain.html index fffaf3b25..ed73a6e7a 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.DataDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.DataDomain.html @@ -1,4 +1,4 @@ -DataDomain in cwe_checker_lib::abstract_domain - Rust
pub struct DataDomain<T: RegisterDomain> { /* private fields */ }
Expand description

An abstract domain representing a set of base values plus offsets or an absolute value (or both).

+DataDomain in cwe_checker_lib::abstract_domain - Rust
pub struct DataDomain<T: RegisterDomain> { /* private fields */ }
Expand description

An abstract domain representing a set of base values plus offsets or an absolute value (or both).

The base values are represented as abstract IDs, i.e. they are treated as variables with unknown absolute value, e.g. the returned pointer by malloc. For each base value the offset is given by an abstract domain T, @@ -10,77 +10,77 @@ then the values are given by a single instance of the abstract domain T.

The domain also contains a flag to indicate that it includes Top values, i.e. values of fully unknown origin and offset.

-

Implementations§

source§

impl<T: RegisterDomain> DataDomain<T>

source

pub fn add_offset(&self, offset: &T) -> Self

Add offset to all contained absolute and relative values of self and return the result.

-
source

pub fn subtract_offset(&self, offset: &T) -> Self

Subtract offset from all contained absolute and relative values of self and return the result.

-
source§

impl<T: RegisterDomain> DataDomain<T>

source

pub fn is_empty(&self) -> bool

Returns true if the domain does not represent any value.

+

Implementations§

source§

impl<T: RegisterDomain> DataDomain<T>

source

pub fn add_offset(&self, offset: &T) -> Self

Add offset to all contained absolute and relative values of self and return the result.

+
source

pub fn subtract_offset(&self, offset: &T) -> Self

Subtract offset from all contained absolute and relative values of self and return the result.

+
source§

impl<T: RegisterDomain> DataDomain<T>

source

pub fn is_empty(&self) -> bool

Returns true if the domain does not represent any value.

The meaning of an empty value depends on the usage of the domain. E.g. it may indicate an impossible runtime state of a program in one analysis or simply no value of interest in another analysis.

An empty value represents the bottom value in the partial order of the domain.

-
source

pub fn new_empty(size: ByteSize) -> Self

Return a new empty value with the given bytesize.

-
source

pub fn replace_abstract_id( +

source

pub fn new_empty(size: ByteSize) -> Self

Return a new empty value with the given bytesize.

+
source

pub fn replace_abstract_id( &mut self, old_id: &AbstractIdentifier, new_id: &AbstractIdentifier, - offset_adjustment: &T + offset_adjustment: &T )

For pointer values replace an abstract identifier with another one and add the offset_adjustment to the pointer offset. This is needed to adjust stack pointer on call and return instructions.

-
source

pub fn replace_all_ids( +

source

pub fn replace_all_ids( &mut self, - replacement_map: &BTreeMap<AbstractIdentifier, Self> + replacement_map: &BTreeMap<AbstractIdentifier, Self> )

Replace all abstract IDs in self with the corresponding values given by the replacement_map.

For IDs without a replacement value the contains_top_values flag will be set.

-
source

pub fn referenced_ids(&self) -> impl Iterator<Item = &AbstractIdentifier>

Return an iterator over all referenced abstract IDs.

-
source

pub fn get_relative_values(&self) -> &BTreeMap<AbstractIdentifier, T>

Return the relative values contained in the domain.

-
source

pub fn set_relative_values( +

source

pub fn referenced_ids(&self) -> impl Iterator<Item = &AbstractIdentifier>

Return an iterator over all referenced abstract IDs.

+
source

pub fn get_relative_values(&self) -> &BTreeMap<AbstractIdentifier, T>

Return the relative values contained in the domain.

+
source

pub fn set_relative_values( &mut self, - relative_values: BTreeMap<AbstractIdentifier, T> + relative_values: BTreeMap<AbstractIdentifier, T> )

Replace the map of relative values with the given one.

-
source

pub fn get_absolute_value(&self) -> Option<&T>

Return the absolute value contained in the domain if present

-
source

pub fn set_absolute_value(&mut self, value: Option<T>)

Replace the absolute value contained in the domain with the given one. +

source

pub fn get_absolute_value(&self) -> Option<&T>

Return the absolute value contained in the domain if present

+
source

pub fn set_absolute_value(&mut self, value: Option<T>)

Replace the absolute value contained in the domain with the given one. A value of None means that the domain does not contain an absolute value.

-
source

pub fn contains_top(&self) -> bool

Returns true if the domain contains Top values, +

source

pub fn contains_top(&self) -> bool

Returns true if the domain contains Top values, i.e. values for which neither a value nor an abstract identifier is known.

Note that the DataDomain itself has no maximal value, i.e. this does not indicate a Top value of the abstract domain.

-
source

pub fn set_contains_top_flag(&mut self)

Indicate that the domain may contain Top values +

source

pub fn set_contains_top_flag(&mut self)

Indicate that the domain may contain Top values in addition to the contained absolute and relative values.

This does not remove absolute or relative value information from the domain.

-
source

pub fn unset_contains_top_flag(&mut self)

Indicate that the domain does not contain any Top values +

source

pub fn unset_contains_top_flag(&mut self)

Indicate that the domain does not contain any Top values in addition to the contained absolute and relative values.

-
source

pub fn from_target(id: AbstractIdentifier, offset: T) -> Self

Return a new value representing a variable plus an offset, +

source

pub fn from_target(id: AbstractIdentifier, offset: T) -> Self

Return a new value representing a variable plus an offset, where the variable is represented by the given abstract ID.

-
source

pub fn remove_ids(&mut self, ids_to_remove: &BTreeSet<AbstractIdentifier>)

Remove all provided IDs from the list of relative values.

-
source

pub fn get_if_absolute_value(&self) -> Option<&T>

Return the contained absolute value +

source

pub fn remove_ids(&mut self, ids_to_remove: &BTreeSet<AbstractIdentifier>)

Remove all provided IDs from the list of relative values.

+
source

pub fn get_if_absolute_value(&self) -> Option<&T>

Return the contained absolute value only if self contains no other (relative or Top) values.

-
source

pub fn get_if_unique_target(&self) -> Option<(&AbstractIdentifier, &T)>

Return the target ID and offset of the contained relative value +

source

pub fn get_if_unique_target(&self) -> Option<(&AbstractIdentifier, &T)>

Return the target ID and offset of the contained relative value if self contains exactly one relative value and no absolute or Top values.

-
source§

impl<T: RegisterDomain + Display> DataDomain<T>

source

pub fn to_json_compact(&self) -> Value

Get a more compact json-representation of the data domain. +

source§

impl<T: RegisterDomain + Display> DataDomain<T>

source

pub fn to_json_compact(&self) -> Value

Get a more compact json-representation of the data domain. Intended for pretty printing, not useable for serialization/deserialization.

-

Trait Implementations§

source§

impl<T: RegisterDomain> AbstractDomain for DataDomain<T>

source§

fn is_top(&self) -> bool

Return whether the element represents a top element or not.

+

Trait Implementations§

source§

impl<T: RegisterDomain> AbstractDomain for DataDomain<T>

source§

fn is_top(&self) -> bool

Return whether the element represents a top element or not.

Note that DataDomain technically does not have a Top element with respect to the partial order. Instead a Top element here represents a non-empty value for which nothing is known about the contained values.

-
source§

fn merge(&self, other: &Self) -> Self

Return an upper bound (with respect to the partial order on the domain) for the two inputs self and other.
source§

impl<T: RegisterDomain> Add<DataDomain<T>> for DataDomain<T>

§

type Output = DataDomain<T>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl<T: Clone + RegisterDomain> Clone for DataDomain<T>

source§

fn clone(&self) -> DataDomain<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug + RegisterDomain> Debug for DataDomain<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, T> Deserialize<'de> for DataDomain<T>where - T: Deserialize<'de> + RegisterDomain,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<T: RegisterDomain + From<Bitvector>> From<ApInt> for DataDomain<T>

source§

fn from(bitvector: Bitvector) -> Self

Converts to this type from the input type.
source§

impl<T: RegisterDomain> From<T> for DataDomain<T>

source§

fn from(value: T) -> Self

Converts to this type from the input type.
source§

impl<T: RegisterDomain> HasTop for DataDomain<T>

source§

fn top(&self) -> Self

Generate a new Top element with the same bytesize as self.

-
source§

impl<T: Hash + RegisterDomain> Hash for DataDomain<T>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: PartialEq + RegisterDomain> PartialEq<DataDomain<T>> for DataDomain<T>

source§

fn eq(&self, other: &DataDomain<T>) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<T: RegisterDomain> RegisterDomain for DataDomain<T>

source§

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Compute the (abstract) result of a binary operation

-
source§

fn un_op(&self, op: UnOpType) -> Self

Compute the (abstract) result of a unary operation

-
source§

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

extract a sub-bitvector

-
source§

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Cast a bitvector using the given cast type

-
source§

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. -Has a generic implementation that should not be overwritten!
source§

impl<T> Serialize for DataDomain<T>where - T: Serialize + RegisterDomain,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<T: RegisterDomain> SizedDomain for DataDomain<T>

source§

fn bytesize(&self) -> ByteSize

Return the bytesize of self.

-
source§

fn new_top(bytesize: ByteSize) -> Self

Return a new Top element with the given bytesize.

+
source§

fn merge(&self, other: &Self) -> Self

Return an upper bound (with respect to the partial order on the domain) for the two inputs self and other.
source§

impl<T: RegisterDomain> Add for DataDomain<T>

§

type Output = DataDomain<T>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl<T: Clone + RegisterDomain> Clone for DataDomain<T>

source§

fn clone(&self) -> DataDomain<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug + RegisterDomain> Debug for DataDomain<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, T> Deserialize<'de> for DataDomain<T>where + T: Deserialize<'de> + RegisterDomain,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<T: RegisterDomain + From<Bitvector>> From<ApInt> for DataDomain<T>

source§

fn from(bitvector: Bitvector) -> Self

Converts to this type from the input type.
source§

impl<T: RegisterDomain> From<T> for DataDomain<T>

source§

fn from(value: T) -> Self

Converts to this type from the input type.
source§

impl<T: RegisterDomain> HasTop for DataDomain<T>

source§

fn top(&self) -> Self

Generate a new Top element with the same bytesize as self.

+
source§

impl<T: Hash + RegisterDomain> Hash for DataDomain<T>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: PartialEq + RegisterDomain> PartialEq for DataDomain<T>

source§

fn eq(&self, other: &DataDomain<T>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<T: RegisterDomain> RegisterDomain for DataDomain<T>

source§

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Compute the (abstract) result of a binary operation

+
source§

fn un_op(&self, op: UnOpType) -> Self

Compute the (abstract) result of a unary operation

+
source§

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

extract a sub-bitvector

+
source§

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Cast a bitvector using the given cast type

+
source§

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. +Has a generic implementation that should not be overwritten!
source§

impl<T> Serialize for DataDomain<T>where + T: Serialize + RegisterDomain,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<T: RegisterDomain> SizedDomain for DataDomain<T>

source§

fn bytesize(&self) -> ByteSize

Return the bytesize of self.

+
source§

fn new_top(bytesize: ByteSize) -> Self

Return a new Top element with the given bytesize.

Note that DataDomain technically does not have a Top element with respect to the partial order. Instead a Top element here represents a non-empty value for which nothing is known about the contained values.

-
source§

impl<T: SpecializeByConditional + RegisterDomain> SpecializeByConditional for DataDomain<T>

source§

fn intersect(self, other: &Self) -> Result<Self, Error>

Compute the intersetion of two DataDomains.

+
source§

impl<T: SpecializeByConditional + RegisterDomain> SpecializeByConditional for DataDomain<T>

source§

fn intersect(self, other: &Self) -> Result<Self, Error>

Compute the intersetion of two DataDomains.

Note that this implementation is unsound for several reasons:

  • For example, it assumes that two different relative values cannot intersect. @@ -89,47 +89,49 @@
  • If intersecting relative values with absolute values we represent the result with the absolute values. But depending on the use-case an approximation by the relative values could be more precise.
-
source§

fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound +
source§

fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound with self and bound interpreted as signed integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound +Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound with self and bound interpreted as unsigned integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_signed_greater_equal_bound( +Returns an error if no value represented by self can satisfy the comparison.

source§

fn add_signed_greater_equal_bound( self, bound: &Bitvector -) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound +) -> Result<Self, Error>
Return the restriction of self to values satisfying self >= bound with self and bound interpreted as signed integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_unsigned_greater_equal_bound( +Returns an error if no value represented by self can satisfy the comparison.

source§

fn add_unsigned_greater_equal_bound( self, bound: &Bitvector -) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound +) -> Result<Self, Error>
Return the restriction of self to values satisfying self >= bound with self and bound interpreted as unsigned integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self != bound -Returns an error if self only represents one value for which self == bound holds.
source§

fn without_widening_hints(self) -> Self

Remove all widening hints from self. +Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self != bound +Returns an error if self only represents one value for which self == bound holds.
source§

fn without_widening_hints(self) -> Self

Remove all widening hints from self. Necessary for cases where several sources have widening hints, -but only one source should contribute widening hints to the result.
source§

impl<T: RegisterDomain> Sub<DataDomain<T>> for DataDomain<T>

§

type Output = DataDomain<T>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl<T: RegisterDomain + TryToBitvec> TryToBitvec for DataDomain<T>

source§

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If the domain represents a single, absolute value, return it.

-
source§

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. +but only one source should contribute widening hints to the result.
source§

impl<T: RegisterDomain> Sub for DataDomain<T>

§

type Output = DataDomain<T>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl<T: RegisterDomain + TryToBitvec> TryToBitvec for DataDomain<T>

source§

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If the domain represents a single, absolute value, return it.

+
source§

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. Else return an error. -Note that the conversion loses information about the bytesize of the value.
source§

impl<T: RegisterDomain + TryToInterval> TryToInterval for DataDomain<T>

source§

fn try_to_interval(&self) -> Result<Interval, Error>

If the domain represents (or can be widened to) an interval of absolute values, return the interval.

-
source§

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) +Note that the conversion loses information about the bytesize of the value.
source§

impl<T: RegisterDomain + TryToInterval> TryToInterval for DataDomain<T>

source§

fn try_to_interval(&self) -> Result<Interval, Error>

If the domain represents (or can be widened to) an interval of absolute values, return the interval.

+
source§

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) then return it as an interval of signed integers if the interval is bounded. Else return an error. -Note that the conversion loses information about the bytesize of the values contained in the interval.
source§

impl<T: Eq + RegisterDomain> Eq for DataDomain<T>

source§

impl<T: RegisterDomain> StructuralEq for DataDomain<T>

source§

impl<T: RegisterDomain> StructuralPartialEq for DataDomain<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for DataDomain<T>where - T: RefUnwindSafe,

§

impl<T> Send for DataDomain<T>where - T: Send,

§

impl<T> Sync for DataDomain<T>where - T: Sync,

§

impl<T> Unpin for DataDomain<T>where - T: Unpin,

§

impl<T> UnwindSafe for DataDomain<T>where - T: UnwindSafe + RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<!> for T

const: unstable · source§

fn from(t: !) -> T

Converts to this type from the input type.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+Note that the conversion loses information about the bytesize of the values contained in the interval.
source§

impl<T: Eq + RegisterDomain> Eq for DataDomain<T>

source§

impl<T: RegisterDomain> StructuralEq for DataDomain<T>

source§

impl<T: RegisterDomain> StructuralPartialEq for DataDomain<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for DataDomain<T>where + T: RefUnwindSafe,

§

impl<T> Send for DataDomain<T>where + T: Send,

§

impl<T> Sync for DataDomain<T>where + T: Sync,

§

impl<T> Unpin for DataDomain<T>where + T: Unpin,

§

impl<T> UnwindSafe for DataDomain<T>where + T: UnwindSafe + RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<!> for T

source§

fn from(t: !) -> T

Converts to this type from the input type.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.DomainMap.html b/doc/html/cwe_checker_lib/abstract_domain/struct.DomainMap.html index 5413b79fd..40ed5c474 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.DomainMap.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.DomainMap.html @@ -1,5 +1,5 @@ -DomainMap in cwe_checker_lib::abstract_domain - Rust
pub struct DomainMap<K, V, S>where
-    K: PartialOrd + Ord + Clone,
+DomainMap in cwe_checker_lib::abstract_domain - Rust
pub struct DomainMap<K, V, S>where
+    K: PartialOrd + Ord + Clone,
     V: AbstractDomain,
     S: MapMergeStrategy<K, V>,{ /* private fields */ }
Expand description

A DomainMap<Key, Value, MapMergeStrategy> is a wrapper type around a BTreeMap<Key, Value> where the Value` type is an abstract domain and the map itself is also an abstract domain.

For example, a map from registers to an abstract domain representing the contained values @@ -12,33 +12,29 @@

Since a DomainMap implements the Deref and DerefMut traits with target the inner BTreeMap, it can be used just like a BTreeMap.

-

Methods from Deref<Target = BTreeMap<K, V>>§

1.0.0 · source

pub fn clear(&mut self)

Clears the map, removing all elements.

+

Methods from Deref<Target = BTreeMap<K, V>>§

1.0.0 · source

pub fn clear(&mut self)

Clears the map, removing all elements.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
 a.insert(1, "a");
 a.clear();
 assert!(a.is_empty());
-
1.0.0 · source

pub fn get<Q>(&self, key: &Q) -> Option<&V>where - K: Borrow<Q> + Ord, - Q: Ord + ?Sized,

Returns a reference to the value corresponding to the key.

+
1.0.0 · source

pub fn get<Q>(&self, key: &Q) -> Option<&V>where + K: Borrow<Q> + Ord, + Q: Ord + ?Sized,

Returns a reference to the value corresponding to the key.

The key may be any borrowed form of the map’s key type, but the ordering on the borrowed form must match the ordering on the key type.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
 map.insert(1, "a");
 assert_eq!(map.get(&1), Some(&"a"));
 assert_eq!(map.get(&2), None);
-
1.40.0 · source

pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>where - K: Borrow<Q> + Ord, - Q: Ord + ?Sized,

Returns the key-value pair corresponding to the supplied key.

+
1.40.0 · source

pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>where + K: Borrow<Q> + Ord, + Q: Ord + ?Sized,

Returns the key-value pair corresponding to the supplied key.

The supplied key may be any borrowed form of the map’s key type, but the ordering on the borrowed form must match the ordering on the key type.

Examples
@@ -48,12 +44,10 @@
Examples
map.insert(1, "a"); assert_eq!(map.get_key_value(&1), Some((&1, &"a"))); assert_eq!(map.get_key_value(&2), None);
-
1.66.0 · source

pub fn first_key_value(&self) -> Option<(&K, &V)>where - K: Ord,

Returns the first key-value pair in the map. +

1.66.0 · source

pub fn first_key_value(&self) -> Option<(&K, &V)>where + K: Ord,

Returns the first key-value pair in the map. The key in this pair is the minimum key in the map.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
@@ -61,8 +55,8 @@ 
Examples
map.insert(1, "b"); map.insert(2, "a"); assert_eq!(map.first_key_value(), Some((&1, &"b")));
-
1.66.0 · source

pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>where - K: Ord,

Returns the first entry in the map for in-place manipulation. +

1.66.0 · source

pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>where + K: Ord,

Returns the first entry in the map for in-place manipulation. The key of this entry is the minimum key in the map.

Examples
use std::collections::BTreeMap;
@@ -77,8 +71,8 @@ 
Examples
} assert_eq!(*map.get(&1).unwrap(), "first"); assert_eq!(*map.get(&2).unwrap(), "b");
-
1.66.0 · source

pub fn pop_first(&mut self) -> Option<(K, V)>where - K: Ord,

Removes and returns the first element in the map. +

1.66.0 · source

pub fn pop_first(&mut self) -> Option<(K, V)>where + K: Ord,

Removes and returns the first element in the map. The key of this element is the minimum key that was in the map.

Examples

Draining elements in ascending order, while keeping a usable map each iteration.

@@ -92,20 +86,18 @@
Examples
assert!(map.iter().all(|(k, _v)| *k > key)); } assert!(map.is_empty());
-
1.66.0 · source

pub fn last_key_value(&self) -> Option<(&K, &V)>where - K: Ord,

Returns the last key-value pair in the map. +

1.66.0 · source

pub fn last_key_value(&self) -> Option<(&K, &V)>where + K: Ord,

Returns the last key-value pair in the map. The key in this pair is the maximum key in the map.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
 map.insert(1, "b");
 map.insert(2, "a");
 assert_eq!(map.last_key_value(), Some((&2, &"a")));
-
1.66.0 · source

pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>where - K: Ord,

Returns the last entry in the map for in-place manipulation. +

1.66.0 · source

pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>where + K: Ord,

Returns the last entry in the map for in-place manipulation. The key of this entry is the maximum key in the map.

Examples
use std::collections::BTreeMap;
@@ -120,8 +112,8 @@ 
Examples
} assert_eq!(*map.get(&1).unwrap(), "a"); assert_eq!(*map.get(&2).unwrap(), "last");
-
1.66.0 · source

pub fn pop_last(&mut self) -> Option<(K, V)>where - K: Ord,

Removes and returns the last element in the map. +

1.66.0 · source

pub fn pop_last(&mut self) -> Option<(K, V)>where + K: Ord,

Removes and returns the last element in the map. The key of this element is the maximum key that was in the map.

Examples

Draining elements in descending order, while keeping a usable map each iteration.

@@ -135,28 +127,24 @@
Examples
assert!(map.iter().all(|(k, _v)| *k < key)); } assert!(map.is_empty());
-
1.0.0 · source

pub fn contains_key<Q>(&self, key: &Q) -> boolwhere - K: Borrow<Q> + Ord, - Q: Ord + ?Sized,

Returns true if the map contains a value for the specified key.

+
1.0.0 · source

pub fn contains_key<Q>(&self, key: &Q) -> boolwhere + K: Borrow<Q> + Ord, + Q: Ord + ?Sized,

Returns true if the map contains a value for the specified key.

The key may be any borrowed form of the map’s key type, but the ordering on the borrowed form must match the ordering on the key type.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
 map.insert(1, "a");
 assert_eq!(map.contains_key(&1), true);
 assert_eq!(map.contains_key(&2), false);
-
1.0.0 · source

pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>where - K: Borrow<Q> + Ord, - Q: Ord + ?Sized,

Returns a mutable reference to the value corresponding to the key.

+
1.0.0 · source

pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>where + K: Borrow<Q> + Ord, + Q: Ord + ?Sized,

Returns a mutable reference to the value corresponding to the key.

The key may be any borrowed form of the map’s key type, but the ordering on the borrowed form must match the ordering on the key type.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
@@ -165,16 +153,14 @@ 
Examples
*x = "b"; } assert_eq!(map[&1], "b");
-
1.0.0 · source

pub fn insert(&mut self, key: K, value: V) -> Option<V>where - K: Ord,

Inserts a key-value pair into the map.

+
1.0.0 · source

pub fn insert(&mut self, key: K, value: V) -> Option<V>where + K: Ord,

Inserts a key-value pair into the map.

If the map did not have this key present, None is returned.

If the map did have this key present, the value is updated, and the old value is returned. The key is not updated, though; this matters for types that can be == without being identical. See the module-level documentation for more.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
@@ -184,18 +170,16 @@ 
Examples
map.insert(37, "b"); assert_eq!(map.insert(37, "c"), Some("b")); assert_eq!(map[&37], "c");
-
source

pub fn try_insert( +

source

pub fn try_insert( &mut self, key: K, value: V -) -> Result<&mut V, OccupiedError<'_, K, V, A>>where - K: Ord,

🔬This is a nightly-only experimental API. (map_try_insert)

Tries to insert a key-value pair into the map, and returns +) -> Result<&mut V, OccupiedError<'_, K, V, A>>where + K: Ord,

🔬This is a nightly-only experimental API. (map_try_insert)

Tries to insert a key-value pair into the map, and returns a mutable reference to the value in the entry.

If the map already had this key present, nothing is updated, and an error containing the occupied entry and the value is returned.

Examples
-

Basic usage:

-
#![feature(map_try_insert)]
 
 use std::collections::BTreeMap;
@@ -207,39 +191,35 @@ 
Examples
assert_eq!(err.entry.key(), &37); assert_eq!(err.entry.get(), &"a"); assert_eq!(err.value, "b");
-
1.0.0 · source

pub fn remove<Q>(&mut self, key: &Q) -> Option<V>where - K: Borrow<Q> + Ord, - Q: Ord + ?Sized,

Removes a key from the map, returning the value at the key if the key +

1.0.0 · source

pub fn remove<Q>(&mut self, key: &Q) -> Option<V>where + K: Borrow<Q> + Ord, + Q: Ord + ?Sized,

Removes a key from the map, returning the value at the key if the key was previously in the map.

The key may be any borrowed form of the map’s key type, but the ordering on the borrowed form must match the ordering on the key type.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
 map.insert(1, "a");
 assert_eq!(map.remove(&1), Some("a"));
 assert_eq!(map.remove(&1), None);
-
1.45.0 · source

pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>where - K: Borrow<Q> + Ord, - Q: Ord + ?Sized,

Removes a key from the map, returning the stored key and value if the key +

1.45.0 · source

pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>where + K: Borrow<Q> + Ord, + Q: Ord + ?Sized,

Removes a key from the map, returning the stored key and value if the key was previously in the map.

The key may be any borrowed form of the map’s key type, but the ordering on the borrowed form must match the ordering on the key type.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
 map.insert(1, "a");
 assert_eq!(map.remove_entry(&1), Some((1, "a")));
 assert_eq!(map.remove_entry(&1), None);
-
1.53.0 · source

pub fn retain<F>(&mut self, f: F)where - K: Ord, - F: FnMut(&K, &mut V) -> bool,

Retains only the elements specified by the predicate.

+
1.53.0 · source

pub fn retain<F>(&mut self, f: F)where + K: Ord, + F: FnMut(&K, &mut V) -> bool,

Retains only the elements specified by the predicate.

In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false. The elements are visited in ascending key order.

Examples
@@ -249,9 +229,9 @@
Examples
// Keep only the elements with even-numbered keys. map.retain(|&k, _| k % 2 == 0); assert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
-
1.11.0 · source

pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)where - K: Ord, - A: Clone,

Moves all elements from other into self, leaving other empty.

+
1.11.0 · source

pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)where + K: Ord, + A: Clone,

Moves all elements from other into self, leaving other empty.

If a key from other is already present in self, the respective value from self will be overwritten with the respective value from other.

Examples
@@ -277,10 +257,10 @@
Examples
assert_eq!(a[&3], "d"); // Note: "c" has been overwritten. assert_eq!(a[&4], "e"); assert_eq!(a[&5], "f");
-
1.17.0 · source

pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>where - T: Ord + ?Sized, - K: Borrow<T> + Ord, - R: RangeBounds<T>,

Constructs a double-ended iterator over a sub-range of elements in the map. +

1.17.0 · source

pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>where + T: Ord + ?Sized, + K: Borrow<T> + Ord, + R: RangeBounds<T>,

Constructs a double-ended iterator over a sub-range of elements in the map. The simplest way is to use the range syntax min..max, thus range(min..max) will yield elements from min (inclusive) to max (exclusive). The range may also be entered as (Bound<T>, Bound<T>), so for example @@ -290,8 +270,6 @@

Panics

Panics if range start > end. Panics if range start == end and both bounds are Excluded.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 use std::ops::Bound::Included;
 
@@ -303,10 +281,10 @@ 
Examples
println!("{key}: {value}"); } assert_eq!(Some((&5, &"b")), map.range(4..).next());
-
1.17.0 · source

pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>where - T: Ord + ?Sized, - K: Borrow<T> + Ord, - R: RangeBounds<T>,

Constructs a mutable double-ended iterator over a sub-range of elements in the map. +

1.17.0 · source

pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>where + T: Ord + ?Sized, + K: Borrow<T> + Ord, + R: RangeBounds<T>,

Constructs a mutable double-ended iterator over a sub-range of elements in the map. The simplest way is to use the range syntax min..max, thus range(min..max) will yield elements from min (inclusive) to max (exclusive). The range may also be entered as (Bound<T>, Bound<T>), so for example @@ -316,8 +294,6 @@

Panics

Panics if range start > end. Panics if range start == end and both bounds are Excluded.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map: BTreeMap<&str, i32> =
@@ -328,11 +304,9 @@ 
Examples
for (name, balance) in &map { println!("{name} => {balance}"); }
-
1.0.0 · source

pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>where - K: Ord,

Gets the given key’s corresponding entry in the map for in-place manipulation.

+
1.0.0 · source

pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>where + K: Ord,

Gets the given key’s corresponding entry in the map for in-place manipulation.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut count: BTreeMap<&str, usize> = BTreeMap::new();
@@ -345,14 +319,12 @@ 
Examples
assert_eq!(count["a"], 3); assert_eq!(count["b"], 2); assert_eq!(count["c"], 1);
-
1.11.0 · source

pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>where - Q: Ord + ?Sized, - K: Borrow<Q> + Ord, - A: Clone,

Splits the collection into two at the given key. Returns everything after the given key, +

1.11.0 · source

pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>where + Q: Ord + ?Sized, + K: Borrow<Q> + Ord, + A: Clone,

Splits the collection into two at the given key. Returns everything after the given key, including the key.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
@@ -373,37 +345,31 @@ 
Examples
assert_eq!(b[&3], "c"); assert_eq!(b[&17], "d"); assert_eq!(b[&41], "e");
-
source

pub fn drain_filter<F>(&mut self, pred: F) -> DrainFilter<'_, K, V, F, A>where - K: Ord, - F: FnMut(&K, &mut V) -> bool,

🔬This is a nightly-only experimental API. (btree_drain_filter)

Creates an iterator that visits all elements (key-value pairs) in +

source

pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>where + K: Ord, + F: FnMut(&K, &mut V) -> bool,

🔬This is a nightly-only experimental API. (btree_extract_if)

Creates an iterator that visits all elements (key-value pairs) in ascending key order and uses a closure to determine if an element should be removed. If the closure returns true, the element is removed from the map and yielded. If the closure returns false, or panics, the element remains in the map and will not be yielded.

The iterator also lets you mutate the value of each element in the closure, regardless of whether you choose to keep or remove it.

-

If the iterator is only partially consumed or not consumed at all, each -of the remaining elements is still subjected to the closure, which may -change its value and, by returning true, have the element removed and -dropped.

-

It is unspecified how many more elements will be subjected to the -closure if a panic occurs in the closure, or a panic occurs while -dropping an element, or if the DrainFilter value is leaked.

+

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating +or the iteration short-circuits, then the remaining elements will be retained. +Use retain with a negated predicate if you do not need the returned iterator.

Examples

Splitting a map into even and odd keys, reusing the original map:

-
#![feature(btree_drain_filter)]
+
#![feature(btree_extract_if)]
 use std::collections::BTreeMap;
 
 let mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();
-let evens: BTreeMap<_, _> = map.drain_filter(|k, _v| k % 2 == 0).collect();
+let evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();
 let odds = map;
 assert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);
 assert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
-
1.0.0 · source

pub fn iter(&self) -> Iter<'_, K, V>

Gets an iterator over the entries of the map, sorted by key.

+
1.0.0 · source

pub fn iter(&self) -> Iter<'_, K, V>

Gets an iterator over the entries of the map, sorted by key.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::new();
@@ -417,10 +383,8 @@ 
Examples
let (first_key, first_value) = map.iter().next().unwrap(); assert_eq!((*first_key, *first_value), (1, "a"));
-
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

Gets a mutable iterator over the entries of the map, sorted by key.

+
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

Gets a mutable iterator over the entries of the map, sorted by key.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut map = BTreeMap::from([
@@ -435,10 +399,8 @@ 
Examples
*value += 10; } }
-
1.0.0 · source

pub fn keys(&self) -> Keys<'_, K, V>

Gets an iterator over the keys of the map, in sorted order.

+
1.0.0 · source

pub fn keys(&self) -> Keys<'_, K, V>

Gets an iterator over the keys of the map, in sorted order.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
@@ -447,10 +409,8 @@ 
Examples
let keys: Vec<_> = a.keys().cloned().collect(); assert_eq!(keys, [1, 2]);
-
1.0.0 · source

pub fn values(&self) -> Values<'_, K, V>

Gets an iterator over the values of the map, in order by key.

+
1.0.0 · source

pub fn values(&self) -> Values<'_, K, V>

Gets an iterator over the values of the map, in order by key.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
@@ -459,10 +419,8 @@ 
Examples
let values: Vec<&str> = a.values().cloned().collect(); assert_eq!(values, ["hello", "goodbye"]);
-
1.10.0 · source

pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

Gets a mutable iterator over the values of the map, in order by key.

+
1.10.0 · source

pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

Gets a mutable iterator over the values of the map, in order by key.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
@@ -476,37 +434,31 @@ 
Examples
let values: Vec<String> = a.values().cloned().collect(); assert_eq!(values, [String::from("hello!"), String::from("goodbye!")]);
-
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the map.

+
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the map.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
 assert_eq!(a.len(), 0);
 a.insert(1, "a");
 assert_eq!(a.len(), 1);
-
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the map contains no elements.

+
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the map contains no elements.

Examples
-

Basic usage:

-
use std::collections::BTreeMap;
 
 let mut a = BTreeMap::new();
 assert!(a.is_empty());
 a.insert(1, "a");
 assert!(!a.is_empty());
-
source

pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>where - K: Borrow<Q> + Ord, - Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a Cursor pointing at the first element that is above the +

source

pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>where + K: Borrow<Q> + Ord, + Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a Cursor pointing at the first element that is above the given bound.

If no such element exists then a cursor pointing at the “ghost” non-element is returned.

-

Passing Bound::Unbounded will return a cursor pointing at the first +

Passing Bound::Unbounded will return a cursor pointing at the first element of the map.

Examples
-

Basic usage:

-
#![feature(btree_cursors)]
 
 use std::collections::BTreeMap;
@@ -517,19 +469,19 @@ 
Examples
a.insert(2, "b"); a.insert(3, "c"); a.insert(4, "c"); +let cursor = a.lower_bound(Bound::Included(&2)); +assert_eq!(cursor.key(), Some(&2)); let cursor = a.lower_bound(Bound::Excluded(&2)); assert_eq!(cursor.key(), Some(&3));
-
source

pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>where - K: Borrow<Q> + Ord, - Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a CursorMut pointing at the first element that is above the +

source

pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>where + K: Borrow<Q> + Ord, + Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a CursorMut pointing at the first element that is above the given bound.

If no such element exists then a cursor pointing at the “ghost” non-element is returned.

-

Passing Bound::Unbounded will return a cursor pointing at the first +

Passing Bound::Unbounded will return a cursor pointing at the first element of the map.

Examples
-

Basic usage:

-
#![feature(btree_cursors)]
 
 use std::collections::BTreeMap;
@@ -540,19 +492,19 @@ 
Examples
a.insert(2, "b"); a.insert(3, "c"); a.insert(4, "c"); +let cursor = a.lower_bound_mut(Bound::Included(&2)); +assert_eq!(cursor.key(), Some(&2)); let cursor = a.lower_bound_mut(Bound::Excluded(&2)); assert_eq!(cursor.key(), Some(&3));
-
source

pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>where - K: Borrow<Q> + Ord, - Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a Cursor pointing at the last element that is below the +

source

pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>where + K: Borrow<Q> + Ord, + Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a Cursor pointing at the last element that is below the given bound.

If no such element exists then a cursor pointing at the “ghost” non-element is returned.

-

Passing Bound::Unbounded will return a cursor pointing at the last +

Passing Bound::Unbounded will return a cursor pointing at the last element of the map.

Examples
-

Basic usage:

-
#![feature(btree_cursors)]
 
 use std::collections::BTreeMap;
@@ -563,19 +515,19 @@ 
Examples
a.insert(2, "b"); a.insert(3, "c"); a.insert(4, "c"); +let cursor = a.upper_bound(Bound::Included(&3)); +assert_eq!(cursor.key(), Some(&3)); let cursor = a.upper_bound(Bound::Excluded(&3)); assert_eq!(cursor.key(), Some(&2));
-
source

pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>where - K: Borrow<Q> + Ord, - Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a CursorMut pointing at the last element that is below the +

source

pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>where + K: Borrow<Q> + Ord, + Q: Ord,

🔬This is a nightly-only experimental API. (btree_cursors)

Returns a CursorMut pointing at the last element that is below the given bound.

If no such element exists then a cursor pointing at the “ghost” non-element is returned.

-

Passing Bound::Unbounded will return a cursor pointing at the last +

Passing Bound::Unbounded will return a cursor pointing at the last element of the map.

Examples
-

Basic usage:

-
#![feature(btree_cursors)]
 
 use std::collections::BTreeMap;
@@ -586,81 +538,85 @@ 
Examples
a.insert(2, "b"); a.insert(3, "c"); a.insert(4, "c"); +let cursor = a.upper_bound_mut(Bound::Included(&3)); +assert_eq!(cursor.key(), Some(&3)); let cursor = a.upper_bound_mut(Bound::Excluded(&3)); assert_eq!(cursor.key(), Some(&2));
-

Trait Implementations§

source§

impl<K, V, S> AbstractDomain for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, +

Trait Implementations§

source§

impl<K, V, S> AbstractDomain for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V> + Clone + Eq,

source§

fn merge(&self, other: &Self) -> Self

Merge two DomainMaps according to the MapMergeStrategy of the DomainMap.

-
source§

fn is_top(&self) -> bool

A DomainMap is considered to be a Top element if it is empty.

-
source§

impl<K, V, S> Clone for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone + Clone, - V: AbstractDomain + Clone, - S: MapMergeStrategy<K, V> + Clone,

source§

fn clone(&self) -> DomainMap<K, V, S>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K, V, S> Debug for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone + Debug, - V: AbstractDomain + Debug, - S: MapMergeStrategy<K, V> + Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K, V, S> Deref for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, + S: MapMergeStrategy<K, V> + Clone + Eq,

source§

fn merge(&self, other: &Self) -> Self

Merge two DomainMaps according to the MapMergeStrategy of the DomainMap.

+
source§

fn is_top(&self) -> bool

A DomainMap is considered to be a Top element if it is empty.

+
source§

impl<K, V, S> Clone for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone + Clone, + V: AbstractDomain + Clone, + S: MapMergeStrategy<K, V> + Clone,

source§

fn clone(&self) -> DomainMap<K, V, S>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K, V, S> Debug for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone + Debug, + V: AbstractDomain + Debug, + S: MapMergeStrategy<K, V> + Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K, V, S> Deref for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V>,

§

type Target = BTreeMap<K, V, Global>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<K, V, S> DerefMut for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, + S: MapMergeStrategy<K, V>,

§

type Target = BTreeMap<K, V>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<K, V, S> DerefMut for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V>,

source§

fn deref_mut(&mut self) -> &mut BTreeMap<K, V>

Mutably dereferences the value.
source§

impl<'de, K, V, S> Deserialize<'de> for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone + Deserialize<'de>, - V: AbstractDomain + Deserialize<'de>, - S: MapMergeStrategy<K, V>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K, V, S> From<BTreeMap<K, V, Global>> for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, + S: MapMergeStrategy<K, V>,

source§

fn deref_mut(&mut self) -> &mut BTreeMap<K, V>

Mutably dereferences the value.
source§

impl<'de, K, V, S> Deserialize<'de> for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone + Deserialize<'de>, + V: AbstractDomain + Deserialize<'de>, + S: MapMergeStrategy<K, V>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K, V, S> From<BTreeMap<K, V>> for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V>,

source§

fn from(map: BTreeMap<K, V>) -> Self

Generate a new DomainMap from the BTreeMap that it should contain.

-
source§

impl<K, V, S> FromIterator<(K, V)> for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, + S: MapMergeStrategy<K, V>,

source§

fn from(map: BTreeMap<K, V>) -> Self

Generate a new DomainMap from the BTreeMap that it should contain.

+
source§

impl<K, V, S> FromIterator<(K, V)> for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V>,

source§

fn from_iter<I>(iter: I) -> Selfwhere - I: IntoIterator<Item = (K, V)>,

Generate a new DomainMap from an iterator over the key-value pairs that it should contain.

-
source§

impl<K, V, S> PartialEq<DomainMap<K, V, S>> for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone + PartialEq, - V: AbstractDomain + PartialEq, - S: MapMergeStrategy<K, V> + PartialEq,

source§

fn eq(&self, other: &DomainMap<K, V, S>) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<K, V, S> Serialize for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone + Serialize, - V: AbstractDomain + Serialize, - S: MapMergeStrategy<K, V>,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K, V, S> Eq for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone + Eq, - V: AbstractDomain + Eq, - S: MapMergeStrategy<K, V> + Eq,

source§

impl<K, V, S> StructuralEq for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, + S: MapMergeStrategy<K, V>,

source§

fn from_iter<I>(iter: I) -> Selfwhere + I: IntoIterator<Item = (K, V)>,

Generate a new DomainMap from an iterator over the key-value pairs that it should contain.

+
source§

impl<K, V, S> PartialEq for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone + PartialEq, + V: AbstractDomain + PartialEq, + S: MapMergeStrategy<K, V> + PartialEq,

source§

fn eq(&self, other: &DomainMap<K, V, S>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<K, V, S> Serialize for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone + Serialize, + V: AbstractDomain + Serialize, + S: MapMergeStrategy<K, V>,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K, V, S> Eq for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone + Eq, + V: AbstractDomain + Eq, + S: MapMergeStrategy<K, V> + Eq,

source§

impl<K, V, S> StructuralEq for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V>,

source§

impl<K, V, S> StructuralPartialEq for DomainMap<K, V, S>where - K: PartialOrd + Ord + Clone, + S: MapMergeStrategy<K, V>,

source§

impl<K, V, S> StructuralPartialEq for DomainMap<K, V, S>where + K: PartialOrd + Ord + Clone, V: AbstractDomain, - S: MapMergeStrategy<K, V>,

Auto Trait Implementations§

§

impl<K, V, S> RefUnwindSafe for DomainMap<K, V, S>where - K: RefUnwindSafe, - S: RefUnwindSafe, - V: RefUnwindSafe,

§

impl<K, V, S> Send for DomainMap<K, V, S>where - K: Send + Sync, - S: Send, - V: Send + Sync,

§

impl<K, V, S> Sync for DomainMap<K, V, S>where - K: Send + Sync, - S: Sync, - V: Send + Sync,

§

impl<K, V, S> Unpin for DomainMap<K, V, S>where - S: Unpin,

§

impl<K, V, S> UnwindSafe for DomainMap<K, V, S>where - K: RefUnwindSafe, - S: UnwindSafe, - V: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+ S: MapMergeStrategy<K, V>,

Auto Trait Implementations§

§

impl<K, V, S> RefUnwindSafe for DomainMap<K, V, S>where + K: RefUnwindSafe, + S: RefUnwindSafe, + V: RefUnwindSafe,

§

impl<K, V, S> Send for DomainMap<K, V, S>where + K: Send + Sync, + S: Send, + V: Send + Sync,

§

impl<K, V, S> Sync for DomainMap<K, V, S>where + K: Send + Sync, + S: Sync, + V: Send + Sync,

§

impl<K, V, S> Unpin for DomainMap<K, V, S>where + S: Unpin,

§

impl<K, V, S> UnwindSafe for DomainMap<K, V, S>where + K: RefUnwindSafe, + S: UnwindSafe, + V: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.IntersectMergeStrategy.html b/doc/html/cwe_checker_lib/abstract_domain/struct.IntersectMergeStrategy.html index dd427c8d3..5bc4be8e2 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.IntersectMergeStrategy.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.IntersectMergeStrategy.html @@ -1,29 +1,31 @@ -IntersectMergeStrategy in cwe_checker_lib::abstract_domain - Rust
pub struct IntersectMergeStrategy { /* private fields */ }
Expand description

A MapMergeStrategy where the merge function only keeps keys +IntersectMergeStrategy in cwe_checker_lib::abstract_domain - Rust

pub struct IntersectMergeStrategy { /* private fields */ }
Expand description

A MapMergeStrategy where the merge function only keeps keys that are present in both input maps. Furthermore, keys whose values are merged to the Top value are also removed from the merged map.

The strategy is meant to be used for maps, where keys not present in the map have an implicit Top value associated to them. The strategy implicitly assumes that the Top value of the value abstract domain is an actual maximal value of the domain.

-

Trait Implementations§

source§

impl Clone for IntersectMergeStrategy

source§

fn clone(&self) -> IntersectMergeStrategy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IntersectMergeStrategy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for IntersectMergeStrategy

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: Ord + Clone, V: AbstractDomain> MapMergeStrategy<K, V> for IntersectMergeStrategy

source§

fn merge_map( - map_left: &BTreeMap<K, V>, - map_right: &BTreeMap<K, V> -) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.
source§

impl PartialEq<IntersectMergeStrategy> for IntersectMergeStrategy

source§

fn eq(&self, other: &IntersectMergeStrategy) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for IntersectMergeStrategy

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for IntersectMergeStrategy

source§

impl StructuralEq for IntersectMergeStrategy

source§

impl StructuralPartialEq for IntersectMergeStrategy

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Clone for IntersectMergeStrategy

source§

fn clone(&self) -> IntersectMergeStrategy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IntersectMergeStrategy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for IntersectMergeStrategy

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: Ord + Clone, V: AbstractDomain> MapMergeStrategy<K, V> for IntersectMergeStrategy

source§

fn merge_map( + map_left: &BTreeMap<K, V>, + map_right: &BTreeMap<K, V> +) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.
source§

impl PartialEq for IntersectMergeStrategy

source§

fn eq(&self, other: &IntersectMergeStrategy) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for IntersectMergeStrategy

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for IntersectMergeStrategy

source§

impl StructuralEq for IntersectMergeStrategy

source§

impl StructuralPartialEq for IntersectMergeStrategy

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.Interval.html b/doc/html/cwe_checker_lib/abstract_domain/struct.Interval.html index f5f7743db..8a0dd01fa 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.Interval.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.Interval.html @@ -1,7 +1,7 @@ -Interval in cwe_checker_lib::abstract_domain - Rust
pub struct Interval {
+Interval in cwe_checker_lib::abstract_domain - Rust
pub struct Interval {
     pub start: Bitvector,
     pub end: Bitvector,
-    pub stride: u64,
+    pub stride: u64,
 }
Expand description

A strided interval of values with a fixed byte size.

The interval bounds are interpreted as signed integers, i.e. self.start is not allowed to be greater than self.end @@ -14,71 +14,73 @@

Fields§

§start: Bitvector

The start of the interval. The bound is included in the represented interval.

§end: Bitvector

The end of the interval. The bound is included in the represented interval.

-
§stride: u64

The stride.

-

Implementations§

source§

impl Interval

source

pub fn new(start: Bitvector, end: Bitvector, stride: u64) -> Interval

Construct a new interval.

+
§stride: u64

The stride.

+

Implementations§

source§

impl Interval

source

pub fn new(start: Bitvector, end: Bitvector, stride: u64) -> Interval

Construct a new interval.

Both start and end of the interval are inclusive, i.e. contained in the represented interval.

The function automatically rounds down end (if necessary) so that it is contained in the same residue class as the start value modulo the stride. If the stride is 0 then end will be set to start.

-
source

pub fn new_top(bytesize: ByteSize) -> Interval

Construct a new unconstrained interval.

-
source

pub fn is_top(&self) -> bool

Returns true if all values representable by bitvectors of the corresponding length are contained in the interval.

-
source

pub fn bytesize(&self) -> ByteSize

Get the size in bytes of values contained in the interval.

-
source

pub fn signed_merge(&self, other: &Interval) -> Interval

Merge two intervals interpreting both as intervals of signed integers.

-
source

pub fn signed_intersect(&self, other: &Interval) -> Result<Interval, Error>

Compute the intersection of two intervals as intervals of signed integers. +

source

pub fn new_top(bytesize: ByteSize) -> Interval

Construct a new unconstrained interval.

+
source

pub fn is_top(&self) -> bool

Returns true if all values representable by bitvectors of the corresponding length are contained in the interval.

+
source

pub fn bytesize(&self) -> ByteSize

Get the size in bytes of values contained in the interval.

+
source

pub fn signed_merge(&self, other: &Interval) -> Interval

Merge two intervals interpreting both as intervals of signed integers.

+
source

pub fn signed_intersect(&self, other: &Interval) -> Result<Interval, Error>

Compute the intersection of two intervals as intervals of signed integers. Return an error if the intersection is empty.

-
source

pub fn adjust_end_to_value_in_stride(&mut self)

Round down self.end to the nearest value such that self.end - self.start is again divisible by the stride. +

source

pub fn adjust_end_to_value_in_stride(&mut self)

Round down self.end to the nearest value such that self.end - self.start is again divisible by the stride. If afterwards self.start == self.end holds then set the stride to 0.

-
source

pub fn adjust_start_to_value_in_stride(&mut self)

Round up self.start to the nearest value such that self.end - self.start is again divisible by the stride. +

source

pub fn adjust_start_to_value_in_stride(&mut self)

Round up self.start to the nearest value such that self.end - self.start is again divisible by the stride. If afterwards self.start == self.end holds then set the stride to 0.

-
source

pub fn adjust_to_stride_and_remainder( +

source

pub fn adjust_to_stride_and_remainder( self, - stride: u64, - remainder: u64 -) -> Result<Self, Error>

Change the given interval such that it only contains values with the given remainder modulo the given stride. + stride: u64, + remainder: u64 +) -> Result<Self, Error>

Change the given interval such that it only contains values with the given remainder modulo the given stride. This may round up the start of the interval and may round down the end of the interval. If the resulting interval is empty then an error is returned. This function ignores and replaces the previous stride of the interval.

For intervals with bytesize greater than 8 this function just returns the unmodified interval.

-
source

pub fn zero_extend(self, width: ByteSize) -> Interval

Compute the interval represented if the byte size of the value is zero-extended.

-
source

pub fn subpiece_higher(self, low_byte: ByteSize) -> Self

Truncate the bitvectors in the interval +

source

pub fn zero_extend(self, width: ByteSize) -> Interval

Compute the interval represented if the byte size of the value is zero-extended.

+
source

pub fn subpiece_higher(self, low_byte: ByteSize) -> Self

Truncate the bitvectors in the interval by removing the least significant bytes lower than the low_byte from them.

-
source

pub fn subpiece_lower(self, size: ByteSize) -> Self

Truncate the bitvectors in the interval to size, +

source

pub fn subpiece_lower(self, size: ByteSize) -> Self

Truncate the bitvectors in the interval to size, i.e. the most significant bytes (higher than size) are removed from all values.

-
source

pub fn subpiece(self, low_byte: ByteSize, size: ByteSize) -> Self

Take a subpiece of the bitvectors.

-
source

pub fn piece(&self, other: &Interval) -> Self

Piece two intervals together, where self contains the most signifcant bytes +

source

pub fn subpiece(self, low_byte: ByteSize, size: ByteSize) -> Self

Take a subpiece of the bitvectors.

+
source

pub fn piece(&self, other: &Interval) -> Self

Piece two intervals together, where self contains the most signifcant bytes and other contains the least significant bytes of the resulting values.

-
source

pub fn int_2_comp(self) -> Self

Take the 2’s complement of values in the interval.

-
source

pub fn bitwise_not(self) -> Self

Compute the bitwise negation of values in the interval. +

source

pub fn int_2_comp(self) -> Self

Take the 2’s complement of values in the interval.

+
source

pub fn bitwise_not(self) -> Self

Compute the bitwise negation of values in the interval. Only exact if there is exactly one value in the interval.

-
source

pub fn add(&self, rhs: &Interval) -> Interval

Compute the interval of possible results +

source

pub fn add(&self, rhs: &Interval) -> Interval

Compute the interval of possible results if one adds a value from self to a value from rhs.

-
source

pub fn sub(&self, rhs: &Interval) -> Interval

Compute the interval of possible results +

source

pub fn sub(&self, rhs: &Interval) -> Interval

Compute the interval of possible results if one subtracts a value in rhs from a value in self.

-
source

pub fn signed_mul(&self, rhs: &Interval) -> Interval

Compute the interval of possible results +

source

pub fn signed_mul(&self, rhs: &Interval) -> Interval

Compute the interval of possible results if one multiplies a value in self with a value in rhs.

-
source

pub fn contains(&self, bitvec: &Bitvector) -> bool

Return true if bitvec is contained in the strided interval. +

source

pub fn contains(&self, bitvec: &Bitvector) -> bool

Return true if bitvec is contained in the strided interval. Panics if the interval and bitvec have different bytesizes.

-

Trait Implementations§

source§

impl Clone for Interval

source§

fn clone(&self) -> Interval

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Interval

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Interval

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<ApInt> for Interval

source§

fn from(bitvec: Bitvector) -> Self

Create an interval that only contains the given bitvector.

-
source§

impl From<Interval> for IntervalDomain

source§

fn from(interval: Interval) -> IntervalDomain

Generate an interval domain without widening hints.

-
source§

impl Hash for Interval

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<Interval> for Interval

source§

fn eq(&self, other: &Interval) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Interval

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Interval

source§

impl StructuralEq for Interval

source§

impl StructuralPartialEq for Interval

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Clone for Interval

source§

fn clone(&self) -> Interval

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Interval

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Interval

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<ApInt> for Interval

source§

fn from(bitvec: Bitvector) -> Self

Create an interval that only contains the given bitvector.

+
source§

impl From<Interval> for IntervalDomain

source§

fn from(interval: Interval) -> IntervalDomain

Generate an interval domain without widening hints.

+
source§

impl Hash for Interval

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for Interval

source§

fn eq(&self, other: &Interval) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Interval

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Interval

source§

impl StructuralEq for Interval

source§

impl StructuralPartialEq for Interval

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.IntervalDomain.html b/doc/html/cwe_checker_lib/abstract_domain/struct.IntervalDomain.html index 307f671b9..7c8e467b3 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.IntervalDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.IntervalDomain.html @@ -1,4 +1,4 @@ -IntervalDomain in cwe_checker_lib::abstract_domain - Rust
pub struct IntervalDomain { /* private fields */ }
Expand description

An abstract domain representing values in an interval range with strides and widening hints.

+IntervalDomain in cwe_checker_lib::abstract_domain - Rust
pub struct IntervalDomain { /* private fields */ }
Expand description

An abstract domain representing values in an interval range with strides and widening hints.

The interval bounds are signed integers, i.e. the domain looses precision if tasked to represent large unsigned integers. The interval has a stride, @@ -8,27 +8,27 @@ See the IntervalDomain::signed_merge_and_widen method for details on the widening strategy. Note that the widening hints may not respect the stride, i.e. they may be contained in different residue classes than the interval bounds.

-

Implementations§

source§

impl IntervalDomain

source

pub fn add(&self, rhs: &Self) -> Self

Compute the interval of possible results +

Implementations§

source§

impl IntervalDomain

source

pub fn add(&self, rhs: &Self) -> Self

Compute the interval of possible results if one adds a value from self to a value from rhs.

-
source

pub fn sub(&self, rhs: &Self) -> Self

Compute the interval of possible results +

source

pub fn sub(&self, rhs: &Self) -> Self

Compute the interval of possible results if one subtracts a value in rhs from a value in self.

-
source

pub fn signed_mul(&self, rhs: &Self) -> Self

Compute the interval of possible results +

source

pub fn signed_mul(&self, rhs: &Self) -> Self

Compute the interval of possible results if one multiplies a value in self with a value in rhs.

-
source

pub fn shift_left(&self, rhs: &Self) -> Self

Compute the resulting interval after a left shift operation. +

source

pub fn shift_left(&self, rhs: &Self) -> Self

Compute the resulting interval after a left shift operation. The result is only exact if the rhs interval contains exactly one value.

-
source§

impl IntervalDomain

source

pub fn new(start: Bitvector, end: Bitvector) -> Self

Create a new interval domain with the given bounds.

+
source§

impl IntervalDomain

source

pub fn new(start: Bitvector, end: Bitvector) -> Self

Create a new interval domain with the given bounds.

Both start and end are inclusive, i.e. contained in the interval. The widening hints are set to None and the stride is set to 1 if start != end.

-
source

pub fn equal_as_value_sets(&self, other: &IntervalDomain) -> bool

Returns true if the two intervals represent the same value sets. +

source

pub fn equal_as_value_sets(&self, other: &IntervalDomain) -> bool

Returns true if the two intervals represent the same value sets. This function ignores differences in the widening hints of the two intervals.

-
source

pub fn update_widening_lower_bound(&mut self, bound: &Option<Bitvector>)

If bound is more exact/restrictive than the current lower bound of self, +

source

pub fn update_widening_lower_bound(&mut self, bound: &Option<Bitvector>)

If bound is more exact/restrictive than the current lower bound of self, set the lower bound to bound. Otherwise keep the old lower bound.

-
source

pub fn update_widening_upper_bound(&mut self, bound: &Option<Bitvector>)

If bound is more exact/restrictive than the current upper bound of self, +

source

pub fn update_widening_upper_bound(&mut self, bound: &Option<Bitvector>)

If bound is more exact/restrictive than the current upper bound of self, set the upper bound to bound. Otherwise keep the old upper bound.

-
source

pub fn signed_merge(&self, other: &IntervalDomain) -> IntervalDomain

Merge as signed intervals without performing widenings.

-
source

pub fn signed_merge_and_widen(&self, other: &IntervalDomain) -> IntervalDomain

Merge as signed intervals and perform widening if necessary.

+
source

pub fn signed_merge(&self, other: &IntervalDomain) -> IntervalDomain

Merge as signed intervals without performing widenings.

+
source

pub fn signed_merge_and_widen(&self, other: &IntervalDomain) -> IntervalDomain

Merge as signed intervals and perform widening if necessary.

Widening Strategy
The widening delay

Each interval has a widening_delay counter, which denotes the length of the interval after the last time that widening was performed. @@ -46,70 +46,72 @@

How to widen
but do not perform widening in the other direction of the interval. If widening bounds for both directions exist, widen up to the bounds in both directions.

After that the widening_delay is set to the length of the resulting interval.

-
source

pub fn zero_extend(self, width: ByteSize) -> IntervalDomain

Zero-extend the values in the interval to the given width.

-
source

pub fn sign_extend(self, width: ByteSize) -> Self

Sign-extend the values in the interval to the given width.

-
source

pub fn fits_into_size(&self, size: ByteSize) -> bool

Check whether all values in the interval are representable by bitvectors of the given size. +

source

pub fn zero_extend(self, width: ByteSize) -> IntervalDomain

Zero-extend the values in the interval to the given width.

+
source

pub fn sign_extend(self, width: ByteSize) -> Self

Sign-extend the values in the interval to the given width.

+
source

pub fn fits_into_size(&self, size: ByteSize) -> bool

Check whether all values in the interval are representable by bitvectors of the given size. Does not check whether this is also true for the widening hints.

-

Trait Implementations§

source§

impl AbstractDomain for IntervalDomain

source§

fn merge(&self, other: &IntervalDomain) -> IntervalDomain

Merge two interval domains and perform widening if necessary. +

Trait Implementations§

source§

impl AbstractDomain for IntervalDomain

source§

fn merge(&self, other: &IntervalDomain) -> IntervalDomain

Merge two interval domains and perform widening if necessary. See IntervalDomain::signed_merge_and_widen for the widening strategy.

-
source§

fn is_top(&self) -> bool

Return true if the interval spans all possible values.

-
source§

impl Add<IntervalDomain> for IntervalDomain

§

type Output = IntervalDomain

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl Clone for IntervalDomain

source§

fn clone(&self) -> IntervalDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IntervalDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for IntervalDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for IntervalDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ApInt> for IntervalDomain

source§

fn from(bitvec: Bitvector) -> Self

Create an interval containing only bitvec.

-
source§

impl From<Interval> for IntervalDomain

source§

fn from(interval: Interval) -> IntervalDomain

Generate an interval domain without widening hints.

-
source§

impl HasTop for IntervalDomain

source§

fn top(&self) -> Self

Return a new interval with the same byte size as self and representing the Top value of the domain.

-
source§

impl Hash for IntervalDomain

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Neg for IntervalDomain

§

type Output = IntervalDomain

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl PartialEq<IntervalDomain> for IntervalDomain

source§

fn eq(&self, other: &IntervalDomain) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl RegisterDomain for IntervalDomain

source§

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Compute the result of a binary operation between two interval domains.

+
source§

fn is_top(&self) -> bool

Return true if the interval spans all possible values.

+
source§

impl Add for IntervalDomain

§

type Output = IntervalDomain

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl Clone for IntervalDomain

source§

fn clone(&self) -> IntervalDomain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IntervalDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for IntervalDomain

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for IntervalDomain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ApInt> for IntervalDomain

source§

fn from(bitvec: Bitvector) -> Self

Create an interval containing only bitvec.

+
source§

impl From<Interval> for IntervalDomain

source§

fn from(interval: Interval) -> IntervalDomain

Generate an interval domain without widening hints.

+
source§

impl HasTop for IntervalDomain

source§

fn top(&self) -> Self

Return a new interval with the same byte size as self and representing the Top value of the domain.

+
source§

impl Hash for IntervalDomain

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Neg for IntervalDomain

§

type Output = IntervalDomain

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl PartialEq for IntervalDomain

source§

fn eq(&self, other: &IntervalDomain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl RegisterDomain for IntervalDomain

source§

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Compute the result of a binary operation between two interval domains.

For binary operations that are not explicitly implemented the result is only exact if both intervals contain exactly one value.

-
source§

fn un_op(&self, op: UnOpType) -> Self

Compute the result of an unary operation on the interval domain.

-
source§

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

Take a sub-bitvector of the values in the interval domain.

-
source§

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Compute the result of a cast operation on the interval domain.

-
source§

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. -Has a generic implementation that should not be overwritten!
source§

impl Serialize for IntervalDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl SizedDomain for IntervalDomain

source§

fn bytesize(&self) -> ByteSize

Return the size in bytes of the represented values.

-
source§

fn new_top(bytesize: ByteSize) -> Self

Return a new Top value with the given bytesize.

-
source§

impl SpecializeByConditional for IntervalDomain

source§

fn intersect(self, other: &Self) -> Result<Self, Error>

Compute the intersection of two intervals. +

source§

fn un_op(&self, op: UnOpType) -> Self

Compute the result of an unary operation on the interval domain.

+
source§

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

Take a sub-bitvector of the values in the interval domain.

+
source§

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Compute the result of a cast operation on the interval domain.

+
source§

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. +Has a generic implementation that should not be overwritten!
source§

impl Serialize for IntervalDomain

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl SizedDomain for IntervalDomain

source§

fn bytesize(&self) -> ByteSize

Return the size in bytes of the represented values.

+
source§

fn new_top(bytesize: ByteSize) -> Self

Return a new Top value with the given bytesize.

+
source§

impl SpecializeByConditional for IntervalDomain

source§

fn intersect(self, other: &Self) -> Result<Self, Error>

Compute the intersection of two intervals. Return an error if the intersection is empty.

-
source§

fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound +
source§

fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound with self and bound interpreted as signed integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_signed_greater_equal_bound( +Returns an error if no value represented by self can satisfy the comparison.

source§

fn add_signed_greater_equal_bound( self, bound: &Bitvector -) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound +) -> Result<Self, Error>
Return the restriction of self to values satisfying self >= bound with self and bound interpreted as signed integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound +Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound with self and bound interpreted as unsigned integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_unsigned_greater_equal_bound( +Returns an error if no value represented by self can satisfy the comparison.

source§

fn add_unsigned_greater_equal_bound( self, bound: &Bitvector -) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound +) -> Result<Self, Error>
Return the restriction of self to values satisfying self >= bound with self and bound interpreted as unsigned integers. -Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self != bound -Returns an error if self only represents one value for which self == bound holds.
source§

fn without_widening_hints(self) -> Self

Remove all widening hints from self. +Returns an error if no value represented by self can satisfy the comparison.
source§

fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self != bound +Returns an error if self only represents one value for which self == bound holds.
source§

fn without_widening_hints(self) -> Self

Remove all widening hints from self. Necessary for cases where several sources have widening hints, -but only one source should contribute widening hints to the result.
source§

impl Sub<IntervalDomain> for IntervalDomain

§

type Output = IntervalDomain

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl TryToBitvec for IntervalDomain

source§

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If the domain represents an interval of length one, return the contained value.

-
source§

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. +but only one source should contribute widening hints to the result.
source§

impl Sub for IntervalDomain

§

type Output = IntervalDomain

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl TryToBitvec for IntervalDomain

source§

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If the domain represents an interval of length one, return the contained value.

+
source§

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. Else return an error. -Note that the conversion loses information about the bytesize of the value.
source§

impl TryToInterval for IntervalDomain

source§

fn try_to_interval(&self) -> Result<Interval, Error>

If the domain represents a bounded (i.e. not Top) interval, return it.

-
source§

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) +Note that the conversion loses information about the bytesize of the value.
source§

impl TryToInterval for IntervalDomain

source§

fn try_to_interval(&self) -> Result<Interval, Error>

If the domain represents a bounded (i.e. not Top) interval, return it.

+
source§

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) then return it as an interval of signed integers if the interval is bounded. Else return an error. -Note that the conversion loses information about the bytesize of the values contained in the interval.
source§

impl Eq for IntervalDomain

source§

impl StructuralEq for IntervalDomain

source§

impl StructuralPartialEq for IntervalDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+Note that the conversion loses information about the bytesize of the values contained in the interval.
source§

impl Eq for IntervalDomain

source§

impl StructuralEq for IntervalDomain

source§

impl StructuralPartialEq for IntervalDomain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.MemRegion.html b/doc/html/cwe_checker_lib/abstract_domain/struct.MemRegion.html index 39ac73db1..a9b42254f 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.MemRegion.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.MemRegion.html @@ -1,4 +1,4 @@ -MemRegion in cwe_checker_lib::abstract_domain - Rust
pub struct MemRegion<T: AbstractDomain + SizedDomain + HasTop + Debug> { /* private fields */ }
Expand description

A memory region is an abstract domain representing a continuous region of memory, e.g. the stack frame of a function.

+MemRegion in cwe_checker_lib::abstract_domain - Rust
pub struct MemRegion<T: AbstractDomain + SizedDomain + HasTop + Debug> { /* private fields */ }
Expand description

A memory region is an abstract domain representing a continuous region of memory, e.g. the stack frame of a function.

This implementation can only save values of one abstract domain type, which must implement the HasByteSize and HasTop domains, and it can only track values with a known offset, i.e. it cannot handle arrays of any kind. @@ -7,65 +7,67 @@

An empty memory region means that nothing is known about the values at any offset inside the region. Thus an empty memory region actually represents the Top element of its abstract domain.

To allow cheap cloning of a MemRegion, the actual data is wrapped inside an Arc.

-

Implementations§

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> MemRegion<T>

source

pub fn new(address_bytesize: ByteSize) -> MemRegion<T>

Create a new, empty memory region.

-
source

pub fn get_address_bytesize(&self) -> ByteSize

Get the bytesize of pointers for the address space that the memory region belongs to.

-
source

pub fn add(&mut self, value: T, position: Bitvector)

Add a value to the memory region.

-
source

pub fn insert_at_byte_index(&mut self, value: T, position: i64)

Insert a value into the memory region at the given position. +

Implementations§

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> MemRegion<T>

source

pub fn new(address_bytesize: ByteSize) -> MemRegion<T>

Create a new, empty memory region.

+
source

pub fn get_address_bytesize(&self) -> ByteSize

Get the bytesize of pointers for the address space that the memory region belongs to.

+
source

pub fn add(&mut self, value: T, position: Bitvector)

Add a value to the memory region.

+
source

pub fn insert_at_byte_index(&mut self, value: T, position: i64)

Insert a value into the memory region at the given position. The position is the index (in bytes) in the memory region.

-
source

pub fn get(&self, position: Bitvector, size_in_bytes: ByteSize) -> T

Get the value at the given position. +

source

pub fn get(&self, position: Bitvector, size_in_bytes: ByteSize) -> T

Get the value at the given position. If there is no value at the position or the size of the element is not the same as the provided size, return T::new_top().

-
source

pub fn get_unsized(&self, position: Bitvector) -> Option<T>

Get the value at the given position regardless of the value size. +

source

pub fn get_unsized(&self, position: Bitvector) -> Option<T>

Get the value at the given position regardless of the value size. Return None if there is no value at that position in the memory region.

-
source

pub fn remove(&mut self, position: Bitvector, size_in_bytes: Bitvector)

Remove all elements intersecting the provided interval.

-
source

pub fn merge_write_top(&mut self, position: Bitvector, size: ByteSize)

If the MemRegion contains an element at the given position and with the given size +

source

pub fn remove(&mut self, position: Bitvector, size_in_bytes: Bitvector)

Remove all elements intersecting the provided interval.

+
source

pub fn merge_write_top(&mut self, position: Bitvector, size: ByteSize)

If the MemRegion contains an element at the given position and with the given size then merge it with a Top element. Else clear all values intersecting the range from position to position + size.

-
source

pub fn mark_interval_values_as_top( +

source

pub fn mark_interval_values_as_top( &mut self, - start: i64, - end: i64, + start: i64, + end: i64, elem_size: ByteSize )

Emulate a write operation of a value to an unknown offset in the range between start and end by merging all values in the range with Top (as we don’t exactly know which values are overwritten).

-
source

pub fn mark_all_values_as_top(&mut self)

Emulate a write operation to an unknown offset by merging all values with Top +

source

pub fn mark_all_values_as_top(&mut self)

Emulate a write operation to an unknown offset by merging all values with Top to indicate that they may have been overwritten

-
source

pub fn add_offset_to_all_indices(&mut self, offset: i64)

Add the given offset to the indices of all values contained in the memory region.

-
source

pub fn iter(&self) -> Iter<'_, i64, T>

Get an iterator over all elements together with their offset into the memory region.

-
source

pub fn values(&self) -> Values<'_, i64, T>

Get an iterator over all values in the memory region

-
source

pub fn entry_map(&self) -> &BTreeMap<i64, T>

Get the map of all elements including their offset into the memory region.

-
source

pub fn values_mut(&mut self) -> ValuesMut<'_, i64, T>

Get an iterator over all values in the memory region for in-place manipulation. +

source

pub fn add_offset_to_all_indices(&mut self, offset: i64)

Add the given offset to the indices of all values contained in the memory region.

+
source

pub fn iter(&self) -> Iter<'_, i64, T>

Get an iterator over all elements together with their offset into the memory region.

+
source

pub fn values(&self) -> Values<'_, i64, T>

Get an iterator over all values in the memory region

+
source

pub fn entry_map(&self) -> &BTreeMap<i64, T>

Get the map of all elements including their offset into the memory region.

+
source

pub fn values_mut(&mut self) -> ValuesMut<'_, i64, T>

Get an iterator over all values in the memory region for in-place manipulation. Note that one can changes values to Top using the iterator. These values should be removed from the memory region using clear_top_values().

-
source

pub fn clear_top_values(&mut self)

Remove all values representing the Top element from the internal value store, +

source

pub fn clear_top_values(&mut self)

Remove all values representing the Top element from the internal value store, as these should not be saved in the internal representation.

-

Trait Implementations§

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> AbstractDomain for MemRegion<T>

source§

fn merge(&self, other: &Self) -> Self

Short-circuting the MemRegionData::merge function if self==other, +

Trait Implementations§

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> AbstractDomain for MemRegion<T>

source§

fn merge(&self, other: &Self) -> Self

Short-circuting the MemRegionData::merge function if self==other, to prevent unneccessary cloning.

-
source§

fn is_top(&self) -> bool

The Top element is represented by an empty memory region.

-
source§

impl<T: Clone + AbstractDomain + SizedDomain + HasTop + Debug> Clone for MemRegion<T>

source§

fn clone(&self) -> MemRegion<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug + AbstractDomain + SizedDomain + HasTop + Debug> Debug for MemRegion<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, T> Deserialize<'de> for MemRegion<T>where - T: Deserialize<'de> + AbstractDomain + SizedDomain + HasTop + Debug,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> HasTop for MemRegion<T>

source§

fn top(&self) -> Self

Return a new, empty memory region with the same address bytesize as self, representing the Top element of the abstract domain.

-
source§

impl<T: Hash + AbstractDomain + SizedDomain + HasTop + Debug> Hash for MemRegion<T>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: PartialEq + AbstractDomain + SizedDomain + HasTop + Debug> PartialEq<MemRegion<T>> for MemRegion<T>

source§

fn eq(&self, other: &MemRegion<T>) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<T> Serialize for MemRegion<T>where - T: Serialize + AbstractDomain + SizedDomain + HasTop + Debug,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<T: Eq + AbstractDomain + SizedDomain + HasTop + Debug> Eq for MemRegion<T>

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralEq for MemRegion<T>

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralPartialEq for MemRegion<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for MemRegion<T>where - T: RefUnwindSafe,

§

impl<T> Send for MemRegion<T>where - T: Send + Sync,

§

impl<T> Sync for MemRegion<T>where - T: Send + Sync,

§

impl<T> Unpin for MemRegion<T>

§

impl<T> UnwindSafe for MemRegion<T>where - T: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+
source§

fn is_top(&self) -> bool

The Top element is represented by an empty memory region.

+
source§

impl<T: Clone + AbstractDomain + SizedDomain + HasTop + Debug> Clone for MemRegion<T>

source§

fn clone(&self) -> MemRegion<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug + AbstractDomain + SizedDomain + HasTop + Debug> Debug for MemRegion<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, T> Deserialize<'de> for MemRegion<T>where + T: Deserialize<'de> + AbstractDomain + SizedDomain + HasTop + Debug,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> HasTop for MemRegion<T>

source§

fn top(&self) -> Self

Return a new, empty memory region with the same address bytesize as self, representing the Top element of the abstract domain.

+
source§

impl<T: Hash + AbstractDomain + SizedDomain + HasTop + Debug> Hash for MemRegion<T>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: PartialEq + AbstractDomain + SizedDomain + HasTop + Debug> PartialEq for MemRegion<T>

source§

fn eq(&self, other: &MemRegion<T>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<T> Serialize for MemRegion<T>where + T: Serialize + AbstractDomain + SizedDomain + HasTop + Debug,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<T: Eq + AbstractDomain + SizedDomain + HasTop + Debug> Eq for MemRegion<T>

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralEq for MemRegion<T>

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralPartialEq for MemRegion<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for MemRegion<T>where + T: RefUnwindSafe,

§

impl<T> Send for MemRegion<T>where + T: Send + Sync,

§

impl<T> Sync for MemRegion<T>where + T: Send + Sync,

§

impl<T> Unpin for MemRegion<T>

§

impl<T> UnwindSafe for MemRegion<T>where + T: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.MergeTopStrategy.html b/doc/html/cwe_checker_lib/abstract_domain/struct.MergeTopStrategy.html index ab575365b..a5c07cad6 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.MergeTopStrategy.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.MergeTopStrategy.html @@ -1,28 +1,30 @@ -MergeTopStrategy in cwe_checker_lib::abstract_domain - Rust
pub struct MergeTopStrategy { /* private fields */ }
Expand description

A MapMergeStrategy where for every key that only occurs in one input map of the merge function +MergeTopStrategy in cwe_checker_lib::abstract_domain - Rust

pub struct MergeTopStrategy { /* private fields */ }
Expand description

A MapMergeStrategy where for every key that only occurs in one input map of the merge function the corresponding value is merged with Top before being added to the merged map. Furthermore, keys whose values are merged to the Top value are removed from the merged map.

The strategy is an alternative to the IntersectMergeStrategy in cases where the Top value of the value domain is not a maximal element of the abstract domain and should instead be interpreted as a default element assigned to all keys not present in a domain map.

-

Trait Implementations§

source§

impl Clone for MergeTopStrategy

source§

fn clone(&self) -> MergeTopStrategy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MergeTopStrategy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for MergeTopStrategy

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: Ord + Clone, V: AbstractDomain + HasTop> MapMergeStrategy<K, V> for MergeTopStrategy

source§

fn merge_map( - map_left: &BTreeMap<K, V>, - map_right: &BTreeMap<K, V> -) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.
source§

impl PartialEq<MergeTopStrategy> for MergeTopStrategy

source§

fn eq(&self, other: &MergeTopStrategy) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for MergeTopStrategy

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for MergeTopStrategy

source§

impl StructuralEq for MergeTopStrategy

source§

impl StructuralPartialEq for MergeTopStrategy

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Clone for MergeTopStrategy

source§

fn clone(&self) -> MergeTopStrategy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MergeTopStrategy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for MergeTopStrategy

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: Ord + Clone, V: AbstractDomain + HasTop> MapMergeStrategy<K, V> for MergeTopStrategy

source§

fn merge_map( + map_left: &BTreeMap<K, V>, + map_right: &BTreeMap<K, V> +) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.
source§

impl PartialEq for MergeTopStrategy

source§

fn eq(&self, other: &MergeTopStrategy) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for MergeTopStrategy

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for MergeTopStrategy

source§

impl StructuralEq for MergeTopStrategy

source§

impl StructuralPartialEq for MergeTopStrategy

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/struct.UnionMergeStrategy.html b/doc/html/cwe_checker_lib/abstract_domain/struct.UnionMergeStrategy.html index f73ebb88b..f2bced732 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/struct.UnionMergeStrategy.html +++ b/doc/html/cwe_checker_lib/abstract_domain/struct.UnionMergeStrategy.html @@ -1,28 +1,30 @@ -UnionMergeStrategy in cwe_checker_lib::abstract_domain - Rust
pub struct UnionMergeStrategy { /* private fields */ }
Expand description

A MapMergeStrategy where key-value pairs whose key is only present in one input map +UnionMergeStrategy in cwe_checker_lib::abstract_domain - Rust

pub struct UnionMergeStrategy { /* private fields */ }
Expand description

A MapMergeStrategy where key-value pairs whose key is only present in one input map are added to the merged map. Top values and their corresponding keys are also preserved in the merged map.

The strategy is meant to be used for maps where the values associated to keys not present in the map have an implicit bottom value of the value abstract domain associated to them.

-

Trait Implementations§

source§

impl Clone for UnionMergeStrategy

source§

fn clone(&self) -> UnionMergeStrategy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for UnionMergeStrategy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for UnionMergeStrategy

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: Ord + Clone, V: AbstractDomain> MapMergeStrategy<K, V> for UnionMergeStrategy

source§

fn merge_map( - map_left: &BTreeMap<K, V>, - map_right: &BTreeMap<K, V> -) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.
source§

impl PartialEq<UnionMergeStrategy> for UnionMergeStrategy

source§

fn eq(&self, other: &UnionMergeStrategy) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for UnionMergeStrategy

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for UnionMergeStrategy

source§

impl StructuralEq for UnionMergeStrategy

source§

impl StructuralPartialEq for UnionMergeStrategy

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Clone for UnionMergeStrategy

source§

fn clone(&self) -> UnionMergeStrategy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for UnionMergeStrategy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for UnionMergeStrategy

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: Ord + Clone, V: AbstractDomain> MapMergeStrategy<K, V> for UnionMergeStrategy

source§

fn merge_map( + map_left: &BTreeMap<K, V>, + map_right: &BTreeMap<K, V> +) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.
source§

impl PartialEq for UnionMergeStrategy

source§

fn eq(&self, other: &UnionMergeStrategy) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for UnionMergeStrategy

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for UnionMergeStrategy

source§

impl StructuralEq for UnionMergeStrategy

source§

impl StructuralPartialEq for UnionMergeStrategy

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.AbstractDomain.html b/doc/html/cwe_checker_lib/abstract_domain/trait.AbstractDomain.html index 42b80cc08..968aebcac 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.AbstractDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.AbstractDomain.html @@ -1,14 +1,14 @@ -AbstractDomain in cwe_checker_lib::abstract_domain - Rust
pub trait AbstractDomain: Sized + Eq + Clone {
+AbstractDomain in cwe_checker_lib::abstract_domain - Rust
pub trait AbstractDomain: Sized + Eq + Clone {
     // Required methods
-    fn merge(&self, other: &Self) -> Self;
-    fn is_top(&self) -> bool;
+    fn merge(&self, other: &Self) -> Self;
+    fn is_top(&self) -> bool;
 }
Expand description

The main trait describing an abstract domain.

Each abstract domain is partially ordered. Abstract domains of the same type can be merged.

-

Required Methods§

source

fn merge(&self, other: &Self) -> Self

Return an upper bound (with respect to the partial order on the domain) for the two inputs self and other.

-
source

fn is_top(&self) -> bool

Returns whether the element represents the top element (i.e. maximal with respect to the partial order) or not. +

Required Methods§

source

fn merge(&self, other: &Self) -> Self

Return an upper bound (with respect to the partial order on the domain) for the two inputs self and other.

+
source

fn is_top(&self) -> bool

Returns whether the element represents the top element (i.e. maximal with respect to the partial order) or not. If a domain has no maximal element, this function should always return false.

-

Implementors§

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file + S: MapMergeStrategy<K, V> + Clone + Eq,
source§

impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> AbstractDomain for cwe_checker_lib::analysis::string_abstraction::state::State<T>

source§

impl<T: AbstractDomain + SizedDomain + HasTop + Debug> AbstractDomain for MemRegion<T>

source§

impl<T: RegisterDomain> AbstractDomain for DataDomain<T>

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.DomainInsertion.html b/doc/html/cwe_checker_lib/abstract_domain/trait.DomainInsertion.html index 228945d84..e9ec77d9e 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.DomainInsertion.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.DomainInsertion.html @@ -1,6 +1,6 @@ -DomainInsertion in cwe_checker_lib::abstract_domain - Rust
pub trait DomainInsertion {
+DomainInsertion in cwe_checker_lib::abstract_domain - Rust
pub trait DomainInsertion {
     // Required methods
-    fn append_string_domain(&self, string_domain: &Self) -> Self;
+    fn append_string_domain(&self, string_domain: &Self) -> Self;
     fn create_integer_domain() -> Self;
     fn create_char_domain() -> Self;
     fn create_float_value_domain() -> Self;
@@ -8,11 +8,11 @@
     fn create_top_value_domain() -> Self;
     fn create_empty_string_domain() -> Self;
 }
Expand description

A set of functions that all abstract string domains should implement.

-

Required Methods§

source

fn append_string_domain(&self, string_domain: &Self) -> Self

Inserts a string domain at a certain position if order is considered.

-
source

fn create_integer_domain() -> Self

Creates a string domain with characters that usually appear in an integer value.

-
source

fn create_char_domain() -> Self

Creates a string domain with characters that usually appear in a char value.

-
source

fn create_float_value_domain() -> Self

Creates a string domain with characters that usually appear in a float value.

-
source

fn create_pointer_value_domain() -> Self

Creates a string domain with characters that usually appear in a String value.

-
source

fn create_top_value_domain() -> Self

Creates a top value of the currently used domain.

-
source

fn create_empty_string_domain() -> Self

Creates an empty string domain.

-

Implementors§

\ No newline at end of file +

Required Methods§

source

fn append_string_domain(&self, string_domain: &Self) -> Self

Inserts a string domain at a certain position if order is considered.

+
source

fn create_integer_domain() -> Self

Creates a string domain with characters that usually appear in an integer value.

+
source

fn create_char_domain() -> Self

Creates a string domain with characters that usually appear in a char value.

+
source

fn create_float_value_domain() -> Self

Creates a string domain with characters that usually appear in a float value.

+
source

fn create_pointer_value_domain() -> Self

Creates a string domain with characters that usually appear in a String value.

+
source

fn create_top_value_domain() -> Self

Creates a top value of the currently used domain.

+
source

fn create_empty_string_domain() -> Self

Creates an empty string domain.

+

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.HasTop.html b/doc/html/cwe_checker_lib/abstract_domain/trait.HasTop.html index 830f5dd44..1143f27b7 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.HasTop.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.HasTop.html @@ -1,9 +1,9 @@ -HasTop in cwe_checker_lib::abstract_domain - Rust
pub trait HasTop {
+HasTop in cwe_checker_lib::abstract_domain - Rust
pub trait HasTop {
     // Required method
     fn top(&self) -> Self;
 }
Expand description

An abstract domain implementing this trait has a global maximum, i.e. a Top element.

-

Required Methods§

source

fn top(&self) -> Self

Return an instance of the Top element.

+

Required Methods§

source

fn top(&self) -> Self

Return an instance of the Top element.

Since an abstract domain type may represent a whole family of abstract domains, this function takes an instance of the domain as a parameter, so it can return the Top element of the same family member that the provided instance belongs to.

-

Implementors§

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.MapMergeStrategy.html b/doc/html/cwe_checker_lib/abstract_domain/trait.MapMergeStrategy.html index afdb0bc79..e9554483e 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.MapMergeStrategy.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.MapMergeStrategy.html @@ -1,9 +1,9 @@ -MapMergeStrategy in cwe_checker_lib::abstract_domain - Rust
pub trait MapMergeStrategy<K: Ord + Clone, V: AbstractDomain> {
+MapMergeStrategy in cwe_checker_lib::abstract_domain - Rust
pub trait MapMergeStrategy<K: Ord + Clone, V: AbstractDomain> {
     // Required method
     fn merge_map(
-        map_left: &BTreeMap<K, V>,
-        map_right: &BTreeMap<K, V>
-    ) -> BTreeMap<K, V>;
+        map_left: &BTreeMap<K, V>,
+        map_right: &BTreeMap<K, V>
+    ) -> BTreeMap<K, V>;
 }
Expand description

A MapMergeStrategy determines how the merge-method for a DomainMap works.

The possible strategies are:

-

Required Methods§

source

fn merge_map( - map_left: &BTreeMap<K, V>, - map_right: &BTreeMap<K, V> -) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.

-

Implementors§

\ No newline at end of file +

Required Methods§

source

fn merge_map( + map_left: &BTreeMap<K, V>, + map_right: &BTreeMap<K, V> +) -> BTreeMap<K, V>

This function determines how two DomainMap instances are merged as abstract domains.

+

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.RegisterDomain.html b/doc/html/cwe_checker_lib/abstract_domain/trait.RegisterDomain.html index 6f582cc73..918464a64 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.RegisterDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.RegisterDomain.html @@ -1,20 +1,20 @@ -RegisterDomain in cwe_checker_lib::abstract_domain - Rust
pub trait RegisterDomain: AbstractDomain + SizedDomain + HasTop {
+RegisterDomain in cwe_checker_lib::abstract_domain - Rust
pub trait RegisterDomain: AbstractDomain + SizedDomain + HasTop {
     // Required methods
-    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self;
+    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self;
     fn un_op(&self, op: UnOpType) -> Self;
     fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self;
     fn cast(&self, kind: CastOpType, width: ByteSize) -> Self;
 
     // Provided method
-    fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize { ... }
+    fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize { ... }
 }
Expand description

A trait for abstract domains that can represent values loaded into CPU register.

The domain implements all general operations used to manipulate register values. The domain is parametrized by its bytesize (which represents the size of the register). It has a Top element, which is only characterized by its bytesize.

-

Required Methods§

source

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Compute the (abstract) result of a binary operation

-
source

fn un_op(&self, op: UnOpType) -> Self

Compute the (abstract) result of a unary operation

-
source

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

Extract a sub-bitvector

-
source

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Perform a typecast to extend a bitvector or to cast between integer and floating point types.

-

Provided Methods§

source

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. +

Required Methods§

source

fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

Compute the (abstract) result of a binary operation

+
source

fn un_op(&self, op: UnOpType) -> Self

Compute the (abstract) result of a unary operation

+
source

fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

Extract a sub-bitvector

+
source

fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

Perform a typecast to extend a bitvector or to cast between integer and floating point types.

+

Provided Methods§

source

fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

Return the bytesize of the result of the given binary operation. Has a generic implementation that should not be overwritten!

-

Implementors§

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.SizedDomain.html b/doc/html/cwe_checker_lib/abstract_domain/trait.SizedDomain.html index 9c1098689..ea89d50dc 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.SizedDomain.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.SizedDomain.html @@ -1,4 +1,4 @@ -SizedDomain in cwe_checker_lib::abstract_domain - Rust
pub trait SizedDomain {
+SizedDomain in cwe_checker_lib::abstract_domain - Rust
pub trait SizedDomain {
     // Required methods
     fn bytesize(&self) -> ByteSize;
     fn new_top(bytesize: ByteSize) -> Self;
@@ -6,7 +6,7 @@
 

For abstract domains, the bytesize is a parameter of the domain itself, i.e. you cannot merge values of different bytesizes, since they lie in different posets (one for each bytesize).

-

Required Methods§

source

fn bytesize(&self) -> ByteSize

Return the size of the represented value in bytes.

-
source

fn new_top(bytesize: ByteSize) -> Self

Return a new top element with the given bytesize. +

Required Methods§

source

fn bytesize(&self) -> ByteSize

Return the size of the represented value in bytes.

+
source

fn new_top(bytesize: ByteSize) -> Self

Return a new top element with the given bytesize. The function is expected to panic if the type in question does not also implement the HasTop trait.

-

Implementors§

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.html b/doc/html/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.html index 38fea4a9b..9cd8c51ea 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.html @@ -1,50 +1,50 @@ -SpecializeByConditional in cwe_checker_lib::abstract_domain - Rust
pub trait SpecializeByConditional: Sized {
+SpecializeByConditional in cwe_checker_lib::abstract_domain - Rust
pub trait SpecializeByConditional: Sized {
     // Required methods
     fn add_signed_less_equal_bound(
         self,
         bound: &Bitvector
-    ) -> Result<Self, Error>;
+    ) -> Result<Self, Error>;
     fn add_unsigned_less_equal_bound(
         self,
         bound: &Bitvector
-    ) -> Result<Self, Error>;
+    ) -> Result<Self, Error>;
     fn add_signed_greater_equal_bound(
         self,
         bound: &Bitvector
-    ) -> Result<Self, Error>;
+    ) -> Result<Self, Error>;
     fn add_unsigned_greater_equal_bound(
         self,
         bound: &Bitvector
-    ) -> Result<Self, Error>;
-    fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>;
-    fn intersect(self, other: &Self) -> Result<Self, Error>;
+    ) -> Result<Self, Error>;
+    fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>;
+    fn intersect(self, other: &Self) -> Result<Self, Error>;
     fn without_widening_hints(self) -> Self;
 }
Expand description

A trait for domains whose values can be restricted by knowing the result of a comparison of it with a known bitvector. The comparison may also be used to add widening hints to the domain.

Note that the value set represented by the domain after the restriction may be an upper bound, i.e. it is possible that the result still contains values not satisfying the restricting comparison.

-

Required Methods§

source

fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound +

Required Methods§

source

fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound with self and bound interpreted as signed integers. Returns an error if no value represented by self can satisfy the comparison.

-
source

fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound +

source

fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self <= bound with self and bound interpreted as unsigned integers. Returns an error if no value represented by self can satisfy the comparison.

-
source

fn add_signed_greater_equal_bound( +

source

fn add_signed_greater_equal_bound( self, bound: &Bitvector -) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound +) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound with self and bound interpreted as signed integers. Returns an error if no value represented by self can satisfy the comparison.

-
source

fn add_unsigned_greater_equal_bound( +

source

fn add_unsigned_greater_equal_bound( self, bound: &Bitvector -) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound +) -> Result<Self, Error>

Return the restriction of self to values satisfying self >= bound with self and bound interpreted as unsigned integers. Returns an error if no value represented by self can satisfy the comparison.

-
source

fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self != bound +

source

fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

Return the restriction of self to values satisfying self != bound Returns an error if self only represents one value for which self == bound holds.

-
source

fn intersect(self, other: &Self) -> Result<Self, Error>

Return the intersection of two values or an error if the intersection is empty.

-
source

fn without_widening_hints(self) -> Self

Remove all widening hints from self. +

source

fn intersect(self, other: &Self) -> Result<Self, Error>

Return the intersection of two values or an error if the intersection is empty.

+
source

fn without_widening_hints(self) -> Self

Remove all widening hints from self. Necessary for cases where several sources have widening hints, but only one source should contribute widening hints to the result.

-

Implementors§

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.TryToBitvec.html b/doc/html/cwe_checker_lib/abstract_domain/trait.TryToBitvec.html index 4c6bbb188..4e1d92a7b 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.TryToBitvec.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.TryToBitvec.html @@ -1,13 +1,13 @@ -TryToBitvec in cwe_checker_lib::abstract_domain - Rust
pub trait TryToBitvec {
+TryToBitvec in cwe_checker_lib::abstract_domain - Rust
pub trait TryToBitvec {
     // Required method
-    fn try_to_bitvec(&self) -> Result<Bitvector, Error>;
+    fn try_to_bitvec(&self) -> Result<Bitvector, Error>;
 
     // Provided method
-    fn try_to_offset(&self) -> Result<i64, Error> { ... }
+    fn try_to_offset(&self) -> Result<i64, Error> { ... }
 }
Expand description

A conversion trait for abstract domains that can represent register values.

-

Required Methods§

source

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If self represents a single absolute value, return it. +

Required Methods§

source

fn try_to_bitvec(&self) -> Result<Bitvector, Error>

If self represents a single absolute value, return it. In all other cases return an error.

-

Provided Methods§

source

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. +

Provided Methods§

source

fn try_to_offset(&self) -> Result<i64, Error>

If self represents a single absolute value, try to convert it to a signed integer and return it. Else return an error. Note that the conversion loses information about the bytesize of the value.

-

Implementors§

\ No newline at end of file +

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/abstract_domain/trait.TryToInterval.html b/doc/html/cwe_checker_lib/abstract_domain/trait.TryToInterval.html index ad30613b2..399194147 100644 --- a/doc/html/cwe_checker_lib/abstract_domain/trait.TryToInterval.html +++ b/doc/html/cwe_checker_lib/abstract_domain/trait.TryToInterval.html @@ -1,15 +1,15 @@ -TryToInterval in cwe_checker_lib::abstract_domain - Rust
pub trait TryToInterval {
+TryToInterval in cwe_checker_lib::abstract_domain - Rust
pub trait TryToInterval {
     // Required method
-    fn try_to_interval(&self) -> Result<Interval, Error>;
+    fn try_to_interval(&self) -> Result<Interval, Error>;
 
     // Provided method
-    fn try_to_offset_interval(&self) -> Result<(i64, i64), Error> { ... }
+    fn try_to_offset_interval(&self) -> Result<(i64, i64), Error> { ... }
 }
Expand description

A conversion trait for abstract domains that can represent register values.

-

Required Methods§

source

fn try_to_interval(&self) -> Result<Interval, Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) +

Required Methods§

source

fn try_to_interval(&self) -> Result<Interval, Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) then return it if the interval is bounded. For unbounded (i.e. Top) intervals or if the abstract value does not represent absolute values return an error.

-

Provided Methods§

source

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) +

Provided Methods§

source

fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

If self represents an interval of absolute values (or can be widened to represent such an interval) then return it as an interval of signed integers if the interval is bounded. Else return an error. Note that the conversion loses information about the bytesize of the values contained in the interval.

-

Implementors§

\ No newline at end of file +

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/all.html b/doc/html/cwe_checker_lib/all.html index 400f8ceb1..e5f432788 100644 --- a/doc/html/cwe_checker_lib/all.html +++ b/doc/html/cwe_checker_lib/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Functions

Type Definitions

Statics

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Traits

Functions

Type Aliases

Statics

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation.html b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation.html index 306509518..2112bc246 100644 --- a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation.html +++ b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation.html @@ -1,5 +1,5 @@ -create_computation in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub fn create_computation<'a, T: Context<'a>>(
+create_computation in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub fn create_computation<'a, T: Context<'a>>(
     problem: T,
-    default_value: Option<T::Value>
+    default_value: Option<T::Value>
 ) -> Computation<GeneralizedContext<'a, T>>
Expand description

Generate a new computation from the corresponding context and an optional default value for nodes.

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html index bda65e214..3a19928a1 100644 --- a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html +++ b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html @@ -1,6 +1,6 @@ -create_computation_with_bottom_up_worklist_order in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub fn create_computation_with_bottom_up_worklist_order<'a, T: Context<'a>>(
+create_computation_with_bottom_up_worklist_order in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub fn create_computation_with_bottom_up_worklist_order<'a, T: Context<'a>>(
     problem: T,
-    default_value: Option<T::Value>
+    default_value: Option<T::Value>
 ) -> Computation<GeneralizedContext<'a, T>>
Expand description

Generate a new computation from the corresponding context and an optional default value for nodes. Uses a bottom up worklist order when computing the fixpoint.

The worklist order prefers callee nodes before caller nodes.

diff --git a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html index 6a3cba44a..e620f9fda 100644 --- a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html +++ b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html @@ -1,6 +1,6 @@ -create_computation_with_top_down_worklist_order in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub fn create_computation_with_top_down_worklist_order<'a, T: Context<'a>>(
+create_computation_with_top_down_worklist_order in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub fn create_computation_with_top_down_worklist_order<'a, T: Context<'a>>(
     problem: T,
-    default_value: Option<T::Value>
+    default_value: Option<T::Value>
 ) -> Computation<GeneralizedContext<'a, T>>
Expand description

Generate a new computation from the corresponding context and an optional default value for nodes. Uses a top down worklist order when computing the fixpoint.

The worklist order prefers caller nodes before callee nodes.

diff --git a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/index.html b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/index.html index fe4d54a56..c6db782f1 100644 --- a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/index.html +++ b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
Expand description

Creating and computing backward interprocedural fixpoint problems.

+cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
Expand description

Creating and computing backward interprocedural fixpoint problems.

General notes

This module supports computation of fixpoint problems on the control flow graphs generated by the graph module.

To compute a generalized fixpoint problem, diff --git a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/struct.GeneralizedContext.html b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/struct.GeneralizedContext.html index 72991c252..366e100ce 100644 --- a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/struct.GeneralizedContext.html +++ b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/struct.GeneralizedContext.html @@ -1,33 +1,33 @@ -GeneralizedContext in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust

pub struct GeneralizedContext<'a, T: Context<'a>> { /* private fields */ }
Expand description

This struct is a wrapper to create a general fixpoint context out of an interprocedural fixpoint context.

-

Implementations§

source§

impl<'a, T: Context<'a>> GeneralizedContext<'a, T>

source

pub fn new(context: T) -> Self

Create a new generalized context out of an interprocedural context object.

-
source

pub fn get_context(&self) -> &T

Get the inner context object.

-

Trait Implementations§

source§

impl<'a, T: Context<'a>> Context for GeneralizedContext<'a, T>

source§

fn get_graph(&self) -> &Graph<'a>

Get a reference to the underlying graph.

-
source§

fn merge( +GeneralizedContext in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub struct GeneralizedContext<'a, T: Context<'a>> { /* private fields */ }
Expand description

This struct is a wrapper to create a general fixpoint context out of an interprocedural fixpoint context.

+

Implementations§

source§

impl<'a, T: Context<'a>> GeneralizedContext<'a, T>

source

pub fn new(context: T) -> Self

Create a new generalized context out of an interprocedural context object.

+
source

pub fn get_context(&self) -> &T

Get the inner context object.

+

Trait Implementations§

source§

impl<'a, T: Context<'a>> Context for GeneralizedContext<'a, T>

source§

fn get_graph(&self) -> &Graph<'a>

Get a reference to the underlying graph.

+
source§

fn merge( &self, val1: &Self::NodeValue, val2: &Self::NodeValue ) -> Self::NodeValue

Merge two values using the merge function from the interprocedural context object.

-
source§

fn update_edge( +

source§

fn update_edge( &self, node_value: &Self::NodeValue, edge: EdgeIndex -) -> Option<Self::NodeValue>

Backward edge transition function. +) -> Option<Self::NodeValue>

Backward edge transition function. Applies the transition functions from the interprocedural context object corresponding to the type of the provided edge.

§

type EdgeLabel = Edge<'a>

the type of edge labels of the underlying graph
§

type NodeLabel = Node<'a>

the type of node labels of the underlying graph
§

type NodeValue = NodeValue<<T as Context<'a>>::Value>

The type of the value that gets assigned to each node. -The values should form a partially ordered set.

Auto Trait Implementations§

§

impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where - T: RefUnwindSafe,

§

impl<'a, T> Send for GeneralizedContext<'a, T>where - T: Send,

§

impl<'a, T> Sync for GeneralizedContext<'a, T>where - T: Sync,

§

impl<'a, T> Unpin for GeneralizedContext<'a, T>where - T: Unpin,

§

impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where - T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

+The values should form a partially ordered set.

Auto Trait Implementations§

§

impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where + T: RefUnwindSafe,

§

impl<'a, T> Send for GeneralizedContext<'a, T>where + T: Send,

§

impl<'a, T> Sync for GeneralizedContext<'a, T>where + T: Sync,

§

impl<'a, T> Unpin for GeneralizedContext<'a, T>where + T: Unpin,

§

impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where + T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/trait.Context.html b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/trait.Context.html index c85ea2796..2016bff14 100644 --- a/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/trait.Context.html +++ b/doc/html/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/trait.Context.html @@ -1,5 +1,5 @@ -Context in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub trait Context<'a> {
-    type Value: PartialEq + Eq + Clone;
+Context in cwe_checker_lib::analysis::backward_interprocedural_fixpoint - Rust
pub trait Context<'a> {
+    type Value: PartialEq + Eq + Clone;
 
     // Required methods
     fn get_graph(&self) -> &Graph<'a>;
@@ -8,42 +8,42 @@
         &self,
         value: &Self::Value,
         def: &Term<Def>
-    ) -> Option<Self::Value>;
+    ) -> Option<Self::Value>;
     fn update_jumpsite(
         &self,
         value_after_jump: &Self::Value,
         jump: &Term<Jmp>,
-        untaken_conditional: Option<&Term<Jmp>>,
+        untaken_conditional: Option<&Term<Jmp>>,
         jumpsite: &Term<Blk>
-    ) -> Option<Self::Value>;
+    ) -> Option<Self::Value>;
     fn update_callsite(
         &self,
-        target_value: Option<&Self::Value>,
-        return_value: Option<&Self::Value>,
+        target_value: Option<&Self::Value>,
+        return_value: Option<&Self::Value>,
         caller_sub: &Term<Sub>,
         call: &Term<Jmp>,
         return_: &Term<Jmp>
-    ) -> Option<Self::Value>;
+    ) -> Option<Self::Value>;
     fn split_call_stub(
         &self,
         combined_value: &Self::Value
-    ) -> Option<Self::Value>;
+    ) -> Option<Self::Value>;
     fn split_return_stub(
         &self,
         combined_value: &Self::Value,
         returned_from_sub: &Term<Sub>
-    ) -> Option<Self::Value>;
+    ) -> Option<Self::Value>;
     fn update_call_stub(
         &self,
         value_after_call: &Self::Value,
         call: &Term<Jmp>
-    ) -> Option<Self::Value>;
+    ) -> Option<Self::Value>;
     fn specialize_conditional(
         &self,
         value_after_jump: &Self::Value,
         condition: &Expression,
-        is_true: bool
-    ) -> Option<Self::Value>;
+        is_true: bool
+    ) -> Option<Self::Value>;
 }
Expand description

The context for an backward interprocedural fixpoint computation.

Basically, a Context object needs to contain a reference to the actual graph, a method for merging node values, @@ -51,55 +51,55 @@

All trait methods have access to the FixpointProblem structure, so that context informations are accessible through it.

All edge transition functions can return None to indicate that no information flows through the edge. For example, this can be used to indicate edges that can never been taken.

-

Required Associated Types§

source

type Value: PartialEq + Eq + Clone

The type of the values that are assigned to nodes during the fixpoint computation.

-

Required Methods§

source

fn get_graph(&self) -> &Graph<'a>

Get a reference to the graph that the fixpoint is computed on. +

Required Associated Types§

source

type Value: PartialEq + Eq + Clone

The type of the values that are assigned to nodes during the fixpoint computation.

+

Required Methods§

source

fn get_graph(&self) -> &Graph<'a>

Get a reference to the graph that the fixpoint is computed on. The return value is expected to be the reversed CFG.

-
source

fn merge(&self, value1: &Self::Value, value2: &Self::Value) -> Self::Value

Merge two node values.

-
source

fn update_def( +

source

fn merge(&self, value1: &Self::Value, value2: &Self::Value) -> Self::Value

Merge two node values.

+
source

fn update_def( &self, value: &Self::Value, def: &Term<Def> -) -> Option<Self::Value>

Transition function for Def terms. +) -> Option<Self::Value>

Transition function for Def terms. The transition function for a basic block is computed by iteratively applying this function to the starting value for each Def term in the basic block. The iteration short-circuits and returns None if update_def returns None at any point.

-
source

fn update_jumpsite( +

source

fn update_jumpsite( &self, value_after_jump: &Self::Value, jump: &Term<Jmp>, - untaken_conditional: Option<&Term<Jmp>>, + untaken_conditional: Option<&Term<Jmp>>, jumpsite: &Term<Blk> -) -> Option<Self::Value>

Transition function for (conditional and unconditional) Jmp terms.

-
source

fn update_callsite( +) -> Option<Self::Value>

Transition function for (conditional and unconditional) Jmp terms.

+
source

fn update_callsite( &self, - target_value: Option<&Self::Value>, - return_value: Option<&Self::Value>, + target_value: Option<&Self::Value>, + return_value: Option<&Self::Value>, caller_sub: &Term<Sub>, call: &Term<Jmp>, return_: &Term<Jmp> -) -> Option<Self::Value>

Transition function for in-program calls. +) -> Option<Self::Value>

Transition function for in-program calls. The target value is coming in via the call edge from the BlkStart node of the called subroutine and the return_value is coming in via the call stub edge from the returned-to node of the caller

-
source

fn split_call_stub(&self, combined_value: &Self::Value) -> Option<Self::Value>

Transition function for call stub split. +

source

fn split_call_stub(&self, combined_value: &Self::Value) -> Option<Self::Value>

Transition function for call stub split. Has access to the value at the ReturnCombine node and decides which data is transferred along the Call Stub Edge.

-
source

fn split_return_stub( +

source

fn split_return_stub( &self, combined_value: &Self::Value, returned_from_sub: &Term<Sub> -) -> Option<Self::Value>

Transition function for return stub split. +) -> Option<Self::Value>

Transition function for return stub split. Has access to the value at the ReturnCombine node and decides which data is transferred along the Return Stub Edge.

-
source

fn update_call_stub( +

source

fn update_call_stub( &self, value_after_call: &Self::Value, call: &Term<Jmp> -) -> Option<Self::Value>

Transition function for calls to functions not contained in the binary. +) -> Option<Self::Value>

Transition function for calls to functions not contained in the binary. The corresponding edge goes from the callsite to the returned-to block.

-
source

fn specialize_conditional( +

source

fn specialize_conditional( &self, value_after_jump: &Self::Value, condition: &Expression, - is_true: bool -) -> Option<Self::Value>

This function is used to refine the value using the information on which branch was taken on a conditional jump.

-

Implementors§

\ No newline at end of file + is_true: bool +) -> Option<Self::Value>

This function is used to refine the value using the information on which branch was taken on a conditional jump.

+

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/callgraph/fn.find_call_sequences_to_target.html b/doc/html/cwe_checker_lib/analysis/callgraph/fn.find_call_sequences_to_target.html index b0590434d..9916a3c8d 100644 --- a/doc/html/cwe_checker_lib/analysis/callgraph/fn.find_call_sequences_to_target.html +++ b/doc/html/cwe_checker_lib/analysis/callgraph/fn.find_call_sequences_to_target.html @@ -1,7 +1,7 @@ -find_call_sequences_to_target in cwe_checker_lib::analysis::callgraph - Rust
pub fn find_call_sequences_to_target(
+find_call_sequences_to_target in cwe_checker_lib::analysis::callgraph - Rust
pub fn find_call_sequences_to_target(
     callgraph: &CallGraph<'_>,
     source_sub_tid: &Tid,
     target_sub_tid: &Tid
-) -> BTreeSet<Tid>
Expand description

Collect and return all call TIDs of call sequences that start in the function given by the source_sub_tid +) -> BTreeSet<Tid>

Expand description

Collect and return all call TIDs of call sequences that start in the function given by the source_sub_tid and end in the function given by the target_sub_tid.

\ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/callgraph/fn.get_program_callgraph.html b/doc/html/cwe_checker_lib/analysis/callgraph/fn.get_program_callgraph.html index 1b6aff4d7..c44cb3af2 100644 --- a/doc/html/cwe_checker_lib/analysis/callgraph/fn.get_program_callgraph.html +++ b/doc/html/cwe_checker_lib/analysis/callgraph/fn.get_program_callgraph.html @@ -1,4 +1,4 @@ -get_program_callgraph in cwe_checker_lib::analysis::callgraph - Rust
pub fn get_program_callgraph(program: &Term<Program>) -> CallGraph<'_>
Expand description

Generate a call graph for the given program.

+get_program_callgraph in cwe_checker_lib::analysis::callgraph - Rust
pub fn get_program_callgraph(program: &Term<Program>) -> CallGraph<'_>
Expand description

Generate a call graph for the given program.

The nodes of the returned graph correspond to the TIDs of functions in the program. Edges are jump terms of call operations.

Note that calls to external symbols are not represented in the graph, diff --git a/doc/html/cwe_checker_lib/analysis/callgraph/index.html b/doc/html/cwe_checker_lib/analysis/callgraph/index.html index 938a3d055..edc009c85 100644 --- a/doc/html/cwe_checker_lib/analysis/callgraph/index.html +++ b/doc/html/cwe_checker_lib/analysis/callgraph/index.html @@ -1,3 +1,3 @@ -cwe_checker_lib::analysis::callgraph - Rust

Expand description

Generate call graphs out of a program term.

+cwe_checker_lib::analysis::callgraph - Rust
Expand description

Generate call graphs out of a program term.

Functions

  • Collect and return all call TIDs of call sequences that start in the function given by the source_sub_tid -and end in the function given by the target_sub_tid.
  • Generate a call graph for the given program.

Type Definitions

\ No newline at end of file +and end in the function given by the target_sub_tid.
  • Generate a call graph for the given program.
  • Type Aliases

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/callgraph/type.CallGraph.html b/doc/html/cwe_checker_lib/analysis/callgraph/type.CallGraph.html index 27692d4e6..ae60b7c1e 100644 --- a/doc/html/cwe_checker_lib/analysis/callgraph/type.CallGraph.html +++ b/doc/html/cwe_checker_lib/analysis/callgraph/type.CallGraph.html @@ -1,2 +1,2 @@ -CallGraph in cwe_checker_lib::analysis::callgraph - Rust
    pub type CallGraph<'a> = DiGraph<Tid, &'a Term<Jmp>>;
    Expand description

    The graph type of a call graph

    -
    \ No newline at end of file +CallGraph in cwe_checker_lib::analysis::callgraph - Rust
    pub type CallGraph<'a> = DiGraph<Tid, &'a Term<Jmp>>;
    Expand description

    The graph type of a call graph

    +

    Aliased Type§

    struct CallGraph<'a> { /* private fields */ }
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.compute_alive_vars.html b/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.compute_alive_vars.html index 8260815ae..3d00943d3 100644 --- a/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.compute_alive_vars.html +++ b/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.compute_alive_vars.html @@ -1,4 +1,4 @@ -compute_alive_vars in cwe_checker_lib::analysis::dead_variable_elimination - Rust
    pub fn compute_alive_vars(project: &Project) -> HashMap<Tid, BTreeSet<Variable>>
    Expand description

    Compute alive variables by means of an intraprocedural fixpoint computation. +compute_alive_vars in cwe_checker_lib::analysis::dead_variable_elimination - Rust

    pub fn compute_alive_vars(project: &Project) -> HashMap<Tid, BTreeSet<Variable>>
    Expand description

    Compute alive variables by means of an intraprocedural fixpoint computation. Returns a map that assigns to each basic block Tid the set of all variables that are alive at the end of the basic block.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.remove_dead_var_assignments.html b/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.remove_dead_var_assignments.html index 7978d7559..5cbe8b26e 100644 --- a/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.remove_dead_var_assignments.html +++ b/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/fn.remove_dead_var_assignments.html @@ -1,2 +1,2 @@ -remove_dead_var_assignments in cwe_checker_lib::analysis::dead_variable_elimination - Rust
    pub fn remove_dead_var_assignments(project: &mut Project)
    Expand description

    Remove all dead assignments from all basic blocks in the given project.

    +remove_dead_var_assignments in cwe_checker_lib::analysis::dead_variable_elimination - Rust
    pub fn remove_dead_var_assignments(project: &mut Project)
    Expand description

    Remove all dead assignments from all basic blocks in the given project.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/index.html b/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/index.html index 7a9474bc0..0d245b18f 100644 --- a/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/index.html +++ b/doc/html/cwe_checker_lib/analysis/dead_variable_elimination/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::dead_variable_elimination - Rust
    Expand description

    This module contains a fixpoint computation to compute alive (resp. dead) variables +cwe_checker_lib::analysis::dead_variable_elimination - Rust

    Expand description

    This module contains a fixpoint computation to compute alive (resp. dead) variables and a function to remove dead assignments from a project.

    Functions

    This function is used to refine the value using the information on which branch was taken on a conditional jump.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for Context<'a>

    §

    impl<'a> Send for Context<'a>

    §

    impl<'a> Sync for Context<'a>

    §

    impl<'a> Unpin for Context<'a>

    §

    impl<'a> UnwindSafe for Context<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/fixpoint/index.html b/doc/html/cwe_checker_lib/analysis/fixpoint/index.html index 11b8e1ff7..81ec9489d 100644 --- a/doc/html/cwe_checker_lib/analysis/fixpoint/index.html +++ b/doc/html/cwe_checker_lib/analysis/fixpoint/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::fixpoint - Rust
    Expand description

    Creating and computing generic fixpoint computations.

    +cwe_checker_lib::analysis::fixpoint - Rust
    Expand description

    Creating and computing generic fixpoint computations.

    For general information on dataflow analysis using fixpoint algorithms see Wikipedia.

    General implementation notes

    A fixpoint problem is defined as a graph where:

    diff --git a/doc/html/cwe_checker_lib/analysis/fixpoint/struct.Computation.html b/doc/html/cwe_checker_lib/analysis/fixpoint/struct.Computation.html index 32aab32fc..c758c2437 100644 --- a/doc/html/cwe_checker_lib/analysis/fixpoint/struct.Computation.html +++ b/doc/html/cwe_checker_lib/analysis/fixpoint/struct.Computation.html @@ -1,4 +1,4 @@ -Computation in cwe_checker_lib::analysis::fixpoint - Rust
    pub struct Computation<T: Context> { /* private fields */ }
    Expand description

    The computation struct contains an intermediate result of a fixpoint computation +Computation in cwe_checker_lib::analysis::fixpoint - Rust

    pub struct Computation<T: Context> { /* private fields */ }
    Expand description

    The computation struct contains an intermediate result of a fixpoint computation and provides methods for continuing the fixpoint computation or extracting the (intermediate or final) results.

    Usage

    @@ -13,46 +13,48 @@

    Usage

    if let Some(node_value) = computation.get_node_value(node_index) { // ... };
    -

    Implementations§

    source§

    impl<T: Context> Computation<T>

    source

    pub fn new(fp_context: T, default_value: Option<T::NodeValue>) -> Self

    Create a new fixpoint computation from a fixpoint problem, the corresponding graph +

    Implementations§

    source§

    impl<T: Context> Computation<T>

    source

    pub fn new(fp_context: T, default_value: Option<T::NodeValue>) -> Self

    Create a new fixpoint computation from a fixpoint problem, the corresponding graph and a default value for all nodes if one should exists.

    -
    source

    pub fn from_node_priority_list( +

    source

    pub fn from_node_priority_list( fp_context: T, - default_value: Option<T::NodeValue>, - priority_sorted_nodes: Vec<NodeIndex> + default_value: Option<T::NodeValue>, + priority_sorted_nodes: Vec<NodeIndex> ) -> Self

    Create a new fixpoint computation from a fixpoint problem, an optional default value and the list of nodes of the graph ordered by the priority for the worklist algorithm. The worklist algorithm will try to stabilize the nodes with a higher index in the priority_sorted_nodes array before those with a lower index.

    -
    source

    pub fn get_node_value(&self, node: NodeIndex) -> Option<&T::NodeValue>

    Get the value of a node.

    -
    source

    pub fn set_node_value(&mut self, node: NodeIndex, value: T::NodeValue)

    Set the value of a node and mark the node as not yet stabilized.

    -
    source

    pub fn compute_with_max_steps(&mut self, max_steps: u64)

    Compute the fixpoint of the fixpoint problem. +

    source

    pub fn get_node_value(&self, node: NodeIndex) -> Option<&T::NodeValue>

    Get the value of a node.

    +
    source

    pub fn set_node_value(&mut self, node: NodeIndex, value: T::NodeValue)

    Set the value of a node and mark the node as not yet stabilized.

    +
    source

    pub fn compute_with_max_steps(&mut self, max_steps: u64)

    Compute the fixpoint of the fixpoint problem. Each node will be visited at most max_steps times. If a node does not stabilize after max_steps visits, the end result will not be a fixpoint but only an intermediate result of a fixpoint computation.

    -
    source

    pub fn compute(&mut self)

    Compute the fixpoint of the fixpoint problem. +

    source

    pub fn compute(&mut self)

    Compute the fixpoint of the fixpoint problem. If the fixpoint algorithm does not converge to a fixpoint, this function will not terminate.

    -
    source

    pub fn node_values(&self) -> &FnvHashMap<NodeIndex, T::NodeValue>

    Get a reference to the internal map where one can look up the current values of all nodes

    -
    source

    pub fn get_graph(&self) -> &DiGraph<T::NodeLabel, T::EdgeLabel>

    Get a reference to the underlying graph

    -
    source

    pub fn get_context(&self) -> &T

    Get a reference to the underlying context object

    -
    source

    pub fn has_stabilized(&self) -> bool

    Returns True if the computation has stabilized, i.e. the internal worklist is empty.

    -
    source

    pub fn get_worklist(&self) -> Vec<NodeIndex>

    Return a list of all nodes which are marked as not-stabilized

    -

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for Computation<T>where - T: RefUnwindSafe, - <T as Context>::NodeValue: RefUnwindSafe,

    §

    impl<T> Send for Computation<T>where - T: Send, - <T as Context>::NodeValue: Send,

    §

    impl<T> Sync for Computation<T>where - T: Sync, - <T as Context>::NodeValue: Sync,

    §

    impl<T> Unpin for Computation<T>where - T: Unpin, - <T as Context>::NodeValue: Unpin,

    §

    impl<T> UnwindSafe for Computation<T>where - T: UnwindSafe, - <T as Context>::NodeValue: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn node_values(&self) -> &FnvHashMap<NodeIndex, T::NodeValue>

    Get a reference to the internal map where one can look up the current values of all nodes

    +
    source

    pub fn node_values_mut(&mut self) -> impl Iterator<Item = &mut T::NodeValue>

    Get a mutable iterator over all node values. +Also add all nodes that have values to the worklist, because one can change all their values through the iterator.

    +
    source

    pub fn get_graph(&self) -> &DiGraph<T::NodeLabel, T::EdgeLabel>

    Get a reference to the underlying graph

    +
    source

    pub fn get_context(&self) -> &T

    Get a reference to the underlying context object

    +
    source

    pub fn has_stabilized(&self) -> bool

    Returns True if the computation has stabilized, i.e. the internal worklist is empty.

    +
    source

    pub fn get_worklist(&self) -> Vec<NodeIndex>

    Return a list of all nodes which are marked as not-stabilized

    +

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for Computation<T>where + T: RefUnwindSafe, + <T as Context>::NodeValue: RefUnwindSafe,

    §

    impl<T> Send for Computation<T>where + T: Send, + <T as Context>::NodeValue: Send,

    §

    impl<T> Sync for Computation<T>where + T: Sync, + <T as Context>::NodeValue: Sync,

    §

    impl<T> Unpin for Computation<T>where + T: Unpin, + <T as Context>::NodeValue: Unpin,

    §

    impl<T> UnwindSafe for Computation<T>where + T: UnwindSafe, + <T as Context>::NodeValue: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/fixpoint/trait.Context.html b/doc/html/cwe_checker_lib/analysis/fixpoint/trait.Context.html index b251b9e25..48f80fa67 100644 --- a/doc/html/cwe_checker_lib/analysis/fixpoint/trait.Context.html +++ b/doc/html/cwe_checker_lib/analysis/fixpoint/trait.Context.html @@ -1,7 +1,7 @@ -Context in cwe_checker_lib::analysis::fixpoint - Rust
    pub trait Context {
    -    type EdgeLabel: Clone;
    +Context in cwe_checker_lib::analysis::fixpoint - Rust
    pub trait Context {
    +    type EdgeLabel: Clone;
         type NodeLabel;
    -    type NodeValue: PartialEq + Eq + Clone;
    +    type NodeValue: PartialEq + Eq + Clone;
     
         // Required methods
         fn get_graph(&self) -> &DiGraph<Self::NodeLabel, Self::EdgeLabel>;
    @@ -14,24 +14,24 @@
             &self,
             value: &Self::NodeValue,
             edge: EdgeIndex
    -    ) -> Option<Self::NodeValue>;
    +    ) -> Option<Self::NodeValue>;
     }
    Expand description

    The context of a fixpoint computation.

    All trait methods have access to the FixpointProblem structure, so that context informations are accessible through it.

    -

    Required Associated Types§

    source

    type EdgeLabel: Clone

    the type of edge labels of the underlying graph

    -
    source

    type NodeLabel

    the type of node labels of the underlying graph

    -
    source

    type NodeValue: PartialEq + Eq + Clone

    The type of the value that gets assigned to each node. +

    Required Associated Types§

    source

    type EdgeLabel: Clone

    the type of edge labels of the underlying graph

    +
    source

    type NodeLabel

    the type of node labels of the underlying graph

    +
    source

    type NodeValue: PartialEq + Eq + Clone

    The type of the value that gets assigned to each node. The values should form a partially ordered set.

    -

    Required Methods§

    source

    fn get_graph(&self) -> &DiGraph<Self::NodeLabel, Self::EdgeLabel>

    Get the graph on which the fixpoint computation operates.

    -
    source

    fn merge( +

    Required Methods§

    source

    fn get_graph(&self) -> &DiGraph<Self::NodeLabel, Self::EdgeLabel>

    Get the graph on which the fixpoint computation operates.

    +
    source

    fn merge( &self, val1: &Self::NodeValue, val2: &Self::NodeValue ) -> Self::NodeValue

    This function describes how to merge two values

    -
    source

    fn update_edge( +

    source

    fn update_edge( &self, value: &Self::NodeValue, edge: EdgeIndex -) -> Option<Self::NodeValue>

    This function describes how the value at the end node of an edge is computed from the value at the start node of the edge. +) -> Option<Self::NodeValue>

    This function describes how the value at the end node of an edge is computed from the value at the start node of the edge. The function can return None to indicate that no end value gets generated through this edge. E.g. In a control flow graph, if the edge cannot be taken for the given start value, this function should return None.

    -

    Implementors§

    source§

    impl<'a, T: Context<'a>> Context for cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext<'a, T>

    §

    type EdgeLabel = Edge<'a>

    §

    type NodeLabel = Node<'a>

    §

    type NodeValue = NodeValue<<T as Context<'a>>::Value>

    source§

    impl<'a, T: Context<'a>> Context for cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext<'a, T>

    §

    type EdgeLabel = Edge<'a>

    §

    type NodeLabel = Node<'a>

    §

    type NodeValue = NodeValue<<T as Context<'a>>::Value>

    \ No newline at end of file +

    Object Safety§

    This trait is not object safe.

    Implementors§

    source§

    impl<'a, T: Context<'a>> Context for cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext<'a, T>

    §

    type EdgeLabel = Edge<'a>

    §

    type NodeLabel = Node<'a>

    §

    type NodeValue = NodeValue<<T as Context<'a>>::Value>

    source§

    impl<'a, T: Context<'a>> Context for cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext<'a, T>

    §

    type EdgeLabel = Edge<'a>

    §

    type NodeLabel = Node<'a>

    §

    type NodeValue = NodeValue<<T as Context<'a>>::Value>

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_bottom_up_worklist.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_bottom_up_worklist.html index b07fdaa1f..9dacf383c 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_bottom_up_worklist.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_bottom_up_worklist.html @@ -1,2 +1,2 @@ -create_bottom_up_worklist in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_bottom_up_worklist(graph: &Graph<'_>) -> Vec<NodeIndex>
    Expand description

    Returns a node ordering with callee nodes behind caller nodes.

    +create_bottom_up_worklist in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_bottom_up_worklist(graph: &Graph<'_>) -> Vec<NodeIndex>
    Expand description

    Returns a node ordering with callee nodes behind caller nodes.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation.html index 14b3dd473..d73b45333 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation.html @@ -1,5 +1,5 @@ -create_computation in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_computation<'a, T: Context<'a>>(
    +create_computation in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_computation<'a, T: Context<'a>>(
         problem: T,
    -    default_value: Option<T::Value>
    +    default_value: Option<T::Value>
     ) -> Computation<GeneralizedContext<'a, T>>
    Expand description

    Generate a new computation from the corresponding context and an optional default value for nodes.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html index 3cb5c568b..f17ba941a 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_bottom_up_worklist_order.html @@ -1,6 +1,6 @@ -create_computation_with_bottom_up_worklist_order in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_computation_with_bottom_up_worklist_order<'a, T: Context<'a>>(
    +create_computation_with_bottom_up_worklist_order in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_computation_with_bottom_up_worklist_order<'a, T: Context<'a>>(
         problem: T,
    -    default_value: Option<T::Value>
    +    default_value: Option<T::Value>
     ) -> Computation<GeneralizedContext<'a, T>>
    Expand description

    Generate a new computation from the corresponding context and an optional default value for nodes. Uses a bottom up worklist order when computing the fixpoint.

    The worklist order prefers callee nodes before caller nodes.

    diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html index 666b12146..757267262 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_computation_with_top_down_worklist_order.html @@ -1,6 +1,6 @@ -create_computation_with_top_down_worklist_order in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_computation_with_top_down_worklist_order<'a, T: Context<'a>>(
    +create_computation_with_top_down_worklist_order in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_computation_with_top_down_worklist_order<'a, T: Context<'a>>(
         problem: T,
    -    default_value: Option<T::Value>
    +    default_value: Option<T::Value>
     ) -> Computation<GeneralizedContext<'a, T>>
    Expand description

    Generate a new computation from the corresponding context and an optional default value for nodes. Uses a top down worklist order when computing the fixpoint.

    The worklist order prefers caller nodes before callee nodes.

    diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_top_down_worklist.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_top_down_worklist.html index b6fc838d3..78db8b9ab 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_top_down_worklist.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/fn.create_top_down_worklist.html @@ -1,2 +1,2 @@ -create_top_down_worklist in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_top_down_worklist(graph: &Graph<'_>) -> Vec<NodeIndex>
    Expand description

    Returns a node ordering with caller nodes behind callee nodes.

    +create_top_down_worklist in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub fn create_top_down_worklist(graph: &Graph<'_>) -> Vec<NodeIndex>
    Expand description

    Returns a node ordering with caller nodes behind callee nodes.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/index.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/index.html index f7070f650..bd812fd91 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/index.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    Expand description

    Creating and computing forward interprocedural fixpoint problems.

    +cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    Expand description

    Creating and computing forward interprocedural fixpoint problems.

    General notes

    This module supports computation of fixpoint problems on the control flow graphs generated by the graph module.

    To compute a generalized fixpoint problem, diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/struct.GeneralizedContext.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/struct.GeneralizedContext.html index 2754c7520..c14ee4f44 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/struct.GeneralizedContext.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/struct.GeneralizedContext.html @@ -1,33 +1,33 @@ -GeneralizedContext in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust

    pub struct GeneralizedContext<'a, T: Context<'a>> { /* private fields */ }
    Expand description

    This struct is a wrapper to create a general fixpoint context out of an interprocedural fixpoint context.

    -

    Implementations§

    source§

    impl<'a, T: Context<'a>> GeneralizedContext<'a, T>

    source

    pub fn new(context: T) -> Self

    Create a new generalized context out of an interprocedural context object.

    -
    source

    pub fn get_context(&self) -> &T

    Get the inner context object.

    -

    Trait Implementations§

    source§

    impl<'a, T: Context<'a>> Context for GeneralizedContext<'a, T>

    source§

    fn get_graph(&self) -> &Graph<'a>

    Get a reference to the underlying graph.

    -
    source§

    fn merge( +GeneralizedContext in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub struct GeneralizedContext<'a, T: Context<'a>> { /* private fields */ }
    Expand description

    This struct is a wrapper to create a general fixpoint context out of an interprocedural fixpoint context.

    +

    Implementations§

    source§

    impl<'a, T: Context<'a>> GeneralizedContext<'a, T>

    source

    pub fn new(context: T) -> Self

    Create a new generalized context out of an interprocedural context object.

    +
    source

    pub fn get_context(&self) -> &T

    Get the inner context object.

    +

    Trait Implementations§

    source§

    impl<'a, T: Context<'a>> Context for GeneralizedContext<'a, T>

    source§

    fn get_graph(&self) -> &Graph<'a>

    Get a reference to the underlying graph.

    +
    source§

    fn merge( &self, val1: &Self::NodeValue, val2: &Self::NodeValue ) -> Self::NodeValue

    Merge two values using the merge function from the interprocedural context object.

    -
    source§

    fn update_edge( +

    source§

    fn update_edge( &self, node_value: &Self::NodeValue, edge: EdgeIndex -) -> Option<Self::NodeValue>

    Forward edge transition function. +) -> Option<Self::NodeValue>

    Forward edge transition function. Applies the transition functions from the interprocedural context object corresponding to the type of the provided edge.

    §

    type EdgeLabel = Edge<'a>

    the type of edge labels of the underlying graph
    §

    type NodeLabel = Node<'a>

    the type of node labels of the underlying graph
    §

    type NodeValue = NodeValue<<T as Context<'a>>::Value>

    The type of the value that gets assigned to each node. -The values should form a partially ordered set.

    Auto Trait Implementations§

    §

    impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where - T: RefUnwindSafe,

    §

    impl<'a, T> Send for GeneralizedContext<'a, T>where - T: Send,

    §

    impl<'a, T> Sync for GeneralizedContext<'a, T>where - T: Sync,

    §

    impl<'a, T> Unpin for GeneralizedContext<'a, T>where - T: Unpin,

    §

    impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +The values should form a partially ordered set.

    Auto Trait Implementations§

    §

    impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where + T: RefUnwindSafe,

    §

    impl<'a, T> Send for GeneralizedContext<'a, T>where + T: Send,

    §

    impl<'a, T> Sync for GeneralizedContext<'a, T>where + T: Sync,

    §

    impl<'a, T> Unpin for GeneralizedContext<'a, T>where + T: Unpin,

    §

    impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.html b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.html index dfa9fcde5..b79069a26 100644 --- a/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.html +++ b/doc/html/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.html @@ -1,5 +1,5 @@ -Context in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub trait Context<'a> {
    -    type Value: PartialEq + Eq + Clone;
    +Context in cwe_checker_lib::analysis::forward_interprocedural_fixpoint - Rust
    pub trait Context<'a> {
    +    type Value: PartialEq + Eq + Clone;
     
         // Required methods
         fn get_graph(&self) -> &Graph<'a>;
    @@ -8,41 +8,41 @@
             &self,
             value: &Self::Value,
             def: &Term<Def>
    -    ) -> Option<Self::Value>;
    +    ) -> Option<Self::Value>;
         fn update_jump(
             &self,
             value: &Self::Value,
             jump: &Term<Jmp>,
    -        untaken_conditional: Option<&Term<Jmp>>,
    +        untaken_conditional: Option<&Term<Jmp>>,
             target: &Term<Blk>
    -    ) -> Option<Self::Value>;
    +    ) -> Option<Self::Value>;
         fn update_call(
             &self,
             value: &Self::Value,
             call: &Term<Jmp>,
             target: &Node<'_>,
    -        calling_convention: &Option<String>
    -    ) -> Option<Self::Value>;
    +        calling_convention: &Option<String>
    +    ) -> Option<Self::Value>;
         fn update_return(
             &self,
    -        value: Option<&Self::Value>,
    -        value_before_call: Option<&Self::Value>,
    +        value: Option<&Self::Value>,
    +        value_before_call: Option<&Self::Value>,
             call_term: &Term<Jmp>,
             return_term: &Term<Jmp>,
    -        calling_convention: &Option<String>
    -    ) -> Option<Self::Value>;
    +        calling_convention: &Option<String>
    +    ) -> Option<Self::Value>;
         fn update_call_stub(
             &self,
             value: &Self::Value,
             call: &Term<Jmp>
    -    ) -> Option<Self::Value>;
    +    ) -> Option<Self::Value>;
         fn specialize_conditional(
             &self,
             value: &Self::Value,
             condition: &Expression,
             block_before_condition: &Term<Blk>,
    -        is_true: bool
    -    ) -> Option<Self::Value>;
    +        is_true: bool
    +    ) -> Option<Self::Value>;
     }
    Expand description

    The context for an interprocedural fixpoint computation.

    Basically, a Context object needs to contain a reference to the actual graph, a method for merging node values, @@ -50,52 +50,52 @@

    All trait methods have access to the FixpointProblem structure, so that context informations are accessible through it.

    All edge transition functions can return None to indicate that no information flows through the edge. For example, this can be used to indicate edges that can never been taken.

    -

    Required Associated Types§

    source

    type Value: PartialEq + Eq + Clone

    The type of the values that are assigned to nodes during the fixpoint computation.

    -

    Required Methods§

    source

    fn get_graph(&self) -> &Graph<'a>

    Get a reference to the graph that the fixpoint is computed on.

    -
    source

    fn merge(&self, value1: &Self::Value, value2: &Self::Value) -> Self::Value

    Merge two node values.

    -
    source

    fn update_def( +

    Required Associated Types§

    source

    type Value: PartialEq + Eq + Clone

    The type of the values that are assigned to nodes during the fixpoint computation.

    +

    Required Methods§

    source

    fn get_graph(&self) -> &Graph<'a>

    Get a reference to the graph that the fixpoint is computed on.

    +
    source

    fn merge(&self, value1: &Self::Value, value2: &Self::Value) -> Self::Value

    Merge two node values.

    +
    source

    fn update_def( &self, value: &Self::Value, def: &Term<Def> -) -> Option<Self::Value>

    Transition function for Def terms. +) -> Option<Self::Value>

    Transition function for Def terms. The transition function for a basic block is computed by iteratively applying this function to the starting value for each Def term in the basic block. The iteration short-circuits and returns None if update_def returns None at any point.

    -
    source

    fn update_jump( +

    source

    fn update_jump( &self, value: &Self::Value, jump: &Term<Jmp>, - untaken_conditional: Option<&Term<Jmp>>, + untaken_conditional: Option<&Term<Jmp>>, target: &Term<Blk> -) -> Option<Self::Value>

    Transition function for (conditional and unconditional) Jmp terms.

    -
    source

    fn update_call( +) -> Option<Self::Value>

    Transition function for (conditional and unconditional) Jmp terms.

    +
    source

    fn update_call( &self, value: &Self::Value, call: &Term<Jmp>, target: &Node<'_>, - calling_convention: &Option<String> -) -> Option<Self::Value>

    Transition function for in-program calls.

    -
    source

    fn update_return( + calling_convention: &Option<String> +) -> Option<Self::Value>

    Transition function for in-program calls.

    +
    source

    fn update_return( &self, - value: Option<&Self::Value>, - value_before_call: Option<&Self::Value>, + value: Option<&Self::Value>, + value_before_call: Option<&Self::Value>, call_term: &Term<Jmp>, return_term: &Term<Jmp>, - calling_convention: &Option<String> -) -> Option<Self::Value>

    Transition function for return instructions. + calling_convention: &Option<String> +) -> Option<Self::Value>

    Transition function for return instructions. Has access to the value at the callsite corresponding to the return edge. This way one can recover caller-specific information on return from a function.

    -
    source

    fn update_call_stub( +

    source

    fn update_call_stub( &self, value: &Self::Value, call: &Term<Jmp> -) -> Option<Self::Value>

    Transition function for calls to functions not contained in the binary. +) -> Option<Self::Value>

    Transition function for calls to functions not contained in the binary. The corresponding edge goes from the callsite to the returned-to block.

    -
    source

    fn specialize_conditional( +

    source

    fn specialize_conditional( &self, value: &Self::Value, condition: &Expression, block_before_condition: &Term<Blk>, - is_true: bool -) -> Option<Self::Value>

    This function is used to refine the value using the information on which branch was taken on a conditional jump.

    -

    Implementors§

    source§

    impl<'a> Context<'a> for cwe_checker_lib::analysis::expression_propagation::Context<'a>

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a> for cwe_checker_lib::analysis::string_abstraction::context::Context<'a, T>

    §

    type Value = State<T>

    \ No newline at end of file + is_true: bool +) -> Option<Self::Value>

    This function is used to refine the value using the information on which branch was taken on a conditional jump.

    +

    Object Safety§

    This trait is not object safe.

    Implementors§

    source§

    impl<'a> Context<'a> for cwe_checker_lib::checkers::cwe_337::Context<'a>

    §

    type Value = State

    source§

    impl<'a> Context<'a> for cwe_checker_lib::analysis::expression_propagation::Context<'a>

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a> for cwe_checker_lib::analysis::string_abstraction::context::Context<'a, T>

    §

    type Value = State<T>

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/function_signature/fn.compute_function_signatures.html b/doc/html/cwe_checker_lib/analysis/function_signature/fn.compute_function_signatures.html index bdf93d81d..e5b67d462 100644 --- a/doc/html/cwe_checker_lib/analysis/function_signature/fn.compute_function_signatures.html +++ b/doc/html/cwe_checker_lib/analysis/function_signature/fn.compute_function_signatures.html @@ -1,7 +1,7 @@ -compute_function_signatures in cwe_checker_lib::analysis::function_signature - Rust
    pub fn compute_function_signatures<'a>(
    +compute_function_signatures in cwe_checker_lib::analysis::function_signature - Rust
    pub fn compute_function_signatures<'a>(
         project: &'a Project,
         graph: &'a Graph<'_>
    -) -> (BTreeMap<Tid, FunctionSignature>, Vec<LogMessage>)
    Expand description

    Compute the function signatures for all functions in the project.

    +) -> (BTreeMap<Tid, FunctionSignature>, Vec<LogMessage>)
    Expand description

    Compute the function signatures for all functions in the project.

    Returns a map from the function TIDs to their signatures, and a list of log and debug messages recorded during the computation of the signatures.

    For more information on the used algorithm see the module-level documentation.

    diff --git a/doc/html/cwe_checker_lib/analysis/function_signature/index.html b/doc/html/cwe_checker_lib/analysis/function_signature/index.html index 607884ae8..4349676c2 100644 --- a/doc/html/cwe_checker_lib/analysis/function_signature/index.html +++ b/doc/html/cwe_checker_lib/analysis/function_signature/index.html @@ -1,9 +1,13 @@ -cwe_checker_lib::analysis::function_signature - Rust
    Expand description

    A fixpoint algorithm computing parameters of functions and their access patterns.

    +cwe_checker_lib::analysis::function_signature - Rust
    Expand description

    A fixpoint algorithm computing parameters of functions and their access patterns.

    The fixpoint algorithm tracks the values of registers and the stack, although only stack accesses with known, constant offset are processed. Accesses to potential function parameters are collected together with the type of the access (is the value read, dereferenced for read access or dereferenced for write access). Accesses to constant addresses that may correspond to global variables are also tracked.

    +

    For values that are not directly tracked, +the algorithm tracks the abstract location that describes how the pointer to that value was computed. +This enables tracking of nested parameter objects +without actually tracking the memory objects where these objects are located.

    Known limitations of the analysis:

    • The analysis is an overapproximation in the sense that it may generate more input parameters @@ -16,14 +20,18 @@
    • Parameters that are used as input values for variadic functions may be missed. Some variadic functions are stubbed, i.e. parameter recognition should work for these. But not all variadic functions are stubbed.
    • -
    • If only a part (e.g. a single byte) of a stack parameter is accessed instead of the whole parameter -then a duplicate stack parameter may be generated. -A proper sanitation for this case is not yet implemented, -although error messages are generated if such a case is detected.
    • For floating point parameter registers the base register is detected as a parameter, although only a smaller sub-register is the actual parameter in many cases. Also, if a function uses sub-registers of floating point registers as local variables, the registers may be incorrectly flagged as input parameters.
    • +
    • Tracking of nested parameters via their abstract locations is an unsound, heuristic approach, +as the analysis does not keep track of when such nested pointers might get overwritten. +Nevertheless, it should result in an overapproximation of parameters and their access patterns in most cases.
    • +
    • The nesting depth for tracked nested parameters is limited +to avoid generating infinitely many parameters for recursive types like linked lists.
    • +
    • For arrays no parameters should be created for the array elements. +However, if only a particular element in an array is accessed without iteration over the array, +then a parameter might be generated for that element.

    Modules

    • This module contains stubs for frequently used LibC-symbols as well as helper functions for handling the effects of calls to these functions.

    Structs

    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.compute_return_value_for_stubbed_function.html b/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.compute_return_value_for_stubbed_function.html index 8bd96244f..e5354c612 100644 --- a/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.compute_return_value_for_stubbed_function.html +++ b/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.compute_return_value_for_stubbed_function.html @@ -1,4 +1,4 @@ -compute_return_value_for_stubbed_function in cwe_checker_lib::analysis::function_signature::stubs - Rust
    pub fn compute_return_value_for_stubbed_function(
    +compute_return_value_for_stubbed_function in cwe_checker_lib::analysis::function_signature::stubs - Rust
    pub fn compute_return_value_for_stubbed_function(
         project: &Project,
         state: &mut State,
         extern_symbol: &ExternSymbol,
    diff --git a/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.generate_param_access_stubs.html b/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.generate_param_access_stubs.html
    index 25f5d97a5..24d096645 100644
    --- a/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.generate_param_access_stubs.html
    +++ b/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.generate_param_access_stubs.html
    @@ -1,6 +1,5 @@
    -generate_param_access_stubs in cwe_checker_lib::analysis::function_signature::stubs - Rust
    pub fn generate_param_access_stubs(
    -    
    -) -> BTreeMap<&'static str, Vec<AccessPattern>>
    Expand description

    Returns a map that maps the names of known extern functions to the access patterns for their parameters.

    +generate_param_access_stubs in cwe_checker_lib::analysis::function_signature::stubs - Rust
    pub fn generate_param_access_stubs(
    +) -> BTreeMap<&'static str, Vec<AccessPattern>>
    Expand description

    Returns a map that maps the names of known extern functions to the access patterns for their parameters.

    The access patterns are ordered in the same order as the parameters (i.e. the first access pattern corresponds to the first parameter and so on).

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.get_stubbed_variadic_symbols.html b/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.get_stubbed_variadic_symbols.html index 50d9e915c..7008077be 100644 --- a/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.get_stubbed_variadic_symbols.html +++ b/doc/html/cwe_checker_lib/analysis/function_signature/stubs/fn.get_stubbed_variadic_symbols.html @@ -1,6 +1,5 @@ -get_stubbed_variadic_symbols in cwe_checker_lib::analysis::function_signature::stubs - Rust
    pub fn get_stubbed_variadic_symbols(
    -    
    -) -> BTreeMap<&'static str, (usize, AccessPattern)>
    Expand description

    Return a map that maps names of stubbed variadic symbols to a tuple consisting of:

    +get_stubbed_variadic_symbols in cwe_checker_lib::analysis::function_signature::stubs - Rust
    pub fn get_stubbed_variadic_symbols(
    +) -> BTreeMap<&'static str, (usize, AccessPattern)>
    Expand description

    Return a map that maps names of stubbed variadic symbols to a tuple consisting of:

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/graph/fn.get_entry_nodes_of_subs.html b/doc/html/cwe_checker_lib/analysis/graph/fn.get_entry_nodes_of_subs.html index cc28462d1..16125cca7 100644 --- a/doc/html/cwe_checker_lib/analysis/graph/fn.get_entry_nodes_of_subs.html +++ b/doc/html/cwe_checker_lib/analysis/graph/fn.get_entry_nodes_of_subs.html @@ -1,2 +1,2 @@ -get_entry_nodes_of_subs in cwe_checker_lib::analysis::graph - Rust
    pub fn get_entry_nodes_of_subs(graph: &Graph<'_>) -> HashMap<Tid, NodeIndex>
    Expand description

    Returns a map from function TIDs to the node index of the BlkStart node of the first block in the function.

    +get_entry_nodes_of_subs in cwe_checker_lib::analysis::graph - Rust
    pub fn get_entry_nodes_of_subs(graph: &Graph<'_>) -> HashMap<Tid, NodeIndex>
    Expand description

    Returns a map from function TIDs to the node index of the BlkStart node of the first block in the function.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg.html b/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg.html index e3fcdd219..28a0635b1 100644 --- a/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg.html +++ b/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg.html @@ -1,2 +1,2 @@ -get_program_cfg in cwe_checker_lib::analysis::graph - Rust
    pub fn get_program_cfg(program: &Term<Program>) -> Graph<'_>
    Expand description

    Build the interprocedural control flow graph for a program term.

    +get_program_cfg in cwe_checker_lib::analysis::graph - Rust
    pub fn get_program_cfg(program: &Term<Program>) -> Graph<'_>
    Expand description

    Build the interprocedural control flow graph for a program term.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg_with_logs.html b/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg_with_logs.html index 7c5e0dc73..a165d7498 100644 --- a/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg_with_logs.html +++ b/doc/html/cwe_checker_lib/analysis/graph/fn.get_program_cfg_with_logs.html @@ -1,4 +1,4 @@ -get_program_cfg_with_logs in cwe_checker_lib::analysis::graph - Rust
    pub fn get_program_cfg_with_logs(
    +get_program_cfg_with_logs in cwe_checker_lib::analysis::graph - Rust
    pub fn get_program_cfg_with_logs(
         program: &Term<Program>
    -) -> (Graph<'_>, Vec<LogMessage>)
    Expand description

    Build the interprocedural control flow graph for a program term with log messages created by building.

    +) -> (Graph<'_>, Vec<LogMessage>)
    Expand description

    Build the interprocedural control flow graph for a program term with log messages created by building.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/graph/index.html b/doc/html/cwe_checker_lib/analysis/graph/index.html index 13651703e..6bca65f74 100644 --- a/doc/html/cwe_checker_lib/analysis/graph/index.html +++ b/doc/html/cwe_checker_lib/analysis/graph/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::graph - Rust
    Expand description

    Generate control flow graphs out of a program term.

    +cwe_checker_lib::analysis::graph - Rust
    Expand description

    Generate control flow graphs out of a program term.

    The generated graphs follow some basic principles:

    • Nodes denote specific (abstract) points in time during program execution, @@ -42,4 +42,4 @@

      Enums

      • The edge type of an interprocedural fixpoint graph.
      • The node type of an interprocedural control flow graph

      Functions

      • Returns a map from function TIDs to the node index of the BlkStart node of the first block in the function.
      • Build the interprocedural control flow graph for a program term.
      • Build the interprocedural control flow graph for a program term with log messages created by building.

      Type Definitions

      • The graph type of an interprocedural control flow graph
    \ No newline at end of file +

    Enums

    • The edge type of an interprocedural fixpoint graph.
    • The node type of an interprocedural control flow graph

    Functions

    • Returns a map from function TIDs to the node index of the BlkStart node of the first block in the function.
    • Build the interprocedural control flow graph for a program term.
    • Build the interprocedural control flow graph for a program term with log messages created by building.

    Type Aliases

    • The graph type of an interprocedural control flow graph
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/graph/type.Graph.html b/doc/html/cwe_checker_lib/analysis/graph/type.Graph.html index 536720fd5..305b17acd 100644 --- a/doc/html/cwe_checker_lib/analysis/graph/type.Graph.html +++ b/doc/html/cwe_checker_lib/analysis/graph/type.Graph.html @@ -1,2 +1,2 @@ -Graph in cwe_checker_lib::analysis::graph - Rust

    Type Definition cwe_checker_lib::analysis::graph::Graph

    source ·
    pub type Graph<'a> = DiGraph<Node<'a>, Edge<'a>>;
    Expand description

    The graph type of an interprocedural control flow graph

    -
    \ No newline at end of file +Graph in cwe_checker_lib::analysis::graph - Rust

    Type Alias cwe_checker_lib::analysis::graph::Graph

    source ·
    pub type Graph<'a> = DiGraph<Node<'a>, Edge<'a>>;
    Expand description

    The graph type of an interprocedural control flow graph

    +

    Aliased Type§

    struct Graph<'a> { /* private fields */ }
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/index.html b/doc/html/cwe_checker_lib/analysis/index.html index 3bc2ec2d3..12ee5dad9 100644 --- a/doc/html/cwe_checker_lib/analysis/index.html +++ b/doc/html/cwe_checker_lib/analysis/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis - Rust
    Expand description

    Modules necessary for graph-based and fixpoint-based analyses, +cwe_checker_lib::analysis - Rust

    Expand description

    Modules necessary for graph-based and fixpoint-based analyses, as well as analyses depending on these modules.

    Modules

    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/fn.merge_option.html b/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/fn.merge_option.html index d0f82eb5f..f75590a97 100644 --- a/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/fn.merge_option.html +++ b/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/fn.merge_option.html @@ -1,8 +1,8 @@ -merge_option in cwe_checker_lib::analysis::interprocedural_fixpoint_generic - Rust
    pub fn merge_option<T: Clone, F>(
    -    opt1: &Option<T>,
    -    opt2: &Option<T>,
    +merge_option in cwe_checker_lib::analysis::interprocedural_fixpoint_generic - Rust
    pub fn merge_option<T: Clone, F>(
    +    opt1: &Option<T>,
    +    opt2: &Option<T>,
         merge: F
    -) -> Option<T>where
    -    F: Fn(&T, &T) -> T,
    Expand description

    Helper function to merge to values wrapped in Option<..>. +) -> Option<T>where + F: Fn(&T, &T) -> T,

    Expand description

    Helper function to merge to values wrapped in Option<..>. Merges (Some(x), None) to Some(x).

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/index.html b/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/index.html index e655b42fa..2822fbff6 100644 --- a/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/index.html +++ b/doc/html/cwe_checker_lib/analysis/interprocedural_fixpoint_generic/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::interprocedural_fixpoint_generic - Rust
    Expand description

    Types and functions shared between the implementations +cwe_checker_lib::analysis::interprocedural_fixpoint_generic - Rust

    Expand description

    Types and functions shared between the implementations of forward and backward interprocedural fixpoint computations.

    Enums

    Type Aliases

    • The abstract domain type for representing register values.
    • The abstract domain to use for absolute values.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/object/enum.ObjectType.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/object/enum.ObjectType.html index af700513e..a53e61c50 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/object/enum.ObjectType.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/object/enum.ObjectType.html @@ -1,4 +1,4 @@ -ObjectType in cwe_checker_lib::analysis::pointer_inference::object - Rust

    Variants§

    §

    Stack

    A stack object, i.e. the stack frame of a function.

    §

    Heap

    A memory object located on the heap.

    §

    GlobalMem

    A memory oject indicating the global memory space.

    -

    Trait Implementations§

    source§

    impl Clone for ObjectType

    source§

    fn clone(&self) -> ObjectType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ObjectType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ObjectType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ObjectType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for ObjectType

    source§

    fn cmp(&self, other: &ObjectType) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<ObjectType> for ObjectType

    source§

    fn eq(&self, other: &ObjectType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<ObjectType> for ObjectType

    source§

    fn partial_cmp(&self, other: &ObjectType) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for ObjectType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for ObjectType

    source§

    impl Eq for ObjectType

    source§

    impl StructuralEq for ObjectType

    source§

    impl StructuralPartialEq for ObjectType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for ObjectType

    source§

    fn clone(&self) -> ObjectType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ObjectType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ObjectType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ObjectType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for ObjectType

    source§

    fn cmp(&self, other: &ObjectType) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for ObjectType

    source§

    fn eq(&self, other: &ObjectType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for ObjectType

    source§

    fn partial_cmp(&self, other: &ObjectType) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for ObjectType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for ObjectType

    source§

    impl Eq for ObjectType

    source§

    impl StructuralEq for ObjectType

    source§

    impl StructuralPartialEq for ObjectType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    source§

    impl<N> NodeTrait for Nwhere - N: Copy + Ord + Hash,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    source§

    impl<N> NodeTrait for Nwhere + N: Copy + Ord + Hash,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/object/index.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/object/index.html index 9dd84f0e5..f376f1a48 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/object/index.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/object/index.html @@ -1,2 +1,2 @@ -cwe_checker_lib::analysis::pointer_inference::object - Rust
    Expand description

    This module contains the definition of the abstract memory object type.

    +cwe_checker_lib::analysis::pointer_inference::object - Rust
    Expand description

    This module contains the definition of the abstract memory object type.

    Structs

    • An abstract object contains all knowledge tracked about a particular memory object.

    Enums

    • An object can be a stack, a heap, or a global memory object.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/object/struct.AbstractObject.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/object/struct.AbstractObject.html index 667c4cd49..03fa6e672 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/object/struct.AbstractObject.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/object/struct.AbstractObject.html @@ -1,4 +1,4 @@ -AbstractObject in cwe_checker_lib::analysis::pointer_inference::object - Rust
    pub struct AbstractObject { /* private fields */ }
    Expand description

    An abstract object contains all knowledge tracked about a particular memory object.

    +AbstractObject in cwe_checker_lib::analysis::pointer_inference::object - Rust
    pub struct AbstractObject { /* private fields */ }
    Expand description

    An abstract object contains all knowledge tracked about a particular memory object.

    In some cases one abstract object can represent more than one actual memory object. This happens for e.g. several memory objects allocated into an array, since we cannot represent every object separately without knowing the exact number of objects @@ -9,47 +9,49 @@

  • The stack frame of a function
  • A memory object allocated on the heap
  • -

    Implementations§

    source§

    impl AbstractObject

    Implementations§

    source§

    impl AbstractObject

    source

    pub fn get_referenced_ids_overapproximation( &self -) -> &BTreeSet<AbstractIdentifier>

    Get all abstract IDs that the object may contain pointers to. +) -> &BTreeSet<AbstractIdentifier>

    Get all abstract IDs that the object may contain pointers to. This yields an overapproximation of possible pointer targets.

    -
    source

    pub fn get_referenced_ids_underapproximation( +

    source

    pub fn get_referenced_ids_underapproximation( &self -) -> BTreeSet<AbstractIdentifier>

    Get all abstract IDs for which the object contains pointers to. +) -> BTreeSet<AbstractIdentifier>

    Get all abstract IDs for which the object contains pointers to. This yields an underapproximation of pointer targets, since the object may contain pointers that could not be tracked by the analysis.

    -
    source

    pub fn remove_ids(&mut self, ids_to_remove: &BTreeSet<AbstractIdentifier>)

    Remove the provided IDs from the target lists of all pointers in the memory object. +

    source

    pub fn remove_ids(&mut self, ids_to_remove: &BTreeSet<AbstractIdentifier>)

    Remove the provided IDs from the target lists of all pointers in the memory object. Also remove them from the pointer_targets list.

    If this operation would produce an empty value, it replaces it with a Top value instead.

    -
    source

    pub fn replace_ids( +

    source

    pub fn replace_ids( &mut self, - replacement_map: &BTreeMap<AbstractIdentifier, Data> + replacement_map: &BTreeMap<AbstractIdentifier, Data> )

    Replace all abstract IDs in self with the values given by the replacement map. IDs not contained as keys in the replacement map are replaced by Top values.

    -
    source§

    impl AbstractObject

    source

    pub fn get_value(&self, offset: Bitvector, bytesize: ByteSize) -> Data

    Read the value at the given offset of the given size inside the memory region.

    -
    source

    pub fn set_value( +

    source§

    impl AbstractObject

    source

    pub fn get_value(&self, offset: Bitvector, bytesize: ByteSize) -> Data

    Read the value at the given offset of the given size inside the memory region.

    +
    source

    pub fn set_value( &mut self, value: Data, offset: &ValueDomain -) -> Result<(), Error>

    Write a value at the given offset to the memory region.

    +) -> Result<(), Error>

    Write a value at the given offset to the memory region.

    If the abstract object is not unique (i.e. may represent more than one actual object), merge the old value at the given offset with the new value.

    -
    source

    pub fn merge_value(&mut self, value: Data, offset: &ValueDomain)

    Merge value at position offset with the value currently saved at that position.

    -
    source

    pub fn assume_arbitrary_writes( +

    source

    pub fn merge_value(&mut self, value: Data, offset: &ValueDomain)

    Merge value at position offset with the value currently saved at that position.

    +
    source

    pub fn assume_arbitrary_writes( &mut self, - additional_targets: &BTreeSet<AbstractIdentifier> + additional_targets: &BTreeSet<AbstractIdentifier> )

    Marks all memory as Top and adds the additional_targets to the pointer targets. Represents the effect of unknown write instructions to the object which may include writing pointers to targets from the additional_targets set to the object.

    -
    source§

    impl AbstractObject

    source

    pub fn new( - type_: Option<ObjectType>, +

    source§

    impl AbstractObject

    source

    pub fn new( + type_: Option<ObjectType>, address_bytesize: ByteSize ) -> AbstractObject

    Create a new abstract object with given object type and address bytesize.

    -
    source

    pub fn is_unique(&self) -> bool

    Returns false if the abstract object may represent more than one object, +

    source

    pub fn is_unique(&self) -> bool

    Returns false if the abstract object may represent more than one object, e.g. for arrays of objects.

    -
    source

    pub fn mark_as_not_unique(&mut self)

    Mark the abstract object as possibly representing more than one actual memory object.

    -
    source

    pub fn get_object_type(&self) -> Option<ObjectType>

    Get the type of the memory object.

    -
    source

    pub fn overwrite_with( +

    source

    pub fn mark_as_not_unique(&mut self)

    Mark the abstract object as possibly representing more than one actual memory object.

    +
    source

    pub fn mark_as_unique(&mut self)

    Mark the abstract object as unique, i.e. it represents exactly one memory object.

    +
    source

    pub fn get_object_type(&self) -> Option<ObjectType>

    Get the type of the memory object.

    +
    source

    pub fn set_object_type(&mut self, object_type: Option<ObjectType>)

    Set the type of the memory object.

    +
    source

    pub fn overwrite_with( &mut self, other: &AbstractObject, offset_other: &ValueDomain @@ -63,34 +65,36 @@ This approximates the fact that we currently do not track exactly which indices in other were overwritten with a Top element and which indices simply were not accessed at all in other.

    -

    source

    pub fn add_offset_to_all_indices(&mut self, offset: &ValueDomain)

    Add an offset to all values contained in the abstract object.

    -
    source

    pub fn get_mem_region(&self) -> &MemRegion<Data>

    Get the memory region abstract domain associated to the memory object.

    -
    source

    pub fn overwrite_mem_region(&mut self, new_memory_region: MemRegion<Data>)

    Overwrite the memory region abstract domain associated to the memory object. +

    source

    pub fn add_offset_to_all_indices(&mut self, offset: &ValueDomain)

    Add an offset to all values contained in the abstract object.

    +
    source

    pub fn get_mem_region(&self) -> &MemRegion<Data>

    Get the memory region abstract domain associated to the memory object.

    +
    source

    pub fn overwrite_mem_region(&mut self, new_memory_region: MemRegion<Data>)

    Overwrite the memory region abstract domain associated to the memory object. Note that this function does not update the list of known pointer targets accordingly!

    -
    source

    pub fn add_ids_to_pointer_targets( +

    source

    pub fn add_ids_to_pointer_targets( &mut self, - ids_to_add: BTreeSet<AbstractIdentifier> + ids_to_add: BTreeSet<AbstractIdentifier> )

    Add IDs to the list of pointer targets for the memory object.

    -
    source§

    impl AbstractObject

    source

    pub fn to_json_compact(&self) -> Value

    Get a more compact json-representation of the abstract object. +

    source§

    impl AbstractObject

    source

    pub fn to_json_compact(&self) -> Value

    Get a more compact json-representation of the abstract object. Intended for pretty printing, not useable for serialization/deserialization.

    -

    Trait Implementations§

    source§

    impl AbstractDomain for AbstractObject

    source§

    fn merge(&self, other: &Self) -> Self

    Merge two abstract objects

    -
    source§

    fn is_top(&self) -> bool

    The domain has no Top element, thus this function always returns false.

    -
    source§

    impl Clone for AbstractObject

    source§

    fn clone(&self) -> AbstractObject

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AbstractObject

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for AbstractObject

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<AbstractObject> for AbstractObject

    source§

    fn eq(&self, other: &AbstractObject) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for AbstractObject

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for AbstractObject

    source§

    impl StructuralEq for AbstractObject

    source§

    impl StructuralPartialEq for AbstractObject

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl AbstractDomain for AbstractObject

    source§

    fn merge(&self, other: &Self) -> Self

    Merge two abstract objects

    +
    source§

    fn is_top(&self) -> bool

    The domain has no Top element, thus this function always returns false.

    +
    source§

    impl Clone for AbstractObject

    source§

    fn clone(&self) -> AbstractObject

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AbstractObject

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for AbstractObject

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for AbstractObject

    source§

    fn eq(&self, other: &AbstractObject) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for AbstractObject

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for AbstractObject

    source§

    impl StructuralEq for AbstractObject

    source§

    impl StructuralPartialEq for AbstractObject

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/static.CWE_MODULE.html index e40506a86..9e2ea00ae 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::analysis::pointer_inference - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The name and version number of the “Memory” CWE check.

    +CWE_MODULE in cwe_checker_lib::analysis::pointer_inference - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The name and version number of the “Memory” CWE check.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.Config.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.Config.html index c9f796cc1..68fc9b057 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.Config.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.Config.html @@ -1,26 +1,28 @@ -Config in cwe_checker_lib::analysis::pointer_inference - Rust
    pub struct Config {
    -    pub allocation_symbols: Vec<String>,
    +Config in cwe_checker_lib::analysis::pointer_inference - Rust
    pub struct Config {
    +    pub allocation_symbols: Vec<String>,
     }
    Expand description

    Configurable parameters for the analysis.

    -

    Fields§

    §allocation_symbols: Vec<String>

    Names of extern functions that are malloc-like, +

    Fields§

    §allocation_symbols: Vec<String>

    Names of extern functions that are malloc-like, i.e. the unique return value is a pointer to a newly allocated chunk of memory or a NULL pointer.

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.PointerInference.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.PointerInference.html index e65bf37e9..9ac5f3501 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.PointerInference.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.PointerInference.html @@ -1,59 +1,64 @@ -PointerInference in cwe_checker_lib::analysis::pointer_inference - Rust
    pub struct PointerInference<'a> {
    -    pub collected_logs: (Vec<LogMessage>, Vec<CweWarning>),
    +PointerInference in cwe_checker_lib::analysis::pointer_inference - Rust
    pub struct PointerInference<'a> {
    +    pub collected_logs: (Vec<LogMessage>, Vec<CweWarning>),
         /* private fields */
     }
    Expand description

    A wrapper struct for the pointer inference computation object. Also contains different analysis results computed through the fixpoint computation including generated log messages.

    -

    Fields§

    §collected_logs: (Vec<LogMessage>, Vec<CweWarning>)

    The log messages and CWE warnings that have been generated during the pointer inference analysis.

    -

    Implementations§

    source§

    impl<'a> PointerInference<'a>

    source

    pub fn new( +

    Fields§

    §collected_logs: (Vec<LogMessage>, Vec<CweWarning>)

    The log messages and CWE warnings that have been generated during the pointer inference analysis.

    +

    Implementations§

    source§

    impl<'a> PointerInference<'a>

    source

    pub fn new( analysis_results: &'a AnalysisResults<'a>, config: Config, log_sender: Sender<LogThreadMsg>, - print_stats: bool + print_stats: bool ) -> PointerInference<'a>

    Generate a new pointer inference computation for a project.

    -
    source

    pub fn compute(&mut self, print_stats: bool)

    Compute the fixpoint of the pointer inference analysis. +

    source

    pub fn compute(&mut self, print_stats: bool)

    Compute the fixpoint of the pointer inference analysis. Has a max_steps bound for the fixpoint algorithm to prevent infinite loops.

    If print_stats is true then some extra log messages with statistics about the computation are generated.

    -
    source

    pub fn print_yaml(&self)

    Print results serialized as YAML to stdout

    -
    source

    pub fn generate_compact_json(&self) -> Value

    Generate a compacted json representation of the results. +

    source

    pub fn print_yaml(&self)

    Print results serialized as YAML to stdout

    +
    source

    pub fn generate_compact_json(&self) -> Value

    Generate a compacted json representation of the results. Note that this output cannot be used for serialization/deserialization, but is only intended for user output and debugging.

    -
    source

    pub fn print_compact_json(&self)

    Print a compacted json representation of the results to stdout. +

    source

    pub fn print_compact_json(&self)

    Print a compacted json representation of the results to stdout. Note that this output cannot be used for serialization/deserialization, but is only intended for user output and debugging.

    -
    source

    pub fn get_graph(&self) -> &Graph<'_>

    Get the underlying graph of the computation.

    -
    source

    pub fn get_context(&self) -> &Context<'_>

    Get the context object of the computation.

    -
    source

    pub fn get_node_value(&self, node_id: NodeIndex) -> Option<&NodeValue<State>>

    Get the value associated to a node in the computed fixpoint +

    source

    pub fn get_graph(&self) -> &Graph<'_>

    Get the underlying graph of the computation.

    +
    source

    pub fn get_context(&self) -> &Context<'_>

    Get the context object of the computation.

    +
    source

    pub fn get_node_value(&self, node_id: NodeIndex) -> Option<&NodeValue<State>>

    Get the value associated to a node in the computed fixpoint (or intermediate state of the algorithm if the fixpoint has not been reached yet). Returns None if no value is associated to the Node.

    -
    source

    pub fn get_state_at_jmp_tid(&self, jmp_tid: &Tid) -> Option<&State>

    Get the state of the fixpoint computation at the block end node before the given jump instruction. +

    source

    pub fn get_state_at_jmp_tid(&self, jmp_tid: &Tid) -> Option<&State>

    Get the state of the fixpoint computation at the block end node before the given jump instruction. This function only yields results after the fixpoint has been computed.

    -
    source

    pub fn get_id_renaming_map_at_call_tid( +

    source

    pub fn get_id_renaming_map_at_call_tid( &self, call_tid: &Tid -) -> Option<&BTreeMap<AbstractIdentifier, Data>>

    Get the mapping from callee IDs to caller values for the given call. +) -> Option<&BTreeMap<AbstractIdentifier, Data>>

    Get the mapping from callee IDs to caller values for the given call. This function only yields results after the fixpoint has been computed.

    Note that the maps may contain mappings from callee IDs to temporary caller IDs that get instantly removed from the caller since they are not referenced in any caller object.

    -

    Trait Implementations§

    source§

    impl<'a> VsaResult for PointerInference<'a>

    Implementation of the VsaResult trait for providing other analyses with an easy-to-use interface +

    Trait Implementations§

    source§

    impl<'a> VsaResult for PointerInference<'a>

    Implementation of the VsaResult trait for providing other analyses with an easy-to-use interface to use the value set and points-to analysis results of the pointer inference.

    -
    source§

    fn eval_address_at_def(&self, def_tid: &Tid) -> Option<Data>

    Return the value of the address at the given read or store instruction.

    -
    source§

    fn eval_value_at_def(&self, def_tid: &Tid) -> Option<Data>

    Return the assigned value for store or assignment instructions or the value read for load instructions.

    -
    source§

    fn eval_at_jmp(&self, jmp_tid: &Tid, expression: &Expression) -> Option<Data>

    Evaluate the value of the given expression at the given jump instruction.

    -
    source§

    fn eval_parameter_arg_at_call( +

    source§

    fn eval_address_at_def(&self, def_tid: &Tid) -> Option<Data>

    Return the value of the address at the given read or store instruction.

    +
    source§

    fn eval_value_at_def(&self, def_tid: &Tid) -> Option<Data>

    Return the assigned value for store or assignment instructions or the value read for load instructions.

    +
    source§

    fn eval_at_jmp(&self, jmp_tid: &Tid, expression: &Expression) -> Option<Data>

    Evaluate the value of the given expression at the given jump instruction.

    +
    source§

    fn eval_parameter_arg_at_call( &self, jmp_tid: &Tid, parameter: &Arg -) -> Option<Data>

    Evaluate the value of the given parameter at the given jump instruction.

    +) -> Option<Data>

    Evaluate the value of the given parameter at the given jump instruction.

    +
    source§

    fn eval_parameter_location_at_call( + &self, + jmp_tid: &Tid, + parameter: &AbstractLocation +) -> Option<Data>

    Evaluate the value of the given parameter at the given jump instruction.

    §

    type ValueDomain = DataDomain<IntervalDomain>

    The type of the returned values. Usually this should be an AbstractDomain, -although this is not strictly required.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for PointerInference<'a>

    §

    impl<'a> Send for PointerInference<'a>

    §

    impl<'a> Sync for PointerInference<'a>

    §

    impl<'a> Unpin for PointerInference<'a>

    §

    impl<'a> UnwindSafe for PointerInference<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +although this is not strictly required.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for PointerInference<'a>

    §

    impl<'a> Send for PointerInference<'a>

    §

    impl<'a> Sync for PointerInference<'a>

    §

    impl<'a> Unpin for PointerInference<'a>

    §

    impl<'a> UnwindSafe for PointerInference<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.State.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.State.html index 0c44f1659..9cc9d2e23 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.State.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/struct.State.html @@ -1,4 +1,4 @@ -State in cwe_checker_lib::analysis::pointer_inference - Rust
    pub struct State {
    +State in cwe_checker_lib::analysis::pointer_inference - Rust
    pub struct State {
         pub memory: AbstractObjectList,
         pub stack_id: AbstractIdentifier,
         /* private fields */
    @@ -6,79 +6,93 @@
     

    Fields§

    §memory: AbstractObjectList

    The list of all known memory objects.

    §stack_id: AbstractIdentifier

    The abstract identifier of the current stack frame. It points to the base of the stack frame, i.e. only negative offsets point into the current stack frame.

    -

    Implementations§

    source§

    impl State

    source

    pub fn get_register(&self, variable: &Variable) -> Data

    Get the value of a register or Top() if no value is known.

    -
    source

    pub fn set_register(&mut self, variable: &Variable, value: Data)

    Set the value of a register.

    -
    source

    pub fn handle_register_assign( +

    Implementations§

    source§

    impl State

    source

    pub fn get_register(&self, variable: &Variable) -> Data

    Get the value of a register or Top() if no value is known.

    +
    source

    pub fn set_register(&mut self, variable: &Variable, value: Data)

    Set the value of a register.

    +
    source

    pub fn handle_register_assign( &mut self, target: &Variable, expression: &Expression )

    Evaluate expression on the given state and write the result to the target register.

    -
    source

    pub fn store_value( +

    source

    pub fn store_value( &mut self, address: &Data, value: &Data, global_memory: &RuntimeMemoryImage -) -> Result<(), Error>

    Store value at the given address.

    -
    source

    pub fn write_to_address( +) -> Result<(), Error>

    Store value at the given address.

    +
    source

    pub fn write_to_address( &mut self, address: &Expression, value: &Data, global_memory: &RuntimeMemoryImage -) -> Result<(), Error>

    Write a value to the address one gets when evaluating the address expression.

    -
    source

    pub fn handle_store( +) -> Result<(), Error>

    Write a value to the address one gets when evaluating the address expression.

    +
    source

    pub fn handle_store( &mut self, address: &Expression, value: &Expression, global_memory: &RuntimeMemoryImage -) -> Result<(), Error>

    Evaluate the store instruction, given by its address and value expressions, +) -> Result<(), Error>

    Evaluate the store instruction, given by its address and value expressions, and modify the state accordingly.

    -
    source

    pub fn load_value( +

    source

    pub fn load_value( &self, address: &Expression, size: ByteSize, global_memory: &RuntimeMemoryImage -) -> Result<Data, Error>

    Evaluate the given load instruction and return the data read on success.

    -
    source

    pub fn handle_load( +) -> Result<Data, Error>

    Evaluate the given address expression and return the data read from that address on success.

    +
    source

    pub fn load_value_from_address( + &self, + address: &Data, + size: ByteSize, + global_memory: &RuntimeMemoryImage +) -> Result<Data, Error>

    Load the value at the given address from the state and return the data read on success. +If the address contains more than one possible pointer target the results are merged for all possible pointer targets.

    +
    source

    pub fn handle_load( &mut self, var: &Variable, address: &Expression, global_memory: &RuntimeMemoryImage -) -> Result<(), Error>

    Handle a load instruction by assigning the value loaded from the address given by the address expression to var.

    -
    source

    pub fn eval(&self, expression: &Expression) -> Data

    Evaluate the value of an expression in the current state.

    -
    source

    pub fn eval_parameter_arg( +) -> Result<(), Error>

    Handle a load instruction by assigning the value loaded from the address given by the address expression to var.

    +
    source

    pub fn eval(&self, expression: &Expression) -> Data

    Evaluate the value of an expression in the current state.

    +
    source

    pub fn eval_parameter_arg( &self, parameter: &Arg, global_memory: &RuntimeMemoryImage -) -> Result<Data, Error>

    Evaluate the value of a parameter of an extern symbol for the given state.

    -
    source

    pub fn check_def_for_null_dereferences( +) -> Result<Data, Error>

    Evaluate the value of a parameter of an extern symbol for the given state.

    +
    source

    pub fn eval_abstract_location( + &self, + location: &AbstractLocation, + global_memory: &RuntimeMemoryImage +) -> Data

    Evaluate the value of the given abstract location on the current state. +If the actual value cannot be determined (e.g. if an intermediate pointer returns Top) +then a Top value is returned.

    +
    source

    pub fn check_def_for_null_dereferences( &mut self, def: &Term<Def> -) -> Result<bool, Error>

    Check whether the given def could result in a memory access through a NULL pointer.

    +) -> Result<bool, Error>

    Check whether the given def could result in a memory access through a NULL pointer.

    If no NULL pointer dereference is detected then Ok(false) is returned. If a NULL pointer dereference is detected, try to specialize the state so that address_expr cannot result in a NULL pointer anymore. If that succeeds, Ok(true) is returned. If that would result in an unsatisfiable state, an error is returned.

    -
    source§

    impl State

    source§

    impl State

    source

    pub fn add_directly_reachable_ids_to_id_set( &self, - ids: BTreeSet<AbstractIdentifier> -) -> BTreeSet<AbstractIdentifier>

    Search (recursively) through all memory objects referenced by the given IDs + ids: BTreeSet<AbstractIdentifier> +) -> BTreeSet<AbstractIdentifier>

    Search (recursively) through all memory objects referenced by the given IDs and add all IDs reachable through concrete pointers contained in them to the set of IDs.

    This uses an underapproximation of the referenced IDs of a memory object, i.e. IDs may be missing if the analysis lost track of the corresponding pointer.

    -
    source

    pub fn add_recursively_referenced_ids_to_id_set( +

    source

    pub fn add_recursively_referenced_ids_to_id_set( &self, - ids: BTreeSet<AbstractIdentifier> -) -> BTreeSet<AbstractIdentifier>

    Search (recursively) through all memory objects referenced by the given IDs + ids: BTreeSet<AbstractIdentifier> +) -> BTreeSet<AbstractIdentifier>

    Search (recursively) through all memory objects referenced by the given IDs and add all IDs contained in them to the set of IDs.

    This uses an overapproximation of the referenced IDs of a memory object, i.e. for a memory object it may add IDs as possible references where the corresponding reference is not longer present in the memory object.

    -
    source

    pub fn add_param_object_from_callee( +

    source

    pub fn add_param_object_from_callee( &mut self, param_object: AbstractObject, param_value_at_call: &Data -) -> Result<(), Error>

    Add the given param_object from the callee state to self +) -> Result<(), Error>

    Add the given param_object from the callee state to self (where self represents the state after returning from the callee).

    param_value_at_call is the value that the parameter had at the callsite. It is assumed that all IDs contained in the param_object are already replaced with values relative to the caller.

    @@ -86,25 +100,80 @@ then the contents of that object are overwritten with those of param_object. Else the contents are only merged with all possible caller objects, since the exact object that corresponds to the callee object is unknown.

    -
    source§

    impl State

    source

    pub fn get_id_to_unified_ids_replacement_map( + &self, + location_to_data_map: &BTreeMap<AbstractIdentifier, Data> +) -> BTreeMap<AbstractIdentifier, Data>

    Create an ID renaming map that maps IDs in self to the values representing them +after unifying and renaming non-parameter objects in self in preparation of returning to a caller.

    +
    source

    pub fn replace_ids_to_non_parameter_objects( + &mut self, + location_to_data_map: &BTreeMap<AbstractIdentifier, Data> +)

    Replace all IDs pointing to non-parameter objects.

    +
      +
    • IDs contained in the values of the location to data map are replaced by the corresponding key (with adjusted offset). +But the Top flag is also set, because the pointers may point to other objects.
    • +
    • All other non-parameter IDs are replaced with Top.
    • +
    +
    source

    pub fn insert_pointers_to_unified_objects( + &mut self, + location_to_data_map: &BTreeMap<AbstractIdentifier, Data>, + call_tid: &Tid +)

    Explicitly insert pointers to unified objects at the locations specified by their abstract location.

    +

    Note that these are the only locations where we (by definition) know +that the pointer is unique, i.e. we do not have to set a Top flag. +However, we still have to add targets to parameter objects, absolute values or the Top flag +to the pointer if the original pointer value contained them, +because these targets were not merged to the unified object.

    +
    source

    pub fn generate_target_objects_for_new_locations( + &self, + location_to_data_map: &BTreeMap<AbstractIdentifier, Data> +) -> BTreeMap<AbstractIdentifier, AbstractObject>

    Merge the target objects that are non-parameter objects for the given location to data mapping. +Return the results as a location to memory object map.

    +

    This function is a step in the process of unifying callee-originating memory objects on a return instruction. +The memory objects are also marked as unique, because they will represent a unique object in the caller.

    +
    source

    pub fn filter_location_to_pointer_data_map( + &self, + location_to_data_map: &mut BTreeMap<AbstractIdentifier, Data> +)

    Filter out those locations from the location to pointer data map +whose non-parameter object targets intersect with any of the other locations.

    +

    Note that this does not filter out locations whose targets contain the Top flag, +despite the fact that these locations theoretically may point to the same non-parameter object. +I.e. we trade soundness in the general case for exactness in the common case here.

    +
    source

    pub fn map_abstract_locations_to_pointer_data( + &self, + call_tid: &Tid +) -> BTreeMap<AbstractIdentifier, Data>

    Generate a map from abstract locations pointing to non-parameter memory objects +to the data represented by the abstract location in the current state.

    +

    The abstract locations get different TIDs depending on the root of the location:

    +
      +
    • If the root is a return register, then the TID is given by the provided call_tid.
    • +
    • If the root is a parameter memory object, then the TID is given by appending the suffix _param to the call_tid. +Since parameter and return register can overlap, the abstract IDs would overlap +if one would use the same TID in both cases.
    • +
    +

    For return register based location this function also generates nested abstract locations.

    +

    This function assumes that +State::minimize_before_return_instruction +has been called on self beforehand.

    +
    source§

    impl State

    source

    pub fn specialize_by_expression_result( &mut self, expression: &Expression, result: Data -) -> Result<(), Error>

    Try to restrict the input variables of expression on self +) -> Result<(), Error>

    Try to restrict the input variables of expression on self so that expression only evaluates to values represented by the given result.

    If expression cannot evaluate to any value represented by self, return an error.

    This function may restrict to upper bounds of possible values if the restriction cannot be made exact, i.e. after calling this function the state may still contain values for which expression does not evaluate to values represented by result.

    -
    source§

    impl State

    source

    pub fn new( +

    source§

    impl State

    source

    pub fn new( stack_register: &Variable, function_tid: Tid, - global_addresses: BTreeSet<u64> + global_addresses: BTreeSet<u64> ) -> State

    Create a new state that contains one memory object corresponding to the stack and one memory object corresponding to global memory.

    The stack offset will be set to zero.

    -
    source

    pub fn from_fn_sig( +

    source

    pub fn from_fn_sig( fn_sig: &FunctionSignature, stack_register: &Variable, function_tid: Tid @@ -112,56 +181,75 @@

    The created state contains one memory object for the stack frame of the function and one memory object for each parameter that is dereferenced by the function (according to the function signature).

    -

    Set the MIPS link register t9 to the address of the callee TID.

    +) -> Result<(), Error>

    Set the MIPS link register t9 to the address of the callee TID.

    According to the System V ABI for MIPS the caller has to save the callee address in register t9 on a function call to position-independent code. In MIPS this value is used to compute the addresses of some global variables, since MIPS does not use program-counter-relative access instructions like other instruction set architectures do.

    This function sets t9 to the correct value. Returns an error if the callee address could not be parsed (e.g. for UNKNOWN addresses).

    -
    source

    pub fn clear_non_callee_saved_register( +

    source

    pub fn minimize_before_return_instruction( + &mut self, + fn_sig: &FunctionSignature, + cconv: &CallingConvention +)

    Remove all objects and registers from the state whose contents will not be used after returning to a caller.

    +

    All remaining memory objects after the minimization are reachable in the caller +either via a parameter object that may have been mutated in the call +or via a return register.

    +
    source

    pub fn merge_mem_objects_with_unique_abstract_location( + &mut self, + call_tid: &Tid +)

    Try to determine unique pointer locations for non-parameter memory objects. +When successful, merge all referenced non-parameter objects for that location +and replace the pointer with a pointer to the merged object.

    +

    The merged objects get new abstract IDs generated from the call TID and their abstract location in the state.

    +

    This function leaves pointers to parameter objects as is, +while pointers to non-parameter objects, that were not merged (e.g. due to pointers being not unique) are replaced with Top.

    +
    source

    pub fn clear_non_callee_saved_register( &mut self, callee_saved_register: &[Variable] )

    Clear all non-callee-saved registers from the state. This automatically also removes all virtual registers. The parameter is a list of callee-saved register names.

    -
    source

    pub fn clear_stack_parameter( +

    source

    pub fn clear_stack_parameter( &mut self, extern_call: &ExternSymbol, global_memory: &RuntimeMemoryImage -) -> Result<(), Error>

    Mark those parameter values of an extern function call, that are passed on the stack, +) -> Result<(), Error>

    Mark those parameter values of an extern function call, that are passed on the stack, as unknown data (since the function may modify them).

    -
    source

    pub fn remove_unreferenced_objects(&mut self)

    Remove all objects that cannot longer be reached by any known pointer. +

    source

    pub fn remove_unreferenced_objects(&mut self)

    Remove all objects that cannot longer be reached by any known pointer. This does not remove objects, where some caller may still know a pointer to the object.

    The function uses an underapproximation of all possible pointer targets contained in a memory object. This keeps the number of tracked objects reasonably small.

    -
    source

    pub fn remove_non_callee_saved_register(&mut self, cconv: &CallingConvention)

    Remove all knowledge about the contents of non-callee-saved registers from the state.

    -
    source

    pub fn get_fn_tid(&self) -> &Tid

    Get the Tid of the function that this state belongs to.

    -
    source

    pub fn get_global_mem_id(&self) -> AbstractIdentifier

    Get the abstract ID of the global memory object corresponding to this function.

    -
    source§

    impl State

    source

    pub fn to_json_compact(&self) -> Value

    Get a more compact json-representation of the state. +

    source

    pub fn remove_non_callee_saved_register(&mut self, cconv: &CallingConvention)

    Remove all knowledge about the contents of non-callee-saved registers from the state.

    +
    source

    pub fn get_fn_tid(&self) -> &Tid

    Get the Tid of the function that this state belongs to.

    +
    source

    pub fn get_global_mem_id(&self) -> AbstractIdentifier

    Get the abstract ID of the global memory object corresponding to this function.

    +
    source§

    impl State

    source

    pub fn to_json_compact(&self) -> Value

    Get a more compact json-representation of the state. Intended for pretty printing, not useable for serialization/deserialization.

    -

    Trait Implementations§

    source§

    impl AbstractDomain for State

    source§

    fn merge(&self, other: &Self) -> Self

    Merge two states

    -
    source§

    fn is_top(&self) -> bool

    A state has no Top element

    -
    source§

    impl Clone for State

    source§

    fn clone(&self) -> State

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for State

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for State

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<State> for State

    source§

    fn eq(&self, other: &State) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for State

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for State

    source§

    impl StructuralEq for State

    source§

    impl StructuralPartialEq for State

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for State

    §

    impl Send for State

    §

    impl Sync for State

    §

    impl Unpin for State

    §

    impl UnwindSafe for State

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl AbstractDomain for State

    source§

    fn merge(&self, other: &Self) -> Self

    Merge two states

    +
    source§

    fn is_top(&self) -> bool

    A state has no Top element

    +
    source§

    impl Clone for State

    source§

    fn clone(&self) -> State

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for State

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for State

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for State

    source§

    fn eq(&self, other: &State) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for State

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for State

    source§

    impl StructuralEq for State

    source§

    impl StructuralPartialEq for State

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for State

    §

    impl Send for State

    §

    impl Sync for State

    §

    impl Unpin for State

    §

    impl UnwindSafe for State

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/type.Data.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/type.Data.html index 9a2970609..1abe88b95 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/type.Data.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/type.Data.html @@ -1,2 +1,2 @@ -Data in cwe_checker_lib::analysis::pointer_inference - Rust
    pub type Data = DataDomain<ValueDomain>;
    Expand description

    The abstract domain type for representing register values.

    -
    \ No newline at end of file +Data in cwe_checker_lib::analysis::pointer_inference - Rust
    pub type Data = DataDomain<ValueDomain>;
    Expand description

    The abstract domain type for representing register values.

    +

    Aliased Type§

    struct Data { /* private fields */ }
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/pointer_inference/type.ValueDomain.html b/doc/html/cwe_checker_lib/analysis/pointer_inference/type.ValueDomain.html index dd54203c1..bbd3d7e5a 100644 --- a/doc/html/cwe_checker_lib/analysis/pointer_inference/type.ValueDomain.html +++ b/doc/html/cwe_checker_lib/analysis/pointer_inference/type.ValueDomain.html @@ -1,2 +1,2 @@ -ValueDomain in cwe_checker_lib::analysis::pointer_inference - Rust
    pub type ValueDomain = IntervalDomain;
    Expand description

    The abstract domain to use for absolute values.

    -
    \ No newline at end of file +ValueDomain in cwe_checker_lib::analysis::pointer_inference - Rust
    pub type ValueDomain = IntervalDomain;
    Expand description

    The abstract domain to use for absolute values.

    +

    Aliased Type§

    struct ValueDomain { /* private fields */ }
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/fn.substitute_and_on_stackpointer.html b/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/fn.substitute_and_on_stackpointer.html index 0f79484a1..cb84f1b73 100644 --- a/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/fn.substitute_and_on_stackpointer.html +++ b/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/fn.substitute_and_on_stackpointer.html @@ -1,5 +1,5 @@ -substitute_and_on_stackpointer in cwe_checker_lib::analysis::stack_alignment_substitution - Rust
    pub fn substitute_and_on_stackpointer(
    +substitute_and_on_stackpointer in cwe_checker_lib::analysis::stack_alignment_substitution - Rust
    pub fn substitute_and_on_stackpointer(
         project: &mut Project
    -) -> Option<Vec<LogMessage>>
    Expand description

    Substitutes logical AND on the stackpointer register by SUB. +) -> Option<Vec<LogMessage>>

    Expand description

    Substitutes logical AND on the stackpointer register by SUB. Expressions are changed to use constants w.r.t the provided bit mask.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/index.html b/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/index.html index 752b234ce..081404ec9 100644 --- a/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/index.html +++ b/doc/html/cwe_checker_lib/analysis/stack_alignment_substitution/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::stack_alignment_substitution - Rust
    Expand description

    Substitutes stack pointer alignment operations utilising logical AND with an arithmetic SUB operation.

    +cwe_checker_lib::analysis::stack_alignment_substitution - Rust
    Expand description

    Substitutes stack pointer alignment operations utilising logical AND with an arithmetic SUB operation.

    The first basic block of every function is searched for a logical AND operation on the stack pointer. By journaling changes to the stack pointer an offset is calculated which is going to be used to alter the operation into a subtraction.

    diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/context/index.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/context/index.html index 94c4a36ef..b14f328a7 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/context/index.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/context/index.html @@ -1,3 +1,3 @@ -cwe_checker_lib::analysis::string_abstraction::context - Rust
    Expand description

    This module contains the Context Object for the String Abstraction. +cwe_checker_lib::analysis::string_abstraction::context - Rust

    Expand description

    This module contains the Context Object for the String Abstraction. It holds all necessary information that stays unchanged during the analysis.

    Modules

    • This module handles the string processing at external symbol calls.

    Structs

    • Contains all context information needed for the string abstract fixpoint computation.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/context/struct.Context.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/context/struct.Context.html index 51913f842..c8cc55cb0 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/context/struct.Context.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/context/struct.Context.html @@ -1,52 +1,52 @@ -Context in cwe_checker_lib::analysis::string_abstraction::context - Rust
    pub struct Context<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> {
    +Context in cwe_checker_lib::analysis::string_abstraction::context - Rust
    pub struct Context<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> {
         pub project: &'a Project,
    -    pub pointer_inference_results: &'a PointerInferenceComputation<'a>,
    -    pub string_symbol_map: HashMap<Tid, &'a ExternSymbol>,
    -    pub extern_symbol_map: HashMap<Tid, &'a ExternSymbol>,
    -    pub format_string_index_map: HashMap<String, usize>,
    -    pub block_start_node_map: HashMap<(Tid, Tid), NodeIndex>,
    -    pub block_first_def_set: HashSet<(Tid, Tid)>,
    -    pub jmp_to_blk_end_node_map: HashMap<(Tid, Tid), NodeIndex>,
    +    pub pointer_inference_results: &'a PointerInference<'a>,
    +    pub string_symbol_map: HashMap<Tid, &'a ExternSymbol>,
    +    pub extern_symbol_map: HashMap<Tid, &'a ExternSymbol>,
    +    pub format_string_index_map: HashMap<String, usize>,
    +    pub block_start_node_map: HashMap<(Tid, Tid), NodeIndex>,
    +    pub block_first_def_set: HashSet<(Tid, Tid)>,
    +    pub jmp_to_blk_end_node_map: HashMap<(Tid, Tid), NodeIndex>,
         /* private fields */
     }
    Expand description

    Contains all context information needed for the string abstract fixpoint computation.

    The struct also implements the interprocedural_fixpoint::Context trait to enable the fixpoint computation.

    Fields§

    §project: &'a Project

    A reference to the Project object representing the binary

    -
    §pointer_inference_results: &'a PointerInferenceComputation<'a>

    A pointer to the results of the pointer inference analysis. +

    §pointer_inference_results: &'a PointerInference<'a>

    A pointer to the results of the pointer inference analysis. They are used to determine the targets of pointers to memory, which in turn is used to keep track of taint on the stack or on the heap.

    -
    §string_symbol_map: HashMap<Tid, &'a ExternSymbol>

    Maps the TIDs of functions that shall be treated as string extern symbols to the ExternSymbol object representing it.

    -
    §extern_symbol_map: HashMap<Tid, &'a ExternSymbol>

    Maps the TIDs of functions that shall be treated as general extern symbols to the ExternSymbol object representing it.

    -
    §format_string_index_map: HashMap<String, usize>

    Maps string symbols to their corresponding format string parameter index.

    -
    §block_start_node_map: HashMap<(Tid, Tid), NodeIndex>

    A map to get the node index of the BlkStart node containing a given Def as the first Def of the block. +

    §string_symbol_map: HashMap<Tid, &'a ExternSymbol>

    Maps the TIDs of functions that shall be treated as string extern symbols to the ExternSymbol object representing it.

    +
    §extern_symbol_map: HashMap<Tid, &'a ExternSymbol>

    Maps the TIDs of functions that shall be treated as general extern symbols to the ExternSymbol object representing it.

    +
    §format_string_index_map: HashMap<String, usize>

    Maps string symbols to their corresponding format string parameter index.

    +
    §block_start_node_map: HashMap<(Tid, Tid), NodeIndex>

    A map to get the node index of the BlkStart node containing a given Def as the first Def of the block. The keys are of the form (Def-TID, Current-Sub-TID) to distinguish the nodes for blocks contained in more than one function.

    -
    §block_first_def_set: HashSet<(Tid, Tid)>

    A set containing a given Def as the first Def of the block. +

    §block_first_def_set: HashSet<(Tid, Tid)>

    A set containing a given Def as the first Def of the block. The keys are of the form (Def-TID, Current-Sub-TID) to distinguish the nodes for blocks contained in more than one function.

    -
    §jmp_to_blk_end_node_map: HashMap<(Tid, Tid), NodeIndex>

    A map to get the node index of the BlkEnd node containing a given Jmp. +

    §jmp_to_blk_end_node_map: HashMap<(Tid, Tid), NodeIndex>

    A map to get the node index of the BlkEnd node containing a given Jmp. The keys are of the form (Jmp-TID, Current-Sub-TID) to distinguish the nodes for blocks contained in more than one function.

    -

    Implementations§

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    Implementations§

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_memcpy_calls( &self, state: &State<T>, extern_symbol: &ExternSymbol ) -> State<T>

    Handles the detection of string parameters to memcpy calls.

    -
    source

    pub fn has_return_target( +

    source

    pub fn has_return_target( &self, extern_symbol: &ExternSymbol, pi_state: &PointerInferenceState -) -> Result<DataDomain<IntervalDomain>, Error>

    Checks whether the first input parameter contains a return target.

    -
    source

    pub fn has_input_target( +) -> Result<DataDomain<IntervalDomain>, Error>

    Checks whether the first input parameter contains a return target.

    +
    source

    pub fn has_input_target( &self, extern_symbol: &ExternSymbol, pi_state: &PointerInferenceState -) -> Result<DataDomain<IntervalDomain>, Error>

    Checks whether the second input parameter contains a source target.

    -
    source

    pub fn process_domains_for_memcpy_calls( +) -> Result<DataDomain<IntervalDomain>, Error>

    Checks whether the second input parameter contains a source target.

    +
    source

    pub fn process_domains_for_memcpy_calls( &self, state: &mut State<T>, pi_state: &PointerInferenceState, return_data: DataDomain<IntervalDomain>, - input_data: Option<DataDomain<IntervalDomain>> + input_data: Option<DataDomain<IntervalDomain>> )

    Processes string domains in memcpy calls on a case by case basis.

    • @@ -68,62 +68,62 @@

    Note that it is assumed that a memcpy input is always a string as it is part of the string.h C header file.

    -
    source

    pub fn process_domains_for_memcpy_calls_with_one_unique_input( +

    source

    pub fn process_domains_for_memcpy_calls_with_one_unique_input( &self, state: &mut State<T>, pi_state: &PointerInferenceState, input_target: &DataDomain<IntervalDomain>, - relative_return_targets: &BTreeMap<AbstractIdentifier, IntervalDomain> + relative_return_targets: &BTreeMap<AbstractIdentifier, IntervalDomain> )

    Processes domains for memcpy calls where at least one of the parameters contains a unique target.

    -
    source

    pub fn get_constant_target( +

    source

    pub fn get_constant_target( &self, input_target: &DataDomain<IntervalDomain> -) -> Option<T>

    Returns the content of a global memory target if there is some.

    -
    source

    pub fn has_multiple_targets(data: &DataDomain<IntervalDomain>) -> bool

    Checks whether a data domain has multiple targets.

    -
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_scanf_calls( +) -> Option<T>

    Returns the content of a global memory target if there is some.

    +
    source

    pub fn has_multiple_targets(data: &DataDomain<IntervalDomain>) -> bool

    Checks whether a data domain has multiple targets.

    +
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_scanf_calls( &self, state: &State<T>, extern_symbol: &ExternSymbol ) -> State<T>

    Handles the detection of string parameters to scanf calls. Adds new string abstract domains to the current state.

    -
    source

    pub fn create_abstract_domain_entries_for_function_return_values( +

    source

    pub fn create_abstract_domain_entries_for_function_return_values( &self, pi_state: &PointerInferenceState, state: &mut State<T>, - arg_to_value_map: HashMap<Arg, Option<String>> + arg_to_value_map: HashMap<Arg, Option<String>> )

    Creates string abstract domains for return values of (s)scanf calls.

    -
    source

    pub fn add_constant_or_top_value_to_return_locations( +

    source

    pub fn add_constant_or_top_value_to_return_locations( state: &mut State<T>, pi_state: &PointerInferenceState, return_target: DataDomain<IntervalDomain>, - value: Option<String> + value: Option<String> )

    Adds constant or Top value to return location given a pointer and a potential value.

    -
    source

    pub fn handle_sscanf_calls( +

    source

    pub fn handle_sscanf_calls( &self, state: &State<T>, extern_symbol: &ExternSymbol ) -> State<T>

    Handles calls to sscanf. If the source string is known, it is split by spaces and for each substring a string abstract domain is generated at its corresponding location.

    -
    source

    pub fn source_string_mapped_to_return_locations( +

    source

    pub fn source_string_mapped_to_return_locations( &self, pi_state: &PointerInferenceState, state: &mut State<T>, source_string: &DataDomain<IntervalDomain>, extern_symbol: &ExternSymbol -) -> bool

    Maps the source string to the return locations of the call and returns an boolean +) -> bool

    Maps the source string to the return locations of the call and returns an boolean which indicates whether the operation was successful.

    -
    source

    pub fn map_source_string_parameters_to_return_arguments( +

    source

    pub fn map_source_string_parameters_to_return_arguments( &self, pi_state: &PointerInferenceState, extern_symbol: &ExternSymbol, - source_string: &str -) -> Result<HashMap<Arg, Option<String>>, Error>

    Maps source strings parameters to return arguments for sscanf calls.

    -
    source

    pub fn filter_out_all_non_string_args( - all_parameters: Vec<Arg>, - return_values: Vec<String> -) -> HashMap<Arg, Option<String>>

    Filters out all parameters that are not of type string.

    -
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_sprintf_and_snprintf_calls( + source_string: &str +) -> Result<HashMap<Arg, Option<String>>, Error>

    Maps source strings parameters to return arguments for sscanf calls.

    +
    source

    pub fn filter_out_all_non_string_args( + all_parameters: Vec<Arg>, + return_values: Vec<String> +) -> HashMap<Arg, Option<String>>

    Filters out all parameters that are not of type string.

    +
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_sprintf_and_snprintf_calls( &self, state: &State<T>, extern_symbol: &ExternSymbol @@ -132,185 +132,185 @@ e.g. the format string is “cat %s” and the analysis detected that the input string is a constant in memory, for instance “bash.sh”. Then the abstract string domain is constructed with the string “cat bash.sh”.

    -

    source

    pub fn parse_format_string_and_add_new_string_domain( +

    source

    pub fn parse_format_string_and_add_new_string_domain( &self, state: &mut State<T>, pi_state: &PointerInferenceState, extern_symbol: &ExternSymbol, - format_string_index: usize, + format_string_index: usize, return_pointer: &DataDomain<IntervalDomain> )

    Gets the input format string, parses the input parameters and adds the generated domain to the string maps.

    -
    source

    pub fn create_string_domain_for_sprintf_snprintf( +

    source

    pub fn create_string_domain_for_sprintf_snprintf( &self, pi_state: &PointerInferenceState, state: &State<T>, extern_symbol: &ExternSymbol, - input_format_string: String + input_format_string: String ) -> T

    Creates a string domain for a s(n)printf call by considering input constants and other domains.

    -
    source

    pub fn create_string_domain_using_data_type_approximations( +

    source

    pub fn create_string_domain_using_data_type_approximations( &self, - format_string: String + format_string: String ) -> T

    Creates a domain from a format string where all specifiers are approximated according to their data type. This ensures that, if there is a long data type, that the domain is no returned as Top.

    -
    source

    pub fn create_string_domain_using_constants_and_sub_domains( +

    source

    pub fn create_string_domain_using_constants_and_sub_domains( &self, - format_string: String, + format_string: String, var_args: &[Arg], pi_state: &PointerInferenceState, state: &State<T> ) -> T

    Creates a string domain from found constants and sub domains.

    -
    source

    pub fn push_format_specifier_approximation( - domains: &mut Vec<T>, +

    source

    pub fn push_format_specifier_approximation( + domains: &mut Vec<T>, specifier: Match<'_> )

    Creates a string domain by approximating a format specifier and pushes it to the domain vector.

    -
    source

    pub fn push_constant_subsequences_before_and_between_specifiers( - domains: &mut Vec<T>, - format_string: &str, +

    source

    pub fn push_constant_subsequences_before_and_between_specifiers( + domains: &mut Vec<T>, + format_string: &str, specifier: Match<'_>, - last_specifier_end: usize, - index: usize + last_specifier_end: usize, + index: usize )

    Creates string domains from constant subsequences that either appear at the beginning of the format string or between specifiers.

    -
    source

    pub fn push_constant_suffix_if_available( - domains: &mut Vec<T>, - format_string: &str, - last_specifier_end: usize +

    source

    pub fn push_constant_suffix_if_available( + domains: &mut Vec<T>, + format_string: &str, + last_specifier_end: usize )

    Pushes a potential constant suffix to the string domain vector.

    -
    source

    pub fn concat_domains(domains: &mut Vec<T>) -> T

    Takes a vector of string domains and concatenates them.

    -
    source

    pub fn no_specifiers(format_string: String) -> bool

    Checks whether the string has no format specifiers.

    -
    source

    pub fn fetch_constant_and_domain_for_format_specifier( +

    source

    pub fn concat_domains(domains: &mut Vec<T>) -> T

    Takes a vector of string domains and concatenates them.

    +
    source

    pub fn no_specifiers(format_string: String) -> bool

    Checks whether the string has no format specifiers.

    +
    source

    pub fn fetch_constant_and_domain_for_format_specifier( &self, arg: &Arg, - specifier: String, + specifier: String, pi_state: &PointerInferenceState, state: &State<T> ) -> T

    Tries to fetch a constant or sub domain for the format specifier. If no data is available, it approximates the sub domain corresponding to the characters that can be contained in the data type.

    -
    source

    pub fn trim_format_specifier(specifier: String) -> String

    Removes the ‘%’ character and any size number from a format specifier.

    -
    source

    pub fn fetch_subdomains_if_available( +

    source

    pub fn trim_format_specifier(specifier: String) -> String

    Removes the ‘%’ character and any size number from a format specifier.

    +
    source

    pub fn fetch_subdomains_if_available( data: &DataDomain<IntervalDomain>, state: &State<T>, pi_state: &PointerInferenceState, arg: &Arg, - constant_domain: Option<T> -) -> Option<T>

    Fetches subdomains if they are available for a pointer domain and merges a potential + constant_domain: Option<T> +) -> Option<T>

    Fetches subdomains if they are available for a pointer domain and merges a potential constant domain into the result.

    -
    source

    pub fn fetch_constant_domain_if_available( +

    source

    pub fn fetch_constant_domain_if_available( &self, data: &DataDomain<IntervalDomain>, arg: &Arg -) -> Option<T>

    Takes a data domain and tries to get a constant value.

    -
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_strcat_and_strncat_calls( +) -> Option<T>

    Takes a data domain and tries to get a constant value.

    +
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_strcat_and_strncat_calls( &self, state: &State<T>, extern_symbol: &ExternSymbol ) -> State<T>

    Handles the resulting string domain from strcat and strncat calls. The symbol call returns the pointer to the destination string in its return register.

    -
    source

    pub fn process_second_input_domain( +

    source

    pub fn process_second_input_domain( &self, state: &State<T>, extern_symbol: &ExternSymbol, pi_state: &PointerInferenceState ) -> T

    Processes the contents of the second input parameter.

    -
    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a, T>

    source

    pub fn handle_generic_symbol_calls( &self, extern_symbol: &ExternSymbol, state: &State<T> ) -> State<T>

    Handles generic symbol calls by deleting all non callee saved pointer entries.

    -
    source

    pub fn handle_unknown_symbol_calls(&self, state: &mut State<T>)

    Handles calls to external symbols for which no ExternSymbol object is known.

    -
    source

    pub fn handle_string_symbol_calls( +

    source

    pub fn handle_unknown_symbol_calls(&self, state: &mut State<T>)

    Handles calls to external symbols for which no ExternSymbol object is known.

    +
    source

    pub fn handle_string_symbol_calls( &self, extern_symbol: &ExternSymbol, state: &State<T> ) -> State<T>

    The output of a string symbol is added to the map of abstract strings. If the symbol returns a format string, the string is approximated as good as possible by checking the input parameters.

    -
    source

    pub fn add_new_string_abstract_domain( +

    source

    pub fn add_new_string_abstract_domain( state: &mut State<T>, pi_state: &PointerInferenceState, - pointer: &BTreeMap<AbstractIdentifier, IntervalDomain>, + pointer: &BTreeMap<AbstractIdentifier, IntervalDomain>, domain_input_string: T )

    Takes the pointer target if there is only one and checks whether the target is inside the current stack frame. If so, the string domain is added to the analysis.

    -
    source

    pub fn re_format_specifier() -> Regex

    Regex that filters format specifier from a format string.

    -
    source

    pub fn merge_domains_from_multiple_pointer_targets( +

    source

    pub fn re_format_specifier() -> Regex

    Regex that filters format specifier from a format string.

    +
    source

    pub fn merge_domains_from_multiple_pointer_targets( state: &State<T>, pi_state: &PointerInferenceState, - pointer: &BTreeMap<AbstractIdentifier, IntervalDomain> + pointer: &BTreeMap<AbstractIdentifier, IntervalDomain> ) -> T

    Merges domains from multiple pointer targets. The merged domain serves as input to a format string. If one of the targets does not contain a domain or the offset of a stack target cannot be parsed, a Top value is returned as no assumption can be made about the input.

    -
    source

    pub fn approximate_string_domain_from_datatype(specifier: String) -> T

    Calls the appropriate data type approximator.

    -
    source

    pub fn get_constant_integer_domain(constant: Bitvector) -> Option<T>

    Inserts an integer constant into the format string.

    -
    source

    pub fn get_constant_char_domain(&self, constant: Bitvector) -> Option<T>

    Inserts a char constant into the format string.

    -
    source

    pub fn parse_bitvec_to_char(char_code: Bitvector) -> Option<char>

    Parses a bitvector to a char if possible.

    -
    source

    pub fn get_constant_string_domain(&self, constant: Bitvector) -> Option<T>

    Inserts a string constant into the format string.

    -
    source

    pub fn handle_free( +

    source

    pub fn approximate_string_domain_from_datatype(specifier: String) -> T

    Calls the appropriate data type approximator.

    +
    source

    pub fn get_constant_integer_domain(constant: Bitvector) -> Option<T>

    Inserts an integer constant into the format string.

    +
    source

    pub fn get_constant_char_domain(&self, constant: Bitvector) -> Option<T>

    Inserts a char constant into the format string.

    +
    source

    pub fn parse_bitvec_to_char(char_code: Bitvector) -> Option<char>

    Parses a bitvector to a char if possible.

    +
    source

    pub fn get_constant_string_domain(&self, constant: Bitvector) -> Option<T>

    Inserts a string constant into the format string.

    +
    source

    pub fn handle_free( &self, state: &State<T>, extern_symbol: &ExternSymbol ) -> State<T>

    Deletes string entries in the heap to string map if the corresponding pointer is used to free memory space.

    -
    source§

    impl<'a, T: AbstractDomain + HasTop + Eq + From<String> + DomainInsertion> Context<'a, T>

    source

    pub fn new( +

    source§

    impl<'a, T: AbstractDomain + HasTop + Eq + From<String> + DomainInsertion> Context<'a, T>

    source

    pub fn new( project: &'a Project, pointer_inference_results: &'a PointerInferenceComputation<'a>, config: Config ) -> Context<'a, T>

    Create a new context object for a given project.

    -

    Trait Implementations§

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a> for Context<'a, T>

    source§

    fn get_graph(&self) -> &Graph<'a>

    Get the underlying graph on which the analysis operates.

    -
    source§

    fn merge(&self, state1: &Self::Value, state2: &Self::Value) -> State<T>

    Merge two state values.

    -
    §

    type Value = State<T>

    The type of the values that are assigned to nodes during the fixpoint computation.
    source§

    fn update_def(&self, state: &State<T>, def: &Term<Def>) -> Option<State<T>>

    Transition function for Def terms. +

    Trait Implementations§

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Context<'a> for Context<'a, T>

    source§

    fn get_graph(&self) -> &Graph<'a>

    Get the underlying graph on which the analysis operates.

    +
    source§

    fn merge(&self, state1: &Self::Value, state2: &Self::Value) -> State<T>

    Merge two state values.

    +
    §

    type Value = State<T>

    The type of the values that are assigned to nodes during the fixpoint computation.
    source§

    fn update_def(&self, state: &State<T>, def: &Term<Def>) -> Option<State<T>>

    Transition function for Def terms. The transition function for a basic block is computed by iteratively applying this function to the starting value for each Def term in the basic block. -The iteration short-circuits and returns None if update_def returns None at any point.
    source§

    fn update_jump( +The iteration short-circuits and returns None if update_def returns None at any point.

    source§

    fn update_jump( &self, state: &State<T>, _jump: &Term<Jmp>, - _untaken_conditional: Option<&Term<Jmp>>, + _untaken_conditional: Option<&Term<Jmp>>, _target: &Term<Blk> -) -> Option<State<T>>

    Transition function for (conditional and unconditional) Jmp terms.
    source§

    fn update_call( +) -> Option<State<T>>

    Transition function for (conditional and unconditional) Jmp terms.
    source§

    fn update_call( &self, _state: &State<T>, _call: &Term<Jmp>, _target: &Node<'_>, - _calling_convention: &Option<String> -) -> Option<State<T>>

    Transition function for in-program calls.
    source§

    fn update_return( + _calling_convention: &Option<String> +) -> Option<State<T>>

    Transition function for in-program calls.
    source§

    fn update_return( &self, - _state: Option<&State<T>>, - state_before_call: Option<&State<T>>, + _state: Option<&State<T>>, + state_before_call: Option<&State<T>>, _call_term: &Term<Jmp>, _return_term: &Term<Jmp>, - _calling_convention: &Option<String> -) -> Option<State<T>>

    Transition function for return instructions. + _calling_convention: &Option<String> +) -> Option<State<T>>
    Transition function for return instructions. Has access to the value at the callsite corresponding to the return edge. -This way one can recover caller-specific information on return from a function.
    source§

    fn update_call_stub( +This way one can recover caller-specific information on return from a function.

    source§

    fn update_call_stub( &self, state: &State<T>, call: &Term<Jmp> -) -> Option<State<T>>

    Transition function for calls to functions not contained in the binary. -The corresponding edge goes from the callsite to the returned-to block.
    source§

    fn specialize_conditional( +) -> Option<State<T>>

    Transition function for calls to functions not contained in the binary. +The corresponding edge goes from the callsite to the returned-to block.
    source§

    fn specialize_conditional( &self, state: &State<T>, _condition: &Expression, _block_before_condition: &Term<Blk>, - _is_true: bool -) -> Option<State<T>>

    This function is used to refine the value using the information on which branch was taken on a conditional jump.

    Auto Trait Implementations§

    §

    impl<'a, T> RefUnwindSafe for Context<'a, T>where - T: RefUnwindSafe,

    §

    impl<'a, T> Send for Context<'a, T>where - T: Send,

    §

    impl<'a, T> Sync for Context<'a, T>where - T: Sync,

    §

    impl<'a, T> Unpin for Context<'a, T>where - T: Unpin,

    §

    impl<'a, T> UnwindSafe for Context<'a, T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    + _is_true: bool +) -> Option<State<T>>
    This function is used to refine the value using the information on which branch was taken on a conditional jump.

    Auto Trait Implementations§

    §

    impl<'a, T> RefUnwindSafe for Context<'a, T>where + T: RefUnwindSafe,

    §

    impl<'a, T> Send for Context<'a, T>where + T: Send,

    §

    impl<'a, T> Sync for Context<'a, T>where + T: Sync,

    §

    impl<'a, T> Unpin for Context<'a, T>where + T: Unpin,

    §

    impl<'a, T> UnwindSafe for Context<'a, T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/index.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/index.html index d55df6cb4..56cdc03d4 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/index.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/index.html @@ -1,2 +1,2 @@ -cwe_checker_lib::analysis::string_abstraction::context::symbol_calls - Rust
    Expand description

    This module handles the string processing at external symbol calls.

    +cwe_checker_lib::analysis::string_abstraction::context::symbol_calls - Rust
    Expand description

    This module handles the string processing at external symbol calls.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/fn.run.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/fn.run.html index 90c0764ee..e03fd2426 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/fn.run.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/fn.run.html @@ -1,7 +1,7 @@ -run in cwe_checker_lib::analysis::string_abstraction - Rust
    pub fn run<'a, T: AbstractDomain + HasTop + Eq + From<String> + DomainInsertion>(
    +run in cwe_checker_lib::analysis::string_abstraction - Rust
    pub fn run<'a, T: AbstractDomain + HasTop + Eq + From<String> + DomainInsertion>(
         project: &'a Project,
         control_flow_graph: &'a Graph<'a>,
    -    pointer_inference: &'a PointerInferenceComputation<'a>,
    +    pointer_inference: &'a PointerInference<'a>,
         config: Config
     ) -> StringAbstraction<'a, T>
    Expand description

    Compute the string abstraction and return its results.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/index.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/index.html index ba8251945..f6f004044 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/index.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::string_abstraction - Rust
    Expand description

    A fixpoint analysis that abstracts strings in the program using various string abstract domains. +cwe_checker_lib::analysis::string_abstraction - Rust

    Expand description

    A fixpoint analysis that abstracts strings in the program using various string abstract domains. These include the Character Inclusion Domain and Bricks Domain among others.

    Modules

    source

    pub fn add_new_variable_to_pointer_entry( &mut self, variable: Variable, pointer: DataDomain<IntervalDomain> )

    Adds a new variable to pointer entry to the map.

    -
    source

    pub fn add_new_stack_offset_to_string_entry( +

    source

    pub fn add_new_stack_offset_to_string_entry( &mut self, - offset: i64, + offset: i64, string_domain: T )

    Adds a new offset to string entry to the map.

    -
    source

    pub fn add_new_heap_to_string_entry( +

    source

    pub fn add_new_heap_to_string_entry( &mut self, heap_id: AbstractIdentifier, string_domain: T )

    Adds a new heap id to string entry to the map.

    -
    source

    pub fn remove_heap_to_string_entry(&mut self, heap_id: &AbstractIdentifier)

    Removes a string from the heap to string map for the given abstract id.

    -
    source

    pub fn get_variable_to_pointer_map( +

    source

    pub fn remove_heap_to_string_entry(&mut self, heap_id: &AbstractIdentifier)

    Removes a string from the heap to string map for the given abstract id.

    +
    source

    pub fn get_variable_to_pointer_map( &self -) -> &HashMap<Variable, DataDomain<IntervalDomain>>

    Returns a reference to the variable to pointer map.

    -
    source

    pub fn set_variable_to_pointer_map( +) -> &HashMap<Variable, DataDomain<IntervalDomain>>

    Returns a reference to the variable to pointer map.

    +
    source

    pub fn set_variable_to_pointer_map( &mut self, - map: HashMap<Variable, DataDomain<IntervalDomain>> + map: HashMap<Variable, DataDomain<IntervalDomain>> )

    Sets the variable to pointer map to a new value.

    -
    source

    pub fn get_stack_offset_to_pointer_map( +

    source

    pub fn get_stack_offset_to_pointer_map( &self -) -> &HashMap<i64, DataDomain<IntervalDomain>>

    Returns a reference to the variable to pointer map.

    -
    source

    pub fn get_stack_offset_to_string_map(&self) -> &HashMap<i64, T>

    Returns a reference to the stack offset to string map.

    -
    source

    pub fn get_heap_to_string_map(&self) -> &HashMap<AbstractIdentifier, T>

    Returns a reference to the heap to string map.

    -
    source

    pub fn get_current_sub(&self) -> Option<&Term<Sub>>

    Gets the current subroutine since the analysis is interprocedural.

    -
    source

    pub fn get_pointer_inference_state(&self) -> Option<&PointerInferenceState>

    Get the current pointer inference state if it is contained as an intermediate value in the state.

    -
    source

    pub fn set_pointer_inference_state( - &mut self, - pi_state: Option<PointerInferenceState> +) -> &HashMap<i64, DataDomain<IntervalDomain>>

    Returns a reference to the variable to pointer map.

    +
    source

    pub fn get_stack_offset_to_string_map(&self) -> &HashMap<i64, T>

    Returns a reference to the stack offset to string map.

    +
    source

    pub fn get_heap_to_string_map(&self) -> &HashMap<AbstractIdentifier, T>

    Returns a reference to the heap to string map.

    +
    source

    pub fn get_current_sub(&self) -> Option<&Term<Sub>>

    Gets the current subroutine since the analysis is interprocedural.

    +
    source

    pub fn get_pointer_inference_state(&self) -> Option<&PointerInferenceState>

    Get the current pointer inference state if it is contained as an intermediate value in the state.

    +
    source

    pub fn set_pointer_inference_state( + &mut self, + pi_state: Option<PointerInferenceState> )

    Set the current pointer inference state for self.

    -
    source

    pub fn delete_string_map_entries_if_no_pointer_targets_are_tracked( +

    source

    pub fn delete_string_map_entries_if_no_pointer_targets_are_tracked( &self ) -> Self

    Deletes all entries in the string maps that do not have corresponding pointers in the pointer maps.

    -
    source

    pub fn collect_all_tracked_pointers(&self) -> Vec<DataDomain<IntervalDomain>>

    Returns a vector of all currently tracked pointers.

    -
    source

    pub fn filter_string_map_entries( +

    source

    pub fn collect_all_tracked_pointers(&self) -> Vec<DataDomain<IntervalDomain>>

    Returns a vector of all currently tracked pointers.

    +
    source

    pub fn filter_string_map_entries( &self, pi_state: &PointerInferenceState -) -> (HashMap<i64, T>, HashMap<AbstractIdentifier, T>)

    Removes all string entries for which the pointers are not tracked anymore.

    -
    source

    pub fn evaluate_constant( +) -> (HashMap<i64, T>, HashMap<AbstractIdentifier, T>)

    Removes all string entries for which the pointers are not tracked anymore.

    +
    source

    pub fn evaluate_constant( &self, runtime_memory_image: &RuntimeMemoryImage, - block_first_def_set: &HashSet<(Tid, Tid)>, + block_first_def_set: &HashSet<(Tid, Tid)>, constant: Bitvector -) -> Option<DataDomain<IntervalDomain>>

    Evaluates the constant used as input of a Def Term. +) -> Option<DataDomain<IntervalDomain>>

    Evaluates the constant used as input of a Def Term. It checks whether it is a constant address pointing to global read only memory. If so, a pointer is added to the register map.

    -
    source

    pub fn handle_assign_and_load( +

    source

    pub fn handle_assign_and_load( &mut self, output: &Variable, input: &Expression, runtime_memory_image: &RuntimeMemoryImage, - block_first_def_set: &HashSet<(Tid, Tid)>, - is_assign: bool + block_first_def_set: &HashSet<(Tid, Tid)>, + is_assign: bool )

    Handles assign and load Def Terms.

    -
    source

    pub fn check_if_output_is_string_pointer_and_add_targets( +

    source

    pub fn check_if_output_is_string_pointer_and_add_targets( &mut self, pi_state: &PointerInferenceState, output: &Variable, runtime_memory_image: &RuntimeMemoryImage, - block_first_def_set: &HashSet<(Tid, Tid)> -) -> bool

    Checks whether the given pointer points to a string and adds missing targets + block_first_def_set: &HashSet<(Tid, Tid)> +) -> bool

    Checks whether the given pointer points to a string and adds missing targets to the string maps as Top values.

    -
    source

    pub fn add_global_pointer_if_input_is_string_constant( +

    source

    pub fn add_global_pointer_if_input_is_string_constant( &mut self, runtime_memory_image: &RuntimeMemoryImage, - block_first_def_set: &HashSet<(Tid, Tid)>, + block_first_def_set: &HashSet<(Tid, Tid)>, output: &Variable, input: &Expression -) -> bool

    If the input is a string constant, add the global pointer to the variable map.

    -
    source

    pub fn add_relative_targets_to_string_maps( +) -> bool

    If the input is a string constant, add the global pointer to the variable map.

    +
    source

    pub fn add_relative_targets_to_string_maps( &mut self, pi_state: &PointerInferenceState, pointer: &DataDomain<IntervalDomain> )

    Adds all relative targets of the given DataDomain to the string maps if they are not already tracked.

    -
    source

    pub fn pointer_added_to_variable_maps( +

    source

    pub fn pointer_added_to_variable_maps( &mut self, pi_state: &PointerInferenceState, output: &Variable, loaded_pointer: DataDomain<IntervalDomain> -) -> bool

    Adds a pointer to the variable pointer maps if its targets were fully or partially tracked. +) -> bool

    Adds a pointer to the variable pointer maps if its targets were fully or partially tracked. Returns true if it was added.

    -
    source

    pub fn pointer_added_to_stack_maps( +

    source

    pub fn pointer_added_to_stack_maps( &mut self, pi_state: &PointerInferenceState, target_address: &Expression, potential_string_pointer: DataDomain<IntervalDomain> -) -> bool

    Adds a pointer to the stack pointer maps if its targets were fully or partially tracked.

    -
    source

    pub fn pointer_targets_partially_tracked( +) -> bool

    Adds a pointer to the stack pointer maps if its targets were fully or partially tracked.

    +
    source

    pub fn pointer_targets_partially_tracked( &mut self, pi_state: &PointerInferenceState, pointer: &DataDomain<IntervalDomain> -) -> bool

    If only some targets of a pointer point to tracked strings, add top values for the +) -> bool

    If only some targets of a pointer point to tracked strings, add top values for the other targets. It is assumed that all targets point to the same data type.

    -
    source

    pub fn add_top_domain_values_for_additional_pointer_targets( +

    source

    pub fn add_top_domain_values_for_additional_pointer_targets( &mut self, - new_stack_entries: Vec<i64>, - new_heap_entries: Vec<AbstractIdentifier> + new_stack_entries: Vec<i64>, + new_heap_entries: Vec<AbstractIdentifier> )

    Adds Top values to stack and heap maps for additional pointer targets.

    -
    source

    pub fn pointer_is_in_pointer_maps( +

    source

    pub fn pointer_is_in_pointer_maps( &self, pointer: &DataDomain<IntervalDomain> -) -> bool

    Checks whether a given pointer is contained in one of the pointer maps.

    -
    source

    pub fn handle_store( +) -> bool

    Checks whether a given pointer is contained in one of the pointer maps.

    +
    source

    pub fn handle_store( &mut self, target_address: &Expression, value: &Expression, runtime_memory_image: &RuntimeMemoryImage, - block_first_def_set: &HashSet<(Tid, Tid)> + block_first_def_set: &HashSet<(Tid, Tid)> )

    Handles store Def Terms.

    -
    source

    pub fn add_pointer_to_stack_map( +

    source

    pub fn add_pointer_to_stack_map( &mut self, target: &Expression, string_pointer: DataDomain<IntervalDomain> )

    If a string pointer is to be stored on the stack, add it to the stack map.

    -
    source

    pub fn remove_non_callee_saved_pointer_entries_for_external_symbol( +

    source

    pub fn remove_non_callee_saved_pointer_entries_for_external_symbol( &mut self, project: &Project, extern_symbol: &ExternSymbol )

    Removes all non callee saved register entries from the variable to pointer map.

    -
    source

    pub fn is_stack_pointer( +

    source

    pub fn is_stack_pointer( pi_state: &PointerInferenceState, target: &AbstractIdentifier -) -> bool

    Checks whether a target refers to the Stack.

    -

    Trait Implementations§

    source§

    impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> AbstractDomain for State<T>

    source§

    fn merge(&self, other: &Self) -> Self

    Merges two states.

    -
    source§

    fn is_top(&self) -> bool

    The state has no explicit Top element.

    -
    source§

    impl<T: Clone + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Clone for State<T>

    source§

    fn clone(&self) -> State<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Debug for State<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de, T> Deserialize<'de> for State<T>where - T: Deserialize<'de> + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<T: PartialEq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> PartialEq<State<T>> for State<T>

    source§

    fn eq(&self, other: &State<T>) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<T> Serialize for State<T>where - T: Serialize + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<T: Eq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Eq for State<T>

    source§

    impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralEq for State<T>

    source§

    impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralPartialEq for State<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for State<T>where - T: RefUnwindSafe,

    §

    impl<T> Send for State<T>where - T: Send,

    §

    impl<T> Sync for State<T>where - T: Sync,

    §

    impl<T> Unpin for State<T>where - T: Unpin,

    §

    impl<T> UnwindSafe for State<T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> bool

    Checks whether a target refers to the Stack.

    +

    Trait Implementations§

    source§

    impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> AbstractDomain for State<T>

    source§

    fn merge(&self, other: &Self) -> Self

    Merges two states.

    +
    source§

    fn is_top(&self) -> bool

    The state has no explicit Top element.

    +
    source§

    impl<T: Clone + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Clone for State<T>

    source§

    fn clone(&self) -> State<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Debug for State<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de, T> Deserialize<'de> for State<T>where + T: Deserialize<'de> + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<T: PartialEq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> PartialEq for State<T>

    source§

    fn eq(&self, other: &State<T>) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<T> Serialize for State<T>where + T: Serialize + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<T: Eq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Eq for State<T>

    source§

    impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralEq for State<T>

    source§

    impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralPartialEq for State<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for State<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for State<T>where + T: Send,

    §

    impl<T> Sync for State<T>where + T: Sync,

    §

    impl<T> Unpin for State<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for State<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.Config.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.Config.html index a6d761837..07ce85c86 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.Config.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.Config.html @@ -1,29 +1,31 @@ -Config in cwe_checker_lib::analysis::string_abstraction - Rust
    pub struct Config {
    -    pub string_symbols: Vec<String>,
    -    pub format_string_index: BTreeMap<String, usize>,
    +Config in cwe_checker_lib::analysis::string_abstraction - Rust
    pub struct Config {
    +    pub string_symbols: Vec<String>,
    +    pub format_string_index: BTreeMap<String, usize>,
     }
    Expand description

    Configurable parameters for the analysis.

    -

    Fields§

    §string_symbols: Vec<String>

    Names of extern functions that manipulate strings +

    Fields§

    §string_symbols: Vec<String>

    Names of extern functions that manipulate strings or could introduce new strings (e.g. scanf).

    -
    §format_string_index: BTreeMap<String, usize>

    The index of the format string parameter in the function signature +

    §format_string_index: BTreeMap<String, usize>

    The index of the format string parameter in the function signature of an external symbol.

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.StringAbstraction.html b/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.StringAbstraction.html index 6a7307d6c..a4bc406a1 100644 --- a/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.StringAbstraction.html +++ b/doc/html/cwe_checker_lib/analysis/string_abstraction/struct.StringAbstraction.html @@ -1,33 +1,33 @@ -StringAbstraction in cwe_checker_lib::analysis::string_abstraction - Rust
    pub struct StringAbstraction<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> { /* private fields */ }
    Expand description

    A wrapper struct for the string abstraction computation object.

    -

    Implementations§

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StringAbstraction<'a, T>

    source

    pub fn new( +StringAbstraction in cwe_checker_lib::analysis::string_abstraction - Rust
    pub struct StringAbstraction<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> { /* private fields */ }
    Expand description

    A wrapper struct for the string abstraction computation object.

    +

    Implementations§

    source§

    impl<'a, T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StringAbstraction<'a, T>

    source

    pub fn new( project: &'a Project, control_flow_graph: &'a Graph<'a>, pointer_inference_results: &'a PointerInferenceComputation<'a>, config: Config ) -> StringAbstraction<'a, T>

    Generate a new string abstraction computation for a project.

    -
    source

    pub fn compute(&mut self)

    Compute the fixpoint of the string abstraction analysis. +

    source

    pub fn compute(&mut self)

    Compute the fixpoint of the string abstraction analysis. Has a max_steps bound for the fixpoint algorithm to prevent infinite loops.

    -
    source

    pub fn get_computation( +

    source

    pub fn get_computation( &self ) -> &Computation<GeneralizedContext<'a, Context<'a, T>>>

    Get the string abstraction computation.

    -
    source

    pub fn get_graph(&self) -> &Graph<'_>

    Get the underlying graph of the computation.

    -
    source

    pub fn get_context(&self) -> &Context<'a, T>

    Get the context object of the computation.

    -
    source

    pub fn get_node_value(&self, node_id: NodeIndex) -> Option<&NodeValue<State<T>>>

    Get the value associated to a node in the computed fixpoint +

    source

    pub fn get_graph(&self) -> &Graph<'_>

    Get the underlying graph of the computation.

    +
    source

    pub fn get_context(&self) -> &Context<'a, T>

    Get the context object of the computation.

    +
    source

    pub fn get_node_value(&self, node_id: NodeIndex) -> Option<&NodeValue<State<T>>>

    Get the value associated to a node in the computed fixpoint (or intermediate state of the algorithm if the fixpoint has not been reached yet). Returns None if no value is associated to the Node.

    -

    Auto Trait Implementations§

    §

    impl<'a, T> RefUnwindSafe for StringAbstraction<'a, T>where - T: RefUnwindSafe,

    §

    impl<'a, T> Send for StringAbstraction<'a, T>where - T: Send,

    §

    impl<'a, T> Sync for StringAbstraction<'a, T>where - T: Sync,

    §

    impl<'a, T> Unpin for StringAbstraction<'a, T>where - T: Unpin,

    §

    impl<'a, T> UnwindSafe for StringAbstraction<'a, T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Auto Trait Implementations§

    §

    impl<'a, T> RefUnwindSafe for StringAbstraction<'a, T>where + T: RefUnwindSafe,

    §

    impl<'a, T> Send for StringAbstraction<'a, T>where + T: Send,

    §

    impl<'a, T> Sync for StringAbstraction<'a, T>where + T: Sync,

    §

    impl<'a, T> Unpin for StringAbstraction<'a, T>where + T: Unpin,

    §

    impl<'a, T> UnwindSafe for StringAbstraction<'a, T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/analysis/vsa_results/index.html b/doc/html/cwe_checker_lib/analysis/vsa_results/index.html index acac89ed9..776706d0f 100644 --- a/doc/html/cwe_checker_lib/analysis/vsa_results/index.html +++ b/doc/html/cwe_checker_lib/analysis/vsa_results/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::analysis::vsa_results - Rust
    Expand description

    This module provides the VsaResult trait +cwe_checker_lib::analysis::vsa_results - Rust

    Expand description

    This module provides the VsaResult trait which defines an interface for the results of analyses similar to a value set analysis.

    Traits

    Required Methods§

    source

    fn eval_value_at_def(&self, def_tid: &Tid) -> Option<Self::ValueDomain>

    Return the value stored for write instructions, the value read for read instructions or the value assigned for assignments.

    +
    source

    fn eval_address_at_def(&self, def_tid: &Tid) -> Option<Self::ValueDomain>

    Return the value of the address where something is read or written for read or store instructions.

    +
    source

    fn eval_parameter_arg_at_call( &self, jmp_tid: &Tid, param: &Arg -) -> Option<Self::ValueDomain>

    Return the value of a parameter at the given jump instruction.

    -
    source

    fn eval_at_jmp( +) -> Option<Self::ValueDomain>

    Return the value of a parameter at the given jump instruction.

    +
    source

    fn eval_parameter_location_at_call( + &self, + jmp_tid: &Tid, + param: &AbstractLocation +) -> Option<Self::ValueDomain>

    Return the value of a parameter at the given jump instruction.

    +
    source

    fn eval_at_jmp( &self, jmp_tid: &Tid, expression: &Expression -) -> Option<Self::ValueDomain>

    Evaluate the value of the given expression at the given jump instruction.

    -

    Implementors§

    source§

    impl<'a> VsaResult for PointerInference<'a>

    Implementation of the VsaResult trait for providing other analyses with an easy-to-use interface +) -> Option<Self::ValueDomain>

    Evaluate the value of the given expression at the given jump instruction.

    +

    Implementors§

    source§

    impl<'a> VsaResult for PointerInference<'a>

    Implementation of the VsaResult trait for providing other analyses with an easy-to-use interface to use the value set and points-to analysis results of the pointer inference.

    -
    \ No newline at end of file + \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_119/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_119/fn.check_cwe.html index 6d10888b3..ce4adb3bb 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_119/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_119/fn.check_cwe.html @@ -1,7 +1,7 @@ -check_cwe in cwe_checker_lib::checkers::cwe_119 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_119 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    _config: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the check for CWE-119: Buffer Overflows.

    + _config: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the check for CWE-119: Buffer Overflows.

    This function prepares the fixpoint computation that computes the CWE warnings by setting the start states for all function starts. Then the fixpoint computation is executed. Afterwards, the collected logs and CWE warnings are collected from a separate logging thread and returned.

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_119/index.html b/doc/html/cwe_checker_lib/checkers/cwe_119/index.html index afb4231ee..aac966744 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_119/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_119/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_119 - Rust
    Expand description

    This module implements a check for CWE-119: Buffer Overflow +cwe_checker_lib::checkers::cwe_119 - Rust

    Expand description

    This module implements a check for CWE-119: Buffer Overflow and its variants CWE-125: Out-of-bounds Read and CWE-787: Out-of-bounds Write.

    Arrays or buffers of any kind are often accessed through indices. If the index of an access is outside of the bounds of the buffer this can lead to severe consequences. @@ -9,9 +9,11 @@

    How the check works

    The check uses the results of the Pointer Inference analysis to check whether any memory accesses may point outside of the bounds of the corresponding memory objects. -For this the results of the Pointer Inference analysis are aggregated interprocedurally. -Additionally, the check uses a lightweight intraprocedural dataflow fixpoint computation +Additionally, the check uses a lightweight dataflow fixpoint computation to ensure that for each memory object only the first access outside of its bounds is flagged as a CWE.

    +

    Currently, the check is only partially interprocedural. +Bounds of parameter objects can be detected, but bounds of memory objects created in called functions +(other than the standard allocation functions) will not be detected.

    False Positives

    • Any analysis imprecision of the Pointer Inference analysis may lead to false positive results in this check.
    • @@ -35,5 +37,9 @@

      False Negatives

      this still may miss buffer overflows occuring in the called function.
    • Right now the check only considers buffers on the stack or the heap, but not buffers in global memory. Thus corresponding overflows of buffers in global memory are not detected.
    • +
    • Since the check is only partially interprocedural at the moment, +it will miss object sizes of objects created in called functions. +For example, if allocations are wrapped in simple wrapper functions, +the analysis will miss overflows for corresponding objects, because it cannot determine their object sizes.

    Statics

    Functions

    • Run the check for CWE-119: Buffer Overflows.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_119/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_119/static.CWE_MODULE.html index 566ad9b16..480bddbba 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_119/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_119/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_119 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_119 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_134/enum.StringLocation.html b/doc/html/cwe_checker_lib/checkers/cwe_134/enum.StringLocation.html index 71ba70fc7..39e624a32 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_134/enum.StringLocation.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_134/enum.StringLocation.html @@ -1,4 +1,4 @@ -StringLocation in cwe_checker_lib::checkers::cwe_134 - Rust

    Trait Implementations§

    source§

    impl Clone for StringLocation

    source§

    fn clone(&self) -> StringLocation

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for StringLocation

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for StringLocation

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<StringLocation> for StringLocation

    source§

    fn eq(&self, other: &StringLocation) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for StringLocation

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for StringLocation

    source§

    impl StructuralEq for StringLocation

    source§

    impl StructuralPartialEq for StringLocation

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for StringLocation

    source§

    fn clone(&self) -> StringLocation

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for StringLocation

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for StringLocation

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for StringLocation

    source§

    fn eq(&self, other: &StringLocation) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for StringLocation

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for StringLocation

    source§

    impl StructuralEq for StringLocation

    source§

    impl StructuralPartialEq for StringLocation

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_134/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_134/fn.check_cwe.html index 1d55965b9..fa015c42c 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_134/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_134/fn.check_cwe.html @@ -1,7 +1,7 @@ -check_cwe in cwe_checker_lib::checkers::cwe_134 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_134 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    This check searches for external symbols that take a format string as an input parameter. + cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)

    Expand description

    This check searches for external symbols that take a format string as an input parameter. It then checks whether the parameter points to read only memory. If not, a CWE warning is generated.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_134/index.html b/doc/html/cwe_checker_lib/checkers/cwe_134/index.html index b27a50d42..407228707 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_134/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_134/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_134 - Rust
    Expand description

    This module implements a check for CWE-134: Use of Externally-Controlled Format String.

    +cwe_checker_lib::checkers::cwe_134 - Rust
    Expand description

    This module implements a check for CWE-134: Use of Externally-Controlled Format String.

    The software uses a function that accepts a format string as an argument, but the format string originates from an external source.

    See https://cwe.mitre.org/data/definitions/134.html for a detailed description.

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_134/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_134/static.CWE_MODULE.html index 99b185dac..b8c6c2889 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_134/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_134/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_134 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_134 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_134/struct.Config.html b/doc/html/cwe_checker_lib/checkers/cwe_134/struct.Config.html index ee13fddbe..39025ba12 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_134/struct.Config.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_134/struct.Config.html @@ -1,20 +1,22 @@ -Config in cwe_checker_lib::checkers::cwe_134 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +Config in cwe_checker_lib::checkers::cwe_134 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_190/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_190/fn.check_cwe.html index d9166da53..81c83ecb9 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_190/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_190/fn.check_cwe.html @@ -1,7 +1,7 @@ -check_cwe in cwe_checker_lib::checkers::cwe_190 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_190 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the CWE check. + cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)

    Expand description

    Run the CWE check. For each call to one of the symbols configured in config.json we check whether the block containing the call also contains a multiplication instruction.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_190/index.html b/doc/html/cwe_checker_lib/checkers/cwe_190/index.html index 070ace074..617e65583 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_190/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_190/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_190 - Rust
    Expand description

    This module implements a check for CWE-190: Integer overflow or wraparound.

    +cwe_checker_lib::checkers::cwe_190 - Rust
    Expand description

    This module implements a check for CWE-190: Integer overflow or wraparound.

    An integer overflow can lead to undefined behavior and is especially dangerous in conjunction with memory management functions.

    See https://cwe.mitre.org/data/definitions/190.html for a detailed description.

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_190/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_190/static.CWE_MODULE.html index fc60ad846..06bf9130d 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_190/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_190/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_190 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_190 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_190/struct.Config.html b/doc/html/cwe_checker_lib/checkers/cwe_190/struct.Config.html index 2c47e5fbe..af8f2c9ec 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_190/struct.Config.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_190/struct.Config.html @@ -1,23 +1,25 @@ -Config in cwe_checker_lib::checkers::cwe_190 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct. +Config in cwe_checker_lib::checkers::cwe_190 - Rust

    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct. The symbols are extern function names.

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_215/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_215/fn.check_cwe.html index 93cf43abe..970e84e35 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_215/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_215/fn.check_cwe.html @@ -1,7 +1,7 @@ -check_cwe in cwe_checker_lib::checkers::cwe_215 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_215 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    _cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the check.

    + _cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the check.

    We simply check whether the ELF file still contains sections whose name starts with .debug. Binary formats other than ELF files are currently not supported by this check.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_215/index.html b/doc/html/cwe_checker_lib/checkers/cwe_215/index.html index 03b7728a0..0f54b37ce 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_215/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_215/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_215 - Rust
    Expand description

    This module implements a check for CWE-215: Information Exposure Through Debug Information.

    +cwe_checker_lib::checkers::cwe_215 - Rust
    Expand description

    This module implements a check for CWE-215: Information Exposure Through Debug Information.

    Sensitive debugging information can be leveraged to get a better understanding of a binary in less time.

    See https://cwe.mitre.org/data/definitions/215.html for a detailed description.

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_215/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_215/static.CWE_MODULE.html index b29f5cd76..1224f5b48 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_215/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_215/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_215 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_215 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_243/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_243/fn.check_cwe.html index 0c3a9a424..7c5b4c21d 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_243/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_243/fn.check_cwe.html @@ -1,7 +1,7 @@ -check_cwe in cwe_checker_lib::checkers::cwe_243 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_243 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the check.

    + cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Run the check.

    For each call to chroot we check

    -

    Structs

    • The configuration struct

    Enums

    • An abstract domain representing a value that is either tainted or not.

    Statics

    Functions

    Re-exports

    Modules

    • Module for the taint tracking state. Reused by the check for CWE-337, hence public.
    • Taint tracking module. Reused by the check for CWE-337, hence public.

    Structs

    • The configuration struct

    Statics

    Functions

    • Run the CWE check. We check whether the return values of symbols configurable in the config file are being checked for Null pointers before any memory access (and thus potential Null pointer dereferences) through these values happen.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/sidebar-items.js b/doc/html/cwe_checker_lib/checkers/cwe_476/sidebar-items.js index 9f248e49c..ee12ab219 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_476/sidebar-items.js +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["Taint"],"fn":["check_cwe"],"static":["CWE_MODULE"],"struct":["Config"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["check_cwe"],"mod":["state","taint"],"static":["CWE_MODULE"],"struct":["Config"]}; \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/state/index.html b/doc/html/cwe_checker_lib/checkers/cwe_476/state/index.html new file mode 100644 index 000000000..569371119 --- /dev/null +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/state/index.html @@ -0,0 +1,2 @@ +cwe_checker_lib::checkers::cwe_476::state - Rust
    Expand description

    Module for the taint tracking state. Reused by the check for CWE-337, hence public.

    +

    Structs

    • The state object of the taint analysis representing all known tainted memory and register values.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/state/sidebar-items.js b/doc/html/cwe_checker_lib/checkers/cwe_476/state/sidebar-items.js new file mode 100644 index 000000000..8433658ea --- /dev/null +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/state/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["State"]}; \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/state/struct.State.html b/doc/html/cwe_checker_lib/checkers/cwe_476/state/struct.State.html new file mode 100644 index 000000000..9c7a31416 --- /dev/null +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/state/struct.State.html @@ -0,0 +1,82 @@ +State in cwe_checker_lib::checkers::cwe_476::state - Rust
    pub struct State { /* private fields */ }
    Expand description

    The state object of the taint analysis representing all known tainted memory and register values.

    +

    Implementations§

    source§

    impl State

    source

    pub fn new( + taint_source: &ExternSymbol, + pi_state: Option<&PointerInferenceState> +) -> State

    Get a new state in which only the return values of the given extern symbol are tainted.

    +
    source

    pub fn eval(&self, expression: &Expression) -> Taint

    Evaluate whether the result of the given expression is tainted in the current state.

    +
    source

    pub fn get_pointer_inference_state(&self) -> Option<&PointerInferenceState>

    Get the current pointer inference state if it is contained as an intermediate value in the state.

    +
    source

    pub fn set_pointer_inference_state( + &mut self, + pi_state: Option<PointerInferenceState> +)

    Set the current pointer inference state for self.

    +
    source

    pub fn load_taint_from_memory(&self, address: &Data, size: ByteSize) -> Taint

    Return whether the value at the given address (with the given size) is tainted.

    +
    source

    pub fn save_taint_to_memory(&mut self, address: &Data, taint: Taint)

    Mark the value at the given address with the given taint.

    +

    If the address may point to more than one object, +we merge the taint object with the object at the targets, +possibly tainting all possible targets.

    +
    source

    pub fn remove_all_memory_taints(&mut self)

    Remove all knowledge about taints contained in memory objects.

    +
    source

    pub fn set_register_taint(&mut self, register: &Variable, taint: Taint)

    Set the taint of a register.

    +
    source

    pub fn check_mem_id_for_taint(&self, id: &AbstractIdentifier) -> bool

    Return true if the memory object with the given ID contains a tainted value.

    +
    source

    pub fn check_if_address_points_to_taint( + &self, + address: Data, + pi_state: &PointerInferenceState +) -> bool

    If the given address points to the stack, +return true if and only if the value at that stack position is tainted. +If the given address points to a non-stack memory object, +return true if the memory object contains any tainted value (at any position).

    +
    source

    pub fn check_generic_function_params_for_taint( + &self, + project: &Project, + pi_state_option: Option<&PointerInferenceState>, + calling_convention_hint: &Option<String> +) -> bool

    Check whether a generic function call may contain tainted values in its parameters. +Since we don’t know the actual parameters of the call, +we approximate the parameters with all parameter registers of the calling convention of the function +or of the standard calling convention of the project.

    +
    source

    pub fn check_return_values_for_taint( + &self, + project: &Project, + pi_state_option: Option<&PointerInferenceState>, + calling_convention_hint: &Option<String> +) -> bool

    Check whether the return registers may contain tainted values or point to objects containing tainted values. +Since we don’t know the actual return registers, +we approximate them by all return registers of the calling convention of the function +or of the standard calling convention of the project.

    +
    source

    pub fn remove_non_callee_saved_taint( + &mut self, + calling_conv: &CallingConvention +)

    Remove the taint from all registers not contained in the callee-saved register list of the given calling convention.

    +
    source

    pub fn is_empty(&self) -> bool

    Check whether self contains any taint at all.

    +
    source§

    impl State

    source

    pub fn to_json_compact(&self) -> Value

    Get a more compact json-representation of the state. +Intended for pretty printing, not useable for serialization/deserialization.

    +

    Trait Implementations§

    source§

    impl AbstractDomain for State

    source§

    fn merge(&self, other: &Self) -> Self

    Merge two states. +Any value tainted in at least one input state is also tainted in the merged state.

    +

    The used algorithm for merging the taints contained in memory regions is unsound +when merging taints that intersect only partially. +However, this should not have an effect in practice, +since these values are usually unsound and unused by the program anyway.

    +
    source§

    fn is_top(&self) -> bool

    The state has no explicit Top element.

    +
    source§

    impl Clone for State

    source§

    fn clone(&self) -> State

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for State

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for State

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for State

    source§

    fn eq(&self, other: &Self) -> bool

    Two states are equal if the same values are tainted in both states.

    +

    The equality operator ignores the pointer_inference_state field, +since it only denotes an intermediate value.

    +
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for State

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for State

    source§

    impl StructuralEq for State

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for State

    §

    impl Send for State

    §

    impl Sync for State

    §

    impl Unpin for State

    §

    impl UnwindSafe for State

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_476/static.CWE_MODULE.html index 625b32c95..fc42ee89f 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_476/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_476 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_476 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/struct.Config.html b/doc/html/cwe_checker_lib/checkers/cwe_476/struct.Config.html index 58267d22b..3a132c0df 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_476/struct.Config.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/struct.Config.html @@ -1,22 +1,24 @@ -Config in cwe_checker_lib::checkers::cwe_476 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +Config in cwe_checker_lib::checkers::cwe_476 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/taint/enum.Taint.html b/doc/html/cwe_checker_lib/checkers/cwe_476/taint/enum.Taint.html index 22b589881..3fbea5bc3 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_476/taint/enum.Taint.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/taint/enum.Taint.html @@ -1,11 +1,48 @@ - - - - - Redirection - - -

    Redirecting to ../../../../cwe_checker_lib/checkers/cwe_476/enum.Taint.html...

    - - - \ No newline at end of file +Taint in cwe_checker_lib::checkers::cwe_476::taint - Rust
    pub enum Taint {
    +    Tainted(ByteSize),
    +    Top(ByteSize),
    +}
    Expand description

    An abstract domain representing a value that is either tainted or not.

    +

    Note that the merge-function does not respect the partial order +that is implied by the naming scheme of the variants! +In fact the whole analysis does not enforce any partial order for this domain. +This means that in theory the fixpoint computation may not actually converge to a fixpoint, +but in practice the analysis can make more precise decisions +whether a value should be tainted or not.

    +

    Variants§

    §

    Tainted(ByteSize)

    A tainted value of a particular bytesize.

    +
    §

    Top(ByteSize)

    An untainted value of a particular bytesize

    +

    Implementations§

    source§

    impl Taint

    source

    pub fn is_tainted(&self) -> bool

    Checks whether the given value is in fact tainted.

    +

    Trait Implementations§

    source§

    impl AbstractDomain for Taint

    source§

    fn merge(&self, other: &Self) -> Self

    The result of merging two Taint values is tainted if at least one input was tainted.

    +
    source§

    fn is_top(&self) -> bool

    Checks whether the value is an untainted Top-value.

    +
    source§

    impl Clone for Taint

    source§

    fn clone(&self) -> Taint

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Taint

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Taint

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Taint

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Print the value of a Taint object.

    +
    source§

    impl HasTop for Taint

    source§

    fn top(&self) -> Self

    Get a new Top-value with the same bytesize as self.

    +
    source§

    impl Hash for Taint

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Taint

    source§

    fn eq(&self, other: &Taint) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl RegisterDomain for Taint

    source§

    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

    The result of a binary operation is tainted if at least one input value was tainted.

    +
    source§

    fn un_op(&self, _op: UnOpType) -> Self

    The result of a unary operation is tainted if the input was tainted.

    +
    source§

    fn subpiece(&self, _low_byte: ByteSize, size: ByteSize) -> Self

    A subpiece of a tainted value is again tainted.

    +
    source§

    fn cast(&self, _kind: CastOpType, width: ByteSize) -> Self

    The result of a cast operation is tainted if the input was tainted.

    +
    source§

    fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

    Return the bytesize of the result of the given binary operation. +Has a generic implementation that should not be overwritten!
    source§

    impl Serialize for Taint

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl SizedDomain for Taint

    source§

    fn bytesize(&self) -> ByteSize

    The size in bytes of the Taint value.

    +
    source§

    fn new_top(bytesize: ByteSize) -> Self

    Get a new Top-value with the given bytesize.

    +
    source§

    impl Copy for Taint

    source§

    impl Eq for Taint

    source§

    impl StructuralEq for Taint

    source§

    impl StructuralPartialEq for Taint

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Taint

    §

    impl Send for Taint

    §

    impl Sync for Taint

    §

    impl Unpin for Taint

    §

    impl UnwindSafe for Taint

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/taint/index.html b/doc/html/cwe_checker_lib/checkers/cwe_476/taint/index.html new file mode 100644 index 000000000..d07d8c81e --- /dev/null +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/taint/index.html @@ -0,0 +1,2 @@ +cwe_checker_lib::checkers::cwe_476::taint - Rust
    Expand description

    Taint tracking module. Reused by the check for CWE-337, hence public.

    +

    Enums

    • An abstract domain representing a value that is either tainted or not.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_476/taint/sidebar-items.js b/doc/html/cwe_checker_lib/checkers/cwe_476/taint/sidebar-items.js new file mode 100644 index 000000000..3e68bd82b --- /dev/null +++ b/doc/html/cwe_checker_lib/checkers/cwe_476/taint/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Taint"]}; \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_560/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_560/fn.check_cwe.html index 4229d2394..6ba2da649 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_560/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_560/fn.check_cwe.html @@ -1,7 +1,7 @@ -check_cwe in cwe_checker_lib::checkers::cwe_560 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_560 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    _cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Execute the CWE check.

    + _cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Execute the CWE check.

    For each call to umask we check whether the parameter value is a chmod-style parameter. If yes, generate a CWE warning. If the parameter value cannot be determined, generate a log message.

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_560/index.html b/doc/html/cwe_checker_lib/checkers/cwe_560/index.html index d373377ef..aeb7bbbad 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_560/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_560/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_560 - Rust
    Expand description

    This module implements a check for CWE-560: Use of umask() with chmod-style Argument.

    +cwe_checker_lib::checkers::cwe_560 - Rust
    Expand description

    This module implements a check for CWE-560: Use of umask() with chmod-style Argument.

    The program uses the system call umask(2) with arguments for chmod(2). For instance, instead of a reasonable value like 0022 a value like 0666 is passed. This may result in wrong read and/or write access to files and directories, which could be utilized to bypass diff --git a/doc/html/cwe_checker_lib/checkers/cwe_560/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_560/static.CWE_MODULE.html index 7b7f0a8ac..619d65db3 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_560/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_560/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_560 - Rust

    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_560 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE.html b/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE.html index 6aa788997..633b6197e 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE.html @@ -1,2 +1,2 @@ -UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE in cwe_checker_lib::checkers::cwe_560 - Rust
    pub static UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE: u64
    Expand description

    An upper bound for the value of a chmod-style argument.

    +UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE in cwe_checker_lib::checkers::cwe_560 - Rust
    pub static UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE: u64
    Expand description

    An upper bound for the value of a chmod-style argument.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_UMASK_ARG_VALUE.html b/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_UMASK_ARG_VALUE.html index eadb312c5..3a06e76c7 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_UMASK_ARG_VALUE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_560/static.UPPER_BOUND_CORRECT_UMASK_ARG_VALUE.html @@ -1,2 +1,2 @@ -UPPER_BOUND_CORRECT_UMASK_ARG_VALUE in cwe_checker_lib::checkers::cwe_560 - Rust
    pub static UPPER_BOUND_CORRECT_UMASK_ARG_VALUE: u64
    Expand description

    An upper bound for the value of a presumably correct umask argument.

    +UPPER_BOUND_CORRECT_UMASK_ARG_VALUE in cwe_checker_lib::checkers::cwe_560 - Rust
    pub static UPPER_BOUND_CORRECT_UMASK_ARG_VALUE: u64
    Expand description

    An upper bound for the value of a presumably correct umask argument.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.check_cwe.html index ef2356c37..1027bd2a0 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.check_cwe.html @@ -1,6 +1,6 @@ -check_cwe in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Iterate through all function calls inside the program and flag calls to those functions + cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)

    Expand description

    Iterate through all function calls inside the program and flag calls to those functions that are marked as unsafe via the configuration file.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.generate_cwe_warnings.html b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.generate_cwe_warnings.html index b71eb77b3..97ebc5164 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.generate_cwe_warnings.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.generate_cwe_warnings.html @@ -1,4 +1,4 @@ -generate_cwe_warnings in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn generate_cwe_warnings<'a>(
    -    dangerous_calls: Vec<(&'a str, &'a Tid, &'a str)>
    -) -> Vec<CweWarning>
    Expand description

    Generate cwe warnings for potentially dangerous function calls

    +generate_cwe_warnings in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn generate_cwe_warnings<'a>(
    +    dangerous_calls: Vec<(&'a str, &'a Tid, &'a str)>
    +) -> Vec<CweWarning>
    Expand description

    Generate cwe warnings for potentially dangerous function calls

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.get_calls.html b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.get_calls.html index 65311e1b6..b4c3012f6 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.get_calls.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.get_calls.html @@ -1,5 +1,5 @@ -get_calls in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn get_calls<'a>(
    -    subfunctions: &'a BTreeMap<Tid, Term<Sub>>,
    -    dangerous_symbols: &'a HashMap<&'a Tid, &'a str>
    -) -> Vec<(&'a str, &'a Tid, &'a str)>
    Expand description

    For each subroutine and each found dangerous symbol, check for calls to the corresponding symbol

    +get_calls in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn get_calls<'a>(
    +    subfunctions: &'a BTreeMap<Tid, Term<Sub>>,
    +    dangerous_symbols: &'a HashMap<&'a Tid, &'a str>
    +) -> Vec<(&'a str, &'a Tid, &'a str)>
    Expand description

    For each subroutine and each found dangerous symbol, check for calls to the corresponding symbol

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.resolve_symbols.html b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.resolve_symbols.html index 6eb06eb22..47bd75865 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/fn.resolve_symbols.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/fn.resolve_symbols.html @@ -1,5 +1,5 @@ -resolve_symbols in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn resolve_symbols<'a>(
    -    external_symbols: &'a BTreeMap<Tid, ExternSymbol>,
    -    symbols: &'a [String]
    -) -> HashMap<&'a Tid, &'a str>
    Expand description

    Filter external symbols by dangerous symbols

    +resolve_symbols in cwe_checker_lib::checkers::cwe_676 - Rust
    pub fn resolve_symbols<'a>(
    +    external_symbols: &'a BTreeMap<Tid, ExternSymbol>,
    +    symbols: &'a [String]
    +) -> HashMap<&'a Tid, &'a str>
    Expand description

    Filter external symbols by dangerous symbols

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/index.html b/doc/html/cwe_checker_lib/checkers/cwe_676/index.html index c1d766925..c516c04cc 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_676 - Rust
    Expand description

    This module implements a check for CWE-676: Use of Potentially Dangerous Function.

    +cwe_checker_lib::checkers::cwe_676 - Rust
    Expand description

    This module implements a check for CWE-676: Use of Potentially Dangerous Function.

    Potentially dangerous functions like memcpy can lead to security issues like buffer overflows. See https://cwe.mitre.org/data/definitions/676.html for a detailed description.

    How the check works:

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_676/static.CWE_MODULE.html index 57511987a..28364ca8d 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_676 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_676 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_676/struct.Config.html b/doc/html/cwe_checker_lib/checkers/cwe_676/struct.Config.html index 5985f7d55..f82628128 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_676/struct.Config.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_676/struct.Config.html @@ -1,22 +1,24 @@ -Config in cwe_checker_lib::checkers::cwe_676 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    struct containing dangerous symbols from config.json

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +Config in cwe_checker_lib::checkers::cwe_676 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    struct containing dangerous symbols from config.json

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Config

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_cwe.html index 4104034a3..1c625e086 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_cwe.html @@ -1,6 +1,6 @@ -check_cwe in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    This check checks the string parameter at system calls given by the string abstraction analysis + cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)

    Expand description

    This check checks the string parameter at system calls given by the string abstraction analysis to find potential OS Command Injection vulnerabilities.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_if_string_domain_indicates_vulnerability.html b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_if_string_domain_indicates_vulnerability.html index 7baa16e9d..3e19cd6db 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_if_string_domain_indicates_vulnerability.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_if_string_domain_indicates_vulnerability.html @@ -1,4 +1,4 @@ -check_if_string_domain_indicates_vulnerability in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn check_if_string_domain_indicates_vulnerability(
    +check_if_string_domain_indicates_vulnerability in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn check_if_string_domain_indicates_vulnerability(
         input_domain: BricksDomain,
         jmp_tid: &Tid,
         sub: &Term<Sub>,
    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_system_call_parameter.html b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_system_call_parameter.html
    index 959ceebce..df1a4fe5e 100644
    --- a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_system_call_parameter.html
    +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.check_system_call_parameter.html
    @@ -1,6 +1,6 @@
    -check_system_call_parameter in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn check_system_call_parameter(
    +check_system_call_parameter in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn check_system_call_parameter(
         source_state: &State<BricksDomain>,
    -    pi_state: &PointerInferenceState,
    +    pi_state: &State,
         system_symbol: &ExternSymbol,
         jmp_tid: &Tid,
         cwe_collector: &Sender<CweWarning>,
    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.generate_cwe_warning.html b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.generate_cwe_warning.html
    index 269546122..d4bef8330 100644
    --- a/doc/html/cwe_checker_lib/checkers/cwe_78/fn.generate_cwe_warning.html
    +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/fn.generate_cwe_warning.html
    @@ -1,6 +1,6 @@
    -generate_cwe_warning in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn generate_cwe_warning(
    -    sub_name: &str,
    +generate_cwe_warning in cwe_checker_lib::checkers::cwe_78 - Rust
    pub fn generate_cwe_warning(
    +    sub_name: &str,
         jmp_tid: &Tid,
    -    symbol_name: &str
    +    symbol_name: &str
     ) -> CweWarning
    Expand description

    Generates the CWE Warning for the CWE 78 check

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/index.html b/doc/html/cwe_checker_lib/checkers/cwe_78/index.html index 017bb9c12..5b3766d01 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_78/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_78 - Rust
    Expand description

    This module implements a check for CWE-78: Improper Neutralization of Special Elements used in an OS Command (‘OS Command Injection’).

    +cwe_checker_lib::checkers::cwe_78 - Rust
    Expand description

    This module implements a check for CWE-78: Improper Neutralization of Special Elements used in an OS Command (‘OS Command Injection’).

    The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component.

    diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/static.CWE_MODULE.html b/doc/html/cwe_checker_lib/checkers/cwe_78/static.CWE_MODULE.html index 34faafcd4..97e212fea 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_78/static.CWE_MODULE.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/static.CWE_MODULE.html @@ -1,2 +1,2 @@ -CWE_MODULE in cwe_checker_lib::checkers::cwe_78 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    +CWE_MODULE in cwe_checker_lib::checkers::cwe_78 - Rust
    pub static CWE_MODULE: CweModule
    Expand description

    The module name and version

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_78/struct.Config.html b/doc/html/cwe_checker_lib/checkers/cwe_78/struct.Config.html index 12f23850b..80f3e62ca 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_78/struct.Config.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_78/struct.Config.html @@ -1,20 +1,22 @@ -Config in cwe_checker_lib::checkers::cwe_78 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct

    -

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<Config> for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +Config in cwe_checker_lib::checkers::cwe_78 - Rust
    pub struct Config { /* private fields */ }
    Expand description

    The configuration struct

    +

    Trait Implementations§

    source§

    impl Clone for Config

    source§

    fn clone(&self) -> Config

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Config

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Config

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for Config

    source§

    fn eq(&self, other: &Config) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Config

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Config

    source§

    impl StructuralEq for Config

    source§

    impl StructuralPartialEq for Config

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_782/fn.check_cwe.html b/doc/html/cwe_checker_lib/checkers/cwe_782/fn.check_cwe.html index f049100b7..5780f5b7b 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_782/fn.check_cwe.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_782/fn.check_cwe.html @@ -1,5 +1,5 @@ -check_cwe in cwe_checker_lib::checkers::cwe_782 - Rust
    pub fn check_cwe(
    +check_cwe in cwe_checker_lib::checkers::cwe_782 - Rust
    pub fn check_cwe(
         analysis_results: &AnalysisResults<'_>,
    -    _cwe_params: &Value
    -) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Iterate through all calls of the program and flag calls to ioctl() as CWE warnings.

    + _cwe_params: &Value +) -> (Vec<LogMessage>, Vec<CweWarning>)
    Expand description

    Iterate through all calls of the program and flag calls to ioctl() as CWE warnings.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_782/fn.generate_cwe_warning.html b/doc/html/cwe_checker_lib/checkers/cwe_782/fn.generate_cwe_warning.html index f96b6cadb..bb4c05d1a 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_782/fn.generate_cwe_warning.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_782/fn.generate_cwe_warning.html @@ -1,2 +1,2 @@ -generate_cwe_warning in cwe_checker_lib::checkers::cwe_782 - Rust
    pub fn generate_cwe_warning(calls: &[(&str, &Tid, &str)]) -> Vec<CweWarning>
    Expand description

    generate the cwe warning for CWE 782

    +generate_cwe_warning in cwe_checker_lib::checkers::cwe_782 - Rust
    pub fn generate_cwe_warning(calls: &[(&str, &Tid, &str)]) -> Vec<CweWarning>
    Expand description

    generate the cwe warning for CWE 782

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_782/fn.handle_sub.html b/doc/html/cwe_checker_lib/checkers/cwe_782/fn.handle_sub.html index eb78b028c..dcb561d31 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_782/fn.handle_sub.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_782/fn.handle_sub.html @@ -1,5 +1,5 @@ -handle_sub in cwe_checker_lib::checkers::cwe_782 - Rust
    pub fn handle_sub(
    +handle_sub in cwe_checker_lib::checkers::cwe_782 - Rust
    pub fn handle_sub(
         sub: &Term<Sub>,
    -    symbol: &HashMap<&Tid, &str>
    -) -> Vec<CweWarning>
    Expand description

    check whether the ioctl symbol is called by any subroutine. If so, generate the cwe warning.

    + symbol: &HashMap<&Tid, &str> +) -> Vec<CweWarning>
    Expand description

    check whether the ioctl symbol is called by any subroutine. If so, generate the cwe warning.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/cwe_782/index.html b/doc/html/cwe_checker_lib/checkers/cwe_782/index.html index a44ab653b..5bad3abd4 100644 --- a/doc/html/cwe_checker_lib/checkers/cwe_782/index.html +++ b/doc/html/cwe_checker_lib/checkers/cwe_782/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::checkers::cwe_782 - Rust
    Expand description

    This module implements a check for CWE-782: Exposed IOCTL with Insufficient Access Control.

    +cwe_checker_lib::checkers::cwe_782 - Rust
    Expand description

    This module implements a check for CWE-782: Exposed IOCTL with Insufficient Access Control.

    See https://cwe.mitre.org/data/definitions/782.html for a detailed description.

    How the check works:

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/checkers/sidebar-items.js b/doc/html/cwe_checker_lib/checkers/sidebar-items.js index a9117e5a7..60bef3349 100644 --- a/doc/html/cwe_checker_lib/checkers/sidebar-items.js +++ b/doc/html/cwe_checker_lib/checkers/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"mod":["cwe_119","cwe_134","cwe_190","cwe_215","cwe_243","cwe_332","cwe_367","cwe_416","cwe_426","cwe_467","cwe_476","cwe_560","cwe_676","cwe_78","cwe_782","cwe_789"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"mod":["cwe_119","cwe_134","cwe_190","cwe_215","cwe_243","cwe_332","cwe_337","cwe_367","cwe_416","cwe_426","cwe_467","cwe_476","cwe_560","cwe_676","cwe_78","cwe_782","cwe_789"]}; \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/fn.get_modules.html b/doc/html/cwe_checker_lib/fn.get_modules.html index 03ee5a652..c0657a52c 100644 --- a/doc/html/cwe_checker_lib/fn.get_modules.html +++ b/doc/html/cwe_checker_lib/fn.get_modules.html @@ -1,2 +1,2 @@ -get_modules in cwe_checker_lib - Rust
    pub fn get_modules() -> Vec<&'static CweModule>
    Expand description

    Get a list of all known analysis modules.

    +get_modules in cwe_checker_lib - Rust
    pub fn get_modules() -> Vec<&'static CweModule>
    Expand description

    Get a list of all known analysis modules.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/index.html b/doc/html/cwe_checker_lib/index.html index df6bf6d8f..91cbeedb1 100644 --- a/doc/html/cwe_checker_lib/index.html +++ b/doc/html/cwe_checker_lib/index.html @@ -1,4 +1,5 @@ -cwe_checker_lib - Rust

    Crate cwe_checker_lib

    source ·
    Expand description

    The main library of the cwe_checker containing all CWE checks and analysis modules.

    +cwe_checker_lib - Rust

    Crate cwe_checker_lib

    source ·
    Expand description

    The main library of the cwe_checker containing all CWE checks and analysis modules.

    What is the cwe_checker

    The cwe_checker is a tool for finding common bug classes on binaries using static analysis. These bug classes are formally known as Common Weakness Enumerations (CWEs). @@ -46,4 +47,4 @@

    Further document and all its contained executable code.

  • Types to describe Ghidra P-Code and functions to translate it to the internally used intermediate representation.
  • This module contains functions and structs helpful for building a complete analysis pipeline starting from the binary file path.
  • This module contains various utility modules and helper functions.
  • Structs

    • A structure containing general information about a CWE analysis module, -including the function to be called to run the analysis.

    Functions

    Type Definitions

    • The generic function signature for the main function of a CWE module
    \ No newline at end of file +including the function to be called to run the analysis.

    Functions

    Type Aliases

    • The generic function signature for the main function of a CWE module
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.Arg.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.Arg.html index 5695110ad..6bf850225 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.Arg.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.Arg.html @@ -1,45 +1,47 @@ -Arg in cwe_checker_lib::intermediate_representation - Rust
    pub enum Arg {
    +Arg in cwe_checker_lib::intermediate_representation - Rust
    pub enum Arg {
         Register {
             expr: Expression,
    -        data_type: Option<Datatype>,
    +        data_type: Option<Datatype>,
         },
         Stack {
             address: Expression,
             size: ByteSize,
    -        data_type: Option<Datatype>,
    +        data_type: Option<Datatype>,
         },
     }
    Expand description

    A parameter or return argument of a function.

    Variants§

    §

    Register

    Fields

    §expr: Expression

    The expression evaluating to the argument.

    -
    §data_type: Option<Datatype>

    An optional data type indicator.

    +
    §data_type: Option<Datatype>

    An optional data type indicator.

    The argument is passed in a register

    §

    Stack

    Fields

    §address: Expression

    The expression that computes the address of the argument on the stack.

    §size: ByteSize

    The size in bytes of the argument.

    -
    §data_type: Option<Datatype>

    An optional data type indicator.

    +
    §data_type: Option<Datatype>

    An optional data type indicator.

    The argument is passed on the stack.

    -

    Implementations§

    source§

    impl Arg

    source

    pub fn from_var(var: Variable, data_type_hint: Option<Datatype>) -> Arg

    Generate a new register argument.

    -
    source

    pub fn get_data_type(&self) -> Option<Datatype>

    Returns the data type field of an Arg object.

    -
    source

    pub fn eval_stack_offset(&self) -> Result<Bitvector, Error>

    If the argument is a stack argument, +

    Implementations§

    source§

    impl Arg

    source

    pub fn from_var(var: Variable, data_type_hint: Option<Datatype>) -> Arg

    Generate a new register argument.

    +
    source

    pub fn get_data_type(&self) -> Option<Datatype>

    Returns the data type field of an Arg object.

    +
    source

    pub fn eval_stack_offset(&self) -> Result<Bitvector, Error>

    If the argument is a stack argument, return its offset relative to the current stack register value. Return an error for register arguments or if the offset could not be computed.

    -
    source

    pub fn bytesize(&self) -> ByteSize

    Return the bytesize of the argument.

    -

    Trait Implementations§

    source§

    impl Clone for Arg

    source§

    fn clone(&self) -> Arg

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Arg

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Arg

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Arg

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Arg> for Arg

    source§

    fn eq(&self, other: &Arg) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Arg

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Arg

    source§

    impl StructuralEq for Arg

    source§

    impl StructuralPartialEq for Arg

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Arg

    §

    impl Send for Arg

    §

    impl Sync for Arg

    §

    impl Unpin for Arg

    §

    impl UnwindSafe for Arg

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn bytesize(&self) -> ByteSize

    Return the bytesize of the argument.

    +

    Trait Implementations§

    source§

    impl Clone for Arg

    source§

    fn clone(&self) -> Arg

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Arg

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Arg

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Arg

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Arg

    source§

    fn eq(&self, other: &Arg) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Arg

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Arg

    source§

    impl StructuralEq for Arg

    source§

    impl StructuralPartialEq for Arg

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Arg

    §

    impl Send for Arg

    §

    impl Sync for Arg

    §

    impl Unpin for Arg

    §

    impl UnwindSafe for Arg

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.BinOpType.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.BinOpType.html index f3a5ef3a8..9ce4eae06 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.BinOpType.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.BinOpType.html @@ -1,4 +1,4 @@ -BinOpType in cwe_checker_lib::intermediate_representation - Rust
    pub enum BinOpType {
    +BinOpType in cwe_checker_lib::intermediate_representation - Rust
    pub enum BinOpType {
     
    Show 34 variants Piece, IntEqual, IntNotEqual, @@ -35,27 +35,29 @@ FloatDiv,
    }
    Expand description

    The type/mnemonic of a binary operation. See the Ghidra P-Code documentation for more information.

    -

    Variants§

    §

    Piece

    §

    IntEqual

    §

    IntNotEqual

    §

    IntLess

    §

    IntSLess

    §

    IntLessEqual

    §

    IntSLessEqual

    §

    IntAdd

    §

    IntSub

    §

    IntCarry

    §

    IntSCarry

    §

    IntSBorrow

    §

    IntXOr

    §

    IntAnd

    §

    IntOr

    §

    IntLeft

    §

    IntRight

    §

    IntSRight

    §

    IntMult

    §

    IntDiv

    §

    IntRem

    §

    IntSDiv

    §

    IntSRem

    §

    BoolXOr

    §

    BoolAnd

    §

    BoolOr

    §

    FloatEqual

    §

    FloatNotEqual

    §

    FloatLess

    §

    FloatLessEqual

    §

    FloatAdd

    §

    FloatSub

    §

    FloatMult

    §

    FloatDiv

    Trait Implementations§

    source§

    impl Clone for BinOpType

    source§

    fn clone(&self) -> BinOpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for BinOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for BinOpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for BinOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ExpressionType> for IrBinOpType

    source§

    fn from(expr_type: ExpressionType) -> IrBinOpType

    Translates expression types. +

    Variants§

    §

    Piece

    §

    IntEqual

    §

    IntNotEqual

    §

    IntLess

    §

    IntSLess

    §

    IntLessEqual

    §

    IntSLessEqual

    §

    IntAdd

    §

    IntSub

    §

    IntCarry

    §

    IntSCarry

    §

    IntSBorrow

    §

    IntXOr

    §

    IntAnd

    §

    IntOr

    §

    IntLeft

    §

    IntRight

    §

    IntSRight

    §

    IntMult

    §

    IntDiv

    §

    IntRem

    §

    IntSDiv

    §

    IntSRem

    §

    BoolXOr

    §

    BoolAnd

    §

    BoolOr

    §

    FloatEqual

    §

    FloatNotEqual

    §

    FloatLess

    §

    FloatLessEqual

    §

    FloatAdd

    §

    FloatSub

    §

    FloatMult

    §

    FloatDiv

    Trait Implementations§

    source§

    impl Clone for BinOpType

    source§

    fn clone(&self) -> BinOpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for BinOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for BinOpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for BinOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ExpressionType> for BinOpType

    source§

    fn from(expr_type: ExpressionType) -> IrBinOpType

    Translates expression types. Panics when given a type not representable by the target type.

    -
    source§

    impl Hash for BinOpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<BinOpType> for BinOpType

    source§

    fn eq(&self, other: &BinOpType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for BinOpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for BinOpType

    source§

    impl Eq for BinOpType

    source§

    impl StructuralEq for BinOpType

    source§

    impl StructuralPartialEq for BinOpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for BinOpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for BinOpType

    source§

    fn eq(&self, other: &BinOpType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for BinOpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for BinOpType

    source§

    impl Eq for BinOpType

    source§

    impl StructuralEq for BinOpType

    source§

    impl StructuralPartialEq for BinOpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.CastOpType.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.CastOpType.html index b4946dadc..3c98a75dc 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.CastOpType.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.CastOpType.html @@ -1,4 +1,4 @@ -CastOpType in cwe_checker_lib::intermediate_representation - Rust
    pub enum CastOpType {
    +CastOpType in cwe_checker_lib::intermediate_representation - Rust
    pub enum CastOpType {
         IntZExt,
         IntSExt,
         Int2Float,
    @@ -7,27 +7,29 @@
         PopCount,
     }
    Expand description

    The type/mnemonic of a typecast See the Ghidra P-Code documentation for more information.

    -

    Variants§

    §

    IntZExt

    §

    IntSExt

    §

    Int2Float

    §

    Float2Float

    §

    Trunc

    §

    PopCount

    Trait Implementations§

    source§

    impl Clone for CastOpType

    source§

    fn clone(&self) -> CastOpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CastOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for CastOpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for CastOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ExpressionType> for IrCastOpType

    source§

    fn from(expr_type: ExpressionType) -> IrCastOpType

    Translates expression types. +

    Variants§

    §

    IntZExt

    §

    IntSExt

    §

    Int2Float

    §

    Float2Float

    §

    Trunc

    §

    PopCount

    Trait Implementations§

    source§

    impl Clone for CastOpType

    source§

    fn clone(&self) -> CastOpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CastOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for CastOpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for CastOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ExpressionType> for CastOpType

    source§

    fn from(expr_type: ExpressionType) -> IrCastOpType

    Translates expression types. Panics when given a type not representable by the target type.

    -
    source§

    impl Hash for CastOpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<CastOpType> for CastOpType

    source§

    fn eq(&self, other: &CastOpType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for CastOpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for CastOpType

    source§

    impl Eq for CastOpType

    source§

    impl StructuralEq for CastOpType

    source§

    impl StructuralPartialEq for CastOpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for CastOpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for CastOpType

    source§

    fn eq(&self, other: &CastOpType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for CastOpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for CastOpType

    source§

    impl Eq for CastOpType

    source§

    impl StructuralEq for CastOpType

    source§

    impl StructuralPartialEq for CastOpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.Datatype.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.Datatype.html index 40228c4c6..d11afec4d 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.Datatype.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.Datatype.html @@ -1,4 +1,4 @@ -Datatype in cwe_checker_lib::intermediate_representation - Rust

    Trait Implementations§

    source§

    impl Clone for Datatype

    source§

    fn clone(&self) -> Datatype

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Datatype

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Datatype

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<String> for Datatype

    source§

    fn from(specifier: String) -> Self

    The purpose of this conversion is to locate parameters to variadic functions. +

    Trait Implementations§

    source§

    impl Clone for Datatype

    source§

    fn clone(&self) -> Datatype

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Datatype

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Datatype

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<String> for Datatype

    source§

    fn from(specifier: String) -> Self

    The purpose of this conversion is to locate parameters to variadic functions. Therefore, char types have to be mapped to the integer size since they undergo the default argument promotion. (e.g. 1 byte char -> 4 byte integer) The same holds for all float types that are promoted to doubles. (e.g. 8 byte float -> 16 byte double)

    -
    source§

    impl Hash for Datatype

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Datatype> for Datatype

    source§

    fn eq(&self, other: &Datatype) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Datatype

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Datatype

    source§

    impl StructuralEq for Datatype

    source§

    impl StructuralPartialEq for Datatype

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for Datatype

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Datatype

    source§

    fn eq(&self, other: &Datatype) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Datatype

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Datatype

    source§

    impl StructuralEq for Datatype

    source§

    impl StructuralPartialEq for Datatype

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.Def.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.Def.html index f583b8ad5..1f1e91e88 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.Def.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.Def.html @@ -1,4 +1,4 @@ -Def in cwe_checker_lib::intermediate_representation - Rust
    pub enum Def {
    +Def in cwe_checker_lib::intermediate_representation - Rust
    pub enum Def {
         Load {
             var: Variable,
             address: Expression,
    @@ -26,25 +26,27 @@
     
    §

    Assign

    Fields

    §var: Variable

    The register that is written to.

    §value: Expression

    The expression computing the value that is assigned to the register.

    A register assignment, assigning the result of the expression value to the register var.

    -

    Trait Implementations§

    source§

    impl Clone for Def

    source§

    fn clone(&self) -> Def

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Def

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Def

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Def

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Def

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Def> for Def

    source§

    fn eq(&self, other: &Def) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Def

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Def

    source§

    impl StructuralEq for Def

    source§

    impl StructuralPartialEq for Def

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Def

    §

    impl Send for Def

    §

    impl Sync for Def

    §

    impl Unpin for Def

    §

    impl UnwindSafe for Def

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Def

    source§

    fn clone(&self) -> Def

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Def

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Def

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Def

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Def

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Def

    source§

    fn eq(&self, other: &Def) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Def

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Def

    source§

    impl StructuralEq for Def

    source§

    impl StructuralPartialEq for Def

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Def

    §

    impl Send for Def

    §

    impl Sync for Def

    §

    impl Unpin for Def

    §

    impl UnwindSafe for Def

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.Expression.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.Expression.html index 7de4a446f..a163e42b0 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.Expression.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.Expression.html @@ -1,28 +1,28 @@ -Expression in cwe_checker_lib::intermediate_representation - Rust
    pub enum Expression {
    +Expression in cwe_checker_lib::intermediate_representation - Rust
    pub enum Expression {
         Var(Variable),
         Const(Bitvector),
         BinOp {
             op: BinOpType,
    -        lhs: Box<Expression>,
    -        rhs: Box<Expression>,
    +        lhs: Box<Expression>,
    +        rhs: Box<Expression>,
         },
         UnOp {
             op: UnOpType,
    -        arg: Box<Expression>,
    +        arg: Box<Expression>,
         },
         Cast {
             op: CastOpType,
             size: ByteSize,
    -        arg: Box<Expression>,
    +        arg: Box<Expression>,
         },
         Unknown {
    -        description: String,
    +        description: String,
             size: ByteSize,
         },
         Subpiece {
             low_byte: ByteSize,
             size: ByteSize,
    -        arg: Box<Expression>,
    +        arg: Box<Expression>,
         },
     }
    Expand description

    An expression is a calculation rule on how to compute a certain value given some variables (register values) as input.

    @@ -39,46 +39,46 @@

    Variants§

    §

    Var(Variable)

    A variable representing a register or temporary value of known size.

    §

    Const(Bitvector)

    A constant value represented by a bitvector.

    §

    BinOp

    Fields

    §op: BinOpType

    The opcode/type of the operation

    -
    §lhs: Box<Expression>

    The left hand side expression

    -
    §rhs: Box<Expression>

    The right hand side expression

    +
    §lhs: Box<Expression>

    The left hand side expression

    +
    §rhs: Box<Expression>

    The right hand side expression

    A binary operation. Note that most (but not all) operations require the left hand side (lhs) and right hand side (rhs) to be of equal size.

    §

    UnOp

    Fields

    §op: UnOpType

    The opcode/type of the operation

    -
    §arg: Box<Expression>

    The argument expression

    +
    §arg: Box<Expression>

    The argument expression

    A unary operation

    §

    Cast

    Fields

    §op: CastOpType

    The opcode/type of the cast operation

    §size: ByteSize

    The byte size of the result value of the expresion

    -
    §arg: Box<Expression>

    The argument of the expression

    +
    §arg: Box<Expression>

    The argument of the expression

    A cast operation for type cast between integer and floating point types of different byte lengths.

    -
    §

    Unknown

    Fields

    §description: String

    A description of the operation

    +
    §

    Unknown

    Fields

    §description: String

    A description of the operation

    §size: ByteSize

    The byte size of the result of the unknown expression

    An unknown value but with known size. This may be generated for e.g. unsupported assembly instructions. Note that computation of an unknown value is still required to be side-effect-free!

    §

    Subpiece

    Fields

    §low_byte: ByteSize

    The lowest byte (i.e. least significant byte if interpreted as integer) of the sub-bitvector to extract.

    §size: ByteSize

    The size of the resulting sub-bitvector

    -
    §arg: Box<Expression>

    The argument from which to extract the bitvector from.

    +
    §arg: Box<Expression>

    The argument from which to extract the bitvector from.

    Extracting a sub-bitvector from the argument expression.

    -

    Implementations§

    source§

    impl Expression

    source

    pub fn plus(self, rhs: Expression) -> Expression

    Shortcut for creating an IntAdd-expression

    -
    source

    pub fn plus_const(self, value: i64) -> Expression

    Construct an expression that adds a constant value to the given expression.

    +

    Implementations§

    source§

    impl Expression

    source

    pub fn plus(self, rhs: Expression) -> Expression

    Shortcut for creating an IntAdd-expression

    +
    source

    pub fn plus_const(self, value: i64) -> Expression

    Construct an expression that adds a constant value to the given expression.

    The bytesize of the value is automatically adjusted to the bytesize of the given expression.

    -
    source§

    impl Expression

    source

    pub fn substitute_trivial_operations(&mut self)

    Substitute some trivial expressions with their result. +

    source§

    impl Expression

    source

    pub fn substitute_trivial_operations(&mut self)

    Substitute some trivial expressions with their result. E.g. substitute a XOR a with zero or substitute a OR a with a.

    -
    source§

    impl Expression

    source

    pub fn bytesize(&self) -> ByteSize

    Return the size (in bytes) of the result value of the expression.

    -
    source

    pub fn input_vars(&self) -> Vec<&Variable>

    Return an array of all input variables of the given expression. +

    source§

    impl Expression

    source

    pub fn bytesize(&self) -> ByteSize

    Return the size (in bytes) of the result value of the expression.

    +
    source

    pub fn input_vars(&self) -> Vec<&Variable>

    Return an array of all input variables of the given expression. The array may contain duplicates.

    -
    source

    pub fn substitute_input_var( +

    source

    pub fn substitute_input_var( &mut self, input_var: &Variable, replace_with_expression: &Expression )

    Substitute every occurrence of input_var in self with the given replace_with_expression.

    -
    source

    pub fn recursion_depth(&self) -> u64

    Compute a recursion depth for the expression.

    +
    source

    pub fn recursion_depth(&self) -> u64

    Compute a recursion depth for the expression.

    Because of the recursive nature of the Expression type, overly complex expressions are very costly to clone, which in turn can negatively affect some analyses. The recursion depth measure can be used to detect and handle such cases.

    -

    Trait Implementations§

    source§

    impl Clone for Expression

    source§

    fn clone(&self) -> Expression

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Expression

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Expression

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Expression

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Expression> for IrExpression

    source§

    fn from(expr: Expression) -> IrExpression

    Translates a P-Code expression into an expression of the internally used IR if possible. +

    Trait Implementations§

    source§

    impl Clone for Expression

    source§

    fn clone(&self) -> Expression

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Expression

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Expression

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Expression

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Expression> for Expression

    source§

    fn from(expr: Expression) -> IrExpression

    Translates a P-Code expression into an expression of the internally used IR if possible. Panics if translation is not possible.

    Cases where translation is not possible:

      @@ -87,26 +87,28 @@ These include SUBPIECE, INT_ZEXT, INT_SEXT, INT2FLOAT, FLOAT2FLOAT, TRUNC and POPCOUNT. Translation of these expressions is handled explicitly during translation of Def.
    -
    source§

    impl From<Variable> for IrExpression

    source§

    fn from(pcode_var: Variable) -> IrExpression

    Translate a P-Code variable into a Varor Const expression of the internally used IR. +

    source§

    impl From<Variable> for Expression

    source§

    fn from(pcode_var: Variable) -> IrExpression

    Translate a P-Code variable into a Varor Const expression of the internally used IR. Panics if the translation fails.

    -
    source§

    impl Hash for Expression

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Expression> for Expression

    source§

    fn eq(&self, other: &Expression) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Expression

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Expression

    source§

    impl StructuralEq for Expression

    source§

    impl StructuralPartialEq for Expression

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for Expression

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Expression

    source§

    fn eq(&self, other: &Expression) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Expression

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Expression

    source§

    impl StructuralEq for Expression

    source§

    impl StructuralPartialEq for Expression

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.Jmp.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.Jmp.html index d697e3b84..5c85eff86 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.Jmp.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.Jmp.html @@ -1,4 +1,4 @@ -Jmp in cwe_checker_lib::intermediate_representation - Rust
    pub enum Jmp {
    +Jmp in cwe_checker_lib::intermediate_representation - Rust
    pub enum Jmp {
         Branch(Tid),
         BranchInd(Expression),
         CBranch {
    @@ -7,16 +7,16 @@
         },
         Call {
             target: Tid,
    -        return_: Option<Tid>,
    +        return_: Option<Tid>,
         },
         CallInd {
             target: Expression,
    -        return_: Option<Tid>,
    +        return_: Option<Tid>,
         },
         Return(Expression),
         CallOther {
    -        description: String,
    -        return_: Option<Tid>,
    +        description: String,
    +        return_: Option<Tid>,
         },
     }
    Expand description

    A Jmp instruction affects the control flow of a program, i.e. it may change the instruction pointer. With the exception of CallOther, it has no other side effects.

    @@ -28,46 +28,48 @@
    §condition: Expression

    The jump is only taken if this expression evaluates to true, (i.e. not zero).

    A direct intraprocedural jump that is only taken if the condition evaluates to true (i.e. not zero).

    §

    Call

    Fields

    §target: Tid

    The term ID of the target subroutine (Sub) or extern symbol of the call.

    -
    §return_: Option<Tid>

    The term ID of the block that the called function returns to. +

    §return_: Option<Tid>

    The term ID of the block that the called function returns to. May be None if it is assumed that the called function never returns.

    A direct interprocedural jump representing a subroutine call.

    Note that this is syntactically equivalent to a Jmp::Branch.

    §

    CallInd

    Fields

    §target: Expression

    An expression computing the target address of the call.

    -
    §return_: Option<Tid>

    The term ID of the block that the called function returns to. +

    §return_: Option<Tid>

    The term ID of the block that the called function returns to. May be None if it is assumed that the called function never returns.

    An indirect interprocedural jump to the address the target expression evaluates to and representing a subroutine call.

    Note that this is syntactically equivalent to a Jmp::BranchInd.

    §

    Return(Expression)

    A indirect interprocedural jump indicating a return from a subroutine.

    Note that this is syntactically equivalent to a Jmp::BranchInd.

    -
    §

    CallOther

    Fields

    §description: String

    A description of the side effect.

    -
    §return_: Option<Tid>

    The block term identifier of the block +

    §

    CallOther

    Fields

    §description: String

    A description of the side effect.

    +
    §return_: Option<Tid>

    The block term identifier of the block where the disassembler assumes that execution will continue after handling of the side effect.

    This instruction is used for all side effects that are not representable by other instructions or not supported by the disassembler.

    E.g. syscalls and other interrupts are mapped to CallOther. Assembly instructions that the disassembler does not support are also mapped to CallOther. One can use the description field to match for and handle known side effects (e.g. syscalls).

    -

    Trait Implementations§

    source§

    impl Clone for Jmp

    source§

    fn clone(&self) -> Jmp

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Jmp

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Jmp

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Jmp

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Jmp> for IrJmp

    source§

    fn from(jmp: Jmp) -> IrJmp

    Convert a P-Code jump to the internally used IR.

    -
    source§

    impl Hash for Jmp

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Jmp> for Jmp

    source§

    fn eq(&self, other: &Jmp) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Jmp

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Jmp

    source§

    impl StructuralEq for Jmp

    source§

    impl StructuralPartialEq for Jmp

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Jmp

    §

    impl Send for Jmp

    §

    impl Sync for Jmp

    §

    impl Unpin for Jmp

    §

    impl UnwindSafe for Jmp

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Jmp

    source§

    fn clone(&self) -> Jmp

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Jmp

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Jmp

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Jmp

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Jmp> for Jmp

    source§

    fn from(jmp: Jmp) -> IrJmp

    Convert a P-Code jump to the internally used IR.

    +
    source§

    impl Hash for Jmp

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Jmp

    source§

    fn eq(&self, other: &Jmp) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Jmp

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Jmp

    source§

    impl StructuralEq for Jmp

    source§

    impl StructuralPartialEq for Jmp

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Jmp

    §

    impl Send for Jmp

    §

    impl Sync for Jmp

    §

    impl Unpin for Jmp

    §

    impl UnwindSafe for Jmp

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/enum.UnOpType.html b/doc/html/cwe_checker_lib/intermediate_representation/enum.UnOpType.html index a43e1b1ee..a816c6a2a 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/enum.UnOpType.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/enum.UnOpType.html @@ -1,4 +1,4 @@ -UnOpType in cwe_checker_lib::intermediate_representation - Rust
    pub enum UnOpType {
    +UnOpType in cwe_checker_lib::intermediate_representation - Rust
    pub enum UnOpType {
         IntNegate,
         Int2Comp,
         BoolNegate,
    @@ -11,27 +11,29 @@
         FloatNaN,
     }
    Expand description

    The type/mnemonic of an unary operation See the Ghidra P-Code documentation for more information.

    -

    Variants§

    §

    IntNegate

    §

    Int2Comp

    §

    BoolNegate

    §

    FloatNegate

    §

    FloatAbs

    §

    FloatSqrt

    §

    FloatCeil

    §

    FloatFloor

    §

    FloatRound

    §

    FloatNaN

    Trait Implementations§

    source§

    impl Clone for UnOpType

    source§

    fn clone(&self) -> UnOpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for UnOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for UnOpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for UnOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ExpressionType> for IrUnOpType

    source§

    fn from(expr_type: ExpressionType) -> IrUnOpType

    Translates expression types. +

    Variants§

    §

    IntNegate

    §

    Int2Comp

    §

    BoolNegate

    §

    FloatNegate

    §

    FloatAbs

    §

    FloatSqrt

    §

    FloatCeil

    §

    FloatFloor

    §

    FloatRound

    §

    FloatNaN

    Trait Implementations§

    source§

    impl Clone for UnOpType

    source§

    fn clone(&self) -> UnOpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for UnOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for UnOpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for UnOpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ExpressionType> for UnOpType

    source§

    fn from(expr_type: ExpressionType) -> IrUnOpType

    Translates expression types. Panics when given a type not representable by the target type.

    -
    source§

    impl Hash for UnOpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<UnOpType> for UnOpType

    source§

    fn eq(&self, other: &UnOpType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for UnOpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for UnOpType

    source§

    impl Eq for UnOpType

    source§

    impl StructuralEq for UnOpType

    source§

    impl StructuralPartialEq for UnOpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for UnOpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for UnOpType

    source§

    fn eq(&self, other: &UnOpType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for UnOpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for UnOpType

    source§

    impl Eq for UnOpType

    source§

    impl StructuralEq for UnOpType

    source§

    impl StructuralPartialEq for UnOpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/index.html b/doc/html/cwe_checker_lib/intermediate_representation/index.html index 1c669ff4a..1a4b03c7a 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/index.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::intermediate_representation - Rust
    Expand description

    This module defines the intermediate representation used to represent a binary +cwe_checker_lib::intermediate_representation - Rust

    Expand description

    This module defines the intermediate representation used to represent a binary and all its contained executable code.

    The main data structure is the Project struct, which contains all information recovered about a binary during the disassembly step. @@ -13,6 +13,6 @@ on how to compute a certain value given some variables (register values) as input.

  • A Jmp instruction affects the control flow of a program, i.e. it may change the instruction pointer. With the exception of CallOther, it has no other side effects.
  • The type/mnemonic of an unary operation See the Ghidra P-Code documentation for more information.
  • Traits

    • A trait to extend the bitvector type with useful helper functions -that are not contained in the apint crate.

    Type Definitions

    • A bitvector is a fixed-length vector of bits +that are not contained in the apint crate.

    Type Aliases

    • A bitvector is a fixed-length vector of bits with the semantics of a CPU register, i.e. it supports two’s complement modulo arithmetic.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Blk.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Blk.html index 46d84f110..80afb61f4 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Blk.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Blk.html @@ -1,7 +1,7 @@ -Blk in cwe_checker_lib::intermediate_representation - Rust
    pub struct Blk {
    -    pub defs: Vec<Term<Def>>,
    -    pub jmps: Vec<Term<Jmp>>,
    -    pub indirect_jmp_targets: Vec<Tid>,
    +Blk in cwe_checker_lib::intermediate_representation - Rust
    pub struct Blk {
    +    pub defs: Vec<Term<Def>>,
    +    pub jmps: Vec<Term<Jmp>>,
    +    pub indirect_jmp_targets: Vec<Tid>,
     }
    Expand description

    A basic block is a sequence of Def instructions followed by up to two Jmp instructions.

    The Def instructions represent side-effectful operations that are executed in order when the block is entered. Def instructions do not affect the control flow of a program.

    @@ -21,32 +21,34 @@ and is only exited by the jump instructions at the end of the block. If a new control flow edge is discovered that would jump to the middle of a basic block, the block structure needs to be updated accordingly.

    -

    Fields§

    §defs: Vec<Term<Def>>

    The Def instructions of the basic block in order of execution.

    -
    §jmps: Vec<Term<Jmp>>

    The Jmp instructions of the basic block

    -
    §indirect_jmp_targets: Vec<Tid>

    If the basic block contains an indirect jump, +

    Fields§

    §defs: Vec<Term<Def>>

    The Def instructions of the basic block in order of execution.

    +
    §jmps: Vec<Term<Jmp>>

    The Jmp instructions of the basic block

    +
    §indirect_jmp_targets: Vec<Tid>

    If the basic block contains an indirect jump, this field contains possible jump target addresses for the jump.

    Note that possible targets of indirect calls are not contained, since the Project normalization passes assume that only intraprocedural jump targets are contained in this field.

    -

    Trait Implementations§

    source§

    impl Clone for Blk

    source§

    fn clone(&self) -> Blk

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Blk

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Blk

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Blk

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Blk

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Blk> for Blk

    source§

    fn eq(&self, other: &Blk) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Blk

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Blk

    source§

    impl StructuralEq for Blk

    source§

    impl StructuralPartialEq for Blk

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Blk

    §

    impl Send for Blk

    §

    impl Sync for Blk

    §

    impl Unpin for Blk

    §

    impl UnwindSafe for Blk

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Blk

    source§

    fn clone(&self) -> Blk

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Blk

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Blk

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Blk

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Blk

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Blk

    source§

    fn eq(&self, other: &Blk) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Blk

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Blk

    source§

    impl StructuralEq for Blk

    source§

    impl StructuralPartialEq for Blk

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Blk

    §

    impl Send for Blk

    §

    impl Sync for Blk

    §

    impl Unpin for Blk

    §

    impl UnwindSafe for Blk

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.ByteSize.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.ByteSize.html index 7489f4590..304c4a383 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.ByteSize.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.ByteSize.html @@ -1,46 +1,50 @@ -ByteSize in cwe_checker_lib::intermediate_representation - Rust
    pub struct ByteSize(_);
    Expand description

    An unsigned number of bytes.

    +ByteSize in cwe_checker_lib::intermediate_representation - Rust
    pub struct ByteSize(/* private fields */);
    Expand description

    An unsigned number of bytes.

    Used to represent sizes of values in registers or in memory. Can also be used for other byte-valued numbers, like offsets, as long as the number is guaranteed to be non-negative.

    -

    Implementations§

    source§

    impl ByteSize

    source

    pub fn new(value: u64) -> ByteSize

    Create a new ByteSize object

    -
    source

    pub fn as_bit_length(self) -> usize

    Convert to the equivalent size in bits (by multiplying with 8).

    -

    Trait Implementations§

    source§

    impl Add<ByteSize> for ByteSize

    §

    type Output = ByteSize

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: ByteSize) -> ByteSize

    Performs the + operation. Read more
    source§

    impl AddAssign<ByteSize> for ByteSize

    source§

    fn add_assign(&mut self, rhs: ByteSize)

    Performs the += operation. Read more
    source§

    impl Binary for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Clone for ByteSize

    source§

    fn clone(&self) -> ByteSize

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ByteSize

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ByteSize

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<__RhsT> Div<__RhsT> for ByteSizewhere - u64: Div<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the / operator.
    source§

    fn div(self, rhs: __RhsT) -> ByteSize

    Performs the / operation. Read more
    source§

    impl<__RhsT> DivAssign<__RhsT> for ByteSizewhere - u64: DivAssign<__RhsT>,

    source§

    fn div_assign(&mut self, rhs: __RhsT)

    Performs the /= operation. Read more
    source§

    impl From<BitWidth> for ByteSize

    source§

    fn from(bitwidth: BitWidth) -> ByteSize

    Convert to ByteSize, while always rounding up to the nearest full byte.

    -
    source§

    impl From<ByteSize> for BitWidth

    source§

    fn from(bytesize: ByteSize) -> BitWidth

    Converts to this type from the input type.
    source§

    impl From<ByteSize> for u64

    source§

    fn from(original: ByteSize) -> Self

    Converts to this type from the input type.
    source§

    impl From<u64> for ByteSize

    source§

    fn from(original: u64) -> ByteSize

    Converts to this type from the input type.
    source§

    impl Hash for ByteSize

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl<__RhsT> Mul<__RhsT> for ByteSizewhere - u64: Mul<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: __RhsT) -> ByteSize

    Performs the * operation. Read more
    source§

    impl<__RhsT> MulAssign<__RhsT> for ByteSizewhere - u64: MulAssign<__RhsT>,

    source§

    fn mul_assign(&mut self, rhs: __RhsT)

    Performs the *= operation. Read more
    source§

    impl Not for ByteSize

    §

    type Output = ByteSize

    The resulting type after applying the ! operator.
    source§

    fn not(self) -> ByteSize

    Performs the unary ! operation. Read more
    source§

    impl Octal for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for ByteSize

    source§

    fn cmp(&self, other: &ByteSize) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<ByteSize> for ByteSize

    source§

    fn eq(&self, other: &ByteSize) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<ByteSize> for ByteSize

    source§

    fn partial_cmp(&self, other: &ByteSize) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl<__RhsT> Rem<__RhsT> for ByteSizewhere - u64: Rem<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the % operator.
    source§

    fn rem(self, rhs: __RhsT) -> ByteSize

    Performs the % operation. Read more
    source§

    impl<__RhsT> RemAssign<__RhsT> for ByteSizewhere - u64: RemAssign<__RhsT>,

    source§

    fn rem_assign(&mut self, rhs: __RhsT)

    Performs the %= operation. Read more
    source§

    impl Serialize for ByteSize

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<__RhsT> Shl<__RhsT> for ByteSizewhere - u64: Shl<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the << operator.
    source§

    fn shl(self, rhs: __RhsT) -> ByteSize

    Performs the << operation. Read more
    source§

    impl<__RhsT> ShlAssign<__RhsT> for ByteSizewhere - u64: ShlAssign<__RhsT>,

    source§

    fn shl_assign(&mut self, rhs: __RhsT)

    Performs the <<= operation. Read more
    source§

    impl<__RhsT> Shr<__RhsT> for ByteSizewhere - u64: Shr<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the >> operator.
    source§

    fn shr(self, rhs: __RhsT) -> ByteSize

    Performs the >> operation. Read more
    source§

    impl<__RhsT> ShrAssign<__RhsT> for ByteSizewhere - u64: ShrAssign<__RhsT>,

    source§

    fn shr_assign(&mut self, rhs: __RhsT)

    Performs the >>= operation. Read more
    source§

    impl Sub<ByteSize> for ByteSize

    §

    type Output = ByteSize

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: ByteSize) -> ByteSize

    Performs the - operation. Read more
    source§

    impl SubAssign<ByteSize> for ByteSize

    source§

    fn sub_assign(&mut self, rhs: ByteSize)

    Performs the -= operation. Read more
    source§

    impl Sum<ByteSize> for ByteSize

    source§

    fn sum<I: Iterator<Item = Self>>(iter: I) -> Self

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    source§

    impl UpperHex for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for ByteSize

    source§

    impl Eq for ByteSize

    source§

    impl StructuralEq for ByteSize

    source§

    impl StructuralPartialEq for ByteSize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Implementations§

    source§

    impl ByteSize

    source

    pub fn new(value: u64) -> ByteSize

    Create a new ByteSize object

    +
    source

    pub fn as_bit_length(self) -> usize

    Convert to the equivalent size in bits (by multiplying with 8).

    +

    Trait Implementations§

    source§

    impl Add for ByteSize

    §

    type Output = ByteSize

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: ByteSize) -> ByteSize

    Performs the + operation. Read more
    source§

    impl AddAssign for ByteSize

    source§

    fn add_assign(&mut self, rhs: ByteSize)

    Performs the += operation. Read more
    source§

    impl Binary for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Clone for ByteSize

    source§

    fn clone(&self) -> ByteSize

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ByteSize

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ByteSize

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<__RhsT> Div<__RhsT> for ByteSizewhere + u64: Div<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the / operator.
    source§

    fn div(self, rhs: __RhsT) -> ByteSize

    Performs the / operation. Read more
    source§

    impl<__RhsT> DivAssign<__RhsT> for ByteSizewhere + u64: DivAssign<__RhsT>,

    source§

    fn div_assign(&mut self, rhs: __RhsT)

    Performs the /= operation. Read more
    source§

    impl From<BitWidth> for ByteSize

    source§

    fn from(bitwidth: BitWidth) -> ByteSize

    Convert to ByteSize, while always rounding up to the nearest full byte.

    +
    source§

    impl From<ByteSize> for BitWidth

    source§

    fn from(bytesize: ByteSize) -> BitWidth

    Converts to this type from the input type.
    source§

    impl From<ByteSize> for u64

    source§

    fn from(original: ByteSize) -> Self

    Converts to this type from the input type.
    source§

    impl From<u64> for ByteSize

    source§

    fn from(original: u64) -> ByteSize

    Converts to this type from the input type.
    source§

    impl Hash for ByteSize

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl<__RhsT> Mul<__RhsT> for ByteSizewhere + u64: Mul<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: __RhsT) -> ByteSize

    Performs the * operation. Read more
    source§

    impl<__RhsT> MulAssign<__RhsT> for ByteSizewhere + u64: MulAssign<__RhsT>,

    source§

    fn mul_assign(&mut self, rhs: __RhsT)

    Performs the *= operation. Read more
    source§

    impl Not for ByteSize

    §

    type Output = ByteSize

    The resulting type after applying the ! operator.
    source§

    fn not(self) -> ByteSize

    Performs the unary ! operation. Read more
    source§

    impl Octal for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for ByteSize

    source§

    fn cmp(&self, other: &ByteSize) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for ByteSize

    source§

    fn eq(&self, other: &ByteSize) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for ByteSize

    source§

    fn partial_cmp(&self, other: &ByteSize) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl<__RhsT> Rem<__RhsT> for ByteSizewhere + u64: Rem<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the % operator.
    source§

    fn rem(self, rhs: __RhsT) -> ByteSize

    Performs the % operation. Read more
    source§

    impl<__RhsT> RemAssign<__RhsT> for ByteSizewhere + u64: RemAssign<__RhsT>,

    source§

    fn rem_assign(&mut self, rhs: __RhsT)

    Performs the %= operation. Read more
    source§

    impl Serialize for ByteSize

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<__RhsT> Shl<__RhsT> for ByteSizewhere + u64: Shl<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the << operator.
    source§

    fn shl(self, rhs: __RhsT) -> ByteSize

    Performs the << operation. Read more
    source§

    impl<__RhsT> ShlAssign<__RhsT> for ByteSizewhere + u64: ShlAssign<__RhsT>,

    source§

    fn shl_assign(&mut self, rhs: __RhsT)

    Performs the <<= operation. Read more
    source§

    impl<__RhsT> Shr<__RhsT> for ByteSizewhere + u64: Shr<__RhsT, Output = u64>,

    §

    type Output = ByteSize

    The resulting type after applying the >> operator.
    source§

    fn shr(self, rhs: __RhsT) -> ByteSize

    Performs the >> operation. Read more
    source§

    impl<__RhsT> ShrAssign<__RhsT> for ByteSizewhere + u64: ShrAssign<__RhsT>,

    source§

    fn shr_assign(&mut self, rhs: __RhsT)

    Performs the >>= operation. Read more
    source§

    impl Sub for ByteSize

    §

    type Output = ByteSize

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: ByteSize) -> ByteSize

    Performs the - operation. Read more
    source§

    impl SubAssign for ByteSize

    source§

    fn sub_assign(&mut self, rhs: ByteSize)

    Performs the -= operation. Read more
    source§

    impl Sum for ByteSize

    source§

    fn sum<I: Iterator<Item = Self>>(iter: I) -> Self

    Method which takes an iterator and generates Self from the elements by +“summing up” the items.
    source§

    impl UpperHex for ByteSize

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for ByteSize

    source§

    impl Eq for ByteSize

    source§

    impl StructuralEq for ByteSize

    source§

    impl StructuralPartialEq for ByteSize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    source§

    impl<N> NodeTrait for Nwhere - N: Copy + Ord + Hash,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    source§

    impl<N> NodeTrait for Nwhere + N: Copy + Ord + Hash,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.CallingConvention.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.CallingConvention.html index a6440604a..1aa9fed16 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.CallingConvention.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.CallingConvention.html @@ -1,44 +1,46 @@ -CallingConvention in cwe_checker_lib::intermediate_representation - Rust
    pub struct CallingConvention {
    -    pub name: String,
    -    pub integer_parameter_register: Vec<Variable>,
    -    pub float_parameter_register: Vec<Expression>,
    -    pub integer_return_register: Vec<Variable>,
    -    pub float_return_register: Vec<Expression>,
    -    pub callee_saved_register: Vec<Variable>,
    +CallingConvention in cwe_checker_lib::intermediate_representation - Rust
    pub struct CallingConvention {
    +    pub name: String,
    +    pub integer_parameter_register: Vec<Variable>,
    +    pub float_parameter_register: Vec<Expression>,
    +    pub integer_return_register: Vec<Variable>,
    +    pub float_return_register: Vec<Expression>,
    +    pub callee_saved_register: Vec<Variable>,
     }
    Expand description

    Calling convention related data

    -

    Fields§

    §name: String

    The name of the calling convention

    -
    §integer_parameter_register: Vec<Variable>

    Possible integer parameter registers.

    -
    §float_parameter_register: Vec<Expression>

    Possible float parameter registers. +

    Fields§

    §name: String

    The name of the calling convention

    +
    §integer_parameter_register: Vec<Variable>

    Possible integer parameter registers.

    +
    §float_parameter_register: Vec<Expression>

    Possible float parameter registers. Given as expressions, since they are usually sub-register of larger floating point registers.

    -
    §integer_return_register: Vec<Variable>

    A list of possible return register for non-float values.

    -
    §float_return_register: Vec<Expression>

    A list of possible return register for float values. +

    §integer_return_register: Vec<Variable>

    A list of possible return register for non-float values.

    +
    §float_return_register: Vec<Expression>

    A list of possible return register for float values. Given as expressions, since they are usually sub-register of larger floating point registers.

    -
    §callee_saved_register: Vec<Variable>

    A list of callee-saved register, +

    §callee_saved_register: Vec<Variable>

    A list of callee-saved register, i.e. the values of these registers should be the same after the call as they were before the call.

    -

    Implementations§

    source§

    impl CallingConvention

    source

    pub fn get_all_parameter_register(&self) -> Vec<&Variable>

    Return a list of all parameter registers of the calling convention. +

    Implementations§

    source§

    impl CallingConvention

    source

    pub fn get_all_parameter_register(&self) -> Vec<&Variable>

    Return a list of all parameter registers of the calling convention. For parameters, where only a part of a register is the actual parameter, the parameter register is approximated by the (larger) base register.

    -
    source

    pub fn get_all_return_register(&self) -> Vec<&Variable>

    Return a list of all return registers of the calling convention. +

    source

    pub fn get_all_return_register(&self) -> Vec<&Variable>

    Return a list of all return registers of the calling convention. For return register, where only a part of a register is the actual return register, the return register is approximated by the (larger) base register.

    -

    Trait Implementations§

    source§

    impl Clone for CallingConvention

    source§

    fn clone(&self) -> CallingConvention

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CallingConvention

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for CallingConvention

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for CallingConvention

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<CallingConvention> for CallingConvention

    source§

    fn eq(&self, other: &CallingConvention) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for CallingConvention

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for CallingConvention

    source§

    impl StructuralEq for CallingConvention

    source§

    impl StructuralPartialEq for CallingConvention

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for CallingConvention

    source§

    fn clone(&self) -> CallingConvention

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CallingConvention

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for CallingConvention

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for CallingConvention

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for CallingConvention

    source§

    fn eq(&self, other: &CallingConvention) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for CallingConvention

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for CallingConvention

    source§

    impl StructuralEq for CallingConvention

    source§

    impl StructuralPartialEq for CallingConvention

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.DatatypeProperties.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.DatatypeProperties.html index b850fe3a0..727eb2a5b 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.DatatypeProperties.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.DatatypeProperties.html @@ -1,4 +1,4 @@ -DatatypeProperties in cwe_checker_lib::intermediate_representation - Rust
    pub struct DatatypeProperties {
    +DatatypeProperties in cwe_checker_lib::intermediate_representation - Rust
    pub struct DatatypeProperties {
         pub char_size: ByteSize,
         pub double_size: ByteSize,
         pub float_size: ByteSize,
    @@ -18,25 +18,27 @@
     
    §long_size: ByteSize

    Holds the size of the long type

    §pointer_size: ByteSize

    Holds the size of the pointer type

    §short_size: ByteSize

    Holds the size of the short type

    -

    Implementations§

    source§

    impl DatatypeProperties

    source

    pub fn get_size_from_data_type(&self, data_type: Datatype) -> ByteSize

    Matches a given data type with its size from the properties struct.

    -

    Trait Implementations§

    source§

    impl Clone for DatatypeProperties

    source§

    fn clone(&self) -> DatatypeProperties

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for DatatypeProperties

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for DatatypeProperties

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for DatatypeProperties

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<DatatypeProperties> for DatatypeProperties

    source§

    fn eq(&self, other: &DatatypeProperties) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for DatatypeProperties

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for DatatypeProperties

    source§

    impl StructuralEq for DatatypeProperties

    source§

    impl StructuralPartialEq for DatatypeProperties

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Implementations§

    source§

    impl DatatypeProperties

    source

    pub fn get_size_from_data_type(&self, data_type: Datatype) -> ByteSize

    Matches a given data type with its size from the properties struct.

    +

    Trait Implementations§

    source§

    impl Clone for DatatypeProperties

    source§

    fn clone(&self) -> DatatypeProperties

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for DatatypeProperties

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for DatatypeProperties

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for DatatypeProperties

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for DatatypeProperties

    source§

    fn eq(&self, other: &DatatypeProperties) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for DatatypeProperties

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for DatatypeProperties

    source§

    impl StructuralEq for DatatypeProperties

    source§

    impl StructuralPartialEq for DatatypeProperties

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.ExternSymbol.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.ExternSymbol.html index 588961edb..51e867cbb 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.ExternSymbol.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.ExternSymbol.html @@ -1,48 +1,50 @@ -ExternSymbol in cwe_checker_lib::intermediate_representation - Rust
    pub struct ExternSymbol {
    +ExternSymbol in cwe_checker_lib::intermediate_representation - Rust
    pub struct ExternSymbol {
         pub tid: Tid,
    -    pub addresses: Vec<String>,
    -    pub name: String,
    -    pub calling_convention: Option<String>,
    -    pub parameters: Vec<Arg>,
    -    pub return_values: Vec<Arg>,
    -    pub no_return: bool,
    -    pub has_var_args: bool,
    +    pub addresses: Vec<String>,
    +    pub name: String,
    +    pub calling_convention: Option<String>,
    +    pub parameters: Vec<Arg>,
    +    pub return_values: Vec<Arg>,
    +    pub no_return: bool,
    +    pub has_var_args: bool,
     }
    Expand description

    An extern symbol represents a funtion that is dynamically linked from another binary.

    Fields§

    §tid: Tid

    The term ID of the extern symbol.

    -
    §addresses: Vec<String>

    Addresses of possibly multiple locations of the same extern symbol

    -
    §name: String

    The name of the extern symbol

    -
    §calling_convention: Option<String>

    The calling convention used for the extern symbol if known

    -
    §parameters: Vec<Arg>

    Parameters of an extern symbol. +

    §addresses: Vec<String>

    Addresses of possibly multiple locations of the same extern symbol

    +
    §name: String

    The name of the extern symbol

    +
    §calling_convention: Option<String>

    The calling convention used for the extern symbol if known

    +
    §parameters: Vec<Arg>

    Parameters of an extern symbol. May be empty if there are no parameters or the parameters are unknown.

    -
    §return_values: Vec<Arg>

    Return values of an extern symbol. +

    §return_values: Vec<Arg>

    Return values of an extern symbol. May be empty if there is no return value or the return values are unknown.

    -
    §no_return: bool

    If set to true, the function is assumed to never return to its caller when called.

    -
    §has_var_args: bool

    If the function has a variable number of parameters, this flag is set to true.

    -

    Implementations§

    source§

    impl ExternSymbol

    source

    pub fn get_unique_return_register(&self) -> Result<&Variable, Error>

    If the extern symbol has exactly one return value that is passed in a register, +

    §no_return: bool

    If set to true, the function is assumed to never return to its caller when called.

    +
    §has_var_args: bool

    If the function has a variable number of parameters, this flag is set to true.

    +

    Implementations§

    source§

    impl ExternSymbol

    source

    pub fn get_unique_return_register(&self) -> Result<&Variable, Error>

    If the extern symbol has exactly one return value that is passed in a register, return the register.

    -
    source

    pub fn get_unique_parameter(&self) -> Result<&Arg, Error>

    If the extern symbol has exactly one parameter, return the parameter.

    -
    source

    pub fn get_calling_convention<'a>( +

    source

    pub fn get_unique_parameter(&self) -> Result<&Arg, Error>

    If the extern symbol has exactly one parameter, return the parameter.

    +
    source

    pub fn get_calling_convention<'a>( &self, project: &'a Project ) -> &'a CallingConvention

    Get the calling convention corresponding to the extern symbol.

    -

    Trait Implementations§

    source§

    impl Clone for ExternSymbol

    source§

    fn clone(&self) -> ExternSymbol

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ExternSymbol

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ExternSymbol

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ExternSymbol

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<ExternSymbol> for ExternSymbol

    source§

    fn eq(&self, other: &ExternSymbol) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ExternSymbol

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for ExternSymbol

    source§

    impl StructuralEq for ExternSymbol

    source§

    impl StructuralPartialEq for ExternSymbol

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for ExternSymbol

    source§

    fn clone(&self) -> ExternSymbol

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ExternSymbol

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ExternSymbol

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ExternSymbol

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for ExternSymbol

    source§

    fn eq(&self, other: &ExternSymbol) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ExternSymbol

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for ExternSymbol

    source§

    impl StructuralEq for ExternSymbol

    source§

    impl StructuralPartialEq for ExternSymbol

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Program.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Program.html index d33083c9b..13d497d1a 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Program.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Program.html @@ -1,41 +1,43 @@ -Program in cwe_checker_lib::intermediate_representation - Rust
    pub struct Program {
    -    pub subs: BTreeMap<Tid, Term<Sub>>,
    -    pub extern_symbols: BTreeMap<Tid, ExternSymbol>,
    -    pub entry_points: BTreeSet<Tid>,
    -    pub address_base_offset: u64,
    +Program in cwe_checker_lib::intermediate_representation - Rust
    pub struct Program {
    +    pub subs: BTreeMap<Tid, Term<Sub>>,
    +    pub extern_symbols: BTreeMap<Tid, ExternSymbol>,
    +    pub entry_points: BTreeSet<Tid>,
    +    pub address_base_offset: u64,
     }
    Expand description

    The Program structure represents a disassembled binary.

    -

    Fields§

    §subs: BTreeMap<Tid, Term<Sub>>

    The known functions contained in the binary

    -
    §extern_symbols: BTreeMap<Tid, ExternSymbol>

    Extern symbols linked to the binary by the linker.

    -
    §entry_points: BTreeSet<Tid>

    Entry points into to binary, +

    Fields§

    §subs: BTreeMap<Tid, Term<Sub>>

    The known functions contained in the binary

    +
    §extern_symbols: BTreeMap<Tid, ExternSymbol>

    Extern symbols linked to the binary by the linker.

    +
    §entry_points: BTreeSet<Tid>

    Entry points into to binary, i.e. the term identifiers of functions that may be called from outside of the binary.

    -
    §address_base_offset: u64

    An offset that has been added to all addresses in the program compared to the addresses +

    §address_base_offset: u64

    An offset that has been added to all addresses in the program compared to the addresses as specified in the binary file.

    In certain cases, e.g. if the binary specifies a segment to be loaded at address 0, the Ghidra backend may shift the whole binary image by a constant value in memory. Thus addresses as specified by the binary and addresses as reported by Ghidra may differ by a constant offset, which is stored in this value.

    -

    Implementations§

    source§

    impl Program

    source

    pub fn find_block(&self, tid: &Tid) -> Option<&Term<Blk>>

    Find a block term by its term identifier. +

    Implementations§

    source§

    impl Program

    source

    pub fn find_block(&self, tid: &Tid) -> Option<&Term<Blk>>

    Find a block term by its term identifier. WARNING: The function simply iterates through all blocks, i.e. it is very inefficient for large projects!

    -
    source

    pub fn find_sub_containing_jump(&self, jmp_tid: &Tid) -> Option<Tid>

    Find the sub containing a specific jump instruction (including call instructions). +

    source

    pub fn find_sub_containing_jump(&self, jmp_tid: &Tid) -> Option<Tid>

    Find the sub containing a specific jump instruction (including call instructions). WARNING: The function simply iterates though all blocks, i.e. it is very inefficient for large projects!

    -

    Trait Implementations§

    source§

    impl Clone for Program

    source§

    fn clone(&self) -> Program

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Program

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Program

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<Program> for Program

    source§

    fn eq(&self, other: &Program) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Program

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Program

    source§

    impl StructuralEq for Program

    source§

    impl StructuralPartialEq for Program

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Program

    source§

    fn clone(&self) -> Program

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Program

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Program

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for Program

    source§

    fn eq(&self, other: &Program) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Program

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Program

    source§

    impl StructuralEq for Program

    source§

    impl StructuralPartialEq for Program

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Project.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Project.html index 7bc9c7f1a..6f1d33ff3 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Project.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Project.html @@ -1,37 +1,38 @@ -Project in cwe_checker_lib::intermediate_representation - Rust
    pub struct Project {
    +Project in cwe_checker_lib::intermediate_representation - Rust
    pub struct Project {
         pub program: Term<Program>,
    -    pub cpu_architecture: String,
    +    pub cpu_architecture: String,
         pub stack_pointer_register: Variable,
    -    pub calling_conventions: BTreeMap<String, CallingConvention>,
    -    pub register_set: BTreeSet<Variable>,
    +    pub calling_conventions: BTreeMap<String, CallingConvention>,
    +    pub register_set: BTreeSet<Variable>,
         pub datatype_properties: DatatypeProperties,
         pub runtime_memory_image: RuntimeMemoryImage,
     }
    Expand description

    The Project struct is the main data structure representing a binary.

    It contains information about the disassembled binary and about the execution environment of the binary.

    Fields§

    §program: Term<Program>

    All (known) executable code of the binary is contained in the program term.

    -
    §cpu_architecture: String

    The CPU architecture on which the binary is assumed to be executed.

    +
    §cpu_architecture: String

    The CPU architecture on which the binary is assumed to be executed.

    §stack_pointer_register: Variable

    The stack pointer register for the given CPU architecture.

    -
    §calling_conventions: BTreeMap<String, CallingConvention>

    The known calling conventions that may be used for calls to extern functions.

    -
    §register_set: BTreeSet<Variable>

    The set of all known physical registers for the CPU architecture. +

    §calling_conventions: BTreeMap<String, CallingConvention>

    The known calling conventions that may be used for calls to extern functions.

    +
    §register_set: BTreeSet<Variable>

    The set of all known physical registers for the CPU architecture. Does only contain base registers, i.e. sub registers of other registers are not contained.

    §datatype_properties: DatatypeProperties

    Contains the properties of C data types. (e.g. size)

    §runtime_memory_image: RuntimeMemoryImage

    Represents the memory after loading the binary.

    -

    Implementations§

    source§

    impl Project

    source

    pub fn get_pointer_bytesize(&self) -> ByteSize

    Return the size (in bytes) for pointers of the given architecture.

    -
    source

    pub fn get_standard_calling_convention(&self) -> Option<&CallingConvention>

    Try to guess a standard calling convention from the list of calling conventions in the project.

    -
    source

    pub fn get_specific_calling_convention( +

    Implementations§

    source§

    impl Project

    source

    pub fn get_pointer_bytesize(&self) -> ByteSize

    Return the size (in bytes) for pointers of the given architecture.

    +
    source

    pub fn get_standard_calling_convention(&self) -> Option<&CallingConvention>

    Try to guess a standard calling convention from the list of calling conventions in the project.

    +
    source

    pub fn get_specific_calling_convention( &self, - cconv_name_opt: &Option<String> -) -> Option<&CallingConvention>

    Try to find a specific calling convention in the list of calling conventions in the project. -If not given a calling convention (i.e. given None) then falls back to get_standard_calling_convention

    -
    source

    pub fn get_calling_convention( + cconv_name_opt: &Option<String> +) -> Option<&CallingConvention>

    Try to find a specific calling convention in the list of calling conventions in the project. +If not given a calling convention (i.e. given None) or the given calling convention name was not found +then falls back to get_standard_calling_convention.

    +
    source

    pub fn get_calling_convention( &self, extern_symbol: &ExternSymbol ) -> &CallingConvention

    Return the calling convention associated to the given extern symbol. If the extern symbol has no annotated calling convention then return the standard calling convention of the project instead.

    This function panics if no suitable calling convention is found.

    -
    source§

    impl Project

    source

    pub fn normalize(&mut self) -> Vec<LogMessage>

    Run some normalization passes over the project.

    +
    source§

    impl Project

    source

    pub fn normalize(&mut self) -> Vec<LogMessage>

    Run some normalization passes over the project.

    Passes:

    • Remove duplicate TIDs. @@ -46,22 +47,24 @@
    • Substitute bitwise AND and OR operations with the stack pointer in cases where the result is known due to known stack pointer alignment.
    -

    Trait Implementations§

    source§

    impl Clone for Project

    source§

    fn clone(&self) -> Project

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Project

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Project

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<Project> for Project

    source§

    fn eq(&self, other: &Project) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Project

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Project

    source§

    impl StructuralEq for Project

    source§

    impl StructuralPartialEq for Project

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Project

    source§

    fn clone(&self) -> Project

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Project

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Project

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq for Project

    source§

    fn eq(&self, other: &Project) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Project

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Project

    source§

    impl StructuralEq for Project

    source§

    impl StructuralPartialEq for Project

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.RuntimeMemoryImage.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.RuntimeMemoryImage.html index 543c7b8f1..c1cc3a9c5 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.RuntimeMemoryImage.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.RuntimeMemoryImage.html @@ -1,86 +1,88 @@ -RuntimeMemoryImage in cwe_checker_lib::intermediate_representation - Rust
    pub struct RuntimeMemoryImage {
    -    pub memory_segments: Vec<MemorySegment>,
    -    pub is_little_endian: bool,
    +RuntimeMemoryImage in cwe_checker_lib::intermediate_representation - Rust
    pub struct RuntimeMemoryImage {
    +    pub memory_segments: Vec<MemorySegment>,
    +    pub is_little_endian: bool,
     }
    Expand description

    A representation of the runtime image of a binary after being loaded into memory by the loader.

    -

    Fields§

    §memory_segments: Vec<MemorySegment>

    Sequence of memory segments.

    -
    §is_little_endian: bool

    Endianness

    -

    Implementations§

    source§

    impl RuntimeMemoryImage

    source

    pub fn empty(is_little_endian: bool) -> RuntimeMemoryImage

    Generate a runtime memory image containing no memory segments. +

    Fields§

    §memory_segments: Vec<MemorySegment>

    Sequence of memory segments.

    +
    §is_little_endian: bool

    Endianness

    +

    Implementations§

    source§

    impl RuntimeMemoryImage

    source

    pub fn empty(is_little_endian: bool) -> RuntimeMemoryImage

    Generate a runtime memory image containing no memory segments. Primarily useful in situations where any access to global memory would be an error.

    -
    source

    pub fn new(binary: &[u8]) -> Result<Self, Error>

    Generate a runtime memory image for a given binary.

    +
    source

    pub fn new(binary: &[u8]) -> Result<Self, Error>

    Generate a runtime memory image for a given binary.

    The function can parse ELF and PE files as input.

    -
    source

    pub fn new_from_bare_metal( - binary: &[u8], +

    source

    pub fn new_from_bare_metal( + binary: &[u8], bare_metal_config: &BareMetalConfig -) -> Result<Self, Error>

    Generate a runtime memory image for a bare metal binary.

    +) -> Result<Self, Error>

    Generate a runtime memory image for a bare metal binary.

    The generated runtime memory image contains:

    • one memory region corresponding to non-volatile memory
    • one memory region corresponding to volatile memory (RAM)

    See BareMetalConfig for more information about the assumed memory layout for bare metal binaries.

    -
    source

    pub fn is_little_endian_byte_order(&self) -> bool

    Return whether values in the memory image should be interpreted in little-endian +

    source

    pub fn is_little_endian_byte_order(&self) -> bool

    Return whether values in the memory image should be interpreted in little-endian or big-endian byte order.

    -
    source

    pub fn add_global_memory_offset(&mut self, offset: u64)

    Add a global offset to the base addresses of all memory segments. +

    source

    pub fn add_global_memory_offset(&mut self, offset: u64)

    Add a global offset to the base addresses of all memory segments. Useful to align the addresses with those reported by Ghidra if the Ghidra backend added such an offset to all addresses.

    -
    source

    pub fn read( +

    source

    pub fn read( &self, address: &Bitvector, size: ByteSize -) -> Result<Option<Bitvector>, Error>

    Read the contents of the memory image at the given address +) -> Result<Option<Bitvector>, Error>

    Read the contents of the memory image at the given address to emulate a read instruction to global data at runtime.

    The read method is endian-aware, i.e. values are interpreted with the endianness of the CPU architecture. If the address points to a writeable segment, the returned value is a Ok(None) value, since the data may change during program execution.

    Returns an error if the address is not contained in the global data address range.

    -
    source

    pub fn read_string_until_null_terminator( +

    source

    pub fn read_string_until_null_terminator( &self, address: &Bitvector -) -> Result<&str, Error>

    Read the contents of memory from a given address onwards until a null byte is reached and checks whether the +) -> Result<&str, Error>

    Read the contents of memory from a given address onwards until a null byte is reached and checks whether the content is a valid UTF8 string.

    -
    source

    pub fn is_global_memory_address(&self, constant: &Bitvector) -> bool

    Checks whether the constant is a global memory address.

    -
    source

    pub fn is_interval_readable( +

    source

    pub fn is_global_memory_address(&self, constant: &Bitvector) -> bool

    Checks whether the constant is a global memory address.

    +
    source

    pub fn is_interval_readable( &self, - start_address: u64, - end_address: u64 -) -> Result<bool, Error>

    Check whether all addresses in the given interval point to a readable segment in the runtime memory image.

    + start_address: u64, + end_address: u64 +) -> Result<bool, Error>

    Check whether all addresses in the given interval point to a readable segment in the runtime memory image.

    Returns an error if the address interval intersects more than one memory segment or if it does not point to global memory at all.

    -
    source

    pub fn get_ro_data_pointer_at_address( +

    source

    pub fn get_ro_data_pointer_at_address( &self, address: &Bitvector -) -> Result<(&[u8], usize), Error>

    For an address to global read-only memory, return the memory segment it points to +) -> Result<(&[u8], usize), Error>

    For an address to global read-only memory, return the memory segment it points to and the index inside the segment, where the address points to.

    Returns an error if the target memory segment is marked as writeable or if the pointer does not point to global memory.

    -
    source

    pub fn is_address_writeable(&self, address: &Bitvector) -> Result<bool, Error>

    Check whether the given address points to a writeable segment in the runtime memory image.

    +
    source

    pub fn is_address_writeable(&self, address: &Bitvector) -> Result<bool, Error>

    Check whether the given address points to a writeable segment in the runtime memory image.

    Returns an error if the address does not point to global memory.

    -
    source

    pub fn is_interval_writeable( +

    source

    pub fn is_interval_writeable( &self, - start_address: u64, - end_address: u64 -) -> Result<bool, Error>

    Check whether all addresses in the given interval point to a writeable segment in the runtime memory image.

    + start_address: u64, + end_address: u64 +) -> Result<bool, Error>

    Check whether all addresses in the given interval point to a writeable segment in the runtime memory image.

    Returns an error if the address interval intersects more than one memory segment or if it does not point to global memory at all.

    -

    Trait Implementations§

    source§

    impl Clone for RuntimeMemoryImage

    source§

    fn clone(&self) -> RuntimeMemoryImage

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RuntimeMemoryImage

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for RuntimeMemoryImage

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for RuntimeMemoryImage

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<RuntimeMemoryImage> for RuntimeMemoryImage

    source§

    fn eq(&self, other: &RuntimeMemoryImage) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for RuntimeMemoryImage

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for RuntimeMemoryImage

    source§

    impl StructuralEq for RuntimeMemoryImage

    source§

    impl StructuralPartialEq for RuntimeMemoryImage

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for RuntimeMemoryImage

    source§

    fn clone(&self) -> RuntimeMemoryImage

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RuntimeMemoryImage

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for RuntimeMemoryImage

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for RuntimeMemoryImage

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for RuntimeMemoryImage

    source§

    fn eq(&self, other: &RuntimeMemoryImage) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for RuntimeMemoryImage

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for RuntimeMemoryImage

    source§

    impl StructuralEq for RuntimeMemoryImage

    source§

    impl StructuralPartialEq for RuntimeMemoryImage

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Sub.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Sub.html index 80f624cbf..0430ac370 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Sub.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Sub.html @@ -1,33 +1,35 @@ -Sub in cwe_checker_lib::intermediate_representation - Rust
    pub struct Sub {
    -    pub name: String,
    -    pub blocks: Vec<Term<Blk>>,
    -    pub calling_convention: Option<String>,
    +Sub in cwe_checker_lib::intermediate_representation - Rust
    pub struct Sub {
    +    pub name: String,
    +    pub blocks: Vec<Term<Blk>>,
    +    pub calling_convention: Option<String>,
     }
    Expand description

    A Sub or subroutine represents a function with a given name and a list of basic blocks belonging to it.

    Subroutines are single-entry, i.e. calling a subroutine will execute the first block in the list of basic blocks. A subroutine may have multiple exits, which are identified by Jmp::Return instructions.

    -

    Fields§

    §name: String

    The name of the subroutine

    -
    §blocks: Vec<Term<Blk>>

    The basic blocks belonging to the subroutine. +

    Fields§

    §name: String

    The name of the subroutine

    +
    §blocks: Vec<Term<Blk>>

    The basic blocks belonging to the subroutine. The first block is also the entry point of the subroutine.

    -
    §calling_convention: Option<String>

    The calling convention used to call if known

    -

    Trait Implementations§

    source§

    impl Clone for Sub

    source§

    fn clone(&self) -> Sub

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Sub

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Sub

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Sub

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Sub> for Sub

    source§

    fn eq(&self, other: &Sub) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Sub

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Sub

    source§

    impl StructuralEq for Sub

    source§

    impl StructuralPartialEq for Sub

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Sub

    §

    impl Send for Sub

    §

    impl Sync for Sub

    §

    impl Unpin for Sub

    §

    impl UnwindSafe for Sub

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    §calling_convention: Option<String>

    The calling convention used to call if known

    +

    Trait Implementations§

    source§

    impl Clone for Sub

    source§

    fn clone(&self) -> Sub

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Sub

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Sub

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Sub

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Sub

    source§

    fn eq(&self, other: &Sub) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Sub

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Sub

    source§

    impl StructuralEq for Sub

    source§

    impl StructuralPartialEq for Sub

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Sub

    §

    impl Send for Sub

    §

    impl Sync for Sub

    §

    impl Unpin for Sub

    §

    impl UnwindSafe for Sub

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Term.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Term.html index c6e8b9380..1e9c37c28 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Term.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Term.html @@ -1,57 +1,59 @@ -Term in cwe_checker_lib::intermediate_representation - Rust
    pub struct Term<T> {
    +Term in cwe_checker_lib::intermediate_representation - Rust
    pub struct Term<T> {
         pub tid: Tid,
         pub term: T,
     }
    Expand description

    A term is an object inside a binary with an address and an unique ID (both contained in the tid).

    Fields§

    §tid: Tid

    The term identifier, which also contains the address of the term

    §term: T

    The object

    -

    Implementations§

    source§

    impl Term<Def>

    Implementations§

    source§

    impl Term<Def>

    source

    pub fn check_for_zero_extension( &self, - output_name: String, - output_sub_register: String -) -> Option<Tid>

    This function checks whether the instruction + output_name: String, + output_sub_register: String +) -> Option<Tid>

    This function checks whether the instruction is a zero extension of the overwritten sub register of the previous instruction. If so, returns its TID

    -
    source

    pub fn substitute_input_var( +

    source

    pub fn substitute_input_var( &mut self, input_var: &Variable, replace_with_expression: &Expression )

    Substitute every occurence of input_var in the address and value expressions with replace_with_expression. Does not change the target variable of assignment- and load-instructions.

    -
    source§

    impl Term<Blk>

    source§

    impl Term<Blk>

    source

    pub fn remove_nonexisting_indirect_jump_targets( &mut self, - known_block_tids: &HashSet<Tid> -) -> Result<(), Vec<LogMessage>>

    Remove indirect jump target addresses for which no corresponding target block exists. + known_block_tids: &HashSet<Tid> +) -> Result<(), Vec<LogMessage>>

    Remove indirect jump target addresses for which no corresponding target block exists. Return an error message for each removed address.

    -
    source§

    impl Term<Sub>

    source

    pub fn into_ir_sub_term(self, generic_pointer_size: ByteSize) -> Term<IrSub>

    Convert a Sub term in the P-Code representation to a Sub term in the intermediate representation. +

    source§

    impl Term<Sub>

    source

    pub fn into_ir_sub_term(self, generic_pointer_size: ByteSize) -> Term<IrSub>

    Convert a Sub term in the P-Code representation to a Sub term in the intermediate representation. The conversion also repairs the order of the basic blocks in the blocks array of the Sub in the sense that the first block of the array is required to also be the function entry point after the conversion.

    -

    Trait Implementations§

    source§

    impl<T: Clone> Clone for Term<T>

    source§

    fn clone(&self) -> Term<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug> Debug for Term<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de, T> Deserialize<'de> for Term<T>where - T: Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<T: Hash> Hash for Term<T>

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<T: PartialEq> PartialEq<Term<T>> for Term<T>

    source§

    fn eq(&self, other: &Term<T>) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<T> Serialize for Term<T>where - T: Serialize,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<T: Eq> Eq for Term<T>

    source§

    impl<T> StructuralEq for Term<T>

    source§

    impl<T> StructuralPartialEq for Term<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for Term<T>where - T: RefUnwindSafe,

    §

    impl<T> Send for Term<T>where - T: Send,

    §

    impl<T> Sync for Term<T>where - T: Sync,

    §

    impl<T> Unpin for Term<T>where - T: Unpin,

    §

    impl<T> UnwindSafe for Term<T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl<T: Clone> Clone for Term<T>

    source§

    fn clone(&self) -> Term<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug> Debug for Term<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de, T> Deserialize<'de> for Term<T>where + T: Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<T: Hash> Hash for Term<T>

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<T: PartialEq> PartialEq for Term<T>

    source§

    fn eq(&self, other: &Term<T>) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<T> Serialize for Term<T>where + T: Serialize,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<T: Eq> Eq for Term<T>

    source§

    impl<T> StructuralEq for Term<T>

    source§

    impl<T> StructuralPartialEq for Term<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for Term<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for Term<T>where + T: Send,

    §

    impl<T> Sync for Term<T>where + T: Sync,

    §

    impl<T> Unpin for Term<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for Term<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Tid.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Tid.html index b6bfed27e..743fed84c 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Tid.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Tid.html @@ -1,40 +1,45 @@ -Tid in cwe_checker_lib::intermediate_representation - Rust
    pub struct Tid {
    -    pub address: String,
    +Tid in cwe_checker_lib::intermediate_representation - Rust
    pub struct Tid {
    +    pub address: String,
         /* private fields */
     }
    Expand description

    A term identifier consisting of an ID string (which is required to be unique) and an address to indicate where the term is located.

    -

    Fields§

    §address: String

    The address where the term is located.

    -

    Implementations§

    source§

    impl Tid

    source

    pub fn new<T: ToString>(val: T) -> Tid

    Generate a new term identifier with the given ID string +

    Fields§

    §address: String

    The address where the term is located.

    +

    Implementations§

    source§

    impl Tid

    source

    pub fn new<T: ToString>(val: T) -> Tid

    Generate a new term identifier with the given ID string and with unknown address.

    -
    source

    pub fn with_id_suffix(self, suffix: &str) -> Self

    Add a suffix to the ID string and return the new Tid

    -
    source

    pub fn blk_id_at_address(address: &str) -> Tid

    Generate the ID of a block starting at the given address.

    +
    source

    pub fn with_id_suffix(self, suffix: &str) -> Self

    Add a suffix to the ID string and return the new Tid

    +
    source

    pub fn has_id_suffix(&self, suffix: &str) -> bool

    Returns true if the ID string ends with the provided suffix.

    +
    source

    pub fn blk_id_at_address(address: &str) -> Tid

    Generate the ID of a block starting at the given address.

    Note that the block may not actually exist. For cases where one assembly instruction generates more than one block, the returned block ID is the one that would be executed first if a jump to the given address happened.

    -

    Trait Implementations§

    source§

    impl Clone for Tid

    source§

    fn clone(&self) -> Tid

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Tid

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Tid

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Tid

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Tid

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for Tid

    source§

    fn cmp(&self, other: &Tid) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Tid> for Tid

    source§

    fn eq(&self, other: &Tid) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<Tid> for Tid

    source§

    fn partial_cmp(&self, other: &Tid) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for Tid

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Tid

    source§

    impl StructuralEq for Tid

    source§

    impl StructuralPartialEq for Tid

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Tid

    §

    impl Send for Tid

    §

    impl Sync for Tid

    §

    impl Unpin for Tid

    §

    impl UnwindSafe for Tid

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Tid

    source§

    fn clone(&self) -> Tid

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Tid

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Tid

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Tid

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Tid

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for Tid

    source§

    fn cmp(&self, other: &Tid) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for Tid

    source§

    fn eq(&self, other: &Tid) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for Tid

    source§

    fn partial_cmp(&self, other: &Tid) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for Tid

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Tid

    source§

    impl StructuralEq for Tid

    source§

    impl StructuralPartialEq for Tid

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Tid

    §

    impl Send for Tid

    §

    impl Sync for Tid

    §

    impl Unpin for Tid

    §

    impl UnwindSafe for Tid

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/struct.Variable.html b/doc/html/cwe_checker_lib/intermediate_representation/struct.Variable.html index 3314a3615..e974dba6c 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/struct.Variable.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/struct.Variable.html @@ -1,7 +1,7 @@ -Variable in cwe_checker_lib::intermediate_representation - Rust
    pub struct Variable {
    -    pub name: String,
    +Variable in cwe_checker_lib::intermediate_representation - Rust
    pub struct Variable {
    +    pub name: String,
         pub size: ByteSize,
    -    pub is_temp: bool,
    +    pub is_temp: bool,
     }
    Expand description

    A variable represents a register with a known size and name.

    Variables can be temporary (or virtual). In this case they do not represent actual physical registers @@ -9,36 +9,40 @@ Temporary variables are only valid until the end of the current assembly instruction. However, one assembly instruction may span more than one basic block in the intermediate representation (but never more than one function).

    -

    Fields§

    §name: String

    The name of the variable. Equals the register name if the variable is a physical register.

    +

    Fields§

    §name: String

    The name of the variable. Equals the register name if the variable is a physical register.

    §size: ByteSize

    The size (in bytes) of the variable.

    -
    §is_temp: bool

    Set to false for physical registers and to true for temporary (virtual) variables.

    -

    Trait Implementations§

    source§

    impl Clone for Variable

    source§

    fn clone(&self) -> Variable

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Variable

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Variable

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Variable

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<&RegisterProperties> for IrVariable

    source§

    fn from(register_prop: &RegisterProperties) -> IrVariable

    Create a variable representing the same register as the given register_prop.

    -
    source§

    impl From<Variable> for IrVariable

    source§

    fn from(pcode_var: Variable) -> IrVariable

    Translate a P-Code variable into a register variable of the internally used IR. +

    §is_temp: bool

    Set to false for physical registers and to true for temporary (virtual) variables.

    +

    Trait Implementations§

    source§

    impl Clone for Variable

    source§

    fn clone(&self) -> Variable

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Variable

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Variable

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Variable

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<&RegisterProperties> for Variable

    source§

    fn from(register_prop: &RegisterProperties) -> IrVariable

    Create a variable representing the same register as the given register_prop.

    +
    source§

    impl From<Variable> for Variable

    source§

    fn from(pcode_var: Variable) -> IrVariable

    Translate a P-Code variable into a register variable of the internally used IR. Panic if the variable does not represent a register.

    -
    source§

    impl Hash for Variable

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for Variable

    source§

    fn cmp(&self, other: &Variable) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Variable> for Variable

    source§

    fn eq(&self, other: &Variable) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<Variable> for Variable

    source§

    fn partial_cmp(&self, other: &Variable) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for Variable

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Variable

    source§

    impl StructuralEq for Variable

    source§

    impl StructuralPartialEq for Variable

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for Variable

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for Variable

    source§

    fn cmp(&self, other: &Variable) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for Variable

    source§

    fn eq(&self, other: &Variable) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for Variable

    source§

    fn partial_cmp(&self, other: &Variable) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for Variable

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Variable

    source§

    impl StructuralEq for Variable

    source§

    impl StructuralPartialEq for Variable

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/trait.BitvectorExtended.html b/doc/html/cwe_checker_lib/intermediate_representation/trait.BitvectorExtended.html index 14a1082b2..0a1cebf20 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/trait.BitvectorExtended.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/trait.BitvectorExtended.html @@ -1,37 +1,37 @@ -BitvectorExtended in cwe_checker_lib::intermediate_representation - Rust
    pub trait BitvectorExtended: Sized {
    +BitvectorExtended in cwe_checker_lib::intermediate_representation - Rust
    pub trait BitvectorExtended: Sized {
         // Required methods
         fn into_resize_unsigned(self, size: ByteSize) -> Self;
         fn into_resize_signed(self, size: ByteSize) -> Self;
    -    fn cast(&self, kind: CastOpType, width: ByteSize) -> Result<Self, Error>;
    +    fn cast(&self, kind: CastOpType, width: ByteSize) -> Result<Self, Error>;
         fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self;
    -    fn un_op(&self, op: UnOpType) -> Result<Self, Error>;
    -    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Result<Self, Error>;
    -    fn signed_add_overflow_checked(&self, rhs: &Self) -> Option<Self>;
    -    fn signed_sub_overflow_checked(&self, rhs: &Self) -> Option<Self>;
    +    fn un_op(&self, op: UnOpType) -> Result<Self, Error>;
    +    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Result<Self, Error>;
    +    fn signed_add_overflow_checked(&self, rhs: &Self) -> Option<Self>;
    +    fn signed_sub_overflow_checked(&self, rhs: &Self) -> Option<Self>;
         fn signed_mult_with_overflow_flag(
             &self,
    -        rhs: &Self
    -    ) -> Result<(Self, bool), Error>;
    +        rhs: &Self
    +    ) -> Result<(Self, bool), Error>;
         fn bytesize(&self) -> ByteSize;
     }
    Expand description

    A trait to extend the bitvector type with useful helper functions that are not contained in the apint crate.

    -

    Required Methods§

    source

    fn into_resize_unsigned(self, size: ByteSize) -> Self

    Resize self to the target byte size by either zero extending or truncating self.

    -
    source

    fn into_resize_signed(self, size: ByteSize) -> Self

    Resize self to the target byte size by either sign extending or truncating self.

    -
    source

    fn cast(&self, kind: CastOpType, width: ByteSize) -> Result<Self, Error>

    Perform a cast operation on the bitvector. +

    Required Methods§

    source

    fn into_resize_unsigned(self, size: ByteSize) -> Self

    Resize self to the target byte size by either zero extending or truncating self.

    +
    source

    fn into_resize_signed(self, size: ByteSize) -> Self

    Resize self to the target byte size by either sign extending or truncating self.

    +
    source

    fn cast(&self, kind: CastOpType, width: ByteSize) -> Result<Self, Error>

    Perform a cast operation on the bitvector. Returns an error for non-implemented cast operations (currently all float-related casts).

    -
    source

    fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

    Extract a subpiece from the given bitvector.

    -
    source

    fn un_op(&self, op: UnOpType) -> Result<Self, Error>

    Perform a unary operation on the given bitvector. +

    source

    fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

    Extract a subpiece from the given bitvector.

    +
    source

    fn un_op(&self, op: UnOpType) -> Result<Self, Error>

    Perform a unary operation on the given bitvector. Returns an error for non-implemented operations (currently all float-related operations).

    -
    source

    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Result<Self, Error>

    Perform a binary operation on the given bitvectors. +

    source

    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Result<Self, Error>

    Perform a binary operation on the given bitvectors. Returns an error for non-implemented operations (currently all float-related operations).

    -
    source

    fn signed_add_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self + rhs if the computation does not result in a signed integer overflow or underflow.

    -
    source

    fn signed_sub_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self - rhs if the computation does not result in a signed integer overflow or underflow.

    -
    source

    fn signed_mult_with_overflow_flag( +

    source

    fn signed_add_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self + rhs if the computation does not result in a signed integer overflow or underflow.

    +
    source

    fn signed_sub_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self - rhs if the computation does not result in a signed integer overflow or underflow.

    +
    source

    fn signed_mult_with_overflow_flag( &self, - rhs: &Self -) -> Result<(Self, bool), Error>

    Return the result of multiplying self with rhs + rhs: &Self +) -> Result<(Self, bool), Error>

    Return the result of multiplying self with rhs and a flag that is set to true if the multiplication resulted in a signed integer overflow or underflow.

    Returns an error for bitvectors larger than 8 bytes, since multiplication for them is not yet implemented in the apint crate.

    -
    source

    fn bytesize(&self) -> ByteSize

    Return the size in bytes of the bitvector.

    -

    Implementors§

    \ No newline at end of file +
    source

    fn bytesize(&self) -> ByteSize

    Return the size in bytes of the bitvector.

    +

    Object Safety§

    This trait is not object safe.

    Implementors§

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/intermediate_representation/type.Bitvector.html b/doc/html/cwe_checker_lib/intermediate_representation/type.Bitvector.html index 7faabaf75..f7dcef9fa 100644 --- a/doc/html/cwe_checker_lib/intermediate_representation/type.Bitvector.html +++ b/doc/html/cwe_checker_lib/intermediate_representation/type.Bitvector.html @@ -1,25 +1,25 @@ -Bitvector in cwe_checker_lib::intermediate_representation - Rust
    pub type Bitvector = ApInt;
    Expand description

    A bitvector is a fixed-length vector of bits +Bitvector in cwe_checker_lib::intermediate_representation - Rust

    pub type Bitvector = ApInt;
    Expand description

    A bitvector is a fixed-length vector of bits with the semantics of a CPU register, i.e. it supports two’s complement modulo arithmetic.

    Bitvector is just an alias for the apint::ApInt type.

    -

    Trait Implementations§

    source§

    impl BitvectorExtended for Bitvector

    source§

    fn cast(&self, kind: CastOpType, width: ByteSize) -> Result<Self, Error>

    Perform a cast operation on the bitvector. +

    Aliased Type§

    struct Bitvector { /* private fields */ }

    Trait Implementations§

    source§

    impl BitvectorExtended for Bitvector

    source§

    fn cast(&self, kind: CastOpType, width: ByteSize) -> Result<Self, Error>

    Perform a cast operation on the bitvector. Returns an error for non-implemented cast operations (currently all float-related casts).

    -
    source§

    fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

    Extract a subpiece from the given bitvector.

    -
    source§

    fn un_op(&self, op: UnOpType) -> Result<Self, Error>

    Perform a unary operation on the given bitvector. +

    source§

    fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

    Extract a subpiece from the given bitvector.

    +
    source§

    fn un_op(&self, op: UnOpType) -> Result<Self, Error>

    Perform a unary operation on the given bitvector. Returns an error for non-implemented operations (currently all float-related operations).

    -
    source§

    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Result<Self, Error>

    Perform a binary operation on the given bitvectors. +

    source§

    fn bin_op(&self, op: BinOpType, rhs: &Self) -> Result<Self, Error>

    Perform a binary operation on the given bitvectors. Returns an error for non-implemented operations (currently all float-related operations) or for divisions-by-zero.

    -
    source§

    fn signed_add_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self + rhs if the computation does not result in a signed integer overflow or underflow.

    -
    source§

    fn signed_sub_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self - rhs if the computation does not result in a signed integer overflow or underflow.

    -
    source§

    fn signed_mult_with_overflow_flag( +

    source§

    fn signed_add_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self + rhs if the computation does not result in a signed integer overflow or underflow.

    +
    source§

    fn signed_sub_overflow_checked(&self, rhs: &Self) -> Option<Self>

    Returns the result of self - rhs if the computation does not result in a signed integer overflow or underflow.

    +
    source§

    fn signed_mult_with_overflow_flag( &self, - rhs: &Self -) -> Result<(Self, bool), Error>

    Return the result of multiplying self with rhs + rhs: &Self +) -> Result<(Self, bool), Error>

    Return the result of multiplying self with rhs and a flag that is set to true if the multiplication resulted in a signed integer overflow or underflow.

    Returns an error for bitvectors larger than 8 bytes, since multiplication for them is not yet implemented in the apint crate.

    -
    source§

    fn bytesize(&self) -> ByteSize

    Return the size in bytes of the bitvector.

    -
    source§

    fn into_resize_unsigned(self, size: ByteSize) -> Self

    Resize self to the target byte size by either zero extending or truncating self.

    -
    source§

    fn into_resize_signed(self, size: ByteSize) -> Self

    Resize self to the target byte size by either sign extending or truncating self.

    -
    \ No newline at end of file +
    source§

    fn bytesize(&self) -> ByteSize

    Return the size in bytes of the bitvector.

    +
    source§

    fn into_resize_unsigned(self, size: ByteSize) -> Self

    Resize self to the target byte size by either zero extending or truncating self.

    +
    source§

    fn into_resize_signed(self, size: ByteSize) -> Self

    Resize self to the target byte size by either sign extending or truncating self.

    +
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/enum.ArgIntent.html b/doc/html/cwe_checker_lib/pcode/enum.ArgIntent.html index 92a36e03a..6336e295f 100644 --- a/doc/html/cwe_checker_lib/pcode/enum.ArgIntent.html +++ b/doc/html/cwe_checker_lib/pcode/enum.ArgIntent.html @@ -1,27 +1,29 @@ -ArgIntent in cwe_checker_lib::pcode - Rust
    pub enum ArgIntent {
    +ArgIntent in cwe_checker_lib::pcode - Rust
    pub enum ArgIntent {
         INPUT,
         OUTPUT,
     }
    Expand description

    The intent (input or output) of a function argument.

    Variants§

    §

    INPUT

    The argument is an input parameter.

    §

    OUTPUT

    The argument is a return value.

    -

    Trait Implementations§

    source§

    impl Clone for ArgIntent

    source§

    fn clone(&self) -> ArgIntent

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ArgIntent

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ArgIntent

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ArgIntent

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<ArgIntent> for ArgIntent

    source§

    fn eq(&self, other: &ArgIntent) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ArgIntent

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for ArgIntent

    source§

    impl StructuralEq for ArgIntent

    source§

    impl StructuralPartialEq for ArgIntent

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for ArgIntent

    source§

    fn clone(&self) -> ArgIntent

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ArgIntent

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ArgIntent

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ArgIntent

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for ArgIntent

    source§

    fn eq(&self, other: &ArgIntent) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ArgIntent

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for ArgIntent

    source§

    impl StructuralEq for ArgIntent

    source§

    impl StructuralPartialEq for ArgIntent

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/enum.ExpressionType.html b/doc/html/cwe_checker_lib/pcode/enum.ExpressionType.html index c2a114f82..0eec4ba84 100644 --- a/doc/html/cwe_checker_lib/pcode/enum.ExpressionType.html +++ b/doc/html/cwe_checker_lib/pcode/enum.ExpressionType.html @@ -1,4 +1,4 @@ -ExpressionType in cwe_checker_lib::pcode - Rust
    pub enum ExpressionType {
    +ExpressionType in cwe_checker_lib::pcode - Rust
    pub enum ExpressionType {
     
    Show 54 variants COPY, LOAD, STORE, @@ -54,30 +54,32 @@ FLOAT2FLOAT, TRUNC,
    }
    Expand description

    Expression Opcodes as parsed from Ghidra

    -

    Variants§

    §

    COPY

    §

    LOAD

    §

    STORE

    §

    PIECE

    §

    SUBPIECE

    §

    POPCOUNT

    §

    INT_EQUAL

    §

    INT_NOTEQUAL

    §

    INT_LESS

    §

    INT_SLESS

    §

    INT_LESSEQUAL

    §

    INT_SLESSEQUAL

    §

    INT_ADD

    §

    INT_SUB

    §

    INT_CARRY

    §

    INT_SCARRY

    §

    INT_SBORROW

    §

    INT_XOR

    §

    INT_AND

    §

    INT_OR

    §

    INT_LEFT

    §

    INT_RIGHT

    §

    INT_SRIGHT

    §

    INT_MULT

    §

    INT_DIV

    §

    INT_REM

    §

    INT_SDIV

    §

    INT_SREM

    §

    BOOL_XOR

    §

    BOOL_AND

    §

    BOOL_OR

    §

    FLOAT_EQUAL

    §

    FLOAT_NOTEQUAL

    §

    FLOAT_LESS

    §

    FLOAT_LESSEQUAL

    §

    FLOAT_ADD

    §

    FLOAT_SUB

    §

    FLOAT_MULT

    §

    FLOAT_DIV

    §

    INT_NEGATE

    §

    INT_2COMP

    §

    BOOL_NEGATE

    §

    FLOAT_NEG

    §

    FLOAT_ABS

    §

    FLOAT_SQRT

    §

    FLOAT_CEIL

    §

    FLOAT_FLOOR

    §

    FLOAT_ROUND

    §

    FLOAT_NAN

    §

    INT_ZEXT

    §

    INT_SEXT

    §

    INT2FLOAT

    §

    FLOAT2FLOAT

    §

    TRUNC

    Trait Implementations§

    source§

    impl Clone for ExpressionType

    source§

    fn clone(&self) -> ExpressionType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ExpressionType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ExpressionType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<ExpressionType> for IrBinOpType

    source§

    fn from(expr_type: ExpressionType) -> IrBinOpType

    Translates expression types. +

    Variants§

    §

    COPY

    §

    LOAD

    §

    STORE

    §

    PIECE

    §

    SUBPIECE

    §

    POPCOUNT

    §

    INT_EQUAL

    §

    INT_NOTEQUAL

    §

    INT_LESS

    §

    INT_SLESS

    §

    INT_LESSEQUAL

    §

    INT_SLESSEQUAL

    §

    INT_ADD

    §

    INT_SUB

    §

    INT_CARRY

    §

    INT_SCARRY

    §

    INT_SBORROW

    §

    INT_XOR

    §

    INT_AND

    §

    INT_OR

    §

    INT_LEFT

    §

    INT_RIGHT

    §

    INT_SRIGHT

    §

    INT_MULT

    §

    INT_DIV

    §

    INT_REM

    §

    INT_SDIV

    §

    INT_SREM

    §

    BOOL_XOR

    §

    BOOL_AND

    §

    BOOL_OR

    §

    FLOAT_EQUAL

    §

    FLOAT_NOTEQUAL

    §

    FLOAT_LESS

    §

    FLOAT_LESSEQUAL

    §

    FLOAT_ADD

    §

    FLOAT_SUB

    §

    FLOAT_MULT

    §

    FLOAT_DIV

    §

    INT_NEGATE

    §

    INT_2COMP

    §

    BOOL_NEGATE

    §

    FLOAT_NEG

    §

    FLOAT_ABS

    §

    FLOAT_SQRT

    §

    FLOAT_CEIL

    §

    FLOAT_FLOOR

    §

    FLOAT_ROUND

    §

    FLOAT_NAN

    §

    INT_ZEXT

    §

    INT_SEXT

    §

    INT2FLOAT

    §

    FLOAT2FLOAT

    §

    TRUNC

    Trait Implementations§

    source§

    impl Clone for ExpressionType

    source§

    fn clone(&self) -> ExpressionType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ExpressionType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ExpressionType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<ExpressionType> for BinOpType

    source§

    fn from(expr_type: ExpressionType) -> IrBinOpType

    Translates expression types. Panics when given a type not representable by the target type.

    -
    source§

    impl From<ExpressionType> for IrCastOpType

    source§

    fn from(expr_type: ExpressionType) -> IrCastOpType

    Translates expression types. +

    source§

    impl From<ExpressionType> for CastOpType

    source§

    fn from(expr_type: ExpressionType) -> IrCastOpType

    Translates expression types. Panics when given a type not representable by the target type.

    -
    source§

    impl From<ExpressionType> for IrUnOpType

    source§

    fn from(expr_type: ExpressionType) -> IrUnOpType

    Translates expression types. +

    source§

    impl From<ExpressionType> for UnOpType

    source§

    fn from(expr_type: ExpressionType) -> IrUnOpType

    Translates expression types. Panics when given a type not representable by the target type.

    -
    source§

    impl Hash for ExpressionType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<ExpressionType> for ExpressionType

    source§

    fn eq(&self, other: &ExpressionType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ExpressionType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for ExpressionType

    source§

    impl Eq for ExpressionType

    source§

    impl StructuralEq for ExpressionType

    source§

    impl StructuralPartialEq for ExpressionType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for ExpressionType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for ExpressionType

    source§

    fn eq(&self, other: &ExpressionType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ExpressionType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for ExpressionType

    source§

    impl Eq for ExpressionType

    source§

    impl StructuralEq for ExpressionType

    source§

    impl StructuralPartialEq for ExpressionType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/enum.JmpType.html b/doc/html/cwe_checker_lib/pcode/enum.JmpType.html index b9037aee4..c606a8ecf 100644 --- a/doc/html/cwe_checker_lib/pcode/enum.JmpType.html +++ b/doc/html/cwe_checker_lib/pcode/enum.JmpType.html @@ -1,4 +1,4 @@ -JmpType in cwe_checker_lib::pcode - Rust
    pub enum JmpType {
    +JmpType in cwe_checker_lib::pcode - Rust
    pub enum JmpType {
         BRANCH,
         CBRANCH,
         BRANCHIND,
    @@ -7,24 +7,26 @@
         CALLOTHER,
         RETURN,
     }
    Expand description

    A jump type mnemonic.

    -

    Variants§

    §

    BRANCH

    §

    CBRANCH

    §

    BRANCHIND

    §

    CALL

    §

    CALLIND

    §

    CALLOTHER

    §

    RETURN

    Trait Implementations§

    source§

    impl Clone for JmpType

    source§

    fn clone(&self) -> JmpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for JmpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for JmpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for JmpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<JmpType> for JmpType

    source§

    fn eq(&self, other: &JmpType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for JmpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for JmpType

    source§

    impl Eq for JmpType

    source§

    impl StructuralEq for JmpType

    source§

    impl StructuralPartialEq for JmpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Variants§

    §

    BRANCH

    §

    CBRANCH

    §

    BRANCHIND

    §

    CALL

    §

    CALLIND

    §

    CALLOTHER

    §

    RETURN

    Trait Implementations§

    source§

    impl Clone for JmpType

    source§

    fn clone(&self) -> JmpType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for JmpType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for JmpType

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for JmpType

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for JmpType

    source§

    fn eq(&self, other: &JmpType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for JmpType

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for JmpType

    source§

    impl Eq for JmpType

    source§

    impl StructuralEq for JmpType

    source§

    impl StructuralPartialEq for JmpType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/enum.Label.html b/doc/html/cwe_checker_lib/pcode/enum.Label.html index d62309bd9..f5d23d94e 100644 --- a/doc/html/cwe_checker_lib/pcode/enum.Label.html +++ b/doc/html/cwe_checker_lib/pcode/enum.Label.html @@ -1,27 +1,29 @@ -Label in cwe_checker_lib::pcode - Rust
    pub enum Label {
    +Label in cwe_checker_lib::pcode - Rust
    pub enum Label {
         Direct(Tid),
         Indirect(Variable),
     }
    Expand description

    A jump label for distinguishing between direct and indirect jumps.

    Variants§

    §

    Direct(Tid)

    The term identifier of the target of a direct jump.

    §

    Indirect(Variable)

    The varnode holding the target address of an indirect jump.

    -

    Trait Implementations§

    source§

    impl Clone for Label

    source§

    fn clone(&self) -> Label

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Label

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Label

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Label

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Label> for Label

    source§

    fn eq(&self, other: &Label) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Label

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Label

    source§

    impl StructuralEq for Label

    source§

    impl StructuralPartialEq for Label

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Label

    §

    impl Send for Label

    §

    impl Sync for Label

    §

    impl Unpin for Label

    §

    impl UnwindSafe for Label

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Label

    source§

    fn clone(&self) -> Label

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Label

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Label

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Label

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Label

    source§

    fn eq(&self, other: &Label) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Label

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Label

    source§

    impl StructuralEq for Label

    source§

    impl StructuralPartialEq for Label

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Label

    §

    impl Send for Label

    §

    impl Sync for Label

    §

    impl Unpin for Label

    §

    impl UnwindSafe for Label

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/index.html b/doc/html/cwe_checker_lib/pcode/index.html index 60580c053..536e5d392 100644 --- a/doc/html/cwe_checker_lib/pcode/index.html +++ b/doc/html/cwe_checker_lib/pcode/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::pcode - Rust

    Module cwe_checker_lib::pcode

    source ·
    Expand description

    Types to describe Ghidra P-Code +cwe_checker_lib::pcode - Rust

    Module cwe_checker_lib::pcode

    source ·
    Expand description

    Types to describe Ghidra P-Code and functions to translate it to the internally used intermediate representation.

    The types in this module are not an exact representation of P-Code, as some preprocessing is already done in the P-Code-Extractor plugin.

    diff --git a/doc/html/cwe_checker_lib/pcode/struct.Arg.html b/doc/html/cwe_checker_lib/pcode/struct.Arg.html index 042d49fe6..0a5937dca 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Arg.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Arg.html @@ -1,29 +1,31 @@ -Arg in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Arg

    source ·
    pub struct Arg {
    -    pub var: Option<Variable>,
    -    pub location: Option<Expression>,
    +Arg in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Arg

    source ·
    pub struct Arg {
    +    pub var: Option<Variable>,
    +    pub location: Option<Expression>,
         pub intent: ArgIntent,
     }
    Expand description

    An argument (parameter or return value) of an extern symbol.

    -

    Fields§

    §var: Option<Variable>

    The register containing the argument if it is passed in a register.

    -
    §location: Option<Expression>

    The expression computing the location of the argument if it is passed on the stack.

    +

    Fields§

    §var: Option<Variable>

    The register containing the argument if it is passed in a register.

    +
    §location: Option<Expression>

    The expression computing the location of the argument if it is passed on the stack.

    §intent: ArgIntent

    The intent (input or output) of the argument.

    -

    Trait Implementations§

    source§

    impl Clone for Arg

    source§

    fn clone(&self) -> Arg

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Arg

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Arg

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Arg

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Arg> for Arg

    source§

    fn eq(&self, other: &Arg) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Arg

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Arg

    source§

    impl StructuralEq for Arg

    source§

    impl StructuralPartialEq for Arg

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Arg

    §

    impl Send for Arg

    §

    impl Sync for Arg

    §

    impl Unpin for Arg

    §

    impl UnwindSafe for Arg

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Arg

    source§

    fn clone(&self) -> Arg

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Arg

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Arg

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Arg

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Arg

    source§

    fn eq(&self, other: &Arg) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Arg

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Arg

    source§

    impl StructuralEq for Arg

    source§

    impl StructuralPartialEq for Arg

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Arg

    §

    impl Send for Arg

    §

    impl Sync for Arg

    §

    impl Unpin for Arg

    §

    impl UnwindSafe for Arg

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Blk.html b/doc/html/cwe_checker_lib/pcode/struct.Blk.html index b95f4b5b7..601f29b5f 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Blk.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Blk.html @@ -1,28 +1,30 @@ -Blk in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Blk

    source ·
    pub struct Blk {
    -    pub defs: Vec<Term<Def>>,
    -    pub jmps: Vec<Term<Jmp>>,
    +Blk in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Blk

    source ·
    pub struct Blk {
    +    pub defs: Vec<Term<Def>>,
    +    pub jmps: Vec<Term<Jmp>>,
     }
    Expand description

    A basic block.

    -

    Fields§

    §defs: Vec<Term<Def>>

    The Def instructions of the block in chronological order.

    -
    §jmps: Vec<Term<Jmp>>

    The jump instructions at the end of the basic block.

    -

    Implementations§

    source§

    impl Blk

    source

    pub fn into_ir_blk(self, generic_pointer_size: ByteSize) -> IrBlk

    Convert a P-Code block to the internally used IR.

    -

    Trait Implementations§

    source§

    impl Clone for Blk

    source§

    fn clone(&self) -> Blk

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Blk

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Blk

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Blk

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Blk> for Blk

    source§

    fn eq(&self, other: &Blk) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Blk

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Blk

    source§

    impl StructuralEq for Blk

    source§

    impl StructuralPartialEq for Blk

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Blk

    §

    impl Send for Blk

    §

    impl Sync for Blk

    §

    impl Unpin for Blk

    §

    impl UnwindSafe for Blk

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Fields§

    §defs: Vec<Term<Def>>

    The Def instructions of the block in chronological order.

    +
    §jmps: Vec<Term<Jmp>>

    The jump instructions at the end of the basic block.

    +

    Implementations§

    source§

    impl Blk

    source

    pub fn into_ir_blk(self, generic_pointer_size: ByteSize) -> IrBlk

    Convert a P-Code block to the internally used IR.

    +

    Trait Implementations§

    source§

    impl Clone for Blk

    source§

    fn clone(&self) -> Blk

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Blk

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Blk

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Blk

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Blk

    source§

    fn eq(&self, other: &Blk) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Blk

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Blk

    source§

    impl StructuralEq for Blk

    source§

    impl StructuralPartialEq for Blk

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Blk

    §

    impl Send for Blk

    §

    impl Sync for Blk

    §

    impl Unpin for Blk

    §

    impl UnwindSafe for Blk

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Call.html b/doc/html/cwe_checker_lib/pcode/struct.Call.html index be0a108cf..290b78469 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Call.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Call.html @@ -1,29 +1,31 @@ -Call in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Call

    source ·
    pub struct Call {
    -    pub target: Option<Label>,
    -    pub return_: Option<Label>,
    -    pub call_string: Option<String>,
    +Call in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Call

    source ·
    pub struct Call {
    +    pub target: Option<Label>,
    +    pub return_: Option<Label>,
    +    pub call_string: Option<String>,
     }
    Expand description

    A call instruction.

    -

    Fields§

    §target: Option<Label>

    The target label. May be None for CALLOTHER instructions.

    -
    §return_: Option<Label>

    The return label if the call is expected to return.

    -
    §call_string: Option<String>

    A description of the instruction for CALLOTHER instructions.

    -

    Trait Implementations§

    source§

    impl Clone for Call

    source§

    fn clone(&self) -> Call

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Call

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Call

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Call

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Call> for Call

    source§

    fn eq(&self, other: &Call) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Call

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Call

    source§

    impl StructuralEq for Call

    source§

    impl StructuralPartialEq for Call

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Call

    §

    impl Send for Call

    §

    impl Sync for Call

    §

    impl Unpin for Call

    §

    impl UnwindSafe for Call

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Fields§

    §target: Option<Label>

    The target label. May be None for CALLOTHER instructions.

    +
    §return_: Option<Label>

    The return label if the call is expected to return.

    +
    §call_string: Option<String>

    A description of the instruction for CALLOTHER instructions.

    +

    Trait Implementations§

    source§

    impl Clone for Call

    source§

    fn clone(&self) -> Call

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Call

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Call

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Call

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Call

    source§

    fn eq(&self, other: &Call) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Call

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Call

    source§

    impl StructuralEq for Call

    source§

    impl StructuralPartialEq for Call

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Call

    §

    impl Send for Call

    §

    impl Sync for Call

    §

    impl Unpin for Call

    §

    impl UnwindSafe for Call

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.CallingConvention.html b/doc/html/cwe_checker_lib/pcode/struct.CallingConvention.html index e701df4c2..28518b379 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.CallingConvention.html +++ b/doc/html/cwe_checker_lib/pcode/struct.CallingConvention.html @@ -1,26 +1,28 @@ -CallingConvention in cwe_checker_lib::pcode - Rust
    pub struct CallingConvention {
    -    pub name: String,
    +CallingConvention in cwe_checker_lib::pcode - Rust
    pub struct CallingConvention {
    +    pub name: String,
         /* private fields */
     }
    Expand description

    A struct describing a calling convention.

    -

    Fields§

    §name: String

    The name of the calling convention.

    -

    Trait Implementations§

    source§

    impl Clone for CallingConvention

    source§

    fn clone(&self) -> CallingConvention

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CallingConvention

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for CallingConvention

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for CallingConvention

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<CallingConvention> for CallingConvention

    source§

    fn eq(&self, other: &CallingConvention) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for CallingConvention

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for CallingConvention

    source§

    impl StructuralEq for CallingConvention

    source§

    impl StructuralPartialEq for CallingConvention

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Fields§

    §name: String

    The name of the calling convention.

    +

    Trait Implementations§

    source§

    impl Clone for CallingConvention

    source§

    fn clone(&self) -> CallingConvention

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CallingConvention

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for CallingConvention

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for CallingConvention

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for CallingConvention

    source§

    fn eq(&self, other: &CallingConvention) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for CallingConvention

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for CallingConvention

    source§

    impl StructuralEq for CallingConvention

    source§

    impl StructuralPartialEq for CallingConvention

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Def.html b/doc/html/cwe_checker_lib/pcode/struct.Def.html index dee03c195..2d665422d 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Def.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Def.html @@ -1,28 +1,30 @@ -Def in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Def

    source ·
    pub struct Def {
    -    pub lhs: Option<Variable>,
    +Def in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Def

    source ·
    pub struct Def {
    +    pub lhs: Option<Variable>,
         pub rhs: Expression,
     }
    Expand description

    An assignment instruction, assigning the result of an expression to a varnode.

    -

    Fields§

    §lhs: Option<Variable>

    The target varnode whose value gets overwritten.

    +

    Fields§

    §lhs: Option<Variable>

    The target varnode whose value gets overwritten.

    §rhs: Expression

    The expression that determines the value to be written.

    -

    Implementations§

    source§

    impl Def

    source

    pub fn into_ir_def(self, generic_pointer_size: ByteSize) -> IrDef

    Convert a P-Code instruction to the internally used IR.

    -

    Trait Implementations§

    source§

    impl Clone for Def

    source§

    fn clone(&self) -> Def

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Def

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Def

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Def

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Def> for Def

    source§

    fn eq(&self, other: &Def) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Def

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Def

    source§

    impl StructuralEq for Def

    source§

    impl StructuralPartialEq for Def

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Def

    §

    impl Send for Def

    §

    impl Sync for Def

    §

    impl Unpin for Def

    §

    impl UnwindSafe for Def

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Implementations§

    source§

    impl Def

    source

    pub fn into_ir_def(self, generic_pointer_size: ByteSize) -> IrDef

    Convert a P-Code instruction to the internally used IR.

    +

    Trait Implementations§

    source§

    impl Clone for Def

    source§

    fn clone(&self) -> Def

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Def

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Def

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Def

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Def

    source§

    fn eq(&self, other: &Def) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Def

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Def

    source§

    impl StructuralEq for Def

    source§

    impl StructuralPartialEq for Def

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Def

    §

    impl Send for Def

    §

    impl Sync for Def

    §

    impl Unpin for Def

    §

    impl UnwindSafe for Def

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Expression.html b/doc/html/cwe_checker_lib/pcode/struct.Expression.html index 63c1ffa96..4166e80cd 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Expression.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Expression.html @@ -1,19 +1,19 @@ -Expression in cwe_checker_lib::pcode - Rust
    pub struct Expression {
    +Expression in cwe_checker_lib::pcode - Rust
    pub struct Expression {
         pub mnemonic: ExpressionType,
    -    pub input0: Option<Variable>,
    -    pub input1: Option<Variable>,
    -    pub input2: Option<Variable>,
    +    pub input0: Option<Variable>,
    +    pub input1: Option<Variable>,
    +    pub input2: Option<Variable>,
     }
    Expand description

    A P-Code expression.

    P-Code itself does not divide instructions into expressions, definitions and jumps, like in the internally used IR. This type roughly corresponds to P-Code instructions without side effects (except for assigning to the output register).

    Fields§

    §mnemonic: ExpressionType

    The instruction mnemonic

    -
    §input0: Option<Variable>

    The first input varnode (if it exists).

    -
    §input1: Option<Variable>

    The second input varnode (if it exists).

    -
    §input2: Option<Variable>

    The third input varnode (if it exists).

    -

    Trait Implementations§

    source§

    impl Clone for Expression

    source§

    fn clone(&self) -> Expression

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Expression

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Expression

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<Expression> for IrExpression

    source§

    fn from(expr: Expression) -> IrExpression

    Translates a P-Code expression into an expression of the internally used IR if possible. +

    §input0: Option<Variable>

    The first input varnode (if it exists).

    +
    §input1: Option<Variable>

    The second input varnode (if it exists).

    +
    §input2: Option<Variable>

    The third input varnode (if it exists).

    +

    Trait Implementations§

    source§

    impl Clone for Expression

    source§

    fn clone(&self) -> Expression

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Expression

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Expression

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<Expression> for Expression

    source§

    fn from(expr: Expression) -> IrExpression

    Translates a P-Code expression into an expression of the internally used IR if possible. Panics if translation is not possible.

    Cases where translation is not possible:

      @@ -22,23 +22,25 @@ These include SUBPIECE, INT_ZEXT, INT_SEXT, INT2FLOAT, FLOAT2FLOAT, TRUNC and POPCOUNT. Translation of these expressions is handled explicitly during translation of Def.
    -
    source§

    impl Hash for Expression

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Expression> for Expression

    source§

    fn eq(&self, other: &Expression) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Expression

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Expression

    source§

    impl StructuralEq for Expression

    source§

    impl StructuralPartialEq for Expression

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for Expression

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Expression

    source§

    fn eq(&self, other: &Expression) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Expression

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Expression

    source§

    impl StructuralEq for Expression

    source§

    impl StructuralPartialEq for Expression

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.ExternSymbol.html b/doc/html/cwe_checker_lib/pcode/struct.ExternSymbol.html index eeb52d395..3862d1cf5 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.ExternSymbol.html +++ b/doc/html/cwe_checker_lib/pcode/struct.ExternSymbol.html @@ -1,38 +1,40 @@ -ExternSymbol in cwe_checker_lib::pcode - Rust
    pub struct ExternSymbol {
    +ExternSymbol in cwe_checker_lib::pcode - Rust
    pub struct ExternSymbol {
         pub tid: Tid,
    -    pub addresses: Vec<String>,
    -    pub name: String,
    -    pub calling_convention: Option<String>,
    -    pub arguments: Vec<Arg>,
    -    pub no_return: bool,
    -    pub has_var_args: bool,
    +    pub addresses: Vec<String>,
    +    pub name: String,
    +    pub calling_convention: Option<String>,
    +    pub arguments: Vec<Arg>,
    +    pub no_return: bool,
    +    pub has_var_args: bool,
     }
    Expand description

    An extern symbol, i.e. a function not contained in the binary but loaded from a shared library.

    Fields§

    §tid: Tid

    The term identifier of the extern symbol.

    -
    §addresses: Vec<String>

    The addresses to call the extern symbol. +

    §addresses: Vec<String>

    The addresses to call the extern symbol. May be more than one, since we also identify thunk functions calling the extern symbol with the symbol itself.

    -
    §name: String

    The name of the extern symbol.

    -
    §calling_convention: Option<String>

    The calling convention used (as reported by Ghidra, i.e. this may not be correct).

    -
    §arguments: Vec<Arg>

    The input and output arguments of the function.

    -
    §no_return: bool

    If the function is assumed to never return to the caller, this flag is set to true.

    -
    §has_var_args: bool

    If the function has a variable number of parameters, this flag is set to true.

    -

    Trait Implementations§

    source§

    impl Clone for ExternSymbol

    source§

    fn clone(&self) -> ExternSymbol

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ExternSymbol

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ExternSymbol

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ExternSymbol

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<ExternSymbol> for ExternSymbol

    source§

    fn eq(&self, other: &ExternSymbol) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ExternSymbol

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for ExternSymbol

    source§

    impl StructuralEq for ExternSymbol

    source§

    impl StructuralPartialEq for ExternSymbol

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    §name: String

    The name of the extern symbol.

    +
    §calling_convention: Option<String>

    The calling convention used (as reported by Ghidra, i.e. this may not be correct).

    +
    §arguments: Vec<Arg>

    The input and output arguments of the function.

    +
    §no_return: bool

    If the function is assumed to never return to the caller, this flag is set to true.

    +
    §has_var_args: bool

    If the function has a variable number of parameters, this flag is set to true.

    +

    Trait Implementations§

    source§

    impl Clone for ExternSymbol

    source§

    fn clone(&self) -> ExternSymbol

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ExternSymbol

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for ExternSymbol

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for ExternSymbol

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for ExternSymbol

    source§

    fn eq(&self, other: &ExternSymbol) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ExternSymbol

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for ExternSymbol

    source§

    impl StructuralEq for ExternSymbol

    source§

    impl StructuralPartialEq for ExternSymbol

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Jmp.html b/doc/html/cwe_checker_lib/pcode/struct.Jmp.html index 4b3b73b45..5cadc9440 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Jmp.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Jmp.html @@ -1,35 +1,37 @@ -Jmp in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Jmp

    source ·
    pub struct Jmp {
    +Jmp in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Jmp

    source ·
    pub struct Jmp {
         pub mnemonic: JmpType,
    -    pub goto: Option<Label>,
    -    pub call: Option<Call>,
    -    pub condition: Option<Variable>,
    -    pub target_hints: Option<Vec<String>>,
    +    pub goto: Option<Label>,
    +    pub call: Option<Call>,
    +    pub condition: Option<Variable>,
    +    pub target_hints: Option<Vec<String>>,
     }
    Expand description

    A jump instruction.

    Fields§

    §mnemonic: JmpType

    The mnemonic of the jump.

    -
    §goto: Option<Label>

    The target label for intraprocedural jumps.

    -
    §call: Option<Call>

    The call struct for interprocedural jumps.

    -
    §condition: Option<Variable>

    If the jump is a conditional jump, +

    §goto: Option<Label>

    The target label for intraprocedural jumps.

    +
    §call: Option<Call>

    The call struct for interprocedural jumps.

    +
    §condition: Option<Variable>

    If the jump is a conditional jump, the varnode that has to evaluate to true for the jump to be taken.

    -
    §target_hints: Option<Vec<String>>

    A list of potential jump targets for indirect jumps.

    -

    Trait Implementations§

    source§

    impl Clone for Jmp

    source§

    fn clone(&self) -> Jmp

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Jmp

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Jmp

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<Jmp> for IrJmp

    source§

    fn from(jmp: Jmp) -> IrJmp

    Convert a P-Code jump to the internally used IR.

    -
    source§

    impl Hash for Jmp

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Jmp> for Jmp

    source§

    fn eq(&self, other: &Jmp) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Jmp

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Jmp

    source§

    impl StructuralEq for Jmp

    source§

    impl StructuralPartialEq for Jmp

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Jmp

    §

    impl Send for Jmp

    §

    impl Sync for Jmp

    §

    impl Unpin for Jmp

    §

    impl UnwindSafe for Jmp

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    §target_hints: Option<Vec<String>>

    A list of potential jump targets for indirect jumps.

    +

    Trait Implementations§

    source§

    impl Clone for Jmp

    source§

    fn clone(&self) -> Jmp

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Jmp

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Jmp

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<Jmp> for Jmp

    source§

    fn from(jmp: Jmp) -> IrJmp

    Convert a P-Code jump to the internally used IR.

    +
    source§

    impl Hash for Jmp

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Jmp

    source§

    fn eq(&self, other: &Jmp) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Jmp

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Jmp

    source§

    impl StructuralEq for Jmp

    source§

    impl StructuralPartialEq for Jmp

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Jmp

    §

    impl Send for Jmp

    §

    impl Sync for Jmp

    §

    impl Unpin for Jmp

    §

    impl UnwindSafe for Jmp

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Program.html b/doc/html/cwe_checker_lib/pcode/struct.Program.html index 6bce0580d..3a40f87ea 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Program.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Program.html @@ -1,45 +1,47 @@ -Program in cwe_checker_lib::pcode - Rust
    pub struct Program {
    -    pub subs: Vec<Term<Sub>>,
    -    pub extern_symbols: Vec<ExternSymbol>,
    -    pub entry_points: Vec<Tid>,
    -    pub image_base: String,
    +Program in cwe_checker_lib::pcode - Rust
    pub struct Program {
    +    pub subs: Vec<Term<Sub>>,
    +    pub extern_symbols: Vec<ExternSymbol>,
    +    pub entry_points: Vec<Tid>,
    +    pub image_base: String,
     }
    Expand description

    The program struct containing all information about the binary except for CPU-architecture-related information.

    -

    Fields§

    §subs: Vec<Term<Sub>>

    The subfunctions contained in the binary.

    -
    §extern_symbols: Vec<ExternSymbol>

    The extern symbols referenced by the binary.

    -
    §entry_points: Vec<Tid>

    The term identifiers of entry points into the binary.

    -
    §image_base: String

    The base address of the memory image of the binary in RAM as reported by Ghidra.

    +

    Fields§

    §subs: Vec<Term<Sub>>

    The subfunctions contained in the binary.

    +
    §extern_symbols: Vec<ExternSymbol>

    The extern symbols referenced by the binary.

    +
    §entry_points: Vec<Tid>

    The term identifiers of entry points into the binary.

    +
    §image_base: String

    The base address of the memory image of the binary in RAM as reported by Ghidra.

    Note that Ghidra may add an offset to the image base address as reported by the binary itself.

    -

    Implementations§

    source§

    impl Program

    Implementations§

    source§

    impl Program

    source

    pub fn into_ir_program( self, - binary_base_address: u64, + binary_base_address: u64, conventions: &[CallingConvention], stack_pointer: &Variable, - cpu_arch: &str + cpu_arch: &str ) -> IrProgram

    Convert a program parsed from Ghidra to the internally used IR.

    The binary_base_address denotes the base address of the memory image of the binary according to the program headers of the binary. It is needed to detect whether Ghidra added a constant offset to all addresses of the memory address. E.g. if the binary_base_address is 0 for shared object files, Ghidra adds an offset so that the memory image does not actually start at address 0.

    -

    Trait Implementations§

    source§

    impl Clone for Program

    source§

    fn clone(&self) -> Program

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Program

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Program

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Program

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Program> for Program

    source§

    fn eq(&self, other: &Program) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Program

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Program

    source§

    impl StructuralEq for Program

    source§

    impl StructuralPartialEq for Program

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Program

    source§

    fn clone(&self) -> Program

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Program

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Program

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Program

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Program

    source§

    fn eq(&self, other: &Program) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Program

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Program

    source§

    impl StructuralEq for Program

    source§

    impl StructuralPartialEq for Program

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Project.html b/doc/html/cwe_checker_lib/pcode/struct.Project.html index bdceb2a89..333987303 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Project.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Project.html @@ -1,21 +1,21 @@ -Project in cwe_checker_lib::pcode - Rust
    pub struct Project {
    +Project in cwe_checker_lib::pcode - Rust
    pub struct Project {
         pub program: Term<Program>,
    -    pub cpu_architecture: String,
    +    pub cpu_architecture: String,
         pub stack_pointer_register: Variable,
    -    pub register_properties: Vec<RegisterProperties>,
    -    pub register_calling_convention: Vec<CallingConvention>,
    +    pub register_properties: Vec<RegisterProperties>,
    +    pub register_calling_convention: Vec<CallingConvention>,
         pub datatype_properties: DatatypeProperties,
     }
    Expand description

    The project struct describing all known information about the binary.

    Fields§

    §program: Term<Program>

    The program struct containing all binary-specific information.

    -
    §cpu_architecture: String

    The CPU-architecture that the binary uses.

    +
    §cpu_architecture: String

    The CPU-architecture that the binary uses.

    §stack_pointer_register: Variable

    The stack pointer register of the CPU-architecture.

    -
    §register_properties: Vec<RegisterProperties>

    Information about all CPU-architecture-specific registers.

    -
    §register_calling_convention: Vec<CallingConvention>

    Information about known calling conventions for the given CPU architecture.

    +
    §register_properties: Vec<RegisterProperties>

    Information about all CPU-architecture-specific registers.

    +
    §register_calling_convention: Vec<CallingConvention>

    Information about known calling conventions for the given CPU architecture.

    §datatype_properties: DatatypeProperties

    Contains the properties of C data types. (e.g. size)

    -

    Implementations§

    source§

    impl Project

    source

    pub fn into_ir_project(self, binary_base_address: u64) -> IrProject

    Convert a project parsed from Ghidra to the internally used IR.

    +

    Implementations§

    source§

    impl Project

    source

    pub fn into_ir_project(self, binary_base_address: u64) -> IrProject

    Convert a project parsed from Ghidra to the internally used IR.

    The binary_base_address denotes the base address of the memory image of the binary according to the program headers of the binary.

    -
    source§

    impl Project

    source

    pub fn normalize(&mut self) -> Vec<LogMessage>

    This function runs normalization passes to bring the project into a form +

    source§

    impl Project

    source

    pub fn normalize(&mut self) -> Vec<LogMessage>

    This function runs normalization passes to bring the project into a form that can be translated into the internally used intermediate representation.

    Currently implemented normalization passes:

    Insert explicit LOAD instructions for implicit memory loads in P-Code.
    @@ -27,24 +27,26 @@
    -

    Trait Implementations§

    source§

    impl Clone for Project

    source§

    fn clone(&self) -> Project

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Project

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Project

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Project

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Project> for Project

    source§

    fn eq(&self, other: &Project) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Project

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Project

    source§

    impl StructuralEq for Project

    source§

    impl StructuralPartialEq for Project

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for Project

    source§

    fn clone(&self) -> Project

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Project

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Project

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Project

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Project

    source§

    fn eq(&self, other: &Project) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Project

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Project

    source§

    impl StructuralEq for Project

    source§

    impl StructuralPartialEq for Project

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.RegisterProperties.html b/doc/html/cwe_checker_lib/pcode/struct.RegisterProperties.html index f903a5ccc..4f6053a62 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.RegisterProperties.html +++ b/doc/html/cwe_checker_lib/pcode/struct.RegisterProperties.html @@ -1,32 +1,34 @@ -RegisterProperties in cwe_checker_lib::pcode - Rust
    pub struct RegisterProperties {
    -    pub register: String,
    -    pub base_register: String,
    +RegisterProperties in cwe_checker_lib::pcode - Rust
    pub struct RegisterProperties {
    +    pub register: String,
    +    pub base_register: String,
         pub lsb: ByteSize,
         pub size: ByteSize,
     }
    Expand description

    Properties of a register with respect to its base register.

    -

    Fields§

    §register: String

    The register name.

    -
    §base_register: String

    The name of the base register.

    +

    Fields§

    §register: String

    The register name.

    +
    §base_register: String

    The name of the base register.

    §lsb: ByteSize

    The least significant byte of the register when viewed as a sub-register of the base register.

    §size: ByteSize

    The size (in bytes) of the register

    -

    Trait Implementations§

    source§

    impl Clone for RegisterProperties

    source§

    fn clone(&self) -> RegisterProperties

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RegisterProperties

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for RegisterProperties

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<&RegisterProperties> for IrVariable

    source§

    fn from(register_prop: &RegisterProperties) -> IrVariable

    Create a variable representing the same register as the given register_prop.

    -
    source§

    impl Hash for RegisterProperties

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<RegisterProperties> for RegisterProperties

    source§

    fn eq(&self, other: &RegisterProperties) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for RegisterProperties

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for RegisterProperties

    source§

    impl StructuralEq for RegisterProperties

    source§

    impl StructuralPartialEq for RegisterProperties

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for RegisterProperties

    source§

    fn clone(&self) -> RegisterProperties

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RegisterProperties

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for RegisterProperties

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<&RegisterProperties> for Variable

    source§

    fn from(register_prop: &RegisterProperties) -> IrVariable

    Create a variable representing the same register as the given register_prop.

    +
    source§

    impl Hash for RegisterProperties

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for RegisterProperties

    source§

    fn eq(&self, other: &RegisterProperties) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for RegisterProperties

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for RegisterProperties

    source§

    impl StructuralEq for RegisterProperties

    source§

    impl StructuralPartialEq for RegisterProperties

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Sub.html b/doc/html/cwe_checker_lib/pcode/struct.Sub.html index d658d2c10..f342ed5ab 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Sub.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Sub.html @@ -1,30 +1,32 @@ -Sub in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Sub

    source ·
    pub struct Sub {
    -    pub name: String,
    -    pub blocks: Vec<Term<Blk>>,
    -    pub calling_convention: Option<String>,
    +Sub in cwe_checker_lib::pcode - Rust

    Struct cwe_checker_lib::pcode::Sub

    source ·
    pub struct Sub {
    +    pub name: String,
    +    pub blocks: Vec<Term<Blk>>,
    +    pub calling_convention: Option<String>,
     }
    Expand description

    A subfunction.

    -

    Fields§

    §name: String

    The name of the function.

    -
    §blocks: Vec<Term<Blk>>

    The basic blocks of the function.

    +

    Fields§

    §name: String

    The name of the function.

    +
    §blocks: Vec<Term<Blk>>

    The basic blocks of the function.

    Note that the first block of the array may not be the function entry point!

    -
    §calling_convention: Option<String>

    The calling convention used (as reported by Ghidra, i.e. this may not be correct).

    -

    Trait Implementations§

    source§

    impl Clone for Sub

    source§

    fn clone(&self) -> Sub

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Sub

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Sub

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Sub

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Sub> for Sub

    source§

    fn eq(&self, other: &Sub) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Sub

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Sub

    source§

    impl StructuralEq for Sub

    source§

    impl StructuralPartialEq for Sub

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Sub

    §

    impl Send for Sub

    §

    impl Sync for Sub

    §

    impl Unpin for Sub

    §

    impl UnwindSafe for Sub

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    §calling_convention: Option<String>

    The calling convention used (as reported by Ghidra, i.e. this may not be correct).

    +

    Trait Implementations§

    source§

    impl Clone for Sub

    source§

    fn clone(&self) -> Sub

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Sub

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Sub

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for Sub

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Sub

    source§

    fn eq(&self, other: &Sub) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Sub

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Sub

    source§

    impl StructuralEq for Sub

    source§

    impl StructuralPartialEq for Sub

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Sub

    §

    impl Send for Sub

    §

    impl Sync for Sub

    §

    impl Unpin for Sub

    §

    impl UnwindSafe for Sub

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pcode/struct.Variable.html b/doc/html/cwe_checker_lib/pcode/struct.Variable.html index 42fcd8c22..07ffb06ff 100644 --- a/doc/html/cwe_checker_lib/pcode/struct.Variable.html +++ b/doc/html/cwe_checker_lib/pcode/struct.Variable.html @@ -1,51 +1,53 @@ -Variable in cwe_checker_lib::pcode - Rust
    pub struct Variable {
    -    pub name: Option<String>,
    -    pub value: Option<String>,
    -    pub address: Option<String>,
    +Variable in cwe_checker_lib::pcode - Rust
    pub struct Variable {
    +    pub name: Option<String>,
    +    pub value: Option<String>,
    +    pub address: Option<String>,
         pub size: ByteSize,
    -    pub is_virtual: bool,
    +    pub is_virtual: bool,
     }
    Expand description

    A variable representing a varnode in Ghidra P-Code

    -

    Fields§

    §name: Option<String>

    The name of the register if the varnode represents a register

    -
    §value: Option<String>

    The value of the varnode if it represents a constant

    -
    §address: Option<String>

    If the varnode represents an implicit LOAD from memory, +

    Fields§

    §name: Option<String>

    The name of the register if the varnode represents a register

    +
    §value: Option<String>

    The value of the varnode if it represents a constant

    +
    §address: Option<String>

    If the varnode represents an implicit LOAD from memory, the (necessarily constant) address of the LOAD.

    §size: ByteSize

    The size (in bytes) of the varnode

    -
    §is_virtual: bool

    A flag set to true for virtual/temporary registers.

    -

    Implementations§

    source§

    impl Variable

    source

    pub fn parse_const_to_bitvector(&self) -> Bitvector

    Parses a variable representing a concrete value to a bitvector containing the value.

    -
    source

    pub fn parse_address_to_bitvector( +

    §is_virtual: bool

    A flag set to true for virtual/temporary registers.

    +

    Implementations§

    source§

    impl Variable

    source

    pub fn parse_const_to_bitvector(&self) -> Bitvector

    Parses a variable representing a concrete value to a bitvector containing the value.

    +
    source

    pub fn parse_address_to_bitvector( &self, generic_pointer_size: ByteSize ) -> Bitvector

    Parses a variable representing an address to a pointer-sized bitvector containing the address.

    -
    source

    pub fn new_virtual(name: impl Into<String>, size: ByteSize) -> Variable

    Generate a virtual variable with the given name and size.

    -
    source

    pub fn new_const(value_string: impl Into<String>, size: ByteSize) -> Variable

    Generate a variable representing a constant

    -
    source

    pub fn to_load_def( +

    source

    pub fn new_virtual(name: impl Into<String>, size: ByteSize) -> Variable

    Generate a virtual variable with the given name and size.

    +
    source

    pub fn new_const(value_string: impl Into<String>, size: ByteSize) -> Variable

    Generate a variable representing a constant

    +
    source

    pub fn to_load_def( &self, - target_register_name: impl Into<String>, + target_register_name: impl Into<String>, generic_pointer_size: ByteSize ) -> Def

    Create a LOAD instruction out of a variable representing a load from a constant address into a virtual register.

    -
    source

    pub fn parse_to_bytesize(self) -> ByteSize

    Translates a variable into the byte size that it represents. Panics on error.

    -

    Trait Implementations§

    source§

    impl Clone for Variable

    source§

    fn clone(&self) -> Variable

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Variable

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Variable

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<Variable> for IrExpression

    source§

    fn from(pcode_var: Variable) -> IrExpression

    Translate a P-Code variable into a Varor Const expression of the internally used IR. +

    source

    pub fn parse_to_bytesize(self) -> ByteSize

    Translates a variable into the byte size that it represents. Panics on error.

    +

    Trait Implementations§

    source§

    impl Clone for Variable

    source§

    fn clone(&self) -> Variable

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Variable

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Variable

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<Variable> for Expression

    source§

    fn from(pcode_var: Variable) -> IrExpression

    Translate a P-Code variable into a Varor Const expression of the internally used IR. Panics if the translation fails.

    -
    source§

    impl From<Variable> for IrVariable

    source§

    fn from(pcode_var: Variable) -> IrVariable

    Translate a P-Code variable into a register variable of the internally used IR. +

    source§

    impl From<Variable> for Variable

    source§

    fn from(pcode_var: Variable) -> IrVariable

    Translate a P-Code variable into a register variable of the internally used IR. Panic if the variable does not represent a register.

    -
    source§

    impl Hash for Variable

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Variable> for Variable

    source§

    fn eq(&self, other: &Variable) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Variable

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Variable

    source§

    impl StructuralEq for Variable

    source§

    impl StructuralPartialEq for Variable

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl Hash for Variable

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for Variable

    source§

    fn eq(&self, other: &Variable) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Variable

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Variable

    source§

    impl StructuralEq for Variable

    source§

    impl StructuralPartialEq for Variable

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pipeline/fn.disassemble_binary.html b/doc/html/cwe_checker_lib/pipeline/fn.disassemble_binary.html index dc2721831..8ef8155c9 100644 --- a/doc/html/cwe_checker_lib/pipeline/fn.disassemble_binary.html +++ b/doc/html/cwe_checker_lib/pipeline/fn.disassemble_binary.html @@ -1,8 +1,8 @@ -disassemble_binary in cwe_checker_lib::pipeline - Rust
    pub fn disassemble_binary(
    -    binary_file_path: &Path,
    -    bare_metal_config_opt: Option<BareMetalConfig>,
    -    verbose_flag: bool
    -) -> Result<(Vec<u8>, Project, Vec<LogMessage>), Error>
    Expand description

    Disassemble the given binary and parse it to a Project struct.

    +disassemble_binary in cwe_checker_lib::pipeline - Rust
    pub fn disassemble_binary(
    +    binary_file_path: &Path,
    +    bare_metal_config_opt: Option<BareMetalConfig>,
    +    verbose_flag: bool
    +) -> Result<(Vec<u8>, Project, Vec<LogMessage>), Error>
    Expand description

    Disassemble the given binary and parse it to a Project struct.

    If successful, returns the binary file (as a byte vector), the parsed project struct, and a vector of log messages generated during the process.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pipeline/index.html b/doc/html/cwe_checker_lib/pipeline/index.html index 7205da5f2..bb0cc5121 100644 --- a/doc/html/cwe_checker_lib/pipeline/index.html +++ b/doc/html/cwe_checker_lib/pipeline/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::pipeline - Rust
    Expand description

    This module contains functions and structs helpful for building a complete analysis pipeline +cwe_checker_lib::pipeline - Rust

    Expand description

    This module contains functions and structs helpful for building a complete analysis pipeline starting from the binary file path.

    Structs

    • A struct containing pointers to all known analysis results that may be needed as input for other analyses and CWE checks.

    Functions

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/pipeline/struct.AnalysisResults.html b/doc/html/cwe_checker_lib/pipeline/struct.AnalysisResults.html index bb4ac9f50..b25263409 100644 --- a/doc/html/cwe_checker_lib/pipeline/struct.AnalysisResults.html +++ b/doc/html/cwe_checker_lib/pipeline/struct.AnalysisResults.html @@ -1,61 +1,61 @@ -AnalysisResults in cwe_checker_lib::pipeline - Rust
    pub struct AnalysisResults<'a> {
    -    pub binary: &'a [u8],
    +AnalysisResults in cwe_checker_lib::pipeline - Rust
    pub struct AnalysisResults<'a> {
    +    pub binary: &'a [u8],
         pub control_flow_graph: &'a Graph<'a>,
         pub project: &'a Project,
    -    pub function_signatures: Option<&'a BTreeMap<Tid, FunctionSignature>>,
    -    pub pointer_inference: Option<&'a PointerInference<'a>>,
    -    pub string_abstraction: Option<&'a StringAbstraction<'a, BricksDomain>>,
    +    pub function_signatures: Option<&'a BTreeMap<Tid, FunctionSignature>>,
    +    pub pointer_inference: Option<&'a PointerInference<'a>>,
    +    pub string_abstraction: Option<&'a StringAbstraction<'a, BricksDomain>>,
     }
    Expand description

    A struct containing pointers to all known analysis results that may be needed as input for other analyses and CWE checks.

    -

    Fields§

    §binary: &'a [u8]

    The content of the binary file

    +

    Fields§

    §binary: &'a [u8]

    The content of the binary file

    §control_flow_graph: &'a Graph<'a>

    The computed control flow graph of the program.

    §project: &'a Project

    A pointer to the project struct

    -
    §function_signatures: Option<&'a BTreeMap<Tid, FunctionSignature>>

    The results of the function signature analysis if already computed.

    -
    §pointer_inference: Option<&'a PointerInference<'a>>

    The result of the pointer inference analysis if already computed.

    -
    §string_abstraction: Option<&'a StringAbstraction<'a, BricksDomain>>

    The result of the string abstraction if already computed.

    -

    Implementations§

    source§

    impl<'a> AnalysisResults<'a>

    source

    pub fn new( - binary: &'a [u8], +

    §function_signatures: Option<&'a BTreeMap<Tid, FunctionSignature>>

    The results of the function signature analysis if already computed.

    +
    §pointer_inference: Option<&'a PointerInference<'a>>

    The result of the pointer inference analysis if already computed.

    +
    §string_abstraction: Option<&'a StringAbstraction<'a, BricksDomain>>

    The result of the string abstraction if already computed.

    +

    Implementations§

    source§

    impl<'a> AnalysisResults<'a>

    source

    pub fn new( + binary: &'a [u8], control_flow_graph: &'a Graph<'a>, project: &'a Project ) -> AnalysisResults<'a>

    Create a new AnalysisResults struct with only the project itself known.

    -
    source

    pub fn compute_function_signatures( +

    source

    pub fn compute_function_signatures( &self -) -> (BTreeMap<Tid, FunctionSignature>, Vec<LogMessage>)

    Compute the function signatures for internal functions.

    -
    source

    pub fn with_function_signatures( +) -> (BTreeMap<Tid, FunctionSignature>, Vec<LogMessage>)

    Compute the function signatures for internal functions.

    +
    source

    pub fn with_function_signatures( self, - function_signatures: Option<&'a BTreeMap<Tid, FunctionSignature>> + function_signatures: Option<&'a BTreeMap<Tid, FunctionSignature>> ) -> AnalysisResults<'a>

    Create a new AnalysisResults struct containing the given function signature analysis results.

    -
    source

    pub fn compute_pointer_inference( +

    source

    pub fn compute_pointer_inference( &'a self, - config: &Value, - print_stats: bool + config: &Value, + print_stats: bool ) -> PointerInference<'a>

    Compute the pointer inference analysis. The result gets returned, but not saved to the AnalysisResults struct itself.

    -
    source

    pub fn with_pointer_inference<'b: 'a>( +

    source

    pub fn with_pointer_inference<'b: 'a>( self, - pi_results: Option<&'b PointerInference<'a>> + pi_results: Option<&'b PointerInference<'a>> ) -> AnalysisResults<'b>

    Create a new AnalysisResults struct containing the given pointer inference analysis results.

    -
    source

    pub fn compute_string_abstraction( +

    source

    pub fn compute_string_abstraction( &'a self, - config: &Value, - pi_results: Option<&'a PointerInference<'a>> + config: &Value, + pi_results: Option<&'a PointerInference<'a>> ) -> StringAbstraction<'_, BricksDomain>

    Compute the string abstraction. As the string abstraction depends on the pointer inference, the pointer inference is also computed and put into the AnalysisResults struct. The result gets returned, but not saved to the AnalysisResults struct itself.

    -
    source

    pub fn with_string_abstraction<'b: 'a>( +

    source

    pub fn with_string_abstraction<'b: 'a>( self, - string_abstraction: Option<&'b StringAbstraction<'a, BricksDomain>> + string_abstraction: Option<&'b StringAbstraction<'a, BricksDomain>> ) -> AnalysisResults<'b>

    Create a new AnalysisResults struct containing the given string abstraction results.

    -

    Trait Implementations§

    source§

    impl<'a> Clone for AnalysisResults<'a>

    source§

    fn clone(&self) -> AnalysisResults<'a>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a> Copy for AnalysisResults<'a>

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for AnalysisResults<'a>

    §

    impl<'a> Send for AnalysisResults<'a>

    §

    impl<'a> Sync for AnalysisResults<'a>

    §

    impl<'a> Unpin for AnalysisResults<'a>

    §

    impl<'a> UnwindSafe for AnalysisResults<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl<'a> Clone for AnalysisResults<'a>

    source§

    fn clone(&self) -> AnalysisResults<'a>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a> Copy for AnalysisResults<'a>

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for AnalysisResults<'a>

    §

    impl<'a> Send for AnalysisResults<'a>

    §

    impl<'a> Sync for AnalysisResults<'a>

    §

    impl<'a> Unpin for AnalysisResults<'a>

    §

    impl<'a> UnwindSafe for AnalysisResults<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/struct.CweModule.html b/doc/html/cwe_checker_lib/struct.CweModule.html index 6cbc240b7..14905dcf7 100644 --- a/doc/html/cwe_checker_lib/struct.CweModule.html +++ b/doc/html/cwe_checker_lib/struct.CweModule.html @@ -1,23 +1,23 @@ -CweModule in cwe_checker_lib - Rust
    pub struct CweModule {
    -    pub name: &'static str,
    -    pub version: &'static str,
    +CweModule in cwe_checker_lib - Rust
    pub struct CweModule {
    +    pub name: &'static str,
    +    pub version: &'static str,
         pub run: CweModuleFn,
     }
    Expand description

    A structure containing general information about a CWE analysis module, including the function to be called to run the analysis.

    -

    Fields§

    §name: &'static str

    The name of the CWE check.

    -
    §version: &'static str

    The version number of the CWE check. +

    Fields§

    §name: &'static str

    The name of the CWE check.

    +
    §version: &'static str

    The version number of the CWE check. Should be incremented whenever significant changes are made to the check.

    §run: CweModuleFn

    The function that executes the check and returns CWE warnings found during the check.

    -

    Trait Implementations§

    source§

    impl Display for CweModule

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Print the module name and its version number.

    -

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Display for CweModule

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Print the module name and its version number.

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/type.CweModuleFn.html b/doc/html/cwe_checker_lib/type.CweModuleFn.html index e382c5369..6b02fc4cc 100644 --- a/doc/html/cwe_checker_lib/type.CweModuleFn.html +++ b/doc/html/cwe_checker_lib/type.CweModuleFn.html @@ -1,2 +1,2 @@ -CweModuleFn in cwe_checker_lib - Rust

    Type Definition cwe_checker_lib::CweModuleFn

    source ·
    pub type CweModuleFn = fn(_: &AnalysisResults<'_>, _: &Value) -> (Vec<LogMessage>, Vec<CweWarning>);
    Expand description

    The generic function signature for the main function of a CWE module

    +CweModuleFn in cwe_checker_lib - Rust

    Type Alias cwe_checker_lib::CweModuleFn

    source ·
    pub type CweModuleFn = fn(_: &AnalysisResults<'_>, _: &Value) -> (Vec<LogMessage>, Vec<CweWarning>);
    Expand description

    The generic function signature for the main function of a CWE module

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/arguments/fn.calculate_parameter_locations.html b/doc/html/cwe_checker_lib/utils/arguments/fn.calculate_parameter_locations.html index 7e95f87fe..cde1a1701 100644 --- a/doc/html/cwe_checker_lib/utils/arguments/fn.calculate_parameter_locations.html +++ b/doc/html/cwe_checker_lib/utils/arguments/fn.calculate_parameter_locations.html @@ -1,7 +1,7 @@ -calculate_parameter_locations in cwe_checker_lib::utils::arguments - Rust
    pub fn calculate_parameter_locations(
    -    variadic_parameters: Vec<(Datatype, ByteSize)>,
    +calculate_parameter_locations in cwe_checker_lib::utils::arguments - Rust
    pub fn calculate_parameter_locations(
    +    variadic_parameters: Vec<(Datatype, ByteSize)>,
         extern_symbol: &ExternSymbol,
         project: &Project
    -) -> Vec<Arg>
    Expand description

    Calculates the register and stack positions of format string parameters. +) -> Vec<Arg>

    Expand description

    Calculates the register and stack positions of format string parameters. The parameters are then returned as an argument vector for later tainting.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/arguments/fn.get_input_format_string.html b/doc/html/cwe_checker_lib/utils/arguments/fn.get_input_format_string.html index 2d0600302..d03958de0 100644 --- a/doc/html/cwe_checker_lib/utils/arguments/fn.get_input_format_string.html +++ b/doc/html/cwe_checker_lib/utils/arguments/fn.get_input_format_string.html @@ -1,7 +1,7 @@ -get_input_format_string in cwe_checker_lib::utils::arguments - Rust
    pub fn get_input_format_string(
    -    pi_state: &PointerInferenceState,
    +get_input_format_string in cwe_checker_lib::utils::arguments - Rust
    pub fn get_input_format_string(
    +    pi_state: &State,
         extern_symbol: &ExternSymbol,
    -    format_string_index: usize,
    +    format_string_index: usize,
         runtime_memory_image: &RuntimeMemoryImage
    -) -> Result<String, Error>
    Expand description

    Parses the input format string for the corresponding string function.

    +) -> Result<String, Error>
    Expand description

    Parses the input format string for the corresponding string function.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/arguments/fn.get_variable_parameters.html b/doc/html/cwe_checker_lib/utils/arguments/fn.get_variable_parameters.html index 517db2d2b..5886f7363 100644 --- a/doc/html/cwe_checker_lib/utils/arguments/fn.get_variable_parameters.html +++ b/doc/html/cwe_checker_lib/utils/arguments/fn.get_variable_parameters.html @@ -1,7 +1,7 @@ -get_variable_parameters in cwe_checker_lib::utils::arguments - Rust
    pub fn get_variable_parameters(
    +get_variable_parameters in cwe_checker_lib::utils::arguments - Rust
    pub fn get_variable_parameters(
         project: &Project,
    -    pi_state: &PointerInferenceState,
    +    pi_state: &State,
         extern_symbol: &ExternSymbol,
    -    format_string_index_map: &HashMap<String, usize>
    -) -> Result<Vec<Arg>, Error>
    Expand description

    Returns an argument vector of detected variable parameters.

    + format_string_index_map: &HashMap<String, usize> +) -> Result<Vec<Arg>, Error>
    Expand description

    Returns an argument vector of detected variable parameters.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_destination_and_return_content.html b/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_destination_and_return_content.html index 09f96fbfd..1d8abb959 100644 --- a/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_destination_and_return_content.html +++ b/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_destination_and_return_content.html @@ -1,7 +1,7 @@ -parse_format_string_destination_and_return_content in cwe_checker_lib::utils::arguments - Rust
    pub fn parse_format_string_destination_and_return_content(
    +parse_format_string_destination_and_return_content in cwe_checker_lib::utils::arguments - Rust
    pub fn parse_format_string_destination_and_return_content(
         address: Bitvector,
         runtime_memory_image: &RuntimeMemoryImage
    -) -> Result<String, Error>
    Expand description

    Parses the destiniation address of the format string. +) -> Result<String, Error>

    Expand description

    Parses the destiniation address of the format string. It checks whether the address points to another pointer in memory. If so, it will use the target address of that pointer read the format string from memory.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_parameters.html b/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_parameters.html index 362ce7187..71e80ab76 100644 --- a/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_parameters.html +++ b/doc/html/cwe_checker_lib/utils/arguments/fn.parse_format_string_parameters.html @@ -1,6 +1,6 @@ -parse_format_string_parameters in cwe_checker_lib::utils::arguments - Rust
    pub fn parse_format_string_parameters(
    -    format_string: &str,
    +parse_format_string_parameters in cwe_checker_lib::utils::arguments - Rust
    pub fn parse_format_string_parameters(
    +    format_string: &str,
         datatype_properties: &DatatypeProperties
    -) -> Result<Vec<(Datatype, ByteSize)>, Error>
    Expand description

    Parses the format string parameters using a regex, determines their data types, +) -> Result<Vec<(Datatype, ByteSize)>, Error>

    Expand description

    Parses the format string parameters using a regex, determines their data types, and calculates their positions (register or memory).

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/arguments/index.html b/doc/html/cwe_checker_lib/utils/arguments/index.html index 11b628dcb..045f09652 100644 --- a/doc/html/cwe_checker_lib/utils/arguments/index.html +++ b/doc/html/cwe_checker_lib/utils/arguments/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::utils::arguments - Rust
    Expand description

    Handles argument detection by parsing format string arguments during a function call. (e.g. sprintf)

    +cwe_checker_lib::utils::arguments - Rust
    Expand description

    Handles argument detection by parsing format string arguments during a function call. (e.g. sprintf)

    Functions

    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/binary/struct.MemorySegment.html b/doc/html/cwe_checker_lib/utils/binary/struct.MemorySegment.html index 2ae583ca9..eba8adf51 100644 --- a/doc/html/cwe_checker_lib/utils/binary/struct.MemorySegment.html +++ b/doc/html/cwe_checker_lib/utils/binary/struct.MemorySegment.html @@ -1,46 +1,48 @@ -MemorySegment in cwe_checker_lib::utils::binary - Rust
    pub struct MemorySegment {
    -    pub bytes: Vec<u8>,
    -    pub base_address: u64,
    -    pub read_flag: bool,
    -    pub write_flag: bool,
    -    pub execute_flag: bool,
    +MemorySegment in cwe_checker_lib::utils::binary - Rust
    pub struct MemorySegment {
    +    pub bytes: Vec<u8>,
    +    pub base_address: u64,
    +    pub read_flag: bool,
    +    pub write_flag: bool,
    +    pub execute_flag: bool,
     }
    Expand description

    A continuous segment in the memory image.

    -

    Fields§

    §bytes: Vec<u8>

    The contents of the segment

    -
    §base_address: u64

    The base address, i.e. the address of the first byte of the segment

    -
    §read_flag: bool

    Is the segment readable

    -
    §write_flag: bool

    Is the segment writeable

    -
    §execute_flag: bool

    Is the segment executable

    -

    Implementations§

    source§

    impl MemorySegment

    source

    pub fn from_elf_segment( - binary: &[u8], +

    Fields§

    §bytes: Vec<u8>

    The contents of the segment

    +
    §base_address: u64

    The base address, i.e. the address of the first byte of the segment

    +
    §read_flag: bool

    Is the segment readable

    +
    §write_flag: bool

    Is the segment writeable

    +
    §execute_flag: bool

    Is the segment executable

    +

    Implementations§

    source§

    impl MemorySegment

    source

    pub fn from_elf_segment( + binary: &[u8], program_header: &ProgramHeader ) -> MemorySegment

    Generate a segment from a program header of an ELF file.

    -
    source

    pub fn from_pe_section( - binary: &[u8], +

    source

    pub fn from_pe_section( + binary: &[u8], section_header: &SectionTable ) -> MemorySegment

    Generate a segment from a section table from a PE file.

    -
    source

    pub fn from_bare_metal_file(binary: &[u8], base_address: u64) -> MemorySegment

    Generate a segment with the given base_address and content given by binary. +

    source

    pub fn from_bare_metal_file(binary: &[u8], base_address: u64) -> MemorySegment

    Generate a segment with the given base_address and content given by binary. The segment is readable, writeable and executable, its size equals the size of binary.

    -
    source

    pub fn new_bare_metal_ram_segment(base_address: u64, size: u64) -> MemorySegment

    Generate a segment with the given base address and size. +

    source

    pub fn new_bare_metal_ram_segment(base_address: u64, size: u64) -> MemorySegment

    Generate a segment with the given base address and size. The segment is readable and writeable, but not executable. The content is set to a vector of zeroes.

    -

    Trait Implementations§

    source§

    impl Clone for MemorySegment

    source§

    fn clone(&self) -> MemorySegment

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MemorySegment

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for MemorySegment

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for MemorySegment

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<MemorySegment> for MemorySegment

    source§

    fn eq(&self, other: &MemorySegment) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for MemorySegment

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for MemorySegment

    source§

    impl StructuralEq for MemorySegment

    source§

    impl StructuralPartialEq for MemorySegment

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for MemorySegment

    source§

    fn clone(&self) -> MemorySegment

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MemorySegment

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for MemorySegment

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for MemorySegment

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq for MemorySegment

    source§

    fn eq(&self, other: &MemorySegment) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for MemorySegment

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for MemorySegment

    source§

    impl StructuralEq for MemorySegment

    source§

    impl StructuralPartialEq for MemorySegment

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/fn.get_binary_base_address.html b/doc/html/cwe_checker_lib/utils/fn.get_binary_base_address.html index 5d2cf46d1..19d92dc97 100644 --- a/doc/html/cwe_checker_lib/utils/fn.get_binary_base_address.html +++ b/doc/html/cwe_checker_lib/utils/fn.get_binary_base_address.html @@ -1,2 +1,2 @@ -get_binary_base_address in cwe_checker_lib::utils - Rust
    pub fn get_binary_base_address(binary: &[u8]) -> Result<u64, Error>
    Expand description

    Get the base address for the image of a binary when loaded into memory.

    +get_binary_base_address in cwe_checker_lib::utils - Rust
    pub fn get_binary_base_address(binary: &[u8]) -> Result<u64, Error>
    Expand description

    Get the base address for the image of a binary when loaded into memory.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/fn.get_ghidra_plugin_path.html b/doc/html/cwe_checker_lib/utils/fn.get_ghidra_plugin_path.html index 3eb414fa5..2662b1385 100644 --- a/doc/html/cwe_checker_lib/utils/fn.get_ghidra_plugin_path.html +++ b/doc/html/cwe_checker_lib/utils/fn.get_ghidra_plugin_path.html @@ -1,2 +1,2 @@ -get_ghidra_plugin_path in cwe_checker_lib::utils - Rust
    pub fn get_ghidra_plugin_path(plugin_name: &str) -> PathBuf
    Expand description

    Get the folder path to a Ghidra plugin bundled with the cwe_checker.

    +get_ghidra_plugin_path in cwe_checker_lib::utils - Rust
    pub fn get_ghidra_plugin_path(plugin_name: &str) -> PathBuf
    Expand description

    Get the folder path to a Ghidra plugin bundled with the cwe_checker.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/fn.read_config_file.html b/doc/html/cwe_checker_lib/utils/fn.read_config_file.html index 01d58c477..98cddc947 100644 --- a/doc/html/cwe_checker_lib/utils/fn.read_config_file.html +++ b/doc/html/cwe_checker_lib/utils/fn.read_config_file.html @@ -1,2 +1,2 @@ -read_config_file in cwe_checker_lib::utils - Rust
    pub fn read_config_file(filename: &str) -> Result<Value, Error>
    Expand description

    Get the contents of a configuration file.

    +read_config_file in cwe_checker_lib::utils - Rust
    pub fn read_config_file(filename: &str) -> Result<Value, Error>
    Expand description

    Get the contents of a configuration file.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/ghidra/fn.get_project_from_ghidra.html b/doc/html/cwe_checker_lib/utils/ghidra/fn.get_project_from_ghidra.html index 9989a4fb7..2d045aeba 100644 --- a/doc/html/cwe_checker_lib/utils/ghidra/fn.get_project_from_ghidra.html +++ b/doc/html/cwe_checker_lib/utils/ghidra/fn.get_project_from_ghidra.html @@ -1,8 +1,8 @@ -get_project_from_ghidra in cwe_checker_lib::utils::ghidra - Rust
    pub fn get_project_from_ghidra(
    -    file_path: &Path,
    -    binary: &[u8],
    -    bare_metal_config_opt: Option<BareMetalConfig>,
    -    verbose_flag: bool
    -) -> Result<(Project, Vec<LogMessage>), Error>
    Expand description

    Execute the p_code_extractor plugin in Ghidra and parse its output into the Project data structure.

    +get_project_from_ghidra in cwe_checker_lib::utils::ghidra - Rust
    pub fn get_project_from_ghidra(
    +    file_path: &Path,
    +    binary: &[u8],
    +    bare_metal_config_opt: Option<BareMetalConfig>,
    +    verbose_flag: bool
    +) -> Result<(Project, Vec<LogMessage>), Error>
    Expand description

    Execute the p_code_extractor plugin in Ghidra and parse its output into the Project data structure.

    Return an error if the creation of the project failed.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/ghidra/index.html b/doc/html/cwe_checker_lib/utils/ghidra/index.html index 2dfecd8ac..6e9d7dec2 100644 --- a/doc/html/cwe_checker_lib/utils/ghidra/index.html +++ b/doc/html/cwe_checker_lib/utils/ghidra/index.html @@ -1,2 +1,2 @@ -cwe_checker_lib::utils::ghidra - Rust
    Expand description

    Utility functions for executing Ghidra and extracting P-Code from the output.

    +cwe_checker_lib::utils::ghidra - Rust
    Expand description

    Utility functions for executing Ghidra and extracting P-Code from the output.

    Functions

    • Execute the p_code_extractor plugin in Ghidra and parse its output into the Project data structure.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/graph_utils/fn.is_sink_call_reachable_from_source_call.html b/doc/html/cwe_checker_lib/utils/graph_utils/fn.is_sink_call_reachable_from_source_call.html index 86fb8e5b3..e26bc6e59 100644 --- a/doc/html/cwe_checker_lib/utils/graph_utils/fn.is_sink_call_reachable_from_source_call.html +++ b/doc/html/cwe_checker_lib/utils/graph_utils/fn.is_sink_call_reachable_from_source_call.html @@ -1,9 +1,9 @@ -is_sink_call_reachable_from_source_call in cwe_checker_lib::utils::graph_utils - Rust
    pub fn is_sink_call_reachable_from_source_call(
    +is_sink_call_reachable_from_source_call in cwe_checker_lib::utils::graph_utils - Rust
    pub fn is_sink_call_reachable_from_source_call(
         graph: &Graph<'_>,
         source_node: NodeIndex,
         source_symbol: &Tid,
         sink_symbol: &Tid
    -) -> Option<Tid>
    Expand description

    Check whether a call to the sink_symbol is reachable from the given source_node +) -> Option<Tid>

    Expand description

    Check whether a call to the sink_symbol is reachable from the given source_node through a path of intraprocedural edges in the control flow graph.

    A simple depth-first-search on the graph is used to find such a path. We do not search past subsequent calls to the source_symbol diff --git a/doc/html/cwe_checker_lib/utils/graph_utils/index.html b/doc/html/cwe_checker_lib/utils/graph_utils/index.html index 7ba8bdf19..7db37deb5 100644 --- a/doc/html/cwe_checker_lib/utils/graph_utils/index.html +++ b/doc/html/cwe_checker_lib/utils/graph_utils/index.html @@ -1,3 +1,3 @@ -cwe_checker_lib::utils::graph_utils - Rust

    Expand description

    Helper functions for common tasks utilizing the control flow graph of the binary.

    +cwe_checker_lib::utils::graph_utils - Rust
    Expand description

    Helper functions for common tasks utilizing the control flow graph of the binary.

    Functions

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/index.html b/doc/html/cwe_checker_lib/utils/index.html index 1aa465af9..110ff745f 100644 --- a/doc/html/cwe_checker_lib/utils/index.html +++ b/doc/html/cwe_checker_lib/utils/index.html @@ -1,3 +1,3 @@ -cwe_checker_lib::utils - Rust

    Module cwe_checker_lib::utils

    source ·
    Expand description

    This module contains various utility modules and helper functions.

    +cwe_checker_lib::utils - Rust

    Module cwe_checker_lib::utils

    source ·
    Expand description

    This module contains various utility modules and helper functions.

    Modules

    • Handles argument detection by parsing format string arguments during a function call. (e.g. sprintf)
    • Utility structs and functions which directly parse the binary file.
    • Utility functions for executing Ghidra and extracting P-Code from the output.
    • Helper functions for common tasks utilizing the control flow graph of the binary.
    • Structs and functions for generating log messages and CWE warnings.
    • Helper functions for common tasks utilizing extern symbols, e.g. searching for calls to a specific extern symbol.

    Functions

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/log/enum.LogLevel.html b/doc/html/cwe_checker_lib/utils/log/enum.LogLevel.html index f16242c13..0386a18ff 100644 --- a/doc/html/cwe_checker_lib/utils/log/enum.LogLevel.html +++ b/doc/html/cwe_checker_lib/utils/log/enum.LogLevel.html @@ -1,4 +1,4 @@ -LogLevel in cwe_checker_lib::utils::log - Rust

    Variants§

    §

    Debug

    Messages intended for debugging.

    §

    Error

    Errors encountered during analysis.

    §

    Info

    Non-error messages intended for the user.

    -

    Trait Implementations§

    source§

    impl Clone for LogLevel

    source§

    fn clone(&self) -> LogLevel

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LogLevel

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LogLevel

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for LogLevel

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for LogLevel

    source§

    fn cmp(&self, other: &LogLevel) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<LogLevel> for LogLevel

    source§

    fn eq(&self, other: &LogLevel) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<LogLevel> for LogLevel

    source§

    fn partial_cmp(&self, other: &LogLevel) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for LogLevel

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for LogLevel

    source§

    impl StructuralEq for LogLevel

    source§

    impl StructuralPartialEq for LogLevel

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for LogLevel

    source§

    fn clone(&self) -> LogLevel

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LogLevel

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LogLevel

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for LogLevel

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for LogLevel

    source§

    fn cmp(&self, other: &LogLevel) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for LogLevel

    source§

    fn eq(&self, other: &LogLevel) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for LogLevel

    source§

    fn partial_cmp(&self, other: &LogLevel) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for LogLevel

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for LogLevel

    source§

    impl StructuralEq for LogLevel

    source§

    impl StructuralPartialEq for LogLevel

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/log/enum.LogThreadMsg.html b/doc/html/cwe_checker_lib/utils/log/enum.LogThreadMsg.html index b2223f581..ef5aef2a4 100644 --- a/doc/html/cwe_checker_lib/utils/log/enum.LogThreadMsg.html +++ b/doc/html/cwe_checker_lib/utils/log/enum.LogThreadMsg.html @@ -1,4 +1,4 @@ -LogThreadMsg in cwe_checker_lib::utils::log - Rust
    pub enum LogThreadMsg {
    +LogThreadMsg in cwe_checker_lib::utils::log - Rust
    pub enum LogThreadMsg {
         Log(LogMessage),
         Cwe(CweWarning),
         Terminate,
    @@ -9,29 +9,33 @@
     
    §

    Terminate

    If the log collector thread receives this signal, it should stop receiving new messages and instead terminate and return the collected messages prior to receiving the termination signal.

    -

    Trait Implementations§

    source§

    impl Clone for LogThreadMsg

    source§

    fn clone(&self) -> LogThreadMsg

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LogThreadMsg

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LogThreadMsg

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<CweWarning> for LogThreadMsg

    source§

    fn from(warning: CweWarning) -> Self

    Converts to this type from the input type.
    source§

    impl From<LogMessage> for LogThreadMsg

    source§

    fn from(msg: LogMessage) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for LogThreadMsg

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for LogThreadMsg

    source§

    fn cmp(&self, other: &LogThreadMsg) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<LogThreadMsg> for LogThreadMsg

    source§

    fn eq(&self, other: &LogThreadMsg) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<LogThreadMsg> for LogThreadMsg

    source§

    fn partial_cmp(&self, other: &LogThreadMsg) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for LogThreadMsg

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for LogThreadMsg

    source§

    impl StructuralEq for LogThreadMsg

    source§

    impl StructuralPartialEq for LogThreadMsg

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for LogThreadMsg

    source§

    fn clone(&self) -> LogThreadMsg

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LogThreadMsg

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LogThreadMsg

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<CweWarning> for LogThreadMsg

    source§

    fn from(warning: CweWarning) -> Self

    Converts to this type from the input type.
    source§

    impl From<LogMessage> for LogThreadMsg

    source§

    fn from(msg: LogMessage) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for LogThreadMsg

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for LogThreadMsg

    source§

    fn cmp(&self, other: &LogThreadMsg) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for LogThreadMsg

    source§

    fn eq(&self, other: &LogThreadMsg) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for LogThreadMsg

    source§

    fn partial_cmp(&self, other: &LogThreadMsg) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for LogThreadMsg

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for LogThreadMsg

    source§

    impl StructuralEq for LogThreadMsg

    source§

    impl StructuralPartialEq for LogThreadMsg

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/log/fn.add_debug_log_statistics.html b/doc/html/cwe_checker_lib/utils/log/fn.add_debug_log_statistics.html index a3d183c6d..80f8ecaac 100644 --- a/doc/html/cwe_checker_lib/utils/log/fn.add_debug_log_statistics.html +++ b/doc/html/cwe_checker_lib/utils/log/fn.add_debug_log_statistics.html @@ -1,4 +1,4 @@ -add_debug_log_statistics in cwe_checker_lib::utils::log - Rust
    pub fn add_debug_log_statistics(all_logs: &mut Vec<LogMessage>)
    Expand description

    For each analysis count the number of debug log messages in all_logs +add_debug_log_statistics in cwe_checker_lib::utils::log - Rust

    pub fn add_debug_log_statistics(all_logs: &mut Vec<LogMessage>)
    Expand description

    For each analysis count the number of debug log messages in all_logs and add a (INFO level) log message with the resulting number to all_logs. Also count and log the number of general debug log messages.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/log/fn.print_all_messages.html b/doc/html/cwe_checker_lib/utils/log/fn.print_all_messages.html index 7cf4a5307..d108fdda7 100644 --- a/doc/html/cwe_checker_lib/utils/log/fn.print_all_messages.html +++ b/doc/html/cwe_checker_lib/utils/log/fn.print_all_messages.html @@ -1,8 +1,8 @@ -print_all_messages in cwe_checker_lib::utils::log - Rust
    pub fn print_all_messages(
    -    logs: Vec<LogMessage>,
    -    cwes: Vec<CweWarning>,
    -    out_path: Option<&str>,
    -    emit_json: bool
    +print_all_messages in cwe_checker_lib::utils::log - Rust
    pub fn print_all_messages(
    +    logs: Vec<LogMessage>,
    +    cwes: Vec<CweWarning>,
    +    out_path: Option<&str>,
    +    emit_json: bool
     )
    Expand description

    Print all provided log- and CWE-messages.

    Log-messages will always be printed to stdout. CWE-warnings will either be printed to stdout or to the file path provided in out_path.

    diff --git a/doc/html/cwe_checker_lib/utils/log/index.html b/doc/html/cwe_checker_lib/utils/log/index.html index deced03d7..38c5a7e3a 100644 --- a/doc/html/cwe_checker_lib/utils/log/index.html +++ b/doc/html/cwe_checker_lib/utils/log/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::utils::log - Rust

    Module cwe_checker_lib::utils::log

    source ·
    Expand description

    Structs and functions for generating log messages and CWE warnings.

    +cwe_checker_lib::utils::log - Rust

    Module cwe_checker_lib::utils::log

    source ·
    Expand description

    Structs and functions for generating log messages and CWE warnings.

    Structs

    Enums

    • The severity/type of a log message.
    • The message types a logging thread can receive. See the LogThread type for more information.

    Functions

    Fields§

    §name: String

    A short name of the CWE check, e.g. CWE190.

    +
    §version: String

    The version number of the check.

    +
    §addresses: Vec<String>

    Addresses in the binary associated with the CWE warning. The first address usually denotes the program point where the CWE warning was generated.

    -
    §tids: Vec<String>

    Term IDs associated to the CWE warning. +

    §tids: Vec<String>

    Term IDs associated to the CWE warning. May be more exact than the addresses, e.g. for Def terms.

    -
    §symbols: Vec<String>

    Symbol names (usually of extern symbols) associated to the CWE warning.

    -
    §other: Vec<Vec<String>>

    Other useful information. Content depends on the check that generated the CWE warning.

    -
    §description: String

    A short description of the warning that is presented to the user. +

    §symbols: Vec<String>

    Symbol names (usually of extern symbols) associated to the CWE warning.

    +
    §other: Vec<Vec<String>>

    Other useful information. Content depends on the check that generated the CWE warning.

    +
    §description: String

    A short description of the warning that is presented to the user. Should contain all essential information necessary to understand the warning, including the address in the binary for which the warning was generated.

    -

    Implementations§

    source§

    impl CweWarning

    source

    pub fn new( - name: impl ToString, - version: impl ToString, - description: impl ToString +

    Implementations§

    source§

    impl CweWarning

    source

    pub fn new( + name: impl ToString, + version: impl ToString, + description: impl ToString ) -> CweWarning

    Creates a new CweWarning by only setting name, version and description

    -
    source

    pub fn addresses(self, addresses: Vec<String>) -> CweWarning

    Sets the address field of the CweWarning

    -
    source

    pub fn tids(self, tids: Vec<String>) -> CweWarning

    Sets the Tids field of the CweWarning

    -
    source

    pub fn symbols(self, symbols: Vec<String>) -> CweWarning

    Sets the symbols field of the CweWarning

    -
    source

    pub fn other(self, other: Vec<Vec<String>>) -> CweWarning

    Sets the other field of the CweWarning

    -

    Trait Implementations§

    source§

    impl Clone for CweWarning

    source§

    fn clone(&self) -> CweWarning

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CweWarning

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for CweWarning

    source§

    fn default() -> CweWarning

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for CweWarning

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for CweWarning

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<CweWarning> for LogThreadMsg

    source§

    fn from(warning: CweWarning) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for CweWarning

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for CweWarning

    source§

    fn cmp(&self, other: &CweWarning) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<CweWarning> for CweWarning

    source§

    fn eq(&self, other: &CweWarning) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<CweWarning> for CweWarning

    source§

    fn partial_cmp(&self, other: &CweWarning) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for CweWarning

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for CweWarning

    source§

    impl StructuralEq for CweWarning

    source§

    impl StructuralPartialEq for CweWarning

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn addresses(self, addresses: Vec<String>) -> CweWarning

    Sets the address field of the CweWarning

    +
    source

    pub fn tids(self, tids: Vec<String>) -> CweWarning

    Sets the Tids field of the CweWarning

    +
    source

    pub fn symbols(self, symbols: Vec<String>) -> CweWarning

    Sets the symbols field of the CweWarning

    +
    source

    pub fn other(self, other: Vec<Vec<String>>) -> CweWarning

    Sets the other field of the CweWarning

    +

    Trait Implementations§

    source§

    impl Clone for CweWarning

    source§

    fn clone(&self) -> CweWarning

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CweWarning

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for CweWarning

    source§

    fn default() -> CweWarning

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for CweWarning

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for CweWarning

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<CweWarning> for LogThreadMsg

    source§

    fn from(warning: CweWarning) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for CweWarning

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for CweWarning

    source§

    fn cmp(&self, other: &CweWarning) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for CweWarning

    source§

    fn eq(&self, other: &CweWarning) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for CweWarning

    source§

    fn partial_cmp(&self, other: &CweWarning) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for CweWarning

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for CweWarning

    source§

    impl StructuralEq for CweWarning

    source§

    impl StructuralPartialEq for CweWarning

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/log/struct.LogMessage.html b/doc/html/cwe_checker_lib/utils/log/struct.LogMessage.html index c4d7b76ef..6c80a2823 100644 --- a/doc/html/cwe_checker_lib/utils/log/struct.LogMessage.html +++ b/doc/html/cwe_checker_lib/utils/log/struct.LogMessage.html @@ -1,42 +1,46 @@ -LogMessage in cwe_checker_lib::utils::log - Rust
    pub struct LogMessage {
    -    pub text: String,
    +LogMessage in cwe_checker_lib::utils::log - Rust
    pub struct LogMessage {
    +    pub text: String,
         pub level: LogLevel,
    -    pub location: Option<Tid>,
    -    pub source: Option<String>,
    +    pub location: Option<Tid>,
    +    pub source: Option<String>,
     }
    Expand description

    A generic log message.

    -

    Fields§

    §text: String

    The log message.

    +

    Fields§

    §text: String

    The log message.

    §level: LogLevel

    The severity/type of the log message.

    -
    §location: Option<Tid>

    The location inside the binary that the message is related to.

    -
    §source: Option<String>

    The analysis where the message originated.

    -

    Implementations§

    source§

    impl LogMessage

    source

    pub fn new_info(text: impl Into<String>) -> LogMessage

    Create a new Info-level log message

    -
    source

    pub fn new_debug(text: impl Into<String>) -> LogMessage

    Create a new Debug-level log message

    -
    source

    pub fn new_error(text: impl Into<String>) -> LogMessage

    Create a new Error-level log message

    -
    source

    pub fn location(self, location: Tid) -> LogMessage

    Associate a specific location to the log message.

    -
    source

    pub fn source(self, source: impl Into<String>) -> LogMessage

    Set the name of the source analysis for the log message.

    -

    Trait Implementations§

    source§

    impl Clone for LogMessage

    source§

    fn clone(&self) -> LogMessage

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LogMessage

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LogMessage

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for LogMessage

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<LogMessage> for LogThreadMsg

    source§

    fn from(msg: LogMessage) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for LogMessage

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for LogMessage

    source§

    fn cmp(&self, other: &LogMessage) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere - Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<LogMessage> for LogMessage

    source§

    fn eq(&self, other: &LogMessage) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<LogMessage> for LogMessage

    source§

    fn partial_cmp(&self, other: &LogMessage) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for LogMessage

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for LogMessage

    source§

    impl StructuralEq for LogMessage

    source§

    impl StructuralPartialEq for LogMessage

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    source§

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +
    §location: Option<Tid>

    The location inside the binary that the message is related to.

    +
    §source: Option<String>

    The analysis where the message originated.

    +

    Implementations§

    source§

    impl LogMessage

    source

    pub fn new_info(text: impl Into<String>) -> LogMessage

    Create a new Info-level log message

    +
    source

    pub fn new_debug(text: impl Into<String>) -> LogMessage

    Create a new Debug-level log message

    +
    source

    pub fn new_error(text: impl Into<String>) -> LogMessage

    Create a new Error-level log message

    +
    source

    pub fn location(self, location: Tid) -> LogMessage

    Associate a specific location to the log message.

    +
    source

    pub fn source(self, source: impl Into<String>) -> LogMessage

    Set the name of the source analysis for the log message.

    +

    Trait Implementations§

    source§

    impl Clone for LogMessage

    source§

    fn clone(&self) -> LogMessage

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LogMessage

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LogMessage

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for LogMessage

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<LogMessage> for LogThreadMsg

    source§

    fn from(msg: LogMessage) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for LogMessage

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for LogMessage

    source§

    fn cmp(&self, other: &LogMessage) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for LogMessage

    source§

    fn eq(&self, other: &LogMessage) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for LogMessage

    source§

    fn partial_cmp(&self, other: &LogMessage) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Serialize for LogMessage

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for LogMessage

    source§

    impl StructuralEq for LogMessage

    source§

    impl StructuralPartialEq for LogMessage

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Comparable<K> for Qwhere + Q: Ord + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn compare(&self, key: &K) -> Ordering

    Compare self to key and return their ordering.
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/log/struct.LogThread.html b/doc/html/cwe_checker_lib/utils/log/struct.LogThread.html index 33fc0e124..1a1157269 100644 --- a/doc/html/cwe_checker_lib/utils/log/struct.LogThread.html +++ b/doc/html/cwe_checker_lib/utils/log/struct.LogThread.html @@ -1,4 +1,4 @@ -LogThread in cwe_checker_lib::utils::log - Rust
    pub struct LogThread { /* private fields */ }
    Expand description

    A type for managing threads for collecting log messages.

    +LogThread in cwe_checker_lib::utils::log - Rust
    pub struct LogThread { /* private fields */ }
    Expand description

    A type for managing threads for collecting log messages.

    With LogThread::spawn() one can create a new log thread whose handle is contained in the returned LogThread struct. By calling the collect() method @@ -10,38 +10,38 @@

    If one deliberately wants to discard all logging messages, one can simply create a sender to a disconnected channel via LogThread::create_disconnected_sender().

    -

    Implementations§

    source§

    impl LogThread

    source

    pub fn spawn<F>(collector_func: F) -> LogThreadwhere - F: FnOnce(Receiver<LogThreadMsg>) -> (Vec<LogMessage>, Vec<CweWarning>) + Send + 'static,

    Create a new LogThread object with a handle to a freshly spawned logging collector thread.

    +

    Implementations§

    source§

    impl LogThread

    source

    pub fn spawn<F>(collector_func: F) -> LogThreadwhere + F: FnOnce(Receiver<LogThreadMsg>) -> (Vec<LogMessage>, Vec<CweWarning>) + Send + 'static,

    Create a new LogThread object with a handle to a freshly spawned logging collector thread.

    The parameter is the function containing the actual log collection logic. I.e. the function should receive messages through the given receiver until the channel disconnects or until it receives a LogThreadMsg::Terminate message. After that it should return the logs collected up to that point.

    See LogThread::collect_and_deduplicate for a standard collector function that can be used here.

    -
    source

    pub fn create_disconnected_sender() -> Sender<LogThreadMsg>

    Just create a disconnected sender to a (non-existing) logging thread. +

    source

    pub fn create_disconnected_sender() -> Sender<LogThreadMsg>

    Just create a disconnected sender to a (non-existing) logging thread. Can be used like a sender to a channel that deliberately discards all messages sent to it.

    -
    source

    pub fn get_msg_sender(&self) -> Sender<LogThreadMsg>

    Get a sender that can be used to send messages to the logging thread corresponding to this LogThread instance.

    -
    source

    pub fn collect(self) -> (Vec<LogMessage>, Vec<CweWarning>)

    Stop the logging thread by sending it the Terminate signal +

    source

    pub fn get_msg_sender(&self) -> Sender<LogThreadMsg>

    Get a sender that can be used to send messages to the logging thread corresponding to this LogThread instance.

    +
    source

    pub fn collect(self) -> (Vec<LogMessage>, Vec<CweWarning>)

    Stop the logging thread by sending it the Terminate signal and then return all logs collected until that point.

    -
    source

    pub fn collect_and_deduplicate( +

    source

    pub fn collect_and_deduplicate( receiver: Receiver<LogThreadMsg> -) -> (Vec<LogMessage>, Vec<CweWarning>)

    This function is collects logs from the given receiver until a LogThreadMsg::Terminate signal is received. +) -> (Vec<LogMessage>, Vec<CweWarning>)

    This function is collects logs from the given receiver until a LogThreadMsg::Terminate signal is received. All collected logs are deduplicated before being returned.

    CWE warnings and log messages are deduplicated if two messages share the same address of origin. In such a case only the last message received is kept. If a CWE message has more than one address only the first address is considered when deduplicating. Note that this may lead to information loss if log messages with the same origin address that are not duplicates are generated.

    This function can be used as a standard collector function for LogThread::spawn.

    -

    Trait Implementations§

    source§

    impl Drop for LogThread

    source§

    fn drop(&mut self)

    If the logging thread still exists, +

    Trait Implementations§

    source§

    impl Drop for LogThread

    source§

    fn drop(&mut self)

    If the logging thread still exists, send it the Terminate signal. Then wait until the logging thread stopped.

    -

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    const: unstable · source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    const: unstable · source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    const: unstable · source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    const: unstable · source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.find_symbol.html b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.find_symbol.html index 1f6f615e5..782614408 100644 --- a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.find_symbol.html +++ b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.find_symbol.html @@ -1,5 +1,5 @@ -find_symbol in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn find_symbol<'a>(
    +find_symbol in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn find_symbol<'a>(
         prog: &'a Term<Program>,
    -    name: &str
    -) -> Option<(&'a Tid, &'a str)>
    Expand description

    Find the extern symbol object for a symbol name and return the symbol tid and name.

    + name: &str +) -> Option<(&'a Tid, &'a str)>
    Expand description

    Find the extern symbol object for a symbol name and return the symbol tid and name.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_calls_to_symbols.html b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_calls_to_symbols.html index 14ff35be9..d20dacd5a 100644 --- a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_calls_to_symbols.html +++ b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_calls_to_symbols.html @@ -1,7 +1,7 @@ -get_calls_to_symbols in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn get_calls_to_symbols<'a, 'b>(
    +get_calls_to_symbols in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn get_calls_to_symbols<'a, 'b>(
         sub: &'a Term<Sub>,
    -    symbols: &'b HashMap<&'a Tid, &'a str>
    -) -> Vec<(&'a str, &'a Tid, &'a str)>
    Expand description

    Match direct calls’ target tids in the program’s subroutines + symbols: &'b HashMap<&'a Tid, &'a str> +) -> Vec<(&'a str, &'a Tid, &'a str)>

    Expand description

    Match direct calls’ target tids in the program’s subroutines with the tids of the external symbols given to the function. When a match was found, add a triple of (caller name, callsite tid, callee name) to a vector. Lastly, return the vector with all callsites of all given external symbols.

    diff --git a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_callsites.html b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_callsites.html index 00aab1e1f..abe75aef5 100644 --- a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_callsites.html +++ b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_callsites.html @@ -1,7 +1,7 @@ -get_callsites in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn get_callsites<'a>(
    +get_callsites in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn get_callsites<'a>(
         sub: &'a Term<Sub>,
    -    symbol_map: &HashMap<Tid, &'a ExternSymbol>
    -) -> Vec<(&'a Term<Blk>, &'a Term<Jmp>, &'a ExternSymbol)>
    Expand description

    Find calls to TIDs contained as keys in the given symbol map. + symbol_map: &HashMap<Tid, &'a ExternSymbol> +) -> Vec<(&'a Term<Blk>, &'a Term<Jmp>, &'a ExternSymbol)>

    Expand description

    Find calls to TIDs contained as keys in the given symbol map. For each match return the block containing the call, the jump term representing the call itself and the symbol corresponding to the TID from the symbol map.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_symbol_map.html b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_symbol_map.html index 779eecccc..a6e6025cb 100644 --- a/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_symbol_map.html +++ b/doc/html/cwe_checker_lib/utils/symbol_utils/fn.get_symbol_map.html @@ -1,6 +1,6 @@ -get_symbol_map in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn get_symbol_map<'a>(
    +get_symbol_map in cwe_checker_lib::utils::symbol_utils - Rust
    pub fn get_symbol_map<'a>(
         project: &'a Project,
    -    symbols_to_find: &[String]
    -) -> HashMap<Tid, &'a ExternSymbol>
    Expand description

    Get a map from TIDs to the corresponding extern symbol struct. + symbols_to_find: &[String] +) -> HashMap<Tid, &'a ExternSymbol>

    Expand description

    Get a map from TIDs to the corresponding extern symbol struct. Only symbols with names contained in symbols_to_find are contained in the map.

    \ No newline at end of file diff --git a/doc/html/cwe_checker_lib/utils/symbol_utils/index.html b/doc/html/cwe_checker_lib/utils/symbol_utils/index.html index 34399a85f..623389548 100644 --- a/doc/html/cwe_checker_lib/utils/symbol_utils/index.html +++ b/doc/html/cwe_checker_lib/utils/symbol_utils/index.html @@ -1,4 +1,4 @@ -cwe_checker_lib::utils::symbol_utils - Rust
    Expand description

    Helper functions for common tasks utilizing extern symbols, +cwe_checker_lib::utils::symbol_utils - Rust

    Expand description

    Helper functions for common tasks utilizing extern symbols, e.g. searching for calls to a specific extern symbol.

    Functions

    • Find the extern symbol object for a symbol name and return the symbol tid and name.
    • Match direct calls’ target tids in the program’s subroutines with the tids of the external symbols given to the function. diff --git a/doc/html/help.html b/doc/html/help.html index 71a13d053..489062622 100644 --- a/doc/html/help.html +++ b/doc/html/help.html @@ -1 +1 @@ -Rustdoc help

      Rustdoc help

      Back
      \ No newline at end of file +Help

      Rustdoc help

      Back
      \ No newline at end of file diff --git a/doc/html/implementors/core/clone/trait.Clone.js b/doc/html/implementors/core/clone/trait.Clone.js deleted file mode 100644 index d3d4dbfd3..000000000 --- a/doc/html/implementors/core/clone/trait.Clone.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Clone for CweTestCase"]], -"cwe_checker_lib":[["impl Clone for Config"],["impl Clone for AbstractIdentifier"],["impl<K, V, S> Clone for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Clone,\n V: AbstractDomain + Clone,\n S: MapMergeStrategy<K, V> + Clone,"],["impl Clone for Def"],["impl Clone for StringLocation"],["impl Clone for Sub"],["impl Clone for Jmp"],["impl Clone for Datatype"],["impl Clone for Project"],["impl Clone for IntervalDomain"],["impl<'a> Clone for AnalysisResults<'a>"],["impl Clone for UnionMergeStrategy"],["impl Clone for Label"],["impl Clone for CweWarning"],["impl Clone for Config"],["impl Clone for Def"],["impl Clone for Call"],["impl Clone for State"],["impl Clone for RegisterProperties"],["impl Clone for Tid"],["impl Clone for BrickDomain"],["impl Clone for LogThreadMsg"],["impl Clone for Expression"],["impl Clone for ArgIntent"],["impl Clone for Expression"],["impl Clone for AccessPattern"],["impl Clone for Sub"],["impl Clone for BricksDomain"],["impl Clone for BinOpType"],["impl Clone for MemorySegment"],["impl Clone for Config"],["impl Clone for Config"],["impl Clone for ExternSymbol"],["impl Clone for CharacterInclusionDomain"],["impl Clone for BitvectorDomain"],["impl Clone for Program"],["impl<T: Clone + PartialEq + Eq + Clone> Clone for NodeValue<T>"],["impl Clone for UnOpType"],["impl<T: Clone> Clone for Term<T>"],["impl Clone for WarningContext"],["impl<T: Clone + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Clone for State<T>"],["impl Clone for AbstractIdentifierData"],["impl Clone for Arg"],["impl Clone for Config"],["impl Clone for Taint"],["impl Clone for JmpType"],["impl Clone for ExternSymbol"],["impl<T: Clone + RegisterDomain> Clone for DataDomain<T>"],["impl Clone for AbstractObject"],["impl Clone for Blk"],["impl Clone for ObjectType"],["impl Clone for CharacterSet"],["impl Clone for Config"],["impl Clone for Config"],["impl Clone for CallingConvention"],["impl Clone for Blk"],["impl<'a> Clone for Edge<'a>"],["impl Clone for Config"],["impl Clone for IntersectMergeStrategy"],["impl Clone for Project"],["impl Clone for Config"],["impl Clone for ByteSize"],["impl Clone for RuntimeMemoryImage"],["impl<T: Clone + AbstractDomain + SizedDomain + HasTop + Debug> Clone for MemRegion<T>"],["impl Clone for Interval"],["impl Clone for Config"],["impl Clone for AbstractLocation"],["impl Clone for CastOpType"],["impl Clone for FunctionSignature"],["impl Clone for Config"],["impl<'a> Clone for Node<'a>"],["impl Clone for Jmp"],["impl Clone for Config"],["impl Clone for Variable"],["impl Clone for Program"],["impl Clone for CallingConvention"],["impl Clone for AbstractMemoryLocation"],["impl Clone for MergeTopStrategy"],["impl Clone for ExpressionType"],["impl Clone for Config"],["impl Clone for Variable"],["impl Clone for LogMessage"],["impl Clone for DatatypeProperties"],["impl Clone for Arg"],["impl Clone for BareMetalConfig"],["impl Clone for LogLevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/cmp/trait.Eq.js b/doc/html/implementors/core/cmp/trait.Eq.js deleted file mode 100644 index c1d595d3a..000000000 --- a/doc/html/implementors/core/cmp/trait.Eq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Eq for CweTestCase"]], -"cwe_checker_lib":[["impl Eq for Expression"],["impl Eq for Label"],["impl Eq for Config"],["impl Eq for Interval"],["impl<'a> Eq for Node<'a>"],["impl Eq for Config"],["impl Eq for Config"],["impl Eq for ExternSymbol"],["impl Eq for Expression"],["impl<T: Eq> Eq for Term<T>"],["impl Eq for Blk"],["impl Eq for DatatypeProperties"],["impl<'a> Eq for Edge<'a>"],["impl Eq for Config"],["impl Eq for Config"],["impl Eq for CweWarning"],["impl Eq for Config"],["impl Eq for AbstractMemoryLocation"],["impl Eq for Program"],["impl<T: Eq + RegisterDomain> Eq for DataDomain<T>"],["impl Eq for BinOpType"],["impl Eq for BitvectorDomain"],["impl Eq for Variable"],["impl Eq for Config"],["impl Eq for ByteSize"],["impl Eq for WarningContext"],["impl Eq for LogLevel"],["impl Eq for Datatype"],["impl Eq for AbstractIdentifier"],["impl Eq for BrickDomain"],["impl Eq for State"],["impl Eq for CharacterInclusionDomain"],["impl Eq for Taint"],["impl Eq for RuntimeMemoryImage"],["impl Eq for JmpType"],["impl Eq for FunctionSignature"],["impl Eq for MemorySegment"],["impl Eq for ArgIntent"],["impl Eq for AbstractLocation"],["impl Eq for Jmp"],["impl Eq for CharacterSet"],["impl Eq for ObjectType"],["impl Eq for StringLocation"],["impl Eq for Arg"],["impl Eq for Config"],["impl Eq for ExternSymbol"],["impl<T: Eq + AbstractDomain + SizedDomain + HasTop + Debug> Eq for MemRegion<T>"],["impl Eq for Config"],["impl Eq for Jmp"],["impl Eq for Tid"],["impl Eq for Config"],["impl Eq for CastOpType"],["impl Eq for Sub"],["impl Eq for ExpressionType"],["impl Eq for Config"],["impl Eq for LogThreadMsg"],["impl Eq for Program"],["impl Eq for UnOpType"],["impl Eq for AccessPattern"],["impl Eq for Sub"],["impl Eq for IntersectMergeStrategy"],["impl Eq for Config"],["impl Eq for LogMessage"],["impl Eq for BricksDomain"],["impl Eq for BareMetalConfig"],["impl Eq for AbstractIdentifierData"],["impl Eq for UnionMergeStrategy"],["impl Eq for CallingConvention"],["impl<K, V, S> Eq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Eq,\n V: AbstractDomain + Eq,\n S: MapMergeStrategy<K, V> + Eq,"],["impl Eq for Project"],["impl Eq for RegisterProperties"],["impl Eq for Def"],["impl Eq for Def"],["impl Eq for AbstractObject"],["impl Eq for MergeTopStrategy"],["impl Eq for CallingConvention"],["impl Eq for IntervalDomain"],["impl Eq for Blk"],["impl Eq for Variable"],["impl Eq for Arg"],["impl Eq for Call"],["impl Eq for Config"],["impl<T: Eq + PartialEq + Eq + Clone> Eq for NodeValue<T>"],["impl<T: Eq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Eq for State<T>"],["impl Eq for Project"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/cmp/trait.Ord.js b/doc/html/implementors/core/cmp/trait.Ord.js deleted file mode 100644 index d3e024e6d..000000000 --- a/doc/html/implementors/core/cmp/trait.Ord.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Ord for AbstractIdentifierData"],["impl Ord for CweWarning"],["impl Ord for LogLevel"],["impl Ord for Variable"],["impl Ord for ObjectType"],["impl Ord for LogThreadMsg"],["impl Ord for AccessPattern"],["impl Ord for AbstractLocation"],["impl Ord for WarningContext"],["impl Ord for AbstractMemoryLocation"],["impl Ord for Tid"],["impl Ord for AbstractIdentifier"],["impl Ord for ByteSize"],["impl Ord for LogMessage"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/cmp/trait.PartialEq.js b/doc/html/implementors/core/cmp/trait.PartialEq.js deleted file mode 100644 index ae51e8b08..000000000 --- a/doc/html/implementors/core/cmp/trait.PartialEq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl PartialEq<CweTestCase> for CweTestCase"]], -"cwe_checker_lib":[["impl PartialEq<ExpressionType> for ExpressionType"],["impl PartialEq<AbstractMemoryLocation> for AbstractMemoryLocation"],["impl PartialEq<Jmp> for Jmp"],["impl PartialEq<AccessPattern> for AccessPattern"],["impl PartialEq<LogThreadMsg> for LogThreadMsg"],["impl PartialEq<Config> for Config"],["impl PartialEq<Taint> for Taint"],["impl PartialEq<Project> for Project"],["impl<'a> PartialEq<Edge<'a>> for Edge<'a>"],["impl PartialEq<IntervalDomain> for IntervalDomain"],["impl PartialEq<CallingConvention> for CallingConvention"],["impl PartialEq<AbstractObject> for AbstractObject"],["impl PartialEq<LogLevel> for LogLevel"],["impl PartialEq<State> for State"],["impl PartialEq<Program> for Program"],["impl PartialEq<BareMetalConfig> for BareMetalConfig"],["impl PartialEq<Interval> for Interval"],["impl PartialEq<MemorySegment> for MemorySegment"],["impl PartialEq<Config> for Config"],["impl PartialEq<Arg> for Arg"],["impl PartialEq<Config> for Config"],["impl PartialEq<JmpType> for JmpType"],["impl PartialEq<Variable> for Variable"],["impl PartialEq<AbstractLocation> for AbstractLocation"],["impl PartialEq<FunctionSignature> for FunctionSignature"],["impl PartialEq<Def> for Def"],["impl PartialEq<Expression> for Expression"],["impl PartialEq<Expression> for Expression"],["impl PartialEq<BricksDomain> for BricksDomain"],["impl PartialEq<Arg> for Arg"],["impl PartialEq<BinOpType> for BinOpType"],["impl PartialEq<Project> for Project"],["impl<T: PartialEq + PartialEq + Eq + Clone> PartialEq<NodeValue<T>> for NodeValue<T>"],["impl PartialEq<CastOpType> for CastOpType"],["impl<T: PartialEq + AbstractDomain + SizedDomain + HasTop + Debug> PartialEq<MemRegion<T>> for MemRegion<T>"],["impl PartialEq<IntersectMergeStrategy> for IntersectMergeStrategy"],["impl PartialEq<Config> for Config"],["impl PartialEq<Label> for Label"],["impl PartialEq<LogMessage> for LogMessage"],["impl PartialEq<Config> for Config"],["impl PartialEq<AbstractIdentifierData> for AbstractIdentifierData"],["impl PartialEq<Config> for Config"],["impl PartialEq<ExternSymbol> for ExternSymbol"],["impl PartialEq<Def> for Def"],["impl PartialEq<DatatypeProperties> for DatatypeProperties"],["impl PartialEq<Config> for Config"],["impl PartialEq<Config> for Config"],["impl PartialEq<CharacterInclusionDomain> for CharacterInclusionDomain"],["impl PartialEq<Jmp> for Jmp"],["impl PartialEq<Blk> for Blk"],["impl<'a> PartialEq<Node<'a>> for Node<'a>"],["impl PartialEq<BitvectorDomain> for BitvectorDomain"],["impl PartialEq<UnionMergeStrategy> for UnionMergeStrategy"],["impl PartialEq<Datatype> for Datatype"],["impl PartialEq<CweWarning> for CweWarning"],["impl PartialEq<MergeTopStrategy> for MergeTopStrategy"],["impl PartialEq<ArgIntent> for ArgIntent"],["impl PartialEq<RuntimeMemoryImage> for RuntimeMemoryImage"],["impl<T: PartialEq> PartialEq<Term<T>> for Term<T>"],["impl PartialEq<UnOpType> for UnOpType"],["impl PartialEq<CallingConvention> for CallingConvention"],["impl PartialEq<Call> for Call"],["impl PartialEq<ExternSymbol> for ExternSymbol"],["impl PartialEq<Config> for Config"],["impl PartialEq<Config> for Config"],["impl PartialEq<Sub> for Sub"],["impl<T: PartialEq + RegisterDomain> PartialEq<DataDomain<T>> for DataDomain<T>"],["impl PartialEq<Program> for Program"],["impl PartialEq<WarningContext> for WarningContext"],["impl PartialEq<Config> for Config"],["impl PartialEq<Tid> for Tid"],["impl PartialEq<Blk> for Blk"],["impl PartialEq<RegisterProperties> for RegisterProperties"],["impl<T: PartialEq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> PartialEq<State<T>> for State<T>"],["impl PartialEq<Config> for Config"],["impl PartialEq<AbstractIdentifier> for AbstractIdentifier"],["impl PartialEq<BrickDomain> for BrickDomain"],["impl PartialEq<Sub> for Sub"],["impl PartialEq<CharacterSet> for CharacterSet"],["impl PartialEq<StringLocation> for StringLocation"],["impl PartialEq<Variable> for Variable"],["impl PartialEq<Config> for Config"],["impl PartialEq<ObjectType> for ObjectType"],["impl<K, V, S> PartialEq<DomainMap<K, V, S>> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + PartialEq,\n V: AbstractDomain + PartialEq,\n S: MapMergeStrategy<K, V> + PartialEq,"],["impl PartialEq<ByteSize> for ByteSize"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/cmp/trait.PartialOrd.js b/doc/html/implementors/core/cmp/trait.PartialOrd.js deleted file mode 100644 index f9a599c37..000000000 --- a/doc/html/implementors/core/cmp/trait.PartialOrd.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl PartialOrd<ByteSize> for ByteSize"],["impl PartialOrd<CweWarning> for CweWarning"],["impl PartialOrd<Variable> for Variable"],["impl PartialOrd<AbstractIdentifierData> for AbstractIdentifierData"],["impl PartialOrd<LogThreadMsg> for LogThreadMsg"],["impl PartialOrd<WarningContext> for WarningContext"],["impl PartialOrd<AbstractMemoryLocation> for AbstractMemoryLocation"],["impl PartialOrd<AbstractIdentifier> for AbstractIdentifier"],["impl PartialOrd<AccessPattern> for AccessPattern"],["impl PartialOrd<Tid> for Tid"],["impl PartialOrd<ObjectType> for ObjectType"],["impl PartialOrd<LogLevel> for LogLevel"],["impl PartialOrd<AbstractLocation> for AbstractLocation"],["impl PartialOrd<LogMessage> for LogMessage"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/convert/trait.From.js b/doc/html/implementors/core/convert/trait.From.js deleted file mode 100644 index 4a47b5abf..000000000 --- a/doc/html/implementors/core/convert/trait.From.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl<K, V, S> From<BTreeMap<K, V, Global>> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl<T: RegisterDomain + From<Bitvector>> From<ApInt> for DataDomain<T>"],["impl From<LogMessage> for LogThreadMsg"],["impl From<ByteSize> for u64"],["impl From<String> for Datatype"],["impl From<Interval> for IntervalDomain"],["impl From<&RegisterProperties> for IrVariable"],["impl From<ByteSize> for BitWidth"],["impl From<String> for BricksDomain"],["impl From<ApInt> for BitvectorDomain"],["impl From<ApInt> for IntervalDomain"],["impl From<String> for CharacterInclusionDomain"],["impl From<Variable> for IrExpression"],["impl From<ExpressionType> for IrUnOpType"],["impl From<u64> for ByteSize"],["impl<T: RegisterDomain> From<T> for DataDomain<T>"],["impl From<BitWidth> for ByteSize"],["impl From<CweWarning> for LogThreadMsg"],["impl From<Expression> for IrExpression"],["impl From<ExpressionType> for IrCastOpType"],["impl From<ApInt> for Interval"],["impl From<Variable> for IrVariable"],["impl From<Jmp> for IrJmp"],["impl From<ExpressionType> for IrBinOpType"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/default/trait.Default.js b/doc/html/implementors/core/default/trait.Default.js deleted file mode 100644 index 301135f75..000000000 --- a/doc/html/implementors/core/default/trait.Default.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Default for CweWarning"],["impl Default for AccessPattern"],["impl Default for FunctionSignature"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/fmt/trait.Debug.js b/doc/html/implementors/core/fmt/trait.Debug.js deleted file mode 100644 index 4236a73d1..000000000 --- a/doc/html/implementors/core/fmt/trait.Debug.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Debug for CweTestCase"]], -"cwe_checker":[["impl Debug for CmdlineArgs"]], -"cwe_checker_install":[["impl Debug for GhidraConfig"],["impl Debug for CmdlineArgs"]], -"cwe_checker_lib":[["impl Debug for ExternSymbol"],["impl Debug for Program"],["impl Debug for ArgIntent"],["impl Debug for AbstractObject"],["impl Debug for LogThreadMsg"],["impl<T: Debug + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Debug for State<T>"],["impl Debug for CallingConvention"],["impl Debug for Expression"],["impl Debug for Taint"],["impl Debug for Config"],["impl Debug for LogMessage"],["impl Debug for Call"],["impl Debug for RegisterProperties"],["impl Debug for Variable"],["impl Debug for Config"],["impl Debug for Config"],["impl Debug for BareMetalConfig"],["impl Debug for Config"],["impl Debug for CharacterInclusionDomain"],["impl Debug for Config"],["impl Debug for Project"],["impl Debug for Interval"],["impl Debug for AbstractIdentifierData"],["impl Debug for CweWarning"],["impl Debug for Def"],["impl Debug for AbstractLocation"],["impl Debug for MergeTopStrategy"],["impl<'a> Debug for Node<'a>"],["impl Debug for Config"],["impl Debug for BinOpType"],["impl Debug for Config"],["impl Debug for MemorySegment"],["impl Debug for Tid"],["impl Debug for IntersectMergeStrategy"],["impl Debug for ObjectType"],["impl Debug for Jmp"],["impl<K, V, S> Debug for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Debug,\n V: AbstractDomain + Debug,\n S: MapMergeStrategy<K, V> + Debug,"],["impl Debug for IntervalDomain"],["impl Debug for Sub"],["impl Debug for Blk"],["impl<T: Debug + AbstractDomain + SizedDomain + HasTop + Debug> Debug for MemRegion<T>"],["impl Debug for Config"],["impl Debug for StringLocation"],["impl Debug for Config"],["impl Debug for Sub"],["impl Debug for Config"],["impl Debug for BrickDomain"],["impl<T: Debug> Debug for Term<T>"],["impl Debug for UnionMergeStrategy"],["impl Debug for ByteSize"],["impl Debug for CharacterSet"],["impl Debug for RuntimeMemoryImage"],["impl Debug for Config"],["impl Debug for CallingConvention"],["impl Debug for Arg"],["impl Debug for Config"],["impl Debug for Program"],["impl<'a> Debug for Edge<'a>"],["impl Debug for Label"],["impl Debug for DatatypeProperties"],["impl Debug for BitvectorDomain"],["impl Debug for Def"],["impl Debug for BricksDomain"],["impl Debug for AbstractIdentifier"],["impl Debug for Variable"],["impl Debug for ExternSymbol"],["impl Debug for Jmp"],["impl Debug for AbstractMemoryLocation"],["impl Debug for LogLevel"],["impl Debug for ExpressionType"],["impl Debug for Config"],["impl Debug for Blk"],["impl Debug for WarningContext"],["impl Debug for FunctionSignature"],["impl Debug for AccessPattern"],["impl Debug for Arg"],["impl Debug for Datatype"],["impl Debug for JmpType"],["impl Debug for State"],["impl Debug for Project"],["impl Debug for Expression"],["impl Debug for UnOpType"],["impl Debug for CastOpType"],["impl<T: Debug + RegisterDomain> Debug for DataDomain<T>"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/fmt/trait.Display.js b/doc/html/implementors/core/fmt/trait.Display.js deleted file mode 100644 index e76f6ed13..000000000 --- a/doc/html/implementors/core/fmt/trait.Display.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Display for Blk"],["impl Display for AbstractMemoryLocation"],["impl Display for LogMessage"],["impl<'a> Display for Node<'a>"],["impl Display for BinOpType"],["impl Display for AbstractIdentifier"],["impl Display for UnOpType"],["impl Display for BrickDomain"],["impl Display for BitvectorDomain"],["impl Display for Tid"],["impl Display for CharacterSet"],["impl Display for AbstractLocation"],["impl Display for BricksDomain"],["impl Display for CweModule"],["impl Display for AccessPattern"],["impl Display for CharacterInclusionDomain"],["impl Display for ByteSize"],["impl Display for Jmp"],["impl Display for Variable"],["impl Display for CastOpType"],["impl Display for Taint"],["impl Display for IntervalDomain"],["impl Display for Expression"],["impl Display for Def"],["impl Display for CweWarning"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/hash/trait.Hash.js b/doc/html/implementors/core/hash/trait.Hash.js deleted file mode 100644 index 3c8545e43..000000000 --- a/doc/html/implementors/core/hash/trait.Hash.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Hash for CweTestCase"]], -"cwe_checker_lib":[["impl Hash for CallingConvention"],["impl Hash for ObjectType"],["impl Hash for ExternSymbol"],["impl Hash for RuntimeMemoryImage"],["impl Hash for ByteSize"],["impl Hash for CastOpType"],["impl Hash for Jmp"],["impl Hash for DatatypeProperties"],["impl Hash for BitvectorDomain"],["impl<T: Hash> Hash for Term<T>"],["impl Hash for Call"],["impl Hash for Blk"],["impl<T: Hash + AbstractDomain + SizedDomain + HasTop + Debug> Hash for MemRegion<T>"],["impl Hash for Config"],["impl Hash for LogThreadMsg"],["impl Hash for AbstractIdentifierData"],["impl Hash for JmpType"],["impl Hash for Jmp"],["impl Hash for Arg"],["impl Hash for CallingConvention"],["impl Hash for Sub"],["impl Hash for Expression"],["impl Hash for WarningContext"],["impl Hash for Config"],["impl Hash for CweWarning"],["impl Hash for Blk"],["impl Hash for IntervalDomain"],["impl Hash for Tid"],["impl Hash for ExpressionType"],["impl Hash for AbstractIdentifier"],["impl Hash for Config"],["impl Hash for Sub"],["impl Hash for Variable"],["impl Hash for MemorySegment"],["impl Hash for Config"],["impl Hash for Taint"],["impl Hash for Config"],["impl Hash for Variable"],["impl Hash for ExternSymbol"],["impl Hash for Arg"],["impl Hash for Config"],["impl Hash for LogMessage"],["impl Hash for Config"],["impl Hash for AbstractMemoryLocation"],["impl Hash for Expression"],["impl Hash for Config"],["impl Hash for UnOpType"],["impl Hash for BinOpType"],["impl<'a> Hash for Node<'a>"],["impl Hash for Config"],["impl Hash for Def"],["impl Hash for RegisterProperties"],["impl Hash for Datatype"],["impl Hash for Label"],["impl Hash for Program"],["impl Hash for Config"],["impl Hash for Config"],["impl Hash for ArgIntent"],["impl Hash for Def"],["impl<'a> Hash for Edge<'a>"],["impl Hash for Project"],["impl Hash for BareMetalConfig"],["impl Hash for LogLevel"],["impl<T: Hash + RegisterDomain> Hash for DataDomain<T>"],["impl Hash for AbstractLocation"],["impl Hash for Interval"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/iter/traits/accum/trait.Sum.js b/doc/html/implementors/core/iter/traits/accum/trait.Sum.js deleted file mode 100644 index 6124715d6..000000000 --- a/doc/html/implementors/core/iter/traits/accum/trait.Sum.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Sum<ByteSize> for ByteSize"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.Copy.js b/doc/html/implementors/core/marker/trait.Copy.js deleted file mode 100644 index f2abe405d..000000000 --- a/doc/html/implementors/core/marker/trait.Copy.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl<'a> Copy for AnalysisResults<'a>"],["impl Copy for CastOpType"],["impl Copy for JmpType"],["impl Copy for UnOpType"],["impl<'a> Copy for Edge<'a>"],["impl Copy for ByteSize"],["impl Copy for ExpressionType"],["impl Copy for Taint"],["impl Copy for AccessPattern"],["impl Copy for BinOpType"],["impl Copy for ObjectType"],["impl<'a> Copy for Node<'a>"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.Freeze.js b/doc/html/implementors/core/marker/trait.Freeze.js deleted file mode 100644 index 7cf828a09..000000000 --- a/doc/html/implementors/core/marker/trait.Freeze.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Freeze for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], -"cwe_checker":[["impl Freeze for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], -"cwe_checker_install":[["impl Freeze for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Freeze for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], -"cwe_checker_lib":[["impl Freeze for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Freeze for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Freeze for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl Freeze for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractLocation"]],["impl Freeze for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractMemoryLocation"]],["impl<T> Freeze for DataDomain<T>where\n T: Freeze,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Freeze for MemRegion<T>",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Freeze for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Freeze for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Freeze for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Freeze for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Freeze for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Freeze for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Freeze for DomainMap<K, V, S>",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Freeze for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Freeze for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Freeze for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Freeze for GeneralizedContext<'a, T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Freeze for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Freeze for Computation<T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Freeze for GeneralizedContext<'a, T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Freeze for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Freeze for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Freeze for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Freeze for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Freeze for NodeValue<T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Freeze for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Freeze for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Freeze for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Freeze for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Freeze for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Freeze for Context<'a, T>",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Freeze for State<T>",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Freeze for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Freeze for StringAbstraction<'a, T>",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Freeze for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Freeze for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Freeze for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Freeze for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Freeze for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Freeze for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Freeze for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Freeze for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Freeze for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Freeze for Term<T>where\n T: Freeze,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Freeze for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Freeze for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Freeze for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Freeze for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Freeze for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Freeze for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Freeze for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Freeze for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Freeze for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Freeze for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Freeze for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Freeze for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Freeze for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Freeze for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Freeze for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Freeze for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Freeze for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Freeze for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Freeze for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Freeze for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Freeze for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Freeze for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Freeze for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Freeze for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Freeze for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Freeze for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Freeze for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Freeze for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Freeze for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Freeze for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Freeze for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Freeze for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Freeze for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Freeze for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Freeze for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Freeze for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Freeze for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Freeze for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Freeze for CweModule",1,["cwe_checker_lib::CweModule"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.Send.js b/doc/html/implementors/core/marker/trait.Send.js deleted file mode 100644 index 169a5fe4a..000000000 --- a/doc/html/implementors/core/marker/trait.Send.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Send for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], -"cwe_checker":[["impl Send for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], -"cwe_checker_install":[["impl Send for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Send for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], -"cwe_checker_lib":[["impl Send for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Send for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Send for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl Send for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractLocation"]],["impl Send for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractMemoryLocation"]],["impl<T> Send for DataDomain<T>where\n T: Send,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Send for MemRegion<T>where\n T: Send + Sync,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Send for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Send for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Send for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Send for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Send for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Send for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Send for DomainMap<K, V, S>where\n K: Send + Sync,\n S: Send,\n V: Send + Sync,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Send for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Send for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Send for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Send for GeneralizedContext<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Send for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Send for Computation<T>where\n T: Send,\n <T as Context>::NodeValue: Send,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Send for GeneralizedContext<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Send for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Send for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Send for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Send for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Send for NodeValue<T>where\n T: Send,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Send for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Send for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Send for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Send for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Send for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Send for Context<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Send for State<T>where\n T: Send,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Send for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Send for StringAbstraction<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Send for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Send for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Send for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Send for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Send for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Send for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Send for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Send for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Send for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Send for Term<T>where\n T: Send,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Send for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Send for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Send for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Send for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Send for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Send for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Send for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Send for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Send for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Send for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Send for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Send for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Send for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Send for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Send for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Send for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Send for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Send for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Send for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Send for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Send for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Send for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Send for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Send for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Send for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Send for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Send for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Send for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Send for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Send for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Send for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Send for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Send for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Send for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Send for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Send for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Send for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Send for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Send for CweModule",1,["cwe_checker_lib::CweModule"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.StructuralEq.js b/doc/html/implementors/core/marker/trait.StructuralEq.js deleted file mode 100644 index 362c4e553..000000000 --- a/doc/html/implementors/core/marker/trait.StructuralEq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl StructuralEq for CweTestCase"]], -"cwe_checker_lib":[["impl StructuralEq for Datatype"],["impl StructuralEq for Config"],["impl StructuralEq for UnionMergeStrategy"],["impl StructuralEq for Program"],["impl StructuralEq for Config"],["impl StructuralEq for State"],["impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralEq for MemRegion<T>"],["impl<T: RegisterDomain> StructuralEq for DataDomain<T>"],["impl StructuralEq for WarningContext"],["impl StructuralEq for Config"],["impl StructuralEq for Sub"],["impl StructuralEq for AbstractObject"],["impl StructuralEq for BitvectorDomain"],["impl StructuralEq for Taint"],["impl StructuralEq for JmpType"],["impl StructuralEq for Project"],["impl StructuralEq for CharacterInclusionDomain"],["impl StructuralEq for Arg"],["impl StructuralEq for Arg"],["impl StructuralEq for Config"],["impl StructuralEq for FunctionSignature"],["impl StructuralEq for Def"],["impl StructuralEq for CharacterSet"],["impl StructuralEq for DatatypeProperties"],["impl StructuralEq for Config"],["impl StructuralEq for ObjectType"],["impl StructuralEq for Config"],["impl StructuralEq for Config"],["impl StructuralEq for ExpressionType"],["impl StructuralEq for CweWarning"],["impl StructuralEq for Blk"],["impl<'a> StructuralEq for Edge<'a>"],["impl StructuralEq for CallingConvention"],["impl StructuralEq for ByteSize"],["impl StructuralEq for MemorySegment"],["impl<K, V, S> StructuralEq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl StructuralEq for ArgIntent"],["impl<T: PartialEq + Eq + Clone> StructuralEq for NodeValue<T>"],["impl StructuralEq for MergeTopStrategy"],["impl StructuralEq for Jmp"],["impl StructuralEq for Config"],["impl StructuralEq for LogThreadMsg"],["impl StructuralEq for Config"],["impl StructuralEq for AccessPattern"],["impl<T> StructuralEq for Term<T>"],["impl StructuralEq for UnOpType"],["impl StructuralEq for Project"],["impl StructuralEq for Tid"],["impl StructuralEq for Expression"],["impl StructuralEq for Config"],["impl StructuralEq for IntersectMergeStrategy"],["impl StructuralEq for ExternSymbol"],["impl StructuralEq for IntervalDomain"],["impl StructuralEq for StringLocation"],["impl StructuralEq for ExternSymbol"],["impl StructuralEq for Blk"],["impl StructuralEq for RuntimeMemoryImage"],["impl StructuralEq for Jmp"],["impl StructuralEq for BricksDomain"],["impl StructuralEq for AbstractIdentifierData"],["impl StructuralEq for Call"],["impl StructuralEq for Variable"],["impl StructuralEq for RegisterProperties"],["impl StructuralEq for Expression"],["impl StructuralEq for LogMessage"],["impl StructuralEq for BinOpType"],["impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralEq for State<T>"],["impl StructuralEq for AbstractLocation"],["impl StructuralEq for Config"],["impl StructuralEq for Interval"],["impl StructuralEq for Config"],["impl StructuralEq for Sub"],["impl StructuralEq for LogLevel"],["impl StructuralEq for AbstractIdentifier"],["impl StructuralEq for AbstractMemoryLocation"],["impl StructuralEq for Config"],["impl StructuralEq for Variable"],["impl StructuralEq for BrickDomain"],["impl StructuralEq for Def"],["impl StructuralEq for BareMetalConfig"],["impl<'a> StructuralEq for Node<'a>"],["impl StructuralEq for CastOpType"],["impl StructuralEq for CallingConvention"],["impl StructuralEq for Label"],["impl StructuralEq for Program"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.StructuralPartialEq.js b/doc/html/implementors/core/marker/trait.StructuralPartialEq.js deleted file mode 100644 index 9ef0298fe..000000000 --- a/doc/html/implementors/core/marker/trait.StructuralPartialEq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl StructuralPartialEq for CweTestCase"]], -"cwe_checker_lib":[["impl StructuralPartialEq for Def"],["impl StructuralPartialEq for DatatypeProperties"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for BareMetalConfig"],["impl StructuralPartialEq for ArgIntent"],["impl StructuralPartialEq for Variable"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for ExpressionType"],["impl StructuralPartialEq for RuntimeMemoryImage"],["impl StructuralPartialEq for CallingConvention"],["impl StructuralPartialEq for Project"],["impl StructuralPartialEq for Call"],["impl StructuralPartialEq for BrickDomain"],["impl StructuralPartialEq for UnionMergeStrategy"],["impl StructuralPartialEq for Variable"],["impl StructuralPartialEq for BitvectorDomain"],["impl StructuralPartialEq for MergeTopStrategy"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Interval"],["impl StructuralPartialEq for CharacterInclusionDomain"],["impl<'a> StructuralPartialEq for Node<'a>"],["impl StructuralPartialEq for LogMessage"],["impl StructuralPartialEq for LogLevel"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Tid"],["impl StructuralPartialEq for Datatype"],["impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralPartialEq for MemRegion<T>"],["impl StructuralPartialEq for ByteSize"],["impl StructuralPartialEq for Sub"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Program"],["impl StructuralPartialEq for CweWarning"],["impl StructuralPartialEq for ExternSymbol"],["impl<T> StructuralPartialEq for Term<T>"],["impl StructuralPartialEq for Arg"],["impl StructuralPartialEq for Label"],["impl StructuralPartialEq for Program"],["impl StructuralPartialEq for WarningContext"],["impl StructuralPartialEq for Blk"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for JmpType"],["impl StructuralPartialEq for State"],["impl StructuralPartialEq for Def"],["impl StructuralPartialEq for ObjectType"],["impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralPartialEq for State<T>"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for FunctionSignature"],["impl StructuralPartialEq for AbstractLocation"],["impl StructuralPartialEq for Taint"],["impl StructuralPartialEq for AbstractObject"],["impl StructuralPartialEq for Blk"],["impl StructuralPartialEq for UnOpType"],["impl StructuralPartialEq for LogThreadMsg"],["impl StructuralPartialEq for CharacterSet"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for IntervalDomain"],["impl StructuralPartialEq for CallingConvention"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for RegisterProperties"],["impl StructuralPartialEq for IntersectMergeStrategy"],["impl StructuralPartialEq for AbstractIdentifierData"],["impl StructuralPartialEq for MemorySegment"],["impl StructuralPartialEq for Config"],["impl<'a> StructuralPartialEq for Edge<'a>"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for AccessPattern"],["impl StructuralPartialEq for Project"],["impl StructuralPartialEq for CastOpType"],["impl StructuralPartialEq for Jmp"],["impl StructuralPartialEq for AbstractMemoryLocation"],["impl StructuralPartialEq for Expression"],["impl StructuralPartialEq for StringLocation"],["impl StructuralPartialEq for Sub"],["impl StructuralPartialEq for AbstractIdentifier"],["impl StructuralPartialEq for BricksDomain"],["impl<K, V, S> StructuralPartialEq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl StructuralPartialEq for Jmp"],["impl StructuralPartialEq for Expression"],["impl<T: RegisterDomain> StructuralPartialEq for DataDomain<T>"],["impl StructuralPartialEq for Arg"],["impl StructuralPartialEq for ExternSymbol"],["impl<T: PartialEq + Eq + Clone> StructuralPartialEq for NodeValue<T>"],["impl StructuralPartialEq for BinOpType"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.Sync.js b/doc/html/implementors/core/marker/trait.Sync.js deleted file mode 100644 index 6d5359448..000000000 --- a/doc/html/implementors/core/marker/trait.Sync.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Sync for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], -"cwe_checker":[["impl Sync for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], -"cwe_checker_install":[["impl Sync for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Sync for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], -"cwe_checker_lib":[["impl Sync for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Sync for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Sync for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl Sync for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractLocation"]],["impl Sync for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractMemoryLocation"]],["impl<T> Sync for DataDomain<T>where\n T: Sync,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Sync for MemRegion<T>where\n T: Send + Sync,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Sync for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Sync for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Sync for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Sync for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Sync for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Sync for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Sync for DomainMap<K, V, S>where\n K: Send + Sync,\n S: Sync,\n V: Send + Sync,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Sync for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Sync for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Sync for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Sync for GeneralizedContext<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Sync for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Sync for Computation<T>where\n T: Sync,\n <T as Context>::NodeValue: Sync,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Sync for GeneralizedContext<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Sync for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Sync for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Sync for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Sync for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Sync for NodeValue<T>where\n T: Sync,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Sync for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Sync for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Sync for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Sync for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Sync for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Sync for Context<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Sync for State<T>where\n T: Sync,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Sync for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Sync for StringAbstraction<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Sync for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Sync for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Sync for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Sync for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Sync for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Sync for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Sync for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Sync for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Sync for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Sync for Term<T>where\n T: Sync,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Sync for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Sync for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Sync for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Sync for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Sync for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Sync for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Sync for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Sync for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Sync for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Sync for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Sync for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Sync for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Sync for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Sync for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Sync for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Sync for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Sync for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Sync for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Sync for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Sync for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Sync for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Sync for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Sync for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Sync for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Sync for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Sync for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Sync for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Sync for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Sync for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Sync for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Sync for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Sync for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Sync for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Sync for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Sync for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Sync for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Sync for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Sync for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Sync for CweModule",1,["cwe_checker_lib::CweModule"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/marker/trait.Unpin.js b/doc/html/implementors/core/marker/trait.Unpin.js deleted file mode 100644 index 99ed60281..000000000 --- a/doc/html/implementors/core/marker/trait.Unpin.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl Unpin for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], -"cwe_checker":[["impl Unpin for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], -"cwe_checker_install":[["impl Unpin for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Unpin for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], -"cwe_checker_lib":[["impl Unpin for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Unpin for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Unpin for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl Unpin for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractLocation"]],["impl Unpin for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractMemoryLocation"]],["impl<T> Unpin for DataDomain<T>where\n T: Unpin,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Unpin for MemRegion<T>",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Unpin for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Unpin for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Unpin for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Unpin for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Unpin for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Unpin for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Unpin for DomainMap<K, V, S>where\n S: Unpin,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Unpin for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Unpin for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Unpin for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Unpin for GeneralizedContext<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Unpin for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Unpin for Computation<T>where\n T: Unpin,\n <T as Context>::NodeValue: Unpin,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Unpin for GeneralizedContext<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Unpin for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Unpin for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Unpin for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Unpin for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Unpin for NodeValue<T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Unpin for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Unpin for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Unpin for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Unpin for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Unpin for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Unpin for Context<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Unpin for State<T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Unpin for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Unpin for StringAbstraction<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Unpin for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Unpin for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Unpin for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Unpin for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Unpin for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Unpin for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Unpin for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Unpin for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Unpin for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Unpin for Term<T>where\n T: Unpin,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Unpin for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Unpin for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Unpin for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Unpin for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Unpin for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Unpin for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Unpin for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Unpin for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Unpin for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Unpin for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Unpin for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Unpin for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Unpin for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Unpin for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Unpin for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Unpin for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Unpin for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Unpin for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Unpin for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Unpin for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Unpin for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Unpin for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Unpin for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Unpin for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Unpin for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Unpin for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Unpin for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Unpin for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Unpin for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Unpin for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Unpin for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Unpin for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Unpin for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Unpin for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Unpin for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Unpin for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Unpin for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Unpin for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Unpin for CweModule",1,["cwe_checker_lib::CweModule"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.Add.js b/doc/html/implementors/core/ops/arith/trait.Add.js deleted file mode 100644 index c9526d7ec..000000000 --- a/doc/html/implementors/core/ops/arith/trait.Add.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Add<ByteSize> for ByteSize"],["impl Add<BitvectorDomain> for BitvectorDomain"],["impl<T: RegisterDomain> Add<DataDomain<T>> for DataDomain<T>"],["impl Add<IntervalDomain> for IntervalDomain"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.Sub.js b/doc/html/implementors/core/ops/arith/trait.Sub.js deleted file mode 100644 index c816467b4..000000000 --- a/doc/html/implementors/core/ops/arith/trait.Sub.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Sub<BitvectorDomain> for BitvectorDomain"],["impl Sub<ByteSize> for ByteSize"],["impl<T: RegisterDomain> Sub<DataDomain<T>> for DataDomain<T>"],["impl Sub<IntervalDomain> for IntervalDomain"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.SubAssign.js b/doc/html/implementors/core/ops/arith/trait.SubAssign.js deleted file mode 100644 index e0638ba72..000000000 --- a/doc/html/implementors/core/ops/arith/trait.SubAssign.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl SubAssign<ByteSize> for ByteSize"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/deref/trait.Deref.js b/doc/html/implementors/core/ops/deref/trait.Deref.js deleted file mode 100644 index c694d484e..000000000 --- a/doc/html/implementors/core/ops/deref/trait.Deref.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"cwe_checker_lib":[["impl Deref for AbstractIdentifierwhere\n Arc<AbstractIdentifierData>: Deref,"],["impl<K, V, S> Deref for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/html/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js deleted file mode 100644 index bb9b35aef..000000000 --- a/doc/html/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl RefUnwindSafe for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], -"cwe_checker":[["impl RefUnwindSafe for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], -"cwe_checker_install":[["impl RefUnwindSafe for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl RefUnwindSafe for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], -"cwe_checker_lib":[["impl RefUnwindSafe for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl RefUnwindSafe for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl RefUnwindSafe for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl RefUnwindSafe for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractLocation"]],["impl RefUnwindSafe for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractMemoryLocation"]],["impl<T> RefUnwindSafe for DataDomain<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> RefUnwindSafe for MemRegion<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl RefUnwindSafe for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl RefUnwindSafe for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl RefUnwindSafe for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl RefUnwindSafe for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl RefUnwindSafe for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl RefUnwindSafe for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> RefUnwindSafe for DomainMap<K, V, S>where\n K: RefUnwindSafe,\n S: RefUnwindSafe,\n V: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl RefUnwindSafe for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl RefUnwindSafe for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl RefUnwindSafe for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> RefUnwindSafe for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> RefUnwindSafe for Computation<T>where\n T: RefUnwindSafe,\n <T as Context>::NodeValue: RefUnwindSafe,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl RefUnwindSafe for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl RefUnwindSafe for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> RefUnwindSafe for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> RefUnwindSafe for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> RefUnwindSafe for NodeValue<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl RefUnwindSafe for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl RefUnwindSafe for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl RefUnwindSafe for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> RefUnwindSafe for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> RefUnwindSafe for Context<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> RefUnwindSafe for State<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> RefUnwindSafe for StringAbstraction<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl RefUnwindSafe for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl RefUnwindSafe for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl RefUnwindSafe for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl RefUnwindSafe for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl RefUnwindSafe for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl RefUnwindSafe for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl RefUnwindSafe for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl RefUnwindSafe for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl RefUnwindSafe for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> RefUnwindSafe for Term<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl RefUnwindSafe for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl RefUnwindSafe for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl RefUnwindSafe for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl RefUnwindSafe for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl RefUnwindSafe for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl RefUnwindSafe for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl RefUnwindSafe for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl RefUnwindSafe for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl RefUnwindSafe for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl RefUnwindSafe for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl RefUnwindSafe for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl RefUnwindSafe for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl RefUnwindSafe for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl RefUnwindSafe for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl RefUnwindSafe for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl RefUnwindSafe for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl RefUnwindSafe for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl RefUnwindSafe for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl RefUnwindSafe for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl RefUnwindSafe for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl RefUnwindSafe for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl RefUnwindSafe for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl RefUnwindSafe for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl RefUnwindSafe for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl RefUnwindSafe for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl RefUnwindSafe for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl RefUnwindSafe for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl RefUnwindSafe for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl RefUnwindSafe for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl RefUnwindSafe for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> RefUnwindSafe for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl RefUnwindSafe for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl RefUnwindSafe for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl RefUnwindSafe for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl RefUnwindSafe for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl RefUnwindSafe for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl RefUnwindSafe for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl !RefUnwindSafe for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl RefUnwindSafe for CweModule",1,["cwe_checker_lib::CweModule"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/doc/html/implementors/core/panic/unwind_safe/trait.UnwindSafe.js deleted file mode 100644 index cce8476cd..000000000 --- a/doc/html/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = { -"acceptance_tests_ghidra":[["impl UnwindSafe for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], -"cwe_checker":[["impl UnwindSafe for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], -"cwe_checker_install":[["impl UnwindSafe for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl UnwindSafe for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], -"cwe_checker_lib":[["impl UnwindSafe for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl UnwindSafe for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl UnwindSafe for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl UnwindSafe for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractLocation"]],["impl UnwindSafe for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::AbstractMemoryLocation"]],["impl<T> UnwindSafe for DataDomain<T>where\n T: UnwindSafe + RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> UnwindSafe for MemRegion<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl UnwindSafe for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl UnwindSafe for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl UnwindSafe for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl UnwindSafe for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl UnwindSafe for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl UnwindSafe for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> UnwindSafe for DomainMap<K, V, S>where\n K: RefUnwindSafe,\n S: UnwindSafe,\n V: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl UnwindSafe for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl UnwindSafe for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl UnwindSafe for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> UnwindSafe for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> UnwindSafe for Computation<T>where\n T: UnwindSafe,\n <T as Context>::NodeValue: UnwindSafe,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl UnwindSafe for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl UnwindSafe for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> UnwindSafe for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> UnwindSafe for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> UnwindSafe for NodeValue<T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl UnwindSafe for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl UnwindSafe for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl UnwindSafe for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> UnwindSafe for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> UnwindSafe for Context<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> UnwindSafe for State<T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> UnwindSafe for StringAbstraction<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl UnwindSafe for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl UnwindSafe for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl UnwindSafe for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl UnwindSafe for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl UnwindSafe for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl UnwindSafe for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl UnwindSafe for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl UnwindSafe for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl UnwindSafe for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> UnwindSafe for Term<T>where\n T: UnwindSafe,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl UnwindSafe for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl UnwindSafe for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl UnwindSafe for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl UnwindSafe for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl UnwindSafe for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl UnwindSafe for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl UnwindSafe for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl UnwindSafe for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl UnwindSafe for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl UnwindSafe for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl UnwindSafe for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl UnwindSafe for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl UnwindSafe for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl UnwindSafe for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl UnwindSafe for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl UnwindSafe for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl UnwindSafe for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl UnwindSafe for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl UnwindSafe for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl UnwindSafe for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl UnwindSafe for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl UnwindSafe for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl UnwindSafe for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl UnwindSafe for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl UnwindSafe for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl UnwindSafe for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl UnwindSafe for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl UnwindSafe for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl UnwindSafe for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl UnwindSafe for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> UnwindSafe for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl UnwindSafe for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl UnwindSafe for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl UnwindSafe for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl UnwindSafe for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl UnwindSafe for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl UnwindSafe for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl !UnwindSafe for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl UnwindSafe for CweModule",1,["cwe_checker_lib::CweModule"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/serde/de/trait.Deserialize.js b/doc/html/implementors/serde/de/trait.Deserialize.js deleted file mode 100644 index 3e01121ca..000000000 --- a/doc/html/implementors/serde/de/trait.Deserialize.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"cwe_checker_install":[["impl<'de> Deserialize<'de> for GhidraConfig"]], -"cwe_checker_lib":[["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Program"],["impl<'de> Deserialize<'de> for Taint"],["impl<'de> Deserialize<'de> for AbstractLocation"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for IntersectMergeStrategy"],["impl<'de> Deserialize<'de> for Expression"],["impl<'de> Deserialize<'de> for FunctionSignature"],["impl<'de, T> Deserialize<'de> for MemRegion<T>where\n T: Deserialize<'de> + AbstractDomain + SizedDomain + HasTop + Debug,"],["impl<'de> Deserialize<'de> for ArgIntent"],["impl<'de> Deserialize<'de> for LogThreadMsg"],["impl<'de> Deserialize<'de> for ByteSize"],["impl<'de> Deserialize<'de> for Variable"],["impl<'de> Deserialize<'de> for ExternSymbol"],["impl<'de> Deserialize<'de> for Jmp"],["impl<'de, T> Deserialize<'de> for Term<T>where\n T: Deserialize<'de>,"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for CweWarning"],["impl<'de> Deserialize<'de> for Datatype"],["impl<'de> Deserialize<'de> for Expression"],["impl<'de> Deserialize<'de> for JmpType"],["impl<'de> Deserialize<'de> for CallingConvention"],["impl<'de> Deserialize<'de> for Program"],["impl<'de> Deserialize<'de> for ExpressionType"],["impl<'de> Deserialize<'de> for RegisterProperties"],["impl<'de> Deserialize<'de> for MemorySegment"],["impl<'de> Deserialize<'de> for BitvectorDomain"],["impl<'de> Deserialize<'de> for UnionMergeStrategy"],["impl<'de> Deserialize<'de> for BricksDomain"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Arg"],["impl<'de> Deserialize<'de> for DatatypeProperties"],["impl<'de> Deserialize<'de> for CallingConvention"],["impl<'de> Deserialize<'de> for Arg"],["impl<'de> Deserialize<'de> for BareMetalConfig"],["impl<'de> Deserialize<'de> for CastOpType"],["impl<'de> Deserialize<'de> for Tid"],["impl<'de> Deserialize<'de> for IntervalDomain"],["impl<'de> Deserialize<'de> for AbstractMemoryLocation"],["impl<'de> Deserialize<'de> for Def"],["impl<'de> Deserialize<'de> for Blk"],["impl<'de> Deserialize<'de> for AbstractIdentifier"],["impl<'de> Deserialize<'de> for ObjectType"],["impl<'de> Deserialize<'de> for Variable"],["impl<'de> Deserialize<'de> for LogMessage"],["impl<'de> Deserialize<'de> for Label"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for CharacterSet"],["impl<'de, T> Deserialize<'de> for DataDomain<T>where\n T: Deserialize<'de> + RegisterDomain,"],["impl<'de> Deserialize<'de> for MergeTopStrategy"],["impl<'de> Deserialize<'de> for BrickDomain"],["impl<'de, T> Deserialize<'de> for NodeValue<T>where\n T: Deserialize<'de> + PartialEq + Eq + Clone,"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for RuntimeMemoryImage"],["impl<'de> Deserialize<'de> for Project"],["impl<'de> Deserialize<'de> for Jmp"],["impl<'de> Deserialize<'de> for BinOpType"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Sub"],["impl<'de, T> Deserialize<'de> for State<T>where\n T: Deserialize<'de> + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,"],["impl<'de> Deserialize<'de> for LogLevel"],["impl<'de> Deserialize<'de> for AccessPattern"],["impl<'de> Deserialize<'de> for Project"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for State"],["impl<'de> Deserialize<'de> for Call"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for StringLocation"],["impl<'de> Deserialize<'de> for Sub"],["impl<'de> Deserialize<'de> for Def"],["impl<'de> Deserialize<'de> for ExternSymbol"],["impl<'de> Deserialize<'de> for Blk"],["impl<'de> Deserialize<'de> for AbstractIdentifierData"],["impl<'de> Deserialize<'de> for Interval"],["impl<'de> Deserialize<'de> for AbstractObject"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for UnOpType"],["impl<'de, K, V, S> Deserialize<'de> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Deserialize<'de>,\n V: AbstractDomain + Deserialize<'de>,\n S: MapMergeStrategy<K, V>,"],["impl<'de> Deserialize<'de> for CharacterInclusionDomain"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/serde/ser/trait.Serialize.js b/doc/html/implementors/serde/ser/trait.Serialize.js deleted file mode 100644 index 9893ec643..000000000 --- a/doc/html/implementors/serde/ser/trait.Serialize.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"cwe_checker_install":[["impl Serialize for GhidraConfig"]], -"cwe_checker_lib":[["impl Serialize for IntervalDomain"],["impl Serialize for Def"],["impl Serialize for Call"],["impl Serialize for Blk"],["impl Serialize for Config"],["impl<T> Serialize for Term<T>where\n T: Serialize,"],["impl<T> Serialize for DataDomain<T>where\n T: Serialize + RegisterDomain,"],["impl Serialize for CastOpType"],["impl Serialize for CharacterInclusionDomain"],["impl Serialize for Sub"],["impl Serialize for Project"],["impl Serialize for Config"],["impl Serialize for Expression"],["impl Serialize for Config"],["impl Serialize for Label"],["impl Serialize for RegisterProperties"],["impl Serialize for Program"],["impl Serialize for Blk"],["impl<T> Serialize for MemRegion<T>where\n T: Serialize + AbstractDomain + SizedDomain + HasTop + Debug,"],["impl Serialize for Config"],["impl Serialize for Interval"],["impl Serialize for CweWarning"],["impl Serialize for Sub"],["impl Serialize for Expression"],["impl Serialize for Variable"],["impl Serialize for ExternSymbol"],["impl Serialize for AbstractObject"],["impl<T> Serialize for State<T>where\n T: Serialize + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,"],["impl Serialize for RuntimeMemoryImage"],["impl Serialize for Config"],["impl Serialize for Tid"],["impl Serialize for Config"],["impl Serialize for CallingConvention"],["impl Serialize for FunctionSignature"],["impl Serialize for Taint"],["impl Serialize for ByteSize"],["impl Serialize for State"],["impl Serialize for Program"],["impl Serialize for LogLevel"],["impl Serialize for AbstractIdentifierData"],["impl Serialize for IntersectMergeStrategy"],["impl Serialize for AbstractIdentifier"],["impl Serialize for MemorySegment"],["impl Serialize for Config"],["impl Serialize for StringLocation"],["impl Serialize for Arg"],["impl Serialize for Arg"],["impl Serialize for MergeTopStrategy"],["impl Serialize for Jmp"],["impl Serialize for AbstractLocation"],["impl<K, V, S> Serialize for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Serialize,\n V: AbstractDomain + Serialize,\n S: MapMergeStrategy<K, V>,"],["impl Serialize for ObjectType"],["impl Serialize for DatatypeProperties"],["impl<T> Serialize for NodeValue<T>where\n T: Serialize + PartialEq + Eq + Clone,"],["impl Serialize for AbstractMemoryLocation"],["impl Serialize for Project"],["impl Serialize for LogMessage"],["impl Serialize for Config"],["impl Serialize for Datatype"],["impl Serialize for Jmp"],["impl Serialize for CallingConvention"],["impl Serialize for ExternSymbol"],["impl Serialize for Config"],["impl Serialize for BitvectorDomain"],["impl Serialize for BrickDomain"],["impl<'a> Serialize for Edge<'a>"],["impl Serialize for BareMetalConfig"],["impl Serialize for Config"],["impl Serialize for ArgIntent"],["impl<'a> Serialize for Node<'a>"],["impl Serialize for UnionMergeStrategy"],["impl Serialize for JmpType"],["impl Serialize for ExpressionType"],["impl Serialize for UnOpType"],["impl Serialize for CharacterSet"],["impl Serialize for BricksDomain"],["impl Serialize for AccessPattern"],["impl Serialize for Config"],["impl Serialize for Def"],["impl Serialize for Config"],["impl Serialize for LogThreadMsg"],["impl Serialize for Variable"],["impl Serialize for BinOpType"],["impl Serialize for Config"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/search-index.js b/doc/html/search-index.js index 09c411d4b..fb985dafe 100644 --- a/doc/html/search-index.js +++ b/doc/html/search-index.js @@ -1,8 +1,8 @@ var searchIndex = JSON.parse('{\ -"acceptance_tests_ghidra":{"doc":"This crate contains acceptance tests using Ghidra as a …","t":"RRDRRFLLLLLLLLLFFFFFFLLLLLF","n":["ARCHITECTURES","COMPILERS","CweTestCase","WINDOWS_ARCHITECTURES","WINDOWS_COMPILERS","all_test_cases","borrow","borrow_mut","clone","clone_into","eq","fmt","from","hash","into","linux_test_cases","mark_architecture_skipped","mark_compiler_skipped","mark_skipped","new_test_cases","print_errors","run_test","to_owned","try_from","try_into","type_id","windows_test_cases"],"q":[[0,"acceptance_tests_ghidra"]],"d":["CPU architectures contained in the test samples","Compilers contained in the test samples","A test case containing the necessary information to run an …","CPU architectures for the Windows-based test samples","Compilers used for the Windows-based test samples","Return a list of all possible test cases (Linux and …","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","Return a list with all possible Linux test cases for the …","Mark test cases using the given CPU architecture as skipped…","Mark test cases using the given compiler as skipped.","Mark test cases using the given CPU architecture + …","Generate test cases for all combinations of CPU …","Print the error messages of failed checks. The error_log …","Run the test case and print to the shell, whether the test …","","","","","Return a list with all possible Windows test cases for the …"],"i":[0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,0],"f":[0,0,0,0,0,[[1,1],[[3,[2]]]],[[]],[[]],[2,2],[[]],[[2,2],4],[[2,5],6],[[]],[[2,7]],[[]],[[1,1],[[3,[2]]]],[1],[1],[[1,1]],[[1,1],[[3,[2]]]],[3],[[2,1,8],[[10,[9]]]],[[]],[[],10],[[],10],[[],11],[[1,1],[[3,[2]]]]],"c":[],"p":[[15,"str"],[3,"CweTestCase"],[3,"Vec"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[15,"usize"],[3,"String"],[4,"Result"],[3,"TypeId"]]},\ -"cwe_checker":{"doc":"This crate defines the command line interface for the …","t":"DLLMMLLFLLMMFLLLLLLMFMMMMFMLLLLLM","n":["CmdlineArgs","augment_args","augment_args_for_update","bare_metal_config","binary","borrow","borrow_mut","check_file_existence","command","command_for_update","config","debug","filter_modules_for_partial_run","fmt","from","from_arg_matches","from_arg_matches_mut","group_id","into","json","main","module_versions","out","partial","quiet","run_with_ghidra","statistics","try_from","try_into","type_id","update_from_arg_matches","update_from_arg_matches_mut","verbose"],"q":[[0,"cwe_checker"]],"d":["Find vulnerable patterns in binary executables","","","Path to a configuration file for analysis of bare metal …","The path to the binary.","","","Return Ok(file_path) only if file_path points to an …","","","Path to a custom configuration file to use instead of the …","Output for debugging purposes. The current behavior of …","Only keep the modules specified by the --partial parameter …","","Returns the argument unchanged.","","","","Calls U::from(self).","Generate JSON output.","","Prints out the version numbers of all known modules.","Write the results to a file instead of stdout. This only …","Specify a specific set of checks to be run as a comma …","Do not print log messages. This prevents polluting stdout …","Run the cwe_checker with Ghidra as its backend.","Include various statistics in the log messages. This can …","","","","","","Print additional debug log messages."],"i":[0,7,7,7,7,7,7,0,7,7,7,7,0,7,7,7,7,7,7,7,0,7,7,7,7,0,7,7,7,7,7,7,7],"f":[0,[1,1],[1,1],0,0,[[]],[[]],[2,[[4,[3,3]]]],[[],1],[[],1],0,0,[[[6,[5]],2]],[[7,8],9],[[]],[10,[[4,[7,11]]]],[10,[[4,[7,11]]]],[[],[[13,[12]]]],[[]],0,[[],[[4,[14]]]],0,0,0,0,[7,[[4,[14]]]],0,[[],4],[[],4],[[],15],[[7,10],[[4,[11]]]],[[7,10],[[4,[11]]]],0],"c":[],"p":[[3,"Command"],[15,"str"],[3,"String"],[4,"Result"],[3,"CweModule"],[3,"Vec"],[3,"CmdlineArgs"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[6,"Error"],[3,"Id"],[4,"Option"],[3,"Error"],[3,"TypeId"]]},\ -"cwe_checker_install":{"doc":"This crate automates the installation of cwe_checker. It …","t":"DDLLLLLLLLFFFFLFLLLLLLFFMMLFLLFFFFFLLLLLLLFMLL","n":["CmdlineArgs","GhidraConfig","augment_args","augment_args_for_update","borrow","borrow","borrow_mut","borrow_mut","command","command_for_update","copy_config_json","copy_dir_all","copy_ghidra_plugin","create_ghidra_json","deserialize","find_ghidra","fmt","fmt","from","from","from_arg_matches","from_arg_matches_mut","get_search_locations","get_user_choice","ghidra_path","ghidra_path","group_id","install_cwe_checker","into","into","is_good_ghidra_location","is_hidden","main","search_for_ghidrarun","select_ghidra_version","serialize","try_from","try_from","try_into","try_into","type_id","type_id","uninstall","uninstall","update_from_arg_matches","update_from_arg_matches_mut"],"q":[[0,"cwe_checker_install"]],"d":["Installs cwe_checker","Structure for ghidra.json file","","","","","","","","","Copies src/config.json to specified location","Recursive copy of files and directories.","Copy src/ghidra to provided location.","Creates ghidra.json for a Ghidra location at provided …","","Returns None if Ghidra were not found. Else returns path …","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns vector of os-specific locations","Determines Ghidra versions and provides selection …","Path to a ghidra installation.","Path to a ghidra installation","","Runs Cargo install to install cwe_checker.","Calls U::from(self).","Calls U::from(self).","Determines if a path is a ghidra installation","check whether a path starts with “.”, indicating a …","","Searches for a file containing “ghidraRun” at provided …","Determines Ghidra versions and provides selection …","","","","","","","","Removes provided locations and uninstalls cwe_checker via …","If true, cwe_checker will be uninstalled.","",""],"i":[0,0,9,9,9,7,9,7,9,9,0,0,0,0,7,0,9,7,9,7,9,9,0,0,9,7,9,0,9,7,0,0,0,0,0,7,9,7,9,7,9,7,0,9,9,9],"f":[0,0,[1,1],[1,1],[[]],[[]],[[]],[[]],[[],1],[[],1],[2,3],[[[4,[2]],[4,[2]]],3],[2,3],[[2,5],3],[6,[[8,[7]]]],[[],[[3,[5]]]],[[9,10],11],[[7,10],11],[[]],[[]],[12,[[8,[9,13]]]],[12,[[8,[9,13]]]],[[],[[14,[5]]]],[[[14,[5]]],[[3,[5]]]],0,0,[[],[[16,[15]]]],[[],3],[[]],[[]],[2,17],[18,17],[[],3],[2,[[14,[5]]]],[[[14,[5]]],[[3,[5]]]],[[7,19],8],[[],8],[[],8],[[],8],[[],8],[[],20],[[],20],[[2,2],3],0,[[9,12],[[8,[13]]]],[[9,12],[[8,[13]]]]],"c":[],"p":[[3,"Command"],[3,"Path"],[6,"Result"],[8,"AsRef"],[3,"PathBuf"],[8,"Deserializer"],[3,"GhidraConfig"],[4,"Result"],[3,"CmdlineArgs"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[6,"Error"],[3,"Vec"],[3,"Id"],[4,"Option"],[15,"bool"],[3,"DirEntry"],[8,"Serializer"],[3,"TypeId"]]},\ -"cwe_checker_lib":{"doc":"The main library of the cwe_checker containing all CWE …","t":"DGAALLALLFALMAAMLLLLAMIDDEEEEEEEDIDNNIDDDNIDDNNNIIINNNNNIIDNNNNNLLLLLLKLLLLKLLKLLKLLKLLLLLLKLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLKLLKLLKLLKLLKLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLKLLLLLLLLKLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLKLLLLMMMMMMAAAAAAAAAAAAAIDQLLFFFLLKLLKLLKKKLLLKKKLKGFFFFDLLLLLLFLFFLLLLLLLLLDIQQQLLLLLLLKLLLLLKLLLLLLKIDQLLFFFFFLLKLLKLLKLLLKKKLKKDDLLLLLLLLLFLLLLLLLLLLLLLLMLLLLLLLLLLMLLLLLLLALLLLLLLLLLLLFFFAFFFFFNNNNNNNNNENGNENLLLLLLLLLLLLLLLLLLFFFLLLLLLLLLLLLLLLLMMMMNENLLLLLLLLLFLLLLLLMMHDGDDGLLLMLLLLLLLLLLLLLMLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLMLLLALLLLFLLLLLMLLLLLLLLLLLLLLDNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFDDLLLLLLLALLLLMLLLLLLLLLLFLAMLLLLLLLDLLLMMLLLLLLLMLLLLMLLLLLLLLLLLLLLLLLLLMLLLLLLLMLLLMLLLLLLMALLLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLQIKKKKAAAAAAAAAAAAAAAAHFHDNNNENLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLHFHDLLFLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLHFHDDLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLHDENNLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHHHFHDLLFLLLLLLLFFLLFLLLLLHDLLFFFLLLLLLLFLLLLLLHFFFHDLLFLLLLLLLLLLLLLLENNEGIDNNNNNNDNNNNDNENNEDENEDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNENNNNNNNDDNNDNNNDNDDNNENNDLLLMMMLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLMMMMKLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLMLMMMLLLLLLLLLLLLLLLLLLLLLKLKLLLLLMLMMMMMMLLMMMMLLLLMLLMLLLLLMMLLLMLLLMMLLLLLLLLLLLLLLLLLLLLLLMLLKLKLKLMMLLKLMLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDENNNNNNDNNNNNDDDNDEDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDENENNNDDNDNNDNDMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMLLMLLLLMMMMMMLLLLLLLLLLLLLLLLLMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMDMLLLLLLLMFLMLLMMMLLLLLLLAAFFAAAFAFFFFFDDMLLLLMLLLLLLLLLLMMLLLLLLLLLLLLLFMMMMLLLLLLLLLLMFFNDNNNNEDDENFLMLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMMLLLLLMLLLLFLLLLLMLLMMLMLLLLLLLLLLLLLLLLLLLLLMFFFF","n":["CweModule","CweModuleFn","abstract_domain","analysis","borrow","borrow_mut","checkers","fmt","from","get_modules","intermediate_representation","into","name","pcode","pipeline","run","to_string","try_from","try_into","type_id","utils","version","AbstractDomain","AbstractIdentifier","AbstractIdentifierData","AbstractLocation","AbstractMemoryLocation","BitvectorDomain","BrickDomain","BricksDomain","CharacterInclusionDomain","CharacterSet","DataDomain","DomainInsertion","DomainMap","GlobalAddress","GlobalPointer","HasTop","IntersectMergeStrategy","Interval","IntervalDomain","Location","MapMergeStrategy","MemRegion","MergeTopStrategy","Pointer","Pointer","Register","RegisterDomain","SizedDomain","SpecializeByConditional","Top","Top","Top","Top","Top","TryToBitvec","TryToInterval","UnionMergeStrategy","Value","Value","Value","Value","Value","add","add","add","add","add","add","add_not_equal_bound","add_not_equal_bound","add_not_equal_bound","add_offset","add_offset_to_all_indices","add_signed_greater_equal_bound","add_signed_greater_equal_bound","add_signed_greater_equal_bound","add_signed_less_equal_bound","add_signed_less_equal_bound","add_signed_less_equal_bound","add_unsigned_greater_equal_bound","add_unsigned_greater_equal_bound","add_unsigned_greater_equal_bound","add_unsigned_less_equal_bound","add_unsigned_less_equal_bound","add_unsigned_less_equal_bound","adjust_end_to_value_in_stride","adjust_start_to_value_in_stride","adjust_to_stride_and_remainder","all_bricks_are_top","append_string_domain","append_string_domain","append_string_domain","bin_op","bin_op","bin_op","bin_op","bin_op_bytesize","bitwise_not","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bytesize","bytesize","bytesize","bytesize","bytesize","bytesize","bytesize","bytesize","cast","cast","cast","cast","clear_top_values","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains","contains_top","create_char_domain","create_char_domain","create_char_domain","create_empty_string_domain","create_empty_string_domain","create_empty_string_domain","create_float_value_domain","create_float_value_domain","create_float_value_domain","create_integer_domain","create_integer_domain","create_integer_domain","create_pointer_value_domain","create_pointer_value_domain","create_pointer_value_domain","create_top_value_domain","create_top_value_domain","create_top_value_domain","deref","deref","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","end","entry_map","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equal_as_value_sets","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fits_into_size","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg","from_global_address","from_global_address","from_iter","from_stack_position","from_target","from_var","from_var","get","get_absolute_value","get_address_bytesize","get_if_absolute_value","get_if_unique_target","get_location","get_path_hints","get_relative_values","get_tid","get_unsized","hash","hash","hash","hash","hash","hash","hash","hash","hash","insert_at_byte_index","int_2_comp","intersect","intersect","intersect","intersection","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_empty","is_less_or_equal","is_less_or_equal","is_top","is_top","is_top","is_top","is_top","is_top","is_top","is_top","is_top","is_top","iter","mark_all_values_as_top","mark_interval_values_as_top","merge","merge","merge","merge","merge","merge","merge","merge","merge","merge_map","merge_map","merge_map","merge_map","merge_write_top","neg","neg","new","new","new","new","new","new_empty","new_top","new_top","new_top","new_top","new_top","normalize","partial_cmp","partial_cmp","partial_cmp","partial_cmp","piece","referenced_ids","remove","remove_ids","replace_abstract_id","replace_all_ids","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","set_absolute_value","set_contains_top_flag","set_relative_values","shift_left","sign_extend","signed_intersect","signed_merge","signed_merge","signed_merge_and_widen","signed_mul","signed_mul","start","stride","sub","sub","sub","sub","sub","subpiece","subpiece","subpiece","subpiece","subpiece","subpiece_higher","subpiece_lower","subtract_offset","to_json_compact","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","top","top","top","top","top","top","top","top","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_to_bitvec","try_to_bitvec","try_to_bitvec","try_to_bitvec","try_to_interval","try_to_interval","try_to_interval","try_to_interval","try_to_offset","try_to_offset_interval","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","un_op","un_op","un_op","un_op","union","unset_contains_top_flag","unwrap_register","unwrap_value","unwrap_value","update_widening_lower_bound","update_widening_upper_bound","values","values_mut","widen","widen","with_path_hint","without_last_path_hint","without_widening_hints","without_widening_hints","without_widening_hints","zero_extend","zero_extend","address","size","offset","offset","size","target","backward_interprocedural_fixpoint","callgraph","dead_variable_elimination","expression_propagation","fixpoint","forward_interprocedural_fixpoint","function_signature","graph","interprocedural_fixpoint_generic","pointer_inference","stack_alignment_substitution","string_abstraction","vsa_results","Context","GeneralizedContext","Value","borrow","borrow_mut","create_computation","create_computation_with_bottom_up_worklist_order","create_computation_with_top_down_worklist_order","from","get_context","get_graph","get_graph","into","merge","merge","new","specialize_conditional","split_call_stub","split_return_stub","try_from","try_into","type_id","update_call_stub","update_callsite","update_def","update_edge","update_jumpsite","CallGraph","find_call_sequences_to_target","get_program_callgraph","compute_alive_vars","remove_dead_var_assignments","Context","borrow","borrow_mut","from","get_graph","into","merge","merge_def_assignments_to_same_var","new","propagate_input_expression","propagate_input_expressions","specialize_conditional","try_from","try_into","type_id","update_call","update_call_stub","update_def","update_jump","update_return","Computation","Context","EdgeLabel","NodeLabel","NodeValue","borrow","borrow_mut","compute","compute_with_max_steps","from","from_node_priority_list","get_context","get_graph","get_graph","get_node_value","get_worklist","has_stabilized","into","merge","new","node_values","set_node_value","try_from","try_into","type_id","update_edge","Context","GeneralizedContext","Value","borrow","borrow_mut","create_bottom_up_worklist","create_computation","create_computation_with_bottom_up_worklist_order","create_computation_with_top_down_worklist_order","create_top_down_worklist","from","get_context","get_graph","get_graph","into","merge","merge","new","specialize_conditional","try_from","try_into","type_id","update_call","update_call_stub","update_def","update_edge","update_jump","update_return","AccessPattern","FunctionSignature","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","compute_function_signatures","default","default","deserialize","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","fmt","from","from","get_stack_params_total_size","global_parameters","into","into","is_accessed","is_dereferenced","is_mutably_dereferenced","is_top","merge","new","new","new_unknown_access","parameters","partial_cmp","serialize","serialize","set_dereference_flag","set_mutably_dereferenced_flag","set_read_flag","set_unknown_access_flags","stubs","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","with_dereference_flag","with_mutably_dereferenced_flag","with_read_flag","compute_return_value_for_stubbed_function","generate_param_access_stubs","get_stubbed_variadic_symbols","return_value_stubs","copy_param","new_mem_object_id","or_null","param_plus_unknown_offset","untracked","BlkEnd","BlkStart","Block","Call","CallCombine","CallReturn","CallSource","CrCallStub","CrReturnStub","Edge","ExternCallStub","Graph","Jump","Node","ReturnCombine","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","equivalent","equivalent","fmt","fmt","fmt","from","from","get_block","get_entry_nodes_of_subs","get_program_cfg","get_program_cfg_with_logs","get_sub","hash","hash","into","into","serialize","serialize","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","call","return_","source","target","CallFlowCombinator","NodeValue","Value","borrow","borrow_mut","clone","clone_into","deserialize","eq","equivalent","from","into","merge_option","serialize","to_owned","try_from","try_into","type_id","unwrap_value","call_stub","interprocedural_flow","CWE_MODULE","Config","Data","PointerInference","State","ValueDomain","add_directly_reachable_ids_to_id_set","add_param_object_from_callee","add_recursively_referenced_ids_to_id_set","allocation_symbols","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","check_def_for_null_dereferences","clear_non_callee_saved_register","clear_stack_parameter","clone","clone","clone_into","clone_into","collected_logs","compute","deserialize","deserialize","eq","eq","equivalent","equivalent","eval","eval_address_at_def","eval_at_jmp","eval_parameter_arg","eval_parameter_arg_at_call","eval_value_at_def","extract_pi_analysis_results","fmt","fmt","from","from","from","from_fn_sig","generate_compact_json","get_context","get_fn_tid","get_global_mem_id","get_graph","get_id_renaming_map_at_call_tid","get_node_value","get_register","get_state_at_jmp_tid","handle_load","handle_register_assign","handle_store","hash","into","into","into","is_top","load_value","memory","merge","new","new","object","print_compact_json","print_yaml","remove_non_callee_saved_register","remove_unreferenced_objects","run","serialize","serialize","set_mips_link_register","set_register","specialize_by_expression_result","stack_id","store_value","to_json_compact","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write_to_address","AbstractObject","GlobalMem","Heap","ObjectType","Stack","add_ids_to_pointer_targets","add_offset_to_all_indices","assume_arbitrary_writes","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","deserialize","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","from","from","get_mem_region","get_object_type","get_referenced_ids_overapproximation","get_referenced_ids_underapproximation","get_value","hash","into","into","is_top","is_unique","mark_as_not_unique","merge","merge_value","new","overwrite_mem_region","overwrite_with","partial_cmp","remove_ids","replace_ids","serialize","serialize","set_value","to_json_compact","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","substitute_and_on_stackpointer","Config","StringAbstraction","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","compute","context","deserialize","eq","equivalent","fmt","format_string_index","from","from","get_computation","get_context","get_graph","get_node_value","hash","into","into","new","run","serialize","state","string_symbols","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","Context","add_constant_or_top_value_to_return_locations","add_new_string_abstract_domain","approximate_string_domain_from_datatype","block_first_def_set","block_start_node_map","borrow","borrow_mut","concat_domains","create_abstract_domain_entries_for_function_return_values","create_string_domain_for_sprintf_snprintf","create_string_domain_using_constants_and_sub_domains","create_string_domain_using_data_type_approximations","extern_symbol_map","fetch_constant_and_domain_for_format_specifier","fetch_constant_domain_if_available","fetch_subdomains_if_available","filter_out_all_non_string_args","format_string_index_map","from","get_constant_char_domain","get_constant_integer_domain","get_constant_string_domain","get_constant_target","get_graph","handle_free","handle_generic_symbol_calls","handle_memcpy_calls","handle_scanf_calls","handle_sprintf_and_snprintf_calls","handle_sscanf_calls","handle_strcat_and_strncat_calls","handle_string_symbol_calls","handle_unknown_symbol_calls","has_input_target","has_multiple_targets","has_return_target","into","jmp_to_blk_end_node_map","map_source_string_parameters_to_return_arguments","merge","merge_domains_from_multiple_pointer_targets","new","no_specifiers","parse_bitvec_to_char","parse_format_string_and_add_new_string_domain","pointer_inference_results","process_domains_for_memcpy_calls","process_domains_for_memcpy_calls_with_one_unique_input","process_second_input_domain","project","push_constant_subsequences_before_and_between_specifiers","push_constant_suffix_if_available","push_format_specifier_approximation","re_format_specifier","source_string_mapped_to_return_locations","specialize_conditional","string_symbol_map","symbol_calls","trim_format_specifier","try_from","try_into","type_id","update_call","update_call_stub","update_def","update_jump","update_return","State","add_global_pointer_if_input_is_string_constant","add_new_heap_to_string_entry","add_new_stack_offset_to_string_entry","add_new_variable_to_pointer_entry","add_pointer_to_stack_map","add_relative_targets_to_string_maps","add_top_domain_values_for_additional_pointer_targets","add_unassigned_return_pointer","borrow","borrow_mut","check_if_output_is_string_pointer_and_add_targets","clone","clone_into","collect_all_tracked_pointers","delete_string_map_entries_if_no_pointer_targets_are_tracked","deserialize","eq","equivalent","evaluate_constant","filter_string_map_entries","fmt","from","get_current_sub","get_heap_to_string_map","get_pointer_inference_state","get_stack_offset_to_pointer_map","get_stack_offset_to_string_map","get_unassigned_return_pointer","get_variable_to_pointer_map","handle_assign_and_load","handle_store","into","is_stack_pointer","is_top","merge","new","pointer_added_to_stack_maps","pointer_added_to_variable_maps","pointer_is_in_pointer_maps","pointer_targets_partially_tracked","remove_heap_to_string_entry","remove_non_callee_saved_pointer_entries_for_external_symbol","serialize","set_all_maps_empty","set_pointer_inference_state","set_variable_to_pointer_map","to_owned","try_from","try_into","type_id","ValueDomain","VsaResult","eval_address_at_def","eval_at_jmp","eval_parameter_arg_at_call","eval_value_at_def","cwe_119","cwe_134","cwe_190","cwe_215","cwe_243","cwe_332","cwe_367","cwe_416","cwe_426","cwe_467","cwe_476","cwe_560","cwe_676","cwe_78","cwe_782","cwe_789","CWE_MODULE","check_cwe","CWE_MODULE","Config","GlobalReadable","GlobalWriteable","NonGlobal","StringLocation","Unknown","borrow","borrow","borrow_mut","borrow_mut","check_cwe","clone","clone","clone_into","clone_into","deserialize","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","from","from","into","into","serialize","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","check_cwe","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","check_cwe","CWE_MODULE","Config","WarningContext","borrow","borrow","borrow_mut","borrow_mut","check_cwe","clone","clone","clone_into","clone_into","cmp","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","from","from","hash","hash","into","into","new","partial_cmp","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","Taint","Tainted","Top","bin_op","borrow","borrow","borrow_mut","borrow_mut","bytesize","cast","check_cwe","clone","clone","clone_into","clone_into","deserialize","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","fmt","from","from","hash","hash","into","into","is_tainted","is_top","merge","new_top","serialize","serialize","subpiece","to_owned","to_owned","to_string","top","try_from","try_from","try_into","try_into","type_id","type_id","un_op","CWE_MODULE","UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE","UPPER_BOUND_CORRECT_UMASK_ARG_VALUE","check_cwe","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","generate_cwe_warnings","get_calls","hash","into","resolve_symbols","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","check_if_string_domain_indicates_vulnerability","check_system_call_parameter","clone","clone_into","deserialize","eq","equivalent","fmt","from","generate_cwe_warning","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","check_cwe","generate_cwe_warning","handle_sub","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","Arg","Assign","BinOp","BinOpType","Bitvector","BitvectorExtended","Blk","BoolAnd","BoolNegate","BoolOr","BoolXOr","Branch","BranchInd","ByteSize","CBranch","Call","CallInd","CallOther","CallingConvention","Cast","CastOpType","Char","Const","Datatype","DatatypeProperties","Def","Double","Expression","ExternSymbol","Float","Float2Float","FloatAbs","FloatAdd","FloatCeil","FloatDiv","FloatEqual","FloatFloor","FloatLess","FloatLessEqual","FloatMult","FloatNaN","FloatNegate","FloatNotEqual","FloatRound","FloatSqrt","FloatSub","Int2Comp","Int2Float","IntAdd","IntAnd","IntCarry","IntDiv","IntEqual","IntLeft","IntLess","IntLessEqual","IntMult","IntNegate","IntNotEqual","IntOr","IntRem","IntRight","IntSBorrow","IntSCarry","IntSDiv","IntSExt","IntSLess","IntSLessEqual","IntSRem","IntSRight","IntSub","IntXOr","IntZExt","Integer","Jmp","Load","Long","LongDouble","LongLong","Piece","Pointer","PopCount","Program","Project","Register","Return","RuntimeMemoryImage","Short","Stack","Store","Sub","Subpiece","Term","Tid","Trunc","UnOp","UnOpType","Unknown","Var","Variable","add","add_assign","add_global_memory_offset","address","address_base_offset","addresses","as_bit_length","bin_op","bin_op","blk_id_at_address","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bytesize","bytesize","bytesize","bytesize","callee_saved_register","calling_convention","calling_convention","calling_conventions","cast","cast","char_size","check_for_zero_extension","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cpu_architecture","datatype_properties","defs","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","div","div_assign","double_size","empty","entry_points","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","eval_stack_offset","extern_symbols","find_block","find_sub_containing_jump","float_parameter_register","float_return_register","float_size","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_var","get_all_parameter_register","get_all_return_register","get_calling_convention","get_calling_convention","get_data_type","get_pointer_bytesize","get_ro_data_pointer_at_address","get_size_from_data_type","get_specific_calling_convention","get_standard_calling_convention","get_unique_parameter","get_unique_return_register","has_var_args","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","indirect_jmp_targets","input_vars","integer_parameter_register","integer_return_register","integer_size","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_ir_sub_term","into_resize_signed","into_resize_signed","into_resize_unsigned","into_resize_unsigned","is_address_writeable","is_global_memory_address","is_interval_readable","is_interval_writeable","is_little_endian","is_little_endian_byte_order","is_temp","jmps","long_double_size","long_long_size","long_size","memory_segments","mul","mul_assign","name","name","name","name","new","new","new","new_from_bare_metal","no_return","normalize","not","parameters","partial_cmp","partial_cmp","partial_cmp","plus","plus_const","pointer_size","program","read","read_string_until_null_terminator","recursion_depth","register_set","rem","rem_assign","remove_nonexisting_indirect_jump_targets","return_values","runtime_memory_image","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","shl","shl_assign","short_size","shr","shr_assign","signed_add_overflow_checked","signed_add_overflow_checked","signed_mult_with_overflow_flag","signed_mult_with_overflow_flag","signed_sub_overflow_checked","signed_sub_overflow_checked","size","stack_pointer_register","sub","sub_assign","subpiece","subpiece","subs","substitute_input_var","substitute_input_var","substitute_trivial_operations","sum","term","tid","tid","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","un_op","un_op","with_id_suffix","address","data_type","data_type","expr","size","address","address","value","value","var","var","arg","arg","arg","description","lhs","low_byte","op","op","op","rhs","size","size","size","condition","description","return_","return_","return_","target","target","target","Arg","ArgIntent","BOOL_AND","BOOL_NEGATE","BOOL_OR","BOOL_XOR","BRANCH","BRANCHIND","Blk","CALL","CALLIND","CALLOTHER","CBRANCH","COPY","Call","CallingConvention","Def","Direct","Expression","ExpressionType","ExternSymbol","FLOAT2FLOAT","FLOAT_ABS","FLOAT_ADD","FLOAT_CEIL","FLOAT_DIV","FLOAT_EQUAL","FLOAT_FLOOR","FLOAT_LESS","FLOAT_LESSEQUAL","FLOAT_MULT","FLOAT_NAN","FLOAT_NEG","FLOAT_NOTEQUAL","FLOAT_ROUND","FLOAT_SQRT","FLOAT_SUB","INPUT","INT2FLOAT","INT_2COMP","INT_ADD","INT_AND","INT_CARRY","INT_DIV","INT_EQUAL","INT_LEFT","INT_LESS","INT_LESSEQUAL","INT_MULT","INT_NEGATE","INT_NOTEQUAL","INT_OR","INT_REM","INT_RIGHT","INT_SBORROW","INT_SCARRY","INT_SDIV","INT_SEXT","INT_SLESS","INT_SLESSEQUAL","INT_SREM","INT_SRIGHT","INT_SUB","INT_XOR","INT_ZEXT","Indirect","Jmp","JmpType","LOAD","Label","OUTPUT","PIECE","POPCOUNT","Program","Project","RETURN","RegisterProperties","STORE","SUBPIECE","Sub","TRUNC","Variable","address","addresses","arguments","base_register","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","call","call_string","calling_convention","calling_convention","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","condition","cpu_architecture","datatype_properties","defs","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","entry_points","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extern_symbols","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","goto","has_var_args","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","image_base","input0","input1","input2","intent","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_ir_blk","into_ir_def","into_ir_program","into_ir_project","is_virtual","jmps","lhs","location","lsb","mnemonic","mnemonic","name","name","name","name","new_const","new_virtual","no_return","normalize","parse_address_to_bitvector","parse_const_to_bitvector","parse_to_bytesize","program","register","register_calling_convention","register_properties","return_","rhs","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","size","size","stack_pointer_register","subs","target","target_hints","tid","to_load_def","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","value","var","AnalysisResults","binary","borrow","borrow_mut","clone","clone_into","compute_function_signatures","compute_pointer_inference","compute_string_abstraction","control_flow_graph","disassemble_binary","from","function_signatures","into","new","pointer_inference","project","string_abstraction","to_owned","try_from","try_into","type_id","with_function_signatures","with_pointer_inference","with_string_abstraction","arguments","binary","get_binary_base_address","get_ghidra_plugin_path","ghidra","graph_utils","log","read_config_file","symbol_utils","calculate_parameter_locations","get_input_format_string","get_variable_parameters","parse_format_string_destination_and_return_content","parse_format_string_parameters","BareMetalConfig","MemorySegment","base_address","borrow","borrow","borrow_mut","borrow_mut","bytes","clone","clone","clone_into","clone_into","deserialize","deserialize","eq","eq","equivalent","equivalent","execute_flag","flash_base_address","fmt","fmt","from","from","from_bare_metal_file","from_elf_segment","from_pe_section","hash","hash","into","into","new_bare_metal_ram_segment","parse_binary_base_address","parse_hex_string_to_u64","processor_id","ram_base_address","ram_size","read_flag","serialize","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","write_flag","get_project_from_ghidra","is_sink_call_reachable_from_source_call","Cwe","CweWarning","Debug","Error","Info","Log","LogLevel","LogMessage","LogThread","LogThreadMsg","Terminate","add_debug_log_statistics","addresses","addresses","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","collect","collect_and_deduplicate","create_disconnected_sender","default","description","deserialize","deserialize","deserialize","deserialize","drop","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get_msg_sender","hash","hash","hash","hash","into","into","into","into","into","level","location","location","name","new","new_debug","new_error","new_info","other","other","partial_cmp","partial_cmp","partial_cmp","partial_cmp","print_all_messages","serialize","serialize","serialize","serialize","source","source","spawn","symbols","symbols","text","tids","tids","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","version","find_symbol","get_calls_to_symbols","get_callsites","get_symbol_map"],"q":[[0,"cwe_checker_lib"],[22,"cwe_checker_lib::abstract_domain"],[581,"cwe_checker_lib::abstract_domain::AbstractLocation"],[583,"cwe_checker_lib::abstract_domain::AbstractMemoryLocation"],[587,"cwe_checker_lib::analysis"],[600,"cwe_checker_lib::analysis::backward_interprocedural_fixpoint"],[627,"cwe_checker_lib::analysis::callgraph"],[630,"cwe_checker_lib::analysis::dead_variable_elimination"],[632,"cwe_checker_lib::analysis::expression_propagation"],[652,"cwe_checker_lib::analysis::fixpoint"],[678,"cwe_checker_lib::analysis::forward_interprocedural_fixpoint"],[706,"cwe_checker_lib::analysis::function_signature"],[764,"cwe_checker_lib::analysis::function_signature::stubs"],[768,"cwe_checker_lib::analysis::function_signature::stubs::return_value_stubs"],[773,"cwe_checker_lib::analysis::graph"],[825,"cwe_checker_lib::analysis::graph::Node"],[829,"cwe_checker_lib::analysis::interprocedural_fixpoint_generic"],[848,"cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"],[850,"cwe_checker_lib::analysis::pointer_inference"],[942,"cwe_checker_lib::analysis::pointer_inference::object"],[1000,"cwe_checker_lib::analysis::stack_alignment_substitution"],[1001,"cwe_checker_lib::analysis::string_abstraction"],[1037,"cwe_checker_lib::analysis::string_abstraction::context"],[1105,"cwe_checker_lib::analysis::string_abstraction::state"],[1156,"cwe_checker_lib::analysis::vsa_results"],[1162,"cwe_checker_lib::checkers"],[1178,"cwe_checker_lib::checkers::cwe_119"],[1180,"cwe_checker_lib::checkers::cwe_134"],[1218,"cwe_checker_lib::checkers::cwe_190"],[1237,"cwe_checker_lib::checkers::cwe_215"],[1239,"cwe_checker_lib::checkers::cwe_243"],[1258,"cwe_checker_lib::checkers::cwe_332"],[1277,"cwe_checker_lib::checkers::cwe_367"],[1279,"cwe_checker_lib::checkers::cwe_416"],[1316,"cwe_checker_lib::checkers::cwe_426"],[1335,"cwe_checker_lib::checkers::cwe_467"],[1354,"cwe_checker_lib::checkers::cwe_476"],[1404,"cwe_checker_lib::checkers::cwe_560"],[1408,"cwe_checker_lib::checkers::cwe_676"],[1430,"cwe_checker_lib::checkers::cwe_78"],[1451,"cwe_checker_lib::checkers::cwe_782"],[1455,"cwe_checker_lib::checkers::cwe_789"],[1474,"cwe_checker_lib::intermediate_representation"],[2062,"cwe_checker_lib::intermediate_representation::Arg"],[2067,"cwe_checker_lib::intermediate_representation::Def"],[2073,"cwe_checker_lib::intermediate_representation::Expression"],[2086,"cwe_checker_lib::intermediate_representation::Jmp"],[2094,"cwe_checker_lib::pcode"],[2508,"cwe_checker_lib::pipeline"],[2533,"cwe_checker_lib::utils"],[2542,"cwe_checker_lib::utils::arguments"],[2547,"cwe_checker_lib::utils::binary"],[2596,"cwe_checker_lib::utils::ghidra"],[2597,"cwe_checker_lib::utils::graph_utils"],[2598,"cwe_checker_lib::utils::log"],[2724,"cwe_checker_lib::utils::symbol_utils"]],"d":["A structure containing general information about a CWE …","The generic function signature for the main function of a …","This module defines traits describing general properties …","Modules necessary for graph-based and fixpoint-based …","","","The implemented CWE checks. See their module descriptions …","Print the module name and its version number.","Returns the argument unchanged.","Get a list of all known analysis modules.","This module defines the intermediate representation used …","Calls U::from(self).","The name of the CWE check.","Types to describe Ghidra P-Code and functions to translate …","This module contains functions and structs helpful for …","The function that executes the check and returns CWE …","","","","","This module contains various utility modules and helper …","The version number of the CWE check. Should be incremented …","The main trait describing an abstract domain.","An abstract identifier is used to identify an object or a …","The data contained in an abstract identifier","An abstract location describes how to find the value of a …","An abstract memory location is either an offset from the …","The BitvectorDomain is a simple abstract domain describing …","The single brick domain that represents a set of character …","The BricksDomain contains a sorted list of single …","The CharacterInclusionDomain is a abstract domain …","A domain that represents character sets.","An abstract domain representing a set of base values plus …","A set of functions that all abstract string domains should …","A DomainMap<Key, Value, MapMergeStrategy> is a wrapper …","The value itself is a constant address to global memory. …","The location is in memory. One needs to follow the pointer …","An abstract domain implementing this trait has a global …","A MapMergeStrategy where the merge function only keeps keys","A strided interval of values with a fixed byte size.","An abstract domain representing values in an interval …","A location inside the current memory object.","A MapMergeStrategy determines how the merge-method for a …","A memory region is an abstract domain representing a …","A MapMergeStrategy where for every key that only occurs in …","The location is in memory. One needs to follow the pointer …","A pointer which needs to be followed to get to the actual …","The location is given by a register.","A trait for abstract domains that can represent values …","A trait for types representing values with a fixed size …","A trait for domains whose values can be restricted by …","The Top value of the domain, representing the case that …","The Top value represents an invalid sequence.","The Top value represents the powerset over the alphabet of …","The Top value stands for an empty set of certainly …","The Top value represents a character set of all allowed …","A conversion trait for abstract domains that can represent …","A conversion trait for abstract domains that can represent …","A MapMergeStrategy where key-value pairs whose key is only …","The exact value of the bitvector is known.","This values represents a sequence of string subsequences.","The set of character sequences as well as the minimum and …","The set of certainly contained characters and a set of …","Represents a real subset of all allowed characters.","","","Add a value to the memory region.","Compute the interval of possible results if one adds a …","Compute the interval of possible results if one adds a …","","Return the restriction of self to values satisfying …","","","Add offset to all contained absolute and relative values …","Add the given offset to the indices of all values …","Return the restriction of self to values satisfying …","","","Return the restriction of self to values satisfying …","","","Return the restriction of self to values satisfying …","","","Return the restriction of self to values satisfying …","","","Round down self.end to the nearest value such that …","Round up self.start to the nearest value such that …","Change the given interval such that it only contains …","Checks whether all bricks of the BricksDomain are Top …","Inserts a string domain at a certain position if order is …","Appends new bricks to the current BricksDomain. Used to …","Append string domain as part of a concatenation. …","Compute the (abstract) result of a binary operation","Evaluate the given binary operation.","Compute the (abstract) result of a binary operation","Compute the result of a binary operation between two …","Return the bytesize of the result of the given binary …","Compute the bitwise negation of values in the interval. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the size of the represented value in bytes.","Return the bytesize of self.","Get the bytesize of the value represented by the abstract …","Get the bytesize of the value represented by the abstract …","Get the bytesize of the value represented by the abstract …","Return the bytesize of self.","Get the size in bytes of values contained in the interval.","Return the size in bytes of the represented values.","Perform a typecast to extend a bitvector or to cast …","Perform a size-changing cast on a bitvector.","Cast a bitvector using the given cast type","Compute the result of a cast operation on the interval …","Remove all values representing the Top element from the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return true if bitvec is contained in the strided interval.","Returns true if the domain contains Top values, i.e. …","Creates a string domain with characters that usually …","Create a string domain that approximates char values.","Create a string domain that approximates char values.","Creates an empty string domain.","Create a string domain that represents an empty string.","Create a string domain that represents an empty string.","Creates a string domain with characters that usually …","Create a string domain that approximates float values.","Create a string domain that approximates float values.","Creates a string domain with characters that usually …","Create a string domain that approximates integer values.","Create a string domain that approximates integer values.","Creates a string domain with characters that usually …","Create a string domain that approximates pointer values.","Create a string domain that approximates pointer values.","Creates a top value of the currently used domain.","Creates a top value of the domain.","Creates a top value of the domain.","","","","","","","","","","","","","","","","","","","","","The end of the interval. The bound is included in the …","Get the map of all elements including their offset into …","","","","","","","","","","","","","","","","","","Returns true if the two intervals represent the same value …","","","","","","","","","","","","","","","","","","Check whether all values in the interval are representable …","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","Create an interval that only contains the given bitvector.","Returns the argument unchanged.","Generate an interval domain without widening hints.","Create an interval containing only bitvec.","Returns the argument unchanged.","Returns the argument unchanged.","Returns a new instance of the Bricks Domain","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Generate a new DomainMap from the BTreeMap that it should …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create an abstract identifier from a parameter argument.","Create an abstract identifier from an address into global …","Create an abstract location representing an address …","Generate a new DomainMap from an iterator over the …","Create an abstract location on the stack. The returned …","Return a new value representing a variable plus an offset, …","Create a new abstract identifier where the abstract …","Create an abstract location from a variable corresponding …","Get the value at the given position. If there is no value …","Return the absolute value contained in the domain if …","Get the bytesize of pointers for the address space that …","Return the contained absolute value only if self contains …","Return the target ID and offset of the contained relative …","Get the location component of the abstract ID.","Get the path hints array of self.","Return the relative values contained in the domain.","Get the TID representing the time component of the …","Get the value at the given position regardless of the …","","","","","","","","","","Insert a value into the memory region at the given …","Take the 2’s complement of values in the interval.","Return the intersection of two values or an error if the …","Compute the intersetion of two DataDomains.","Compute the intersection of two intervals. Return an error …","Takes the intersection of two character sets. None of the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the domain does not represent any value.","Checks whether the current BricksDomain is less or equal …","Checks whether the current BrickDomain is less or equal …","Returns whether the element represents the top element …","Check if the value is Top.","Return whether the element represents a top element or not.","The Top element is represented by an empty memory region.","Returns true if all values representable by bitvectors of …","Return true if the interval spans all possible values.","Check if the value is Top.","Check if the value is Top.","Check if the value is Top.","A DomainMap is considered to be a Top element if it is …","Get an iterator over all elements together with their …","Emulate a write operation to an unknown offset by merging …","Emulate a write operation of a value to an unknown offset …","Return an upper bound (with respect to the partial order …","merge two values. Returns Top if the values are not equal.","","Short-circuting the MemRegionData::merge function if …","Merge two interval domains and perform widening if …","Takes care of merging lists of bricks","Takes care of merging single bricks by taking the union of …","Merge two values; Takes the intersection of the certainly …","Merge two DomainMaps according to the MapMergeStrategy of …","This function determines how two DomainMap instances are …","","","","If the MemRegion contains an element at the given position …","","","Create a new abstract identifier.","Create a new, empty memory region.","Construct a new interval.","Create a new interval domain with the given bounds.","Returns a new instance of the Brick Domain","Return a new empty value with the given bytesize.","Return a new top element with the given bytesize. The …","Get a Top element with the given bitsize.","Return a new Top element with the given bytesize.","Construct a new unconstrained interval.","Return a new Top value with the given bytesize.","A set of strings can be built from multiple configurations …","","","","","Piece two intervals together, where self contains the most …","Return an iterator over all referenced abstract IDs.","Remove all elements intersecting the provided interval.","Remove all provided IDs from the list of relative values.","For pointer values replace an abstract identifier with …","Replace all abstract IDs in self with the corresponding …","","","","","","","","","","","","","","","","","","Replace the absolute value contained in the domain with …","Indicate that the domain may contain Top values in …","Replace the map of relative values with the given one.","Compute the resulting interval after a left shift …","Sign-extend the values in the interval to the given width.","Compute the intersection of two intervals as intervals of …","Merge two intervals interpreting both as intervals of …","Merge as signed intervals without performing widenings.","Merge as signed intervals and perform widening if …","Compute the interval of possible results if one multiplies …","Compute the interval of possible results if one multiplies …","The start of the interval. The bound is included in the …","The stride.","","","Compute the interval of possible results if one subtracts …","","Compute the interval of possible results if one subtracts …","Extract a sub-bitvector","Extract a sub-bitvector out of a bitvector","extract a sub-bitvector","Take a subpiece of the bitvectors.","Take a sub-bitvector of the values in the interval domain.","Truncate the bitvectors in the interval by removing the …","Truncate the bitvectors in the interval to size, i.e. the …","Subtract offset from all contained absolute and relative …","Get a more compact json-representation of the data domain. …","","","","","","","","","","","","","","","","","","","","","","","","","","","Return an instance of the Top element.","Return a Top value with the same bytesize as self.","Generate a new Top element with the same bytesize as self.","Return a new, empty memory region with the same address …","Return a new interval with the same byte size as self and …","Return a Top value","Return a Top value","Return a Top value","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If self represents a single absolute value, return it. In …","If the domain represents an absoulute value, return it.","If the domain represents a single, absolute value, return …","If the domain represents an interval of length one, return …","If self represents an interval of absolute values (or can …","If the domain represents an absolute value, return it as …","If the domain represents (or can be widened to) an …","If the domain represents a bounded (i.e. not Top) …","If self represents a single absolute value, try to convert …","If self represents an interval of absolute values (or can …","","","","","","","","","","","","","","","","","","Compute the (abstract) result of a unary operation","Evaluate the given unary operation.","Compute the (abstract) result of a unary operation","Compute the result of an unary operation on the interval …","Takes the union of two character sets. If either of them …","Indicate that the domain does not contain any Top values …","Get the register associated to the abstract location. …","Unwraps the values from the Character Inclusion Domain","Unwraps the values from the CharacterSet","If bound is more exact/restrictive than the current lower …","If bound is more exact/restrictive than the current upper …","Get an iterator over all values in the memory region","Get an iterator over all values in the memory region for …","The widen function of the BricksDomain widens the values …","The widen function of the BrickDomain takes the union of …","Create a new abstract identifier by pushing the given path …","Create a new abstract identifier by removing the last path …","Remove all widening hints from self. Necessary for cases …","","","Compute the interval represented if the byte size of the …","Zero-extend the values in the interval to the given width.","The address in global memory.","The byte size of the address (not the pointed-to value!).","The offset with respect to the zero offset of the memory …","The offset inside the current memory object where the …","The size in bytes of the value that the memory location …","The memory location inside the target of the pointer that …","Creating and computing backward interprocedural fixpoint …","Generate call graphs out of a program term.","This module contains a fixpoint computation to compute …","This module contains a fixpoint computation for …","Creating and computing generic fixpoint computations.","Creating and computing forward interprocedural fixpoint …","A fixpoint algorithm computing parameters of functions and …","Generate control flow graphs out of a program term.","Types and functions shared between the implementations of …","A fixpoint algorithm analyzing all memory accesses in a …","Substitutes stack pointer alignment operations utilising …","A fixpoint analysis that abstracts strings in the program …","This module provides the VsaResult trait which defines an …","The context for an backward interprocedural fixpoint …","This struct is a wrapper to create a general fixpoint …","The type of the values that are assigned to nodes during …","","","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Returns the argument unchanged.","Get the inner context object.","Get a reference to the graph that the fixpoint is computed …","Get a reference to the underlying graph.","Calls U::from(self).","Merge two node values.","Merge two values using the merge function from the …","Create a new generalized context out of an interprocedural …","This function is used to refine the value using the …","Transition function for call stub split. Has access to the …","Transition function for return stub split. Has access to …","","","","Transition function for calls to functions not contained …","Transition function for in-program calls. The target value …","Transition function for Def terms. The transition function …","Backward edge transition function. Applies the transition …","Transition function for (conditional and unconditional) Jmp…","The graph type of a call graph","Collect and return all call TIDs of call sequences that …","Generate a call graph for the given program.","Compute alive variables by means of an intraprocedural …","Remove all dead assignments from all basic blocks in the …","The context struct for the expression propagation fixpoint …","","","Returns the argument unchanged.","","Calls U::from(self).","Merges two values by intersecting their …","Merge subsequent assignments to the same variable to a …","Create a new context object for the given project and …","Replaces variables by expressions that can be propagated …","Wherever possible, substitute input variables of …","","","","","","","Adds the expression for the assigned variable to the table.","","","The computation struct contains an intermediate result of …","The context of a fixpoint computation.","the type of edge labels of the underlying graph","the type of node labels of the underlying graph","The type of the value that gets assigned to each node. The …","","","Compute the fixpoint of the fixpoint problem. If the …","Compute the fixpoint of the fixpoint problem. Each node …","Returns the argument unchanged.","Create a new fixpoint computation from a fixpoint problem, …","Get a reference to the underlying context object","Get the graph on which the fixpoint computation operates.","Get a reference to the underlying graph","Get the value of a node.","Return a list of all nodes which are marked as …","Returns True if the computation has stabilized, i.e. the …","Calls U::from(self).","This function describes how to merge two values","Create a new fixpoint computation from a fixpoint problem, …","Get a reference to the internal map where one can look up …","Set the value of a node and mark the node as not yet …","","","","This function describes how the value at the end node of …","The context for an interprocedural fixpoint computation.","This struct is a wrapper to create a general fixpoint …","The type of the values that are assigned to nodes during …","","","Returns a node ordering with callee nodes behind caller …","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Returns a node ordering with caller nodes behind callee …","Returns the argument unchanged.","Get the inner context object.","Get a reference to the graph that the fixpoint is computed …","Get a reference to the underlying graph.","Calls U::from(self).","Merge two node values.","Merge two values using the merge function from the …","Create a new generalized context out of an interprocedural …","This function is used to refine the value using the …","","","","Transition function for in-program calls.","Transition function for calls to functions not contained …","Transition function for Def terms. The transition function …","Forward edge transition function. Applies the transition …","Transition function for (conditional and unconditional) Jmp…","Transition function for return instructions. Has access to …","Access flags to track different kind of access/usage …","The signature of a function. Currently only contains …","","","","","","","","","","Compute the function signatures for all functions in the …","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","The returned number is the maximum of stack offset plus …","Values in writeable global memory accessed by the function.","Calls U::from(self).","Calls U::from(self).","Returns true if any of the access flags is set.","Returns true if the dereferenced or mutably dereferenced …","Returns true if the mutably dereferenced access flag is …","Returns true if all of the access flags are set.","An access flag in the merged AccessPattern object is set …","Generate a new AccessPattern object with none of the …","Generate an empty function signature.","Generate a new AccessPattern object with all access flags …","The parameters of the function together with their access …","","","","Set the access flag for immutable pointer dereference.","Set the access flag for pointer dereference (with write …","Set the access flag for read access.","Set all access flags to indicate that any kind of access …","This module contains stubs for frequently used LibC-symbols","","","","","","","","","","Set the access flag for immutable pointer dereference and …","Set the access flag for pointer dereference with write …","Set the access flag for read access and return self.","Compute the return value of a call to a known extern …","Returns a map that maps the names of known extern …","Return a map that maps names of stubbed variadic symbols …","Helper functions for computing return values for extern …","A return value that is just a copy of a parameter.","A return value that contains a pointer to the start of a …","The return value may also be zero in addition to its other …","A return value that adds an unknown offset to a given …","An untracked value is just a Top value. It is used for any …","A node corresponding to the end of the basic block, i.e. …","A node corresponding to the start of a basic block, i.e. …","An edge between the BlkStart and BlkEnd nodes of a basic …","An edge corresponding to a function call instruction. Only …","An artificial edge to combine intra- and interprocedural …","An artificial node. See the module-level documentation for …","An artificial node. See the module-level documentation for …","An artificial edge. See the module-level documentation for …","An artificial edge. See the module-level documentation for …","The edge type of an interprocedural fixpoint graph.","An edge corresponding to a call to a function not …","The graph type of an interprocedural control flow graph","An edge corresponding to an intraprocedural jump …","The node type of an interprocedural control flow graph","An artificial edge to combine intra- and interprocedural …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get the block corresponding to the node for BlkStart and …","Returns a map from function TIDs to the node index of the …","Build the interprocedural control flow graph for a program …","Build the interprocedural control flow graph for a program …","Get the sub corresponding to the node for BlkStart and …","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","The block containing the callsite of the call.","The block that the called functions returns to.","The block containing the callsite of the call","The block containing the target of the call, i.e. the …","The value saved at artificial combinator nodes.","NodeValue that can either be a single abstract value or a …","A single abstract value","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","Helper function to merge to values wrapped in Option<..>. …","","","","","","Unwraps the contained value for non-combinator nodes. …","The value flowing through the intraprocedural edge of the …","The value flowing through the interprocedural edge of the …","The name and version number of the “Memory” CWE check.","Configurable parameters for the analysis.","The abstract domain type for representing register values.","A wrapper struct for the pointer inference computation …","Contains all information known about the state of a …","The abstract domain to use for absolute values.","Search (recursively) through all memory objects referenced …","Add the given param_object from the callee state to self …","Search (recursively) through all memory objects referenced …","Names of extern functions that are malloc-like, i.e. the …","","","","","","","Check whether the given def could result in a memory …","Clear all non-callee-saved registers from the state. This …","Mark those parameter values of an extern function call, …","","","","","The log messages and CWE warnings that have been generated …","Compute the fixpoint of the pointer inference analysis. …","","","","","","","Evaluate the value of an expression in the current state.","Return the value of the address at the given read or store …","Evaluate the value of the given expression at the given …","Evaluate the value of a parameter of an extern symbol for …","Evaluate the value of the given parameter at the given …","Return the assigned value for store or assignment …","The entry point for the memory analysis check. Does not …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a new state from a function signature.","Generate a compacted json representation of the results. …","Get the context object of the computation.","Get the Tid of the function that this state belongs to.","Get the abstract ID of the global memory object …","Get the underlying graph of the computation.","Get the mapping from callee IDs to caller values for the …","Get the value associated to a node in the computed fixpoint","Get the value of a register or Top() if no value is known.","Get the state of the fixpoint computation at the block end …","Handle a load instruction by assigning the value loaded …","Evaluate expression on the given state and write the …","Evaluate the store instruction, given by its address and …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","A state has no Top element","Evaluate the given load instruction and return the data …","The list of all known memory objects.","Merge two states","Generate a new pointer inference computation for a project.","Create a new state that contains one memory object …","This module contains the definition of the abstract memory …","Print a compacted json representation of the results to …","Print results serialized as YAML to stdout","Remove all knowledge about the contents of …","Remove all objects that cannot longer be reached by any …","Compute the pointer inference analysis and return its …","","","Set the MIPS link register t9 to the address of the callee …","Set the value of a register.","Try to restrict the input variables of expression on self …","The abstract identifier of the current stack frame. It …","Store value at the given address.","Get a more compact json-representation of the state. …","","","","","","","","","","","","Write a value to the address one gets when evaluating the …","An abstract object contains all knowledge tracked about a …","A memory oject indicating the global memory space.","A memory object located on the heap.","An object can be a stack, a heap, or a global memory …","A stack object, i.e. the stack frame of a function.","Add IDs to the list of pointer targets for the memory …","Add an offset to all values contained in the abstract …","Marks all memory as Top and adds the additional_targets to …","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get the memory region abstract domain associated to the …","Get the type of the memory object.","Get all abstract IDs that the object may contain pointers …","Get all abstract IDs for which the object contains …","Read the value at the given offset of the given size …","","Calls U::from(self).","Calls U::from(self).","The domain has no Top element, thus this function always …","Returns false if the abstract object may represent more …","Mark the abstract object as possibly representing more …","Merge two abstract objects","Merge value at position offset with the value currently …","Create a new abstract object with given object type and …","Overwrite the memory region abstract domain associated to …","Overwrite the values in self with those in other under the …","","Remove the provided IDs from the target lists of all …","Replace all abstract IDs in self with the values given by …","","","Write a value at the given offset to the memory region.","Get a more compact json-representation of the abstract …","","","","","","","","","Substitutes logical AND on the stackpointer register by …","Configurable parameters for the analysis.","A wrapper struct for the string abstraction computation …","","","","","","","Compute the fixpoint of the string abstraction analysis. …","This module contains the Context Object for the String …","","","","","The index of the format string parameter in the function …","Returns the argument unchanged.","Returns the argument unchanged.","Get the string abstraction computation.","Get the context object of the computation.","Get the underlying graph of the computation.","Get the value associated to a node in the computed fixpoint","","Calls U::from(self).","Calls U::from(self).","Generate a new string abstraction computation for a …","Compute the string abstraction and return its results.","","The state module holds all information at CFG nodes that …","Names of extern functions that manipulate strings or could …","","","","","","","","Contains all context information needed for the string …","Adds constant or Top value to return location given a …","Takes the pointer target if there is only one and checks …","Calls the appropriate data type approximator.","A set containing a given Def as the first Def of the block.","A map to get the node index of the BlkStart node …","","","Takes a vector of string domains and concatenates them.","Creates string abstract domains for return values of …","Creates a string domain for a s(n)printf call by …","Creates a string domain from found constants and sub …","Creates a domain from a format string where all specifiers …","Maps the TIDs of functions that shall be treated as …","Tries to fetch a constant or sub domain for the format …","Takes a data domain and tries to get a constant value.","Fetches subdomains if they are available for a pointer …","Filters out all parameters that are not of type string.","Maps string symbols to their corresponding format string …","Returns the argument unchanged.","Inserts a char constant into the format string.","Inserts an integer constant into the format string.","Inserts a string constant into the format string.","Returns the content of a global memory target if there is …","Get the underlying graph on which the analysis operates.","Deletes string entries in the heap to string map if the …","Handles generic symbol calls by deleting all non callee …","Handles the detection of string parameters to memcpy calls.","Handles the detection of string parameters to scanf calls. …","Handles the detection of string parameters to sprintf and …","Handles calls to sscanf. If the source string is known, it …","Handles the resulting string domain from strcat and …","The output of a string symbol is added to the map of …","Handles calls to external symbols for which no …","Checks whether the second input parameter contains a …","Checks whether a data domain has multiple targets.","Checks whether the first input parameter contains a return …","Calls U::from(self).","A map to get the node index of the BlkEnd node containing …","Maps source strings parameters to return arguments for …","Merge two state values.","Merges domains from multiple pointer targets. The merged …","Create a new context object for a given project.","Checks whether the string has no format specifiers.","Parses a bitvector to a char if possible.","Gets the input format string, parses the input parameters …","A pointer to the results of the pointer inference analysis.","Processes string domains in memcpy calls on a case by case …","Processes domains for memcpy calls where at least one of …","Processes the contents of the second input parameter.","A reference to the Project object representing the binary","Creates string domains from constant subsequences that …","Pushes a potential constant suffix to the string domain …","Creates a string domain by approximating a format …","Regex that filters format specifier from a format string.","Maps the source string to the return locations of the call …","","Maps the TIDs of functions that shall be treated as string …","This module handles the string processing at external …","Removes the ‘%’ character and any size number from a …","","","","","","","","","Contains all information known about the state of a …","If the input is a string constant, add the global pointer …","Adds a new heap id to string entry to the map.","Adds a new offset to string entry to the map.","Adds a new variable to pointer entry to the map.","If a string pointer is to be stored on the stack, add it …","Adds all relative targets of the given DataDomain to the …","Adds Top values to stack and heap maps for additional …","Adds a return pointer to the unassigned return pointer set.","","","Checks whether the given pointer points to a string and …","","","Returns a vector of all currently tracked pointers.","Deletes all entries in the string maps that do not have …","","","","Evaluates the constant used as input of a Def Term. It …","Removes all string entries for which the pointers are not …","","Returns the argument unchanged.","Gets the current subroutine since the analysis is …","Returns a reference to the heap to string map.","Get the current pointer inference state if it is contained …","Returns a reference to the variable to pointer map.","Returns a reference to the stack offset to string map.","Returns the set of function return pointer that have not …","Returns a reference to the variable to pointer map.","Handles assign and load Def Terms.","Handles store Def Terms.","Calls U::from(self).","Checks whether a target refers to the Stack.","The state has no explicit Top element.","Merges two states.","Creates a new state.","Adds a pointer to the stack pointer maps if its targets …","Adds a pointer to the variable pointer maps if its targets …","Checks whether a given pointer is contained in one of the …","If only some targets of a pointer point to tracked …","Removes a string from the heap to string map for the given …","Removes all non callee saved register entries from the …","","Removes all entries from the string maps.","Set the current pointer inference state for self.","Sets the variable to pointer map to a new value.","","","","","The type of the returned values. Usually this should be an …","A trait providing an interface for accessing the results …","Return the value of the address where something is read or …","Evaluate the value of the given expression at the given …","Return the value of a parameter at the given jump …","Return the value stored for write instructions, the value …","This module implements a check for CWE-119: Buffer Overflow","This module implements a check for CWE-134: Use of …","This module implements a check for CWE-190: Integer …","This module implements a check for CWE-215: Information …","This module implements a check for CWE-243: Creation of …","This module implements a check for CWE-332: Insufficient …","This module implements a check for CWE-367: Time-of-check …","This module implements a check for CWE-415: Double Free …","This module implements a check for CWE-426: Untrusted …","This module implements a check for CWE-467: Use of …","This module implements a check for CWE-476: NULL Pointer …","This module implements a check for CWE-560: Use of umask() …","This module implements a check for CWE-676: Use of …","This module implements a check for CWE-78: Improper …","This module implements a check for CWE-782: Exposed IOCTL …","This module implements a check for CWE-789: Memory …","The module name and version","Run the check for CWE-119: Buffer Overflows.","The module name and version","The configuration struct","Global read only memory","Global read and write memory","Non Global memory","The categorization of the string location based on kinds …","Unknown memory","","","","","This check searches for external symbols that take a …","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","The module name and version","The configuration struct. The symbols are extern function …","","","Run the CWE check. For each call to one of the symbols …","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","Run the check.","The module name and version","The configuration struct contains the list of functions …","","","Run the check.","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","The configuration struct contains pairs of symbol names, …","","","Run the CWE check. See the module-level description for …","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","Run the check. See the module-level documentation for more …","The module name and version","The configuration struct","A struct for collecting CWE warnings together with context …","","","","","Run the check for CWE-416: Use After Free.","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Generate a new warning context object.","","","","","","","","","","","The module name and version","Function symbols read from config.json. The symbols are …","","","Run the CWE check. We check whether a function calls both …","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","Function symbols read from config.json. All parameters of …","","","Execute the CWE check.","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","The configuration struct","An abstract domain representing a value that is either …","A tainted value of a particular bytesize.","An untainted value of a particular bytesize","The result of a binary operation is tainted if at least …","","","","","The size in bytes of the Taint value.","The result of a cast operation is tainted if the input was …","Run the CWE check. We check whether the return values of …","","","","","","","","","","","","Print the value of a Taint object.","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Checks whether the given value is in fact tainted.","Checks whether the value is an untainted Top-value.","The result of merging two Taint values is tainted if at …","Get a new Top-value with the given bytesize.","","","A subpiece of a tainted value is again tainted.","","","","Get a new Top-value with the same bytesize as self.","","","","","","","The result of a unary operation is tainted if the input …","The module name and version","An upper bound for the value of a chmod-style argument.","An upper bound for the value of a presumably correct umask …","Execute the CWE check.","The module name and version","struct containing dangerous symbols from config.json","","","Iterate through all function calls inside the program and …","","","","","","","Returns the argument unchanged.","Generate cwe warnings for potentially dangerous function …","For each subroutine and each found dangerous symbol, check …","","Calls U::from(self).","Filter external symbols by dangerous symbols","","","","","","The module name and version","The configuration struct","","","This check checks the string parameter at system calls …","Checks if the Bricks Domain indicates a vulnerability at …","Checks the system call parameter given by the Bricks …","","","","","","","Returns the argument unchanged.","Generates the CWE Warning for the CWE 78 check","Calls U::from(self).","","","","","","The module name and version","Iterate through all calls of the program and flag calls to …","generate the cwe warning for CWE 782","check whether the ioctl symbol is called by any …","The module name and version","The configuration struct. If a threshold is exceeded, the …","","","Run the CWE check. For each function, we check calls of …","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","A parameter or return argument of a function.","A register assignment, assigning the result of the …","A binary operation. Note that most (but not all) …","The type/mnemonic of a binary operation. See the Ghidra …","A bitvector is a fixed-length vector of bits with the …","A trait to extend the bitvector type with useful helper …","A basic block is a sequence of Def instructions followed …","","","","","A direct intraprocedural jump to the targeted Blk term …","An indirect intraprocedural jump to the address that the …","An unsigned number of bytes.","A direct intraprocedural jump that is only taken if the …","A direct interprocedural jump representing a subroutine …","An indirect interprocedural jump to the address the target …","This instruction is used for all side effects that are not …","Calling convention related data","A cast operation for type cast between integer and …","The type/mnemonic of a typecast See the Ghidra P-Code …","C char data type","A constant value represented by a bitvector.","C/C++ data types.","Properties of C/C++ data types such as size.","A side-effectful operation. Can be a register assignment …","C double data type","An expression is a calculation rule on how to compute a …","An extern symbol represents a funtion that is dynamically …","C float data type","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","C integer data type","A Jmp instruction affects the control flow of a program, …","A memory load into the register given by var.","C long data type","C long double data type","C long long data type","","C pointer data type","","The Program structure represents a disassembled binary.","The Project struct is the main data structure representing …","The argument is passed in a register","A indirect interprocedural jump indicating a return from a …","A representation of the runtime image of a binary after …","C short data type","The argument is passed on the stack.","A memory store operation.","A Sub or subroutine represents a function with a given …","Extracting a sub-bitvector from the argument expression.","A term is an object inside a binary with an address and an …","A term identifier consisting of an ID string (which is …","","A unary operation","The type/mnemonic of an unary operation See the Ghidra …","An unknown value but with known size. This may be …","A variable representing a register or temporary value of …","A variable represents a register with a known size and …","","","Add a global offset to the base addresses of all memory …","The address where the term is located.","An offset that has been added to all addresses in the …","Addresses of possibly multiple locations of the same …","Convert to the equivalent size in bits (by multiplying …","Perform a binary operation on the given bitvectors. …","Perform a binary operation on the given bitvectors. …","Generate the ID of a block starting at the given address.","The basic blocks belonging to the subroutine. The first …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the size in bytes of the bitvector.","Return the size in bytes of the bitvector.","Return the size (in bytes) of the result value of the …","Return the bytesize of the argument.","A list of callee-saved register, i.e. the values of these …","The calling convention used to call if known","The calling convention used for the extern symbol if known","The known calling conventions that may be used for calls …","Perform a cast operation on the bitvector. Returns an …","Perform a cast operation on the bitvector. Returns an …","Holds the size of the char type","This function checks whether the instruction is a zero …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The CPU architecture on which the binary is assumed to be …","Contains the properties of C data types. (e.g. size)","The Def instructions of the basic block in order of …","","","","","","","","","","","","","","","","","","","","","","","Holds the size of the double type","Generate a runtime memory image containing no memory …","Entry points into to binary, i.e. the term identifiers of …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the argument is a stack argument, return its offset …","Extern symbols linked to the binary by the linker.","Find a block term by its term identifier. WARNING: The …","Find the sub containing a specific jump instruction …","Possible float parameter registers. Given as expressions, …","A list of possible return register for float values. Given …","Holds the size of the float type","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a variable representing the same register as the …","Translate a P-Code variable into a register variable of …","Returns the argument unchanged.","Translate a P-Code variable into a Varor Const expression …","Translates a P-Code expression into an expression of the …","Returns the argument unchanged.","Translates expression types. Panics when given a type not …","Returns the argument unchanged.","Returns the argument unchanged.","Translates expression types. Panics when given a type not …","Returns the argument unchanged.","Translates expression types. Panics when given a type not …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert a P-Code jump to the internally used IR.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert to ByteSize, while always rounding up to the …","","Returns the argument unchanged.","The purpose of this conversion is to locate parameters to …","Returns the argument unchanged.","Generate a new register argument.","Return a list of all parameter registers of the calling …","Return a list of all return registers of the calling …","Get the calling convention corresponding to the extern …","Return the calling convention associated to the given …","Returns the data type field of an Arg object.","Return the size (in bytes) for pointers of the given …","For an address to global read-only memory, return the …","Matches a given data type with its size from the …","Try to find a specific calling convention in the list of …","Try to guess a standard calling convention from the list …","If the extern symbol has exactly one parameter, return the …","If the extern symbol has exactly one return value that is …","If the function has a variable number of parameters, this …","","","","","","","","","","","","","","","","","","","If the basic block contains an indirect jump, this field …","Return an array of all input variables of the given …","Possible integer parameter registers.","A list of possible return register for non-float values.","Holds the size of the integer type","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Convert a Sub term in the P-Code representation to a Sub …","Resize self to the target byte size by either sign …","Resize self to the target byte size by either sign …","Resize self to the target byte size by either zero …","Resize self to the target byte size by either zero …","Check whether the given address points to a writeable …","Checks whether the constant is a global memory address.","Check whether all addresses in the given interval point to …","Check whether all addresses in the given interval point to …","Endianness","Return whether values in the memory image should be …","Set to false for physical registers and to true for …","The Jmp instructions of the basic block","Holds the size of the long double type","Holds the size of the long long type","Holds the size of the long type","Sequence of memory segments.","","","The name of the variable. Equals the register name if the …","The name of the subroutine","The name of the extern symbol","The name of the calling convention","Generate a new term identifier with the given ID string …","Generate a runtime memory image for a given binary.","Create a new ByteSize object","Generate a runtime memory image for a bare metal binary.","If set to true, the function is assumed to never return to …","Run some normalization passes over the project.","","Parameters of an extern symbol. May be empty if there are …","","","","Shortcut for creating an IntAdd-expression","Construct an expression that adds a constant value to the …","Holds the size of the pointer type","All (known) executable code of the binary is contained in …","Read the contents of the memory image at the given address …","Read the contents of memory from a given address onwards …","Compute a recursion depth for the expression.","The set of all known physical registers for the CPU …","","","Remove indirect jump target addresses for which no …","Return values of an extern symbol. May be empty if there …","Represents the memory after loading the binary.","","","","","","","","","","","","","","","","","","","","","","","Holds the size of the short type","","","Returns the result of self + rhs if the computation does …","Returns the result of self + rhs if the computation does …","Return the result of multiplying self with rhs and a flag …","Return the result of multiplying self with rhs and a flag …","Returns the result of self - rhs if the computation does …","Returns the result of self - rhs if the computation does …","The size (in bytes) of the variable.","The stack pointer register for the given CPU architecture.","","","Extract a subpiece from the given bitvector.","Extract a subpiece from the given bitvector.","The known functions contained in the binary","Substitute every occurrence of input_var in self with the …","Substitute every occurence of input_var in the address and …","Substitute some trivial expressions with their result. …","","The object","The term identifier, which also contains the address of …","The term ID of the extern symbol.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Perform a unary operation on the given bitvector. Returns …","Perform a unary operation on the given bitvector. Returns …","Add a suffix to the ID string and return the new Tid","The expression that computes the address of the argument …","An optional data type indicator.","An optional data type indicator.","The expression evaluating to the argument.","The size in bytes of the argument.","The expression computing the address from which to read …","The expression computing the address that is written to. …","The expression computing the value that is written to …","The expression computing the value that is assigned to the …","The target register of the memory load. The size of var …","The register that is written to.","The argument expression","The argument of the expression","The argument from which to extract the bitvector from.","A description of the operation","The left hand side expression","The lowest byte (i.e. least significant byte if …","The opcode/type of the operation","The opcode/type of the operation","The opcode/type of the cast operation","The right hand side expression","The byte size of the result value of the expresion","The byte size of the result of the unknown expression","The size of the resulting sub-bitvector","The jump is only taken if this expression evaluates to true…","A description of the side effect.","The term ID of the block that the called function returns …","The term ID of the block that the called function returns …","The block term identifier of the block where the …","The term ID of the target block of the jump.","The term ID of the target subroutine (Sub) or extern …","An expression computing the target address of the call.","An argument (parameter or return value) of an extern …","The intent (input or output) of a function argument.","","","","","","","A basic block.","","","","","","A call instruction.","A struct describing a calling convention.","An assignment instruction, assigning the result of an …","The term identifier of the target of a direct jump.","A P-Code expression.","Expression Opcodes as parsed from Ghidra","An extern symbol, i.e. a function not contained in the …","","","","","","","","","","","","","","","","","The argument is an input parameter.","","","","","","","","","","","","","","","","","","","","","","","","","","","","The varnode holding the target address of an indirect jump.","A jump instruction.","A jump type mnemonic.","","A jump label for distinguishing between direct and …","The argument is a return value.","","","The program struct containing all information about the …","The project struct describing all known information about …","","Properties of a register with respect to its base register.","","","A subfunction.","","A variable representing a varnode in Ghidra P-Code","If the varnode represents an implicit LOAD from memory, …","The addresses to call the extern symbol. May be more than …","The input and output arguments of the function.","The name of the base register.","The basic blocks of the function.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The call struct for interprocedural jumps.","A description of the instruction for CALLOTHER …","The calling convention used (as reported by Ghidra, i.e. …","The calling convention used (as reported by Ghidra, i.e. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the jump is a conditional jump, the varnode that has to …","The CPU-architecture that the binary uses.","Contains the properties of C data types. (e.g. size)","The Def instructions of the block in chronological order.","","","","","","","","","","","","","","","","","","The term identifiers of entry points into the binary.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The extern symbols referenced by the binary.","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","The target label for intraprocedural jumps.","If the function has a variable number of parameters, this …","","","","","","","","","","","","","","","","","","The base address of the memory image of the binary in RAM …","The first input varnode (if it exists).","The second input varnode (if it exists).","The third input varnode (if it exists).","The intent (input or output) of the argument.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Convert a P-Code block to the internally used IR.","Convert a P-Code instruction to the internally used IR.","Convert a program parsed from Ghidra to the internally …","Convert a project parsed from Ghidra to the internally …","A flag set to true for virtual/temporary registers.","The jump instructions at the end of the basic block.","The target varnode whose value gets overwritten.","The expression computing the location of the argument if …","The least significant byte of the register when viewed as …","The instruction mnemonic","The mnemonic of the jump.","The name of the register if the varnode represents a …","The name of the function.","The name of the extern symbol.","The name of the calling convention.","Generate a variable representing a constant","Generate a virtual variable with the given name and size.","If the function is assumed to never return to the caller, …","This function runs normalization passes to bring the …","Parses a variable representing an address to a …","Parses a variable representing a concrete value to a …","Translates a variable into the byte size that it …","The program struct containing all binary-specific …","The register name.","Information about known calling conventions for the given …","Information about all CPU-architecture-specific registers.","The return label if the call is expected to return.","The expression that determines the value to be written.","","","","","","","","","","","","","","","","","","The size (in bytes) of the varnode","The size (in bytes) of the register","The stack pointer register of the CPU-architecture.","The subfunctions contained in the binary.","The target label. May be None for CALLOTHER instructions.","A list of potential jump targets for indirect jumps.","The term identifier of the extern symbol.","Create a LOAD instruction out of a variable representing a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The value of the varnode if it represents a constant","The register containing the argument if it is passed in a …","A struct containing pointers to all known analysis results …","The content of the binary file","","","","","Compute the function signatures for internal functions.","Compute the pointer inference analysis. The result gets …","Compute the string abstraction. As the string abstraction …","The computed control flow graph of the program.","Disassemble the given binary and parse it to a Project …","Returns the argument unchanged.","The results of the function signature analysis if already …","Calls U::from(self).","Create a new AnalysisResults struct with only the project …","The result of the pointer inference analysis if already …","A pointer to the project struct","The result of the string abstraction if already computed.","","","","","Create a new AnalysisResults struct containing the given …","Create a new AnalysisResults struct containing the given …","Create a new AnalysisResults struct containing the given …","Handles argument detection by parsing format string …","Utility structs and functions which directly parse the …","Get the base address for the image of a binary when loaded …","Get the folder path to a Ghidra plugin bundled with the …","Utility functions for executing Ghidra and extracting …","Helper functions for common tasks utilizing the control …","Structs and functions for generating log messages and CWE …","Get the contents of a configuration file.","Helper functions for common tasks utilizing extern symbols,","Calculates the register and stack positions of format …","Parses the input format string for the corresponding …","Returns an argument vector of detected variable parameters.","Parses the destiniation address of the format string. It …","Parses the format string parameters using a regex, …","Contains all information parsed out of the bare metal …","A continuous segment in the memory image.","The base address, i.e. the address of the first byte of …","","","","","The contents of the segment","","","","","","","","","","","Is the segment executable","The base address of the non-volatile memory (usually flash …","","","Returns the argument unchanged.","Returns the argument unchanged.","Generate a segment with the given base_address and content …","Generate a segment from a program header of an ELF file.","Generate a segment from a section table from a PE file.","","","Calls U::from(self).","Calls U::from(self).","Generate a segment with the given base address and size. …","Return the base address of the binary as an integer.","A helper function to parse a hex string to an integer.","The CPU type.","The base address of the volatile memory (RAM) used by the …","The size of the volatile memory (RAM) used by the chip. …","Is the segment readable","","","","","","","","","","","Is the segment writeable","Execute the p_code_extractor plugin in Ghidra and parse …","Check whether a call to the sink_symbol is reachable from …","A CWE warning","A CWE warning message.","Messages intended for debugging.","Errors encountered during analysis.","Non-error messages intended for the user.","A normal log message.","The severity/type of a log message.","A generic log message.","A type for managing threads for collecting log messages.","The message types a logging thread can receive. See the …","If the log collector thread receives this signal, it …","For each analysis count the number of debug log messages …","Sets the address field of the CweWarning","Addresses in the binary associated with the CWE warning. …","","","","","","","","","","","","","","","","","","","","","","","Stop the logging thread by sending it the Terminate signal …","This function is collects logs from the given receiver …","Just create a disconnected sender to a (non-existing) …","","A short description of the warning that is presented to …","","","","","If the logging thread still exists, send it the Terminate …","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Get a sender that can be used to send messages to the …","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The severity/type of the log message.","Associate a specific location to the log message.","The location inside the binary that the message is related …","A short name of the CWE check, e.g. CWE190.","Creates a new CweWarning by only setting name, version and …","Create a new Debug-level log message","Create a new Error-level log message","Create a new Info-level log message","Sets the other field of the CweWarning","Other useful information. Content depends on the check …","","","","","Print all provided log- and CWE-messages.","","","","","Set the name of the source analysis for the log message.","The analysis where the message originated.","Create a new LogThread object with a handle to a freshly …","Sets the symbols field of the CweWarning","Symbol names (usually of extern symbols) associated to the …","The log message.","Sets the Tids field of the CweWarning","Term IDs associated to the CWE warning. May be more exact …","","","","","","","","","","","","","","","","","","","","","","The version number of the check.","Find the extern symbol object for a symbol name and return …","Match direct calls’ target tids in the program’s …","Find calls to TIDs contained as keys in the given symbol …","Get a map from TIDs to the corresponding extern symbol …"],"i":[0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,29,29,0,0,0,0,30,0,0,0,29,30,29,0,0,0,8,24,34,25,35,0,0,0,8,24,34,25,35,8,10,15,17,18,18,20,10,18,10,15,20,10,18,20,10,18,20,10,18,20,10,18,17,17,17,24,116,24,25,9,8,10,18,9,17,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,12,8,28,29,30,10,17,18,9,8,10,18,15,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,28,32,29,30,17,10,116,24,25,116,24,25,116,24,25,116,24,25,116,24,25,116,24,25,28,39,39,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,17,15,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,18,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,18,8,8,28,28,32,29,29,30,30,10,15,17,18,18,24,24,34,34,25,25,35,35,39,40,41,42,8,8,28,32,29,30,10,10,10,10,15,17,17,18,18,18,24,24,34,25,25,35,39,39,40,41,42,28,28,29,39,29,10,28,29,15,10,15,10,10,28,28,10,28,15,8,28,32,29,30,10,15,17,18,15,17,20,10,18,35,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,10,24,34,11,8,10,15,17,18,24,34,25,39,15,15,15,11,8,10,15,18,24,34,25,39,38,40,41,42,15,8,18,28,15,17,18,34,10,12,8,10,17,18,24,28,32,29,30,17,10,15,10,10,10,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,10,10,10,18,18,17,17,18,18,17,18,17,17,8,10,17,18,18,9,8,10,17,18,17,17,10,10,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,8,28,29,30,18,24,34,25,35,13,8,10,15,18,24,25,35,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,65,8,10,18,66,8,10,18,65,66,8,28,32,29,30,10,15,17,18,24,34,25,35,39,40,41,42,9,8,10,18,35,10,28,25,35,18,18,15,15,24,34,28,28,20,10,18,17,18,171,171,172,173,172,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,72,72,0,0,0,72,72,71,72,72,71,72,72,71,71,71,72,72,72,71,71,71,72,71,0,0,0,0,0,0,86,86,86,86,86,86,0,86,0,0,86,86,86,86,86,86,86,86,86,0,0,88,88,88,73,73,73,73,73,73,73,88,73,73,73,73,73,88,73,73,73,73,73,73,88,0,0,92,93,93,0,0,0,0,0,93,93,92,93,93,92,93,93,92,93,93,93,92,92,92,93,92,92,0,0,94,95,94,95,94,95,94,95,94,0,94,95,94,95,94,95,94,95,94,94,95,94,95,95,95,94,95,94,94,94,94,94,94,95,94,95,94,94,95,94,94,94,94,0,94,95,94,94,95,94,95,94,95,94,94,94,0,0,0,0,0,0,0,0,0,87,87,99,99,99,87,87,99,99,0,99,0,99,0,99,87,99,87,99,87,99,87,99,87,99,87,99,87,87,99,87,99,87,0,0,0,87,87,99,87,99,87,99,87,99,87,87,99,87,99,87,99,174,174,175,175,100,0,100,100,100,100,100,100,100,100,100,100,0,100,100,100,100,100,100,176,176,0,0,0,0,0,0,102,102,102,106,107,102,106,107,102,106,102,102,102,102,106,102,106,107,107,102,106,102,106,102,106,102,107,107,102,107,107,0,102,106,107,102,106,102,107,107,102,102,107,107,107,102,107,102,102,102,106,107,102,106,102,102,102,102,107,102,0,107,107,102,102,0,102,106,102,102,102,102,102,102,102,106,107,102,106,107,102,106,107,102,106,102,0,113,113,0,113,103,103,103,103,113,103,113,103,113,103,113,113,103,113,103,113,103,113,103,113,103,113,103,103,103,103,103,113,103,113,103,103,103,103,103,103,103,103,113,103,103,103,113,103,103,103,113,103,113,103,113,103,113,0,0,0,117,115,117,115,115,115,117,0,115,115,115,115,115,117,115,117,117,117,117,115,117,115,117,0,115,0,115,115,117,115,117,115,117,115,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,0,118,118,118,118,118,118,118,118,118,0,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,177,0,177,177,177,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,124,124,0,124,123,124,123,124,0,123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,0,0,125,125,0,125,125,125,125,125,125,125,125,125,125,125,125,125,125,0,0,0,0,126,126,0,126,126,126,126,126,126,126,126,126,126,126,126,126,126,0,0,127,127,0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,0,0,0,0,0,128,129,128,129,0,128,129,128,129,129,128,128,129,128,129,128,129,128,129,128,129,128,129,129,129,128,128,129,128,129,128,129,128,129,0,0,131,131,0,131,131,131,131,131,131,131,131,131,131,131,131,131,131,0,0,132,132,0,132,132,132,132,132,132,132,132,132,132,132,132,132,132,0,0,0,133,133,133,133,134,133,134,133,133,0,133,134,133,134,133,134,133,134,133,134,133,133,134,133,134,133,134,133,134,133,133,133,133,133,134,133,133,134,133,133,133,134,133,134,133,134,133,0,0,0,0,0,0,135,135,0,135,135,135,135,135,135,135,0,0,135,135,0,135,135,135,135,135,0,0,136,136,0,0,0,136,136,136,136,136,136,136,0,136,136,136,136,136,136,0,0,0,0,0,0,137,137,0,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,79,75,0,0,0,0,26,67,26,26,78,78,0,78,78,78,78,0,75,0,139,75,0,0,0,139,0,0,139,31,67,26,67,26,26,67,26,26,26,67,67,26,67,67,26,67,31,26,26,26,26,26,26,26,26,26,67,26,26,26,26,26,26,26,31,26,26,26,26,26,26,31,139,0,79,139,139,139,26,139,31,0,0,51,78,0,139,51,79,0,75,0,0,31,75,0,75,75,0,27,27,105,50,83,96,27,178,16,50,76,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,178,16,75,51,111,76,96,84,178,16,138,77,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,50,27,84,84,81,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,27,27,138,105,83,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,51,83,83,83,111,111,138,53,53,75,75,26,26,31,31,67,67,50,50,77,79,79,78,78,81,81,76,51,96,111,83,84,105,27,27,27,27,27,27,138,139,53,53,53,75,75,75,26,26,31,31,67,67,50,77,79,78,78,81,76,51,96,111,83,84,105,27,27,27,138,139,139,51,111,111,96,84,51,84,105,138,84,84,96,96,96,53,75,26,31,67,50,77,79,78,81,76,51,96,111,105,27,138,139,81,75,111,111,138,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,77,178,16,178,16,105,105,105,105,105,105,53,81,138,138,138,105,27,27,53,76,96,111,50,105,27,105,96,84,27,96,53,50,27,75,75,138,84,105,105,75,84,27,27,77,96,84,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,27,27,138,27,27,178,16,178,16,178,16,53,84,27,27,178,16,83,75,77,75,27,77,77,96,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,75,26,31,67,50,79,78,81,27,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,53,75,26,31,67,50,77,79,78,81,76,51,96,111,83,84,105,27,138,139,178,16,50,179,180,179,180,179,181,182,182,183,181,183,184,185,186,187,188,186,188,184,185,188,185,187,186,189,190,191,192,190,189,191,192,0,0,143,143,143,143,150,150,0,150,150,150,150,143,0,0,0,151,0,0,0,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,155,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,151,0,0,143,0,155,143,143,0,0,150,0,143,143,0,143,0,141,156,156,140,146,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,144,149,146,156,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,144,159,159,153,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,157,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,157,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,144,156,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,157,142,142,142,154,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,153,152,157,159,141,153,152,154,140,142,144,141,146,156,158,141,141,156,159,141,141,141,159,140,159,159,149,152,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,140,159,157,149,144,156,141,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,142,143,140,149,144,150,151,152,153,154,155,146,156,157,158,159,141,154,0,108,108,108,108,108,108,108,108,108,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,163,148,163,148,163,163,148,163,148,163,148,163,148,163,148,163,163,148,148,163,148,163,163,163,163,148,163,148,163,163,148,0,148,148,148,163,148,163,148,163,148,163,148,163,148,163,163,0,0,109,0,166,166,166,109,0,0,0,0,109,0,130,130,167,130,114,166,109,167,130,114,166,109,130,114,166,109,130,114,166,109,130,114,166,109,167,167,167,130,130,130,114,166,109,167,130,114,166,109,130,114,166,109,130,130,114,114,166,109,167,130,114,166,109,109,109,167,130,114,166,109,167,130,114,166,109,114,114,114,130,130,114,114,114,130,130,130,114,166,109,0,130,114,166,109,114,114,167,130,130,114,130,130,130,114,166,109,130,114,167,130,114,166,109,167,130,114,166,109,167,130,114,166,109,130,0,0,0,0],"f":[0,0,0,0,[[]],[[]],0,[[1,2],3],[[]],[[],[[4,[1]]]],0,[[]],0,0,0,0,[[],5],[[],6],[[],6],[[],7],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[8,8],8],[[[10,[9]],[10,[9]]],[[10,[9]]]],[[[15,[[0,[11,12,13,14]]]],[0,[11,12,13,14]],16]],[[17,17],17],[[18,18],18],[[18,18],18],[16,[[6,[19]]]],[[[10,[[0,[20,9]]]],16],[[6,[[10,[[0,[20,9]]]],19]]]],[[18,16],[[6,[18,19]]]],[[[10,[9]],9],[[10,[9]]]],[[[15,[[0,[11,12,13,14]]]],21]],[16,[[6,[19]]]],[[[10,[[0,[20,9]]]],16],[[6,[[10,[[0,[20,9]]]],19]]]],[[18,16],[[6,[18,19]]]],[16,[[6,[19]]]],[[[10,[[0,[20,9]]]],16],[[6,[[10,[[0,[20,9]]]],19]]]],[[18,16],[[6,[18,19]]]],[16,[[6,[19]]]],[[[10,[[0,[20,9]]]],16],[[6,[[10,[[0,[20,9]]]],19]]]],[[18,16],[[6,[18,19]]]],[16,[[6,[19]]]],[[[10,[[0,[20,9]]]],16],[[6,[[10,[[0,[20,9]]]],19]]]],[[18,16],[[6,[18,19]]]],[17],[17],[[17,22,22],[[6,[17,19]]]],[[],23],[[]],[[24,24],24],[[25,25],25],[26],[[8,26,8],8],[[[10,[9]],26,[10,[9]]],[[10,[9]]]],[[18,26,18],18],[26,27],[17,17],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],27],[8,27],[28,27],[29,27],[30,27],[[[10,[9]]],27],[17,27],[18,27],[[31,27]],[[8,31,27],8],[[[10,[9]],31,27],[[10,[9]]]],[[18,31,27],18],[[[15,[[0,[11,12,13,14]]]]]],[8,8],[28,28],[32,32],[29,29],[30,30],[[[10,[[0,[33,9]]]]],[[10,[[0,[33,9]]]]]],[[[15,[[0,[33,11,12,13,14]]]]],[[15,[[0,[33,11,12,13,14]]]]]],[17,17],[18,18],[24,24],[34,34],[25,25],[35,35],[[[39,[[0,[36,37,33,33]],[0,[11,33]],[0,[[38,[[0,[36,37,33,33]],[0,[11,33]]]],33]]]]],[[39,[[0,[36,37,33,33]],[0,[11,33]],[0,[[38,[[0,[36,37,33,33]],[0,[11,33]]]],33]]]]]],[40,40],[41,41],[42,42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[28,28],43],[[32,32],43],[[29,29],43],[[30,30],43],[[17,16],23],[[[10,[9]]],23],[[]],[[],24],[[],25],[[]],[[],24],[[],25],[[]],[[],24],[[],25],[[]],[[],24],[[],25],[[]],[[],24],[[],25],[[]],[[],24],[[],25],[28],[[[39,[[0,[36,37,33]],11,[38,[[0,[36,37,33]],11]]]]]],[[[39,[[0,[36,37,33]],11,[38,[[0,[36,37,33]],11]]]]],[[44,[[0,[36,37,33]],11]]]],[45,[[6,[8]]]],[45,[[6,[28]]]],[45,[[6,[32]]]],[45,[[6,[29]]]],[45,[[6,[30]]]],[45,[[6,[[10,[[0,[46,9]]]]]]]],[45,[[6,[[15,[[0,[46,11,12,13,14]]]]]]]],[45,[[6,[17]]]],[45,[[6,[18]]]],[45,[[6,[24]]]],[45,[[6,[34]]]],[45,[[6,[25]]]],[45,[[6,[35]]]],[45,[[6,[[39,[[0,[36,37,33,46]],[0,[11,46]],[38,[[0,[36,37,33,46]],[0,[11,46]]]]]]]]]],[45,[[6,[40]]]],[45,[[6,[41]]]],[45,[[6,[42]]]],0,[[[15,[[0,[11,12,13,14]]]]],[[44,[21,[0,[11,12,13,14]]]]]],[[8,8],23],[[28,28],23],[[32,32],23],[[29,29],23],[[30,30],23],[[[10,[[0,[47,9]]]],[10,[[0,[47,9]]]]],23],[[[15,[[0,[47,11,12,13,14]]]],[15,[[0,[47,11,12,13,14]]]]],23],[[17,17],23],[[18,18],23],[[24,24],23],[[34,34],23],[[25,25],23],[[35,35],23],[[[39,[[0,[36,37,33,47]],[0,[11,47]],[0,[[38,[[0,[36,37,33,47]],[0,[11,47]]]],47]]]],[39,[[0,[36,37,33,47]],[0,[11,47]],[0,[[38,[[0,[36,37,33,47]],[0,[11,47]]]],47]]]]],23],[[40,40],23],[[41,41],23],[[42,42],23],[[18,18],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[18,27],23],[[8,2],3],[[8,2],3],[[28,2],3],[[28,2],3],[[32,2],3],[[29,2],3],[[29,2],3],[[30,2],3],[[30,2],3],[[[10,[[0,[14,9]]]],2],3],[[[15,[[0,[14,11,12,13,14]]]],2],3],[[17,2],3],[[18,2],3],[[18,2],3],[[24,2],3],[[24,2],3],[[34,2],3],[[34,2],3],[[25,2],3],[[25,2],3],[[35,2],3],[[35,2],3],[[[39,[[0,[36,37,33,14]],[0,[11,14]],[0,[[38,[[0,[36,37,33,14]],[0,[11,14]]]],14]]]],2],3],[[40,2],3],[[41,2],3],[[42,2],3],[[]],[16,8],[[]],[[]],[[]],[[]],[[]],[9,[[10,[9]]]],[16,[[10,[[0,[9,[48,[16]]]]]]]],[49],[[]],[16,17],[[]],[17,18],[16,18],[[]],[[]],[5,24],[[]],[[]],[5,25],[[]],[[]],[[[44,[[0,[36,37,33]],11]]],[[39,[[0,[36,37,33]],11,[38,[[0,[36,37,33]],11]]]]]],[[]],[[]],[[]],[[50,51],28],[[50,16],28],[16,29],[52,[[39,[[0,[36,37,33]],11,[38,[[0,[36,37,33]],11]]]]]],[[53,21,27],29],[[28,9],[[10,[9]]]],[[50,53],28],[53,[[6,[29,19]]]],[[[15,[[0,[11,12,13,14]]]],16,27],[[0,[11,12,13,14]]]],[[[10,[9]]],[[54,[9]]]],[[[15,[[0,[11,12,13,14]]]]],27],[[[10,[9]]],[[54,[9]]]],[[[10,[9]]],54],[28,29],[28],[[[10,[9]]],[[44,[28,9]]]],[28,50],[[[15,[[0,[11,12,13,14]]]],16],[[54,[[0,[11,12,13,14]]]]]],[[8,55]],[[28,55]],[[32,55]],[[29,55]],[[30,55]],[[[10,[[0,[56,9]]]],55]],[[[15,[[0,[56,11,12,13,14]]]],55]],[[17,55]],[[18,55]],[[[15,[[0,[11,12,13,14]]]],[0,[11,12,13,14]],21]],[17,17],[[],[[6,[19]]]],[[[10,[[0,[20,9]]]],[10,[[0,[20,9]]]]],[[6,[[10,[[0,[20,9]]]],19]]]],[[18,18],[[6,[18,19]]]],[[35,35],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[9]]],23],[[24,24],23],[[34,34],23],[[],23],[8,23],[[[10,[9]]],23],[[[15,[[0,[11,12,13,14]]]]],23],[17,23],[18,23],[24,23],[34,23],[25,23],[[[39,[[0,[36,37,33]],11,[0,[[38,[[0,[36,37,33]],11]],33,57]]]]],23],[[[15,[[0,[11,12,13,14]]]]],[[58,[21,[0,[11,12,13,14]]]]]],[[[15,[[0,[11,12,13,14]]]]]],[[[15,[[0,[11,12,13,14]]]],21,21,27]],[[]],[[8,8],8],[[[10,[9]],[10,[9]]],[[10,[9]]]],[[[15,[[0,[11,12,13,14]]]],[15,[[0,[11,12,13,14]]]]],[[15,[[0,[11,12,13,14]]]]]],[[18,18],18],[[24,24],24],[[34,34],34],[[25,25],25],[[[39,[[0,[36,37,33]],11,[0,[[38,[[0,[36,37,33]],11]],33,57]]]],[39,[[0,[36,37,33]],11,[0,[[38,[[0,[36,37,33]],11]],33,57]]]]],[[39,[[0,[36,37,33]],11,[0,[[38,[[0,[36,37,33]],11]],33,57]]]]]],[[44,44],44],[[[44,[[0,[37,33]],11]],[44,[[0,[37,33]],11]]],[[44,[[0,[37,33]],11]]]],[[[44,[[0,[37,33]],11]],[44,[[0,[37,33]],11]]],[[44,[[0,[37,33]],11]]]],[[[44,[[0,[37,33]],[0,[11,13]]]],[44,[[0,[37,33]],[0,[11,13]]]]],[[44,[[0,[37,33]],[0,[11,13]]]]]],[[[15,[[0,[11,12,13,14]]]],16,27]],[8,8],[18,18],[[50,29],28],[27,[[15,[[0,[11,12,13,14]]]]]],[[16,16,22],17],[[16,16],18],[5,34],[27,[[10,[9]]]],[27],[27,8],[27,[[10,[9]]]],[27,17],[27,18],[24,24],[[28,28],[[54,[43]]]],[[32,32],[[54,[43]]]],[[29,29],[[54,[43]]]],[[30,30],[[54,[43]]]],[[17,17],17],[[[10,[9]]],59],[[[15,[[0,[11,12,13,14]]]],16,16]],[[[10,[9]],[60,[28]]]],[[[10,[9]],28,28,9]],[[[10,[9]],[44,[28,[10,[9]]]]]],[[8,61],6],[[28,61],6],[[32,61],6],[[29,61],6],[[30,61],6],[[[10,[[0,[62,9]]]],61],6],[[[15,[[0,[62,11,12,13,14]]]],61],6],[[17,61],6],[[18,61],6],[[24,61],6],[[34,61],6],[[25,61],6],[[35,61],6],[[[39,[[0,[36,37,33,62]],[0,[11,62]],[38,[[0,[36,37,33,62]],[0,[11,62]]]]]],61],6],[[40,61],6],[[41,61],6],[[42,61],6],[[[10,[9]],[54,[9]]]],[[[10,[9]]]],[[[10,[9]],[44,[28,9]]]],[[18,18],18],[[18,27],18],[[17,17],[[6,[17,19]]]],[[17,17],17],[[18,18],18],[[18,18],18],[[17,17],17],[[18,18],18],0,0,[[8,8],8],[[[10,[9]],[10,[9]]],[[10,[9]]]],[[17,17],17],[[18,18],18],[[18,18],18],[[27,27]],[[8,27,27],8],[[[10,[9]],27,27],[[10,[9]]]],[[17,27,27],17],[[18,27,27],18],[[17,27],17],[[17,27],17],[[[10,[9]],9],[[10,[9]]]],[[[10,[[0,[9,63]]]]],64],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[]],[8,8],[[[10,[9]]],[[10,[9]]]],[[[15,[[0,[11,12,13,14]]]]],[[15,[[0,[11,12,13,14]]]]]],[18,18],[24,24],[25,25],[35,35],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],[[6,[16,19]]]],[8,[[6,[16,19]]]],[[[10,[[0,[9,65]]]]],[[6,[16,19]]]],[18,[[6,[16,19]]]],[[],[[6,[17,19]]]],[8,[[6,[17,19]]]],[[[10,[[0,[9,66]]]]],[[6,[17,19]]]],[18,[[6,[17,19]]]],[[],[[6,[21,19]]]],[[],[[6,[19]]]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[67],[[8,67],8],[[[10,[9]],67],[[10,[9]]]],[[18,67],18],[[35,35],35],[[[10,[9]]]],[28,53],[25],[35,[[60,[68]]]],[[18,[54,[16]]]],[[18,[54,[16]]]],[[[15,[[0,[11,12,13,14]]]]],[[69,[21,[0,[11,12,13,14]]]]]],[[[15,[[0,[11,12,13,14]]]]],[[70,[21,[0,[11,12,13,14]]]]]],[[24,24],24],[[34,34],34],[[28,50],[[6,[28,19]]]],[28],[[]],[[[10,[[0,[20,9]]]]],[[10,[[0,[20,9]]]]]],[18,18],[[17,27],17],[[18,27],18],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[71,54],[[73,[[72,[71]]]]]],[[71,54],[[73,[[72,[71]]]]]],[[71,54],[[73,[[72,[71]]]]]],[[]],[[[72,[71]]],71],[[],74],[[[72,[71]]],74],[[]],[[]],[[[72,[71]]]],[71,[[72,[71]]]],[[75,23],54],[[],54],[[[77,[76]]],54],[[],6],[[],6],[[],7],[[[77,[78]]],54],[[54,54,[77,[76]],[77,[78]],[77,[78]]],54],[[[77,[79]]],54],[[[72,[71]],80],54],[[[77,[78]],[54,[[77,[78]]]],[77,[81]]],54],0,[[82,50,50],[[60,[50]]]],[[[77,[83]]],82],[84,[[85,[50,[60,[53]]]]]],[84],0,[[]],[[]],[[]],[86,74],[[]],[86],[[[77,[81]]]],[74,86],[84],[[[77,[81]],[54,[[85,[53,75]]]]]],[[86,75,[77,[81]],23],54],[[],6],[[],6],[[],7],[[86,[77,[78]],87,[54,[5]]],54],[[86,[77,[78]]],54],[[86,[77,[79]]],54],[[86,[77,[78]],[54,[[77,[78]]]],[77,[81]]],54],[[86,54,54,[77,[78]],[77,[78]],[54,[5]]],54],0,0,0,0,0,[[]],[[]],[[[73,[88]]]],[[[73,[88]],22]],[[]],[[88,54,[4,[89]]],[[73,[88]]]],[[[73,[88]]],88],[[],90],[[[73,[88]]],90],[[[73,[88]],89],54],[[[73,[88]]],[[4,[89]]]],[[[73,[88]]],23],[[]],[[]],[[88,54],[[73,[88]]]],[[[73,[88]]],[[91,[89]]]],[[[73,[88]],89]],[[],6],[[],6],[[],7],[80,54],0,0,0,[[]],[[]],[74,[[4,[89]]]],[[92,54],[[73,[[93,[92]]]]]],[[92,54],[[73,[[93,[92]]]]]],[[92,54],[[73,[[93,[92]]]]]],[74,[[4,[89]]]],[[]],[[[93,[92]]],92],[[],74],[[[93,[92]]],74],[[]],[[]],[[[93,[92]]]],[92,[[93,[92]]]],[[75,[77,[81]],23],54],[[],6],[[],6],[[],7],[[[77,[78]],87,[54,[5]]],54],[[[77,[78]]],54],[[[77,[79]]],54],[[[93,[92]],80],54],[[[77,[78]],[54,[[77,[78]]]],[77,[81]]],54],[[54,54,[77,[78]],[77,[78]],[54,[5]]],54],0,0,[[]],[[]],[[]],[[]],[94,94],[95,95],[[]],[[]],[[94,94],43],[[84,74]],[[],94],[[],95],[45,[[6,[94]]]],[45,[[6,[95]]]],[[94,94],23],[[95,95],23],[[],23],[[],23],[[94,2],3],[[94,2],3],[[95,2],3],[[]],[[]],[95,21],0,[[]],[[]],[94,23],[94,23],[94,23],[94,23],[[94,94],94],[[],94],[[],95],[[],94],0,[[94,94],[[54,[43]]]],[[94,61],6],[[95,61],6],[94],[94],[94],[94],0,[[]],[[]],[[],5],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[94,94],[94,94],[94,94],0,[[],[[44,[97,[4,[94]]]]]],[[],[[44,[97]]]],0,0,[[50,51],[[10,[8]]]],[[[10,[8]]],[[10,[8]]]],0,[27,[[10,[8]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[87,87],[99,99],[[]],[[]],[[87,87],23],[[99,99],23],[[],23],[[],23],[[87,2],3],[[87,2],3],[[99,2],3],[[]],[[]],[87,[[77,[81]]]],[74,[[85,[50,89]]]],[[[77,[83]]],74],[[[77,[83]]]],[87,[[77,[76]]]],[[87,55]],[[99,55]],[[]],[[]],[[87,61],6],[[99,61],6],[[]],[[]],[[],5],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],0,0,0,0,0,0,0,[[]],[[]],[[[100,[[0,[33,47,57,33]]]]],[[100,[[0,[33,47,57,33]]]]]],[[]],[45,[[6,[[100,[[0,[46,47,57,33]]]]]]]],[[[100,[[0,[47,47,57,33]]]],[100,[[0,[47,47,57,33]]]]],23],[[],23],[[]],[[]],[[[54,[33]],[54,[33]],101],[[54,[33]]]],[[[100,[[0,[62,47,57,33]]]],61],6],[[]],[[],6],[[],6],[[],7],[[[100,[[0,[47,57,33]]]]],[[0,[47,57,33]]]],0,0,0,0,0,0,0,0,[[102,[60,[28]]],[[60,[28]]]],[[102,103,104],[[6,[19]]]],[[102,[60,[28]]],[[60,[28]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[102,[77,[79]]],[[6,[23,19]]]],[102],[[102,96,105],[[6,[19]]]],[102,102],[106,106],[[]],[[]],0,[[107,23]],[45,[[6,[102]]]],[45,[[6,[106]]]],[[102,102],23],[[106,106],23],[[],23],[[],23],[[102,75],104],[[107,50],[[54,[104]]]],[[107,50,75],[[54,[104]]]],[[102,51,105],[[6,[104,19]]]],[[107,50,51],[[54,[104]]]],[[107,50],[[54,[104]]]],[[108,64]],[[102,2],3],[[106,2],3],[[]],[[]],[[]],[[95,53,50],102],[107,64],0,[102,50],[102,28],[107,74],[[107,50],[[54,[[44,[28,104]]]]]],[[107,89],[[54,[[100,[102]]]]]],[[102,53],104],[[107,50],[[54,[102]]]],[[102,53,75,105],[[6,[19]]]],[[102,53,75]],[[102,75,75,105],[[6,[19]]]],[[106,55]],[[]],[[]],[[]],[102,23],[[102,75,27,105],[[6,[104,19]]]],0,[[102,102],102],[[108,106,[110,[109]],23],107],[[53,50,[60,[22]]],102],0,[107],[107],[[102,111]],[102],[[108,106,23,23],107],[[102,61],6],[[106,61],6],[[102,50,27],[[6,[19]]]],[[102,53,104]],[[102,75,104],[[6,[19]]]],0,[[102,104,104,105],[[6,[19]]]],[102,64],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[[],7],[[102,75,104,105],[[6,[19]]]],0,0,0,0,0,[[103,[60,[28]]]],[[103,112]],[[103,[60,[28]]]],[[]],[[]],[[]],[[]],[103,103],[113,113],[[]],[[]],[[113,113],43],[45,[[6,[103]]]],[45,[[6,[113]]]],[[103,103],23],[[113,113],23],[[],23],[[],23],[[103,2],3],[[113,2],3],[[]],[[]],[103,[[15,[104]]]],[103,[[54,[113]]]],[103,[[60,[28]]]],[103,[[60,[28]]]],[[103,16,27],104],[[113,55]],[[]],[[]],[103,23],[103,23],[103],[[103,103],103],[[103,104,112]],[[[54,[113]],27],103],[[103,[15,[104]]]],[[103,103,112]],[[113,113],[[54,[43]]]],[[103,[60,[28]]]],[[103,[44,[28,104]]]],[[103,61],6],[[113,61],6],[[103,104,112],[[6,[19]]]],[103,64],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[84,[[54,[[4,[114]]]]]],0,0,[[]],[[]],[[]],[[]],[115,115],[[]],[[[117,[[0,[11,116,13,57,[48,[5]]]]]]]],0,[45,[[6,[115]]]],[[115,115],23],[[],23],[[115,2],3],0,[[]],[[]],[[[117,[[0,[11,116,13,57,[48,[5]]]]]]],[[73,[[93,[[118,[[0,[11,116,13,57,[48,[5]]]]]]]]]]]],[[[117,[[0,[11,116,13,57,[48,[5]]]]]]],[[118,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[117,[[0,[11,116,13,57,[48,[5]]]]]]],74],[[[117,[[0,[11,116,13,57,[48,[5]]]]]],89],[[54,[[100,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]]]],[[115,55]],[[]],[[]],[[84,74,107,115],[[117,[[0,[11,116,13,57,[48,[5]]]]]]]],[[84,74,107,115],[[117,[[0,[11,13,57,[48,[5]],116]]]]]],[[115,61],6],0,0,[[]],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],0,[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[10,[18]],[54,[5]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[44,[28,18]],[0,[11,116,13,57,[48,[5]]]]]],[5,[[0,[11,116,13,57,[48,[5]]]]]],0,0,[[]],[[]],[[[4,[[0,[11,116,13,57,[48,[5]]]]]]],[[0,[11,116,13,57,[48,[5]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],102,[119,[[0,[11,116,13,57,[48,[5]]]]]],[85,[51,[54,[5]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],102,[119,[[0,[11,116,13,57,[48,[5]]]]]],96,5],[[0,[11,116,13,57,[48,[5]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],5,102,[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[0,[11,116,13,57,[48,[5]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],5],[[0,[11,116,13,57,[48,[5]]]]]],0,[[[118,[[0,[11,116,13,57,[48,[5]]]]]],51,5,102,[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[0,[11,116,13,57,[48,[5]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[10,[18]],51],[[54,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[10,[18]],[119,[[0,[11,116,13,57,[48,[5]]]]]],102,51,[54,[[0,[11,116,13,57,[48,[5]]]]]]],[[54,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[4,[51]],[4,[5]]],[[85,[51,[54,[5]]]]]],0,[[]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],16],[[54,[[0,[11,116,13,57,[48,[5]]]]]]]],[16,[[54,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],16],[[54,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[10,[18]]],[[54,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]]],74],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],96,[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],96,[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],96,102],[[6,[[10,[18]],19]]]],[[[10,[18]]],23],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],96,102],[[6,[[10,[18]],19]]]],[[]],0,[[[118,[[0,[11,116,13,57,[48,[5]]]]]],102,96,97],[[6,[[85,[51,[54,[5]]]],19]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]]],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[44,[28,18]]],[[0,[11,116,13,57,[48,[5]]]]]],[[84,107,115],[[118,[[0,[11,13,57,[48,[5]],116]]]]]],[5,23],[16,[[54,[68]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],102,96,98,[10,[18]]]],0,[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[10,[18]],[54,[[10,[18]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[10,[18]],[44,[28,18]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],96,102],[[0,[11,116,13,57,[48,[5]]]]]],0,[[[4,[[0,[11,116,13,57,[48,[5]]]]]],97,120,98,98]],[[[4,[[0,[11,116,13,57,[48,[5]]]]]],97,98]],[[[4,[[0,[11,116,13,57,[48,[5]]]]]],120]],[[],121],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],102,[119,[[0,[11,116,13,57,[48,[5]]]]]],[10,[18]],96],23],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],75,[77,[81]],23],[[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]],0,0,[5,5],[[],6],[[],6],[[],7],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],[77,[78]],87,[54,[5]]],[[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],[77,[78]]],[[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],[77,[79]]],[[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]],[77,[78]],[54,[[77,[78]]]],[77,[81]]],[[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]],[[[118,[[0,[11,116,13,57,[48,[5]]]]]],[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[77,[78]],[77,[78]],[54,[5]]],[[54,[[119,[[0,[11,116,13,57,[48,[5]]]]]]]]]],0,[[[119,[[0,[11,116,13,57,[48,[5]]]]]],105,122,53,75],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],28,[0,[11,116,13,57,[48,[5]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],21,[0,[11,116,13,57,[48,[5]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],53,[10,[18]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],75,[10,[18]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[10,[18]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],[4,[21]],[4,[28]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],[10,[18]]]],[[]],[[]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,53,105,122],23],[[[119,[[0,[33,11,116,13,57,[48,[5]]]]]]],[[119,[[0,[33,11,116,13,57,[48,[5]]]]]]]],[[]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[4,[[10,[18]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[45,[[6,[[119,[[0,[46,11,116,13,57,[48,[5]]]]]]]]]],[[[119,[[0,[47,11,116,13,57,[48,[5]]]]]],[119,[[0,[47,11,116,13,57,[48,[5]]]]]]],23],[[],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],105,122,16],[[54,[[10,[18]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102]],[[[119,[[0,[14,11,116,13,57,[48,[5]]]]]],2],3],[[]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[54,[[77,[76]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[85,[28,[0,[11,116,13,57,[48,[5]]]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[54,[102]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[85,[21,[10,[18]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[85,[21,[0,[11,116,13,57,[48,[5]]]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[122,[[10,[18]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[85,[53,[10,[18]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],53,75,105,122,23]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],75,75,105,122]],[[]],[[102,28],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],[119,[[0,[11,116,13,57,[48,[5]]]]]]],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[89,107],[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,75,[10,[18]]],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,53,[10,[18]]],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],[10,[18]]],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],102,[10,[18]]],23],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],28]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],84,96]],[[[119,[[0,[62,11,116,13,57,[48,[5]]]]]],61],6],[[[119,[[0,[11,116,13,57,[48,[5]]]]]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],[54,[102]]]],[[[119,[[0,[11,116,13,57,[48,[5]]]]]],[85,[53,[10,[18]]]]]],[[]],[[],6],[[],6],[[],7],0,0,[50,54],[[50,75],54],[[50,51],54],[50,54],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[108,64]],0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[108,64]],[123,123],[124,124],[[]],[[]],[45,[[6,[123]]]],[45,[[6,[124]]]],[[123,123],23],[[124,124],23],[[],23],[[],23],[[123,2],3],[[124,2],3],[[]],[[]],[[]],[[]],[[123,61],6],[[124,61],6],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],0,0,[[]],[[]],[[108,64]],[125,125],[[]],[45,[[6,[125]]]],[[125,125],23],[[],23],[[125,2],3],[[]],[[125,55]],[[]],[[125,61],6],[[]],[[],6],[[],6],[[],7],0,[[108,64]],0,0,[[]],[[]],[[108,64]],[126,126],[[]],[45,[[6,[126]]]],[[126,126],23],[[],23],[[126,2],3],[[]],[[126,55]],[[]],[[126,61],6],[[]],[[],6],[[],6],[[],7],0,0,[[]],[[]],[[108,64]],[127,127],[[]],[45,[[6,[127]]]],[[127,127],23],[[],23],[[127,2],3],[[]],[[127,55]],[[]],[[127,61],6],[[]],[[],6],[[],6],[[],7],0,[[108,64]],0,0,0,[[]],[[]],[[]],[[]],[[108,64]],[128,128],[129,129],[[]],[[]],[[129,129],43],[45,[[6,[128]]]],[[128,128],23],[[129,129],23],[[],23],[[],23],[[128,2],3],[[129,2],3],[[]],[[]],[[128,55]],[[129,55]],[[]],[[]],[[130,4,50],129],[[129,129],[[54,[43]]]],[[128,61],6],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],0,0,[[]],[[]],[[108,64]],[131,131],[[]],[45,[[6,[131]]]],[[131,131],23],[[],23],[[131,2],3],[[]],[[131,55]],[[]],[[131,61],6],[[]],[[],6],[[],6],[[],7],0,0,[[]],[[]],[[108,64]],[132,132],[[]],[45,[[6,[132]]]],[[132,132],23],[[],23],[[132,2],3],[[]],[[132,55]],[[]],[[132,61],6],[[]],[[],6],[[],6],[[],7],0,0,0,0,0,[[133,26,133],133],[[]],[[]],[[]],[[]],[133,27],[[133,31,27],133],[[108,64]],[133,133],[134,134],[[]],[[]],[45,[[6,[133]]]],[45,[[6,[134]]]],[[133,133],23],[[134,134],23],[[],23],[[],23],[[133,2],3],[[133,2],3],[[134,2],3],[[]],[[]],[[133,55]],[[134,55]],[[]],[[]],[133,23],[133,23],[[133,133],133],[27,133],[[133,61],6],[[134,61],6],[[133,27,27],133],[[]],[[]],[[],5],[133,133],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[[133,67],133],0,0,0,[[108,64]],0,0,[[]],[[]],[[108,64]],[135,135],[[]],[45,[[6,[135]]]],[[135,135],23],[[],23],[[135,2],3],[[]],[4,[[4,[130]]]],[[[44,[50,[77,[76]]]],[85,[50,97]]],4],[[135,55]],[[]],[[[44,[50,96]]],[[85,[50,97]]]],[[135,61],6],[[]],[[],6],[[],6],[[],7],0,0,[[]],[[]],[[108,64]],[[24,50,[77,[76]],96,[110,[130]]]],[[[119,[24]],102,96,50,[110,[130]],[110,[114]],105]],[136,136],[[]],[45,[[6,[136]]]],[[136,136],23],[[],23],[[136,2],3],[[]],[[97,50,97],130],[[]],[[136,61],6],[[]],[[],6],[[],6],[[],7],0,[[108,64]],[[],[[4,[130]]]],[[[77,[76]],[85,[50,97]]],[[4,[130]]]],0,0,[[]],[[]],[[108,64]],[137,137],[[]],[45,[[6,[137]]]],[[137,137],23],[[],23],[[137,2],3],[[]],[[137,55]],[[]],[[137,61],6],[[]],[[],6],[[],6],[[],7],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[27,27],27],[[27,27]],[[105,22]],0,0,0,[27,98],[26,[[6,[19]]]],[[16,26,16],[[6,[16,19]]]],[97,50],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],27],[16,27],[75,27],[51,27],0,0,0,0,[[31,27],[[6,[19]]]],[[16,31,27],[[6,[16,19]]]],0,[[[77,[79]],5,5],[[54,[50]]]],[53,53],[75,75],[26,26],[31,31],[67,67],[50,50],[[[77,[33]]],[[77,[33]]]],[79,79],[78,78],[81,81],[76,76],[51,51],[96,96],[111,111],[83,83],[84,84],[105,105],[27,27],[138,138],[139,139],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[53,53],43],[[50,50],43],[[27,27],43],0,0,0,[45,[[6,[53]]]],[45,[[6,[75]]]],[45,[[6,[26]]]],[45,[[6,[31]]]],[45,[[6,[67]]]],[45,[[6,[50]]]],[45,[[6,[[77,[46]]]]]],[45,[[6,[79]]]],[45,[[6,[78]]]],[45,[[6,[81]]]],[45,[[6,[76]]]],[45,[[6,[51]]]],[45,[[6,[96]]]],[45,[[6,[111]]]],[45,[[6,[83]]]],[45,[[6,[84]]]],[45,[[6,[105]]]],[45,[[6,[27]]]],[45,[[6,[138]]]],[45,[[6,[139]]]],[27,27],[27],0,[23,105],0,[[53,53],23],[[75,75],23],[[26,26],23],[[31,31],23],[[67,67],23],[[50,50],23],[[[77,[47]],[77,[47]]],23],[[79,79],23],[[78,78],23],[[81,81],23],[[76,76],23],[[51,51],23],[[96,96],23],[[111,111],23],[[83,83],23],[[84,84],23],[[105,105],23],[[27,27],23],[[138,138],23],[[139,139],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[51,[[6,[16,19]]]],0,[[83,50],[[54,[[77,[81]]]]]],[[83,50],[[54,[50]]]],0,0,0,[[53,2],3],[[53,2],3],[[75,2],3],[[75,2],3],[[26,2],3],[[26,2],3],[[31,2],3],[[31,2],3],[[67,2],3],[[67,2],3],[[50,2],3],[[50,2],3],[[[77,[14]],2],3],[[79,2],3],[[79,2],3],[[78,2],3],[[78,2],3],[[81,2],3],[[81,2],3],[[76,2],3],[[51,2],3],[[96,2],3],[[111,2],3],[[83,2],3],[[84,2],3],[[105,2],3],[[27,2],3],[[27,2],3],[[27,2],3],[[27,2],3],[[27,2],3],[[27,2],3],[[138,2],3],[[139,2],3],[140,53],[141,53],[[]],[141,75],[142,75],[[]],[143,26],[[]],[[]],[143,31],[[]],[143,67],[[]],[[]],[[]],[[]],[144,78],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[145,27],[22,27],[[]],[5,139],[[]],[[53,[54,[139]]],51],[111,[[4,[53]]]],[111,[[4,[53]]]],[[96,84],111],[[84,96],111],[51,[[54,[139]]]],[84,27],[[105,16],[[6,[19]]]],[[138,139],27],[[84,[54,[5]]],[[54,[111]]]],[84,[[54,[111]]]],[96,[[6,[51,19]]]],[96,[[6,[53,19]]]],0,[[53,55]],[[75,55]],[[26,55]],[[31,55]],[[67,55]],[[50,55]],[[[77,[56]],55]],[[79,55]],[[78,55]],[[81,55]],[[76,55]],[[51,55]],[[96,55]],[[111,55]],[[105,55]],[[27,55]],[[138,55]],[[139,55]],0,[75,[[4,[53]]]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[77,[146]],27],[[77,[76]]]],[27],[[16,27],16],[27],[[16,27],16],[[105,16],[[6,[23,19]]]],[[105,16],23],[[105,22,22],[[6,[23,19]]]],[[105,22,22],[[6,[23,19]]]],0,[105,23],0,0,0,0,0,0,[27,27],[27],0,0,0,0,[147,50],[[],[[6,[105,19]]]],[22,27],[148,[[6,[105,19]]]],0,[84,[[4,[114]]]],[27,27],0,[[53,53],[[54,[43]]]],[[50,50],[[54,[43]]]],[[27,27],[[54,[43]]]],[[75,75],75],[[75,21],75],0,0,[[105,16,27],[[6,[[54,[16]],19]]]],[[105,16],[[6,[97,19]]]],[75,22],0,[27,27],[27],[[[77,[81]],[122,[50]]],[[6,[[4,[114]]]]]],0,0,[[53,61],6],[[75,61],6],[[26,61],6],[[31,61],6],[[67,61],6],[[50,61],6],[[[77,[62]],61],6],[[79,61],6],[[78,61],6],[[81,61],6],[[76,61],6],[[51,61],6],[[96,61],6],[[111,61],6],[[83,61],6],[[84,61],6],[[105,61],6],[[27,61],6],[[138,61],6],[[139,61],6],[27,27],[27],0,[27,27],[27],[[],54],[[16,16],[[54,[16]]]],[[],[[6,[19]]]],[[16,16],[[6,[19]]]],[[],54],[[16,16],[[54,[16]]]],0,0,[[27,27],27],[[27,27]],[[27,27]],[[16,27,27],16],0,[[75,53,75]],[[[77,[79]],53,75]],[75],[59,27],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[67,[[6,[19]]]],[[16,67],[[6,[16,19]]]],[[50,97],50],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[141,141],[142,142],[143,143],[140,140],[149,149],[144,144],[150,150],[151,151],[152,152],[153,153],[154,154],[155,155],[146,146],[156,156],[157,157],[158,158],[159,159],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[45,[[6,[141]]]],[45,[[6,[142]]]],[45,[[6,[143]]]],[45,[[6,[140]]]],[45,[[6,[149]]]],[45,[[6,[144]]]],[45,[[6,[150]]]],[45,[[6,[151]]]],[45,[[6,[152]]]],[45,[[6,[153]]]],[45,[[6,[154]]]],[45,[[6,[155]]]],[45,[[6,[146]]]],[45,[[6,[156]]]],[45,[[6,[157]]]],[45,[[6,[158]]]],[45,[[6,[159]]]],0,[[141,141],23],[[142,142],23],[[143,143],23],[[140,140],23],[[149,149],23],[[144,144],23],[[150,150],23],[[151,151],23],[[152,152],23],[[153,153],23],[[154,154],23],[[155,155],23],[[146,146],23],[[156,156],23],[[157,157],23],[[158,158],23],[[159,159],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],0,[[141,2],3],[[142,2],3],[[143,2],3],[[140,2],3],[[149,2],3],[[144,2],3],[[150,2],3],[[151,2],3],[[152,2],3],[[153,2],3],[[154,2],3],[[155,2],3],[[146,2],3],[[156,2],3],[[157,2],3],[[158,2],3],[[159,2],3],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[141,55]],[[142,55]],[[143,55]],[[140,55]],[[149,55]],[[144,55]],[[150,55]],[[151,55]],[[152,55]],[[153,55]],[[154,55]],[[155,55]],[[146,55]],[[156,55]],[[157,55]],[[158,55]],[[159,55]],0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[153,27],81],[[152,27],79],[[157,22,141,97],83],[[159,22],84],0,0,0,0,0,0,0,0,0,0,0,[[[160,[5]],27],141],[[[160,[5]],27],141],0,[159,[[4,[114]]]],[[141,27],16],[141,16],[141,27],0,0,0,0,0,0,[[141,61],6],[[142,61],6],[[143,61],6],[[140,61],6],[[149,61],6],[[144,61],6],[[150,61],6],[[151,61],6],[[152,61],6],[[153,61],6],[[154,61],6],[[155,61],6],[[146,61],6],[[156,61],6],[[157,61],6],[[158,61],6],[[159,61],6],0,0,0,0,0,0,0,[[141,[160,[5]],27],152],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],0,0,0,0,[[]],[[]],[108,108],[[]],[108],[[108,64,23],107],[[108,64,[54,[107]]],[[117,[24]]]],0,[[161,[54,[148]],23],[[6,[19]]]],[[]],0,[[]],[[74,84],108],0,0,0,[[]],[[],6],[[],6],[[],7],[[108,[54,[[44,[50,95]]]]],108],[[108,[54,[107]]],108],[[108,[54,[[117,[24]]]]],108],0,0,[[],[[6,[22,19]]]],[97,162],0,0,0,[97,[[6,[64,19]]]],0,[[4,96,84],[[4,[51]]]],[[102,96,98,105],[[6,[5,19]]]],[[84,102,96,[85,[5,98]]],[[6,[[4,[51]],19]]]],[[16,105],[[6,[5,19]]]],[[97,138],[[6,[4,19]]]],0,0,0,[[]],[[]],[[]],[[]],0,[148,148],[163,163],[[]],[[]],[45,[[6,[148]]]],[45,[[6,[163]]]],[[148,148],23],[[163,163],23],[[],23],[[],23],0,0,[[148,2],3],[[163,2],3],[[]],[[]],[22,163],[164,163],[165,163],[[148,55]],[[163,55]],[[]],[[]],[[22,22],163],[148,22],[97,[[6,[22,19]]]],0,0,0,0,[[148,61],6],[[163,61],6],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],0,[[161,[54,[148]],23],[[6,[19]]]],[[74,89,50,50],[[54,[50]]]],0,0,0,0,0,0,0,0,0,0,0,[[[4,[114]]]],[[130,[4,[5]]],130],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[130,130],[114,114],[166,166],[109,109],[[]],[[]],[[]],[[]],[[130,130],43],[[114,114],43],[[166,166],43],[[109,109],43],[167],[[[168,[109]]]],[[],[[110,[109]]]],[[],130],0,[45,[[6,[130]]]],[45,[[6,[114]]]],[45,[[6,[166]]]],[45,[[6,[109]]]],[167],[[130,130],23],[[114,114],23],[[166,166],23],[[109,109],23],[[],23],[[],23],[[],23],[[],23],[[130,2],3],[[130,2],3],[[114,2],3],[[114,2],3],[[166,2],3],[[109,2],3],[[]],[[]],[[]],[[]],[130,109],[114,109],[[]],[167,[[110,[109]]]],[[130,55]],[[114,55]],[[166,55]],[[109,55]],[[]],[[]],[[]],[[]],[[]],0,[[114,50],114],0,0,[[147,147,147],130],[[[160,[5]]],114],[[[160,[5]]],114],[[[160,[5]]],114],[[130,[4,[[4,[5]]]]],130],0,[[130,130],[[54,[43]]]],[[114,114],[[54,[43]]]],[[166,166],[[54,[43]]]],[[109,109],[[54,[43]]]],[[[4,[114]],[4,[130]],[54,[97]],23]],[[130,61],6],[[114,61],6],[[166,61],6],[[109,61],6],[[114,[160,[5]]],114],0,[[[0,[169,170]]],167],[[130,[4,[5]]],130],0,0,[[130,[4,[5]]],130],0,[[]],[[]],[[]],[[]],[[],5],[[],5],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],7],[[],7],[[],7],[[],7],[[],7],0,[[[77,[83]],97],54],[[[77,[76]],[85,[50,97]]],4],[[[77,[76]],[85,[50,96]]],4],[84,[[85,[50,96]]]]],"c":[],"p":[[3,"CweModule"],[3,"Formatter"],[6,"Result"],[3,"Vec"],[3,"String"],[4,"Result"],[3,"TypeId"],[4,"BitvectorDomain"],[8,"RegisterDomain"],[3,"DataDomain"],[8,"AbstractDomain"],[8,"SizedDomain"],[8,"HasTop"],[8,"Debug"],[3,"MemRegion"],[6,"Bitvector"],[3,"Interval"],[3,"IntervalDomain"],[3,"Error"],[8,"SpecializeByConditional"],[15,"i64"],[15,"u64"],[15,"bool"],[4,"BricksDomain"],[4,"CharacterInclusionDomain"],[4,"BinOpType"],[3,"ByteSize"],[3,"AbstractIdentifier"],[4,"AbstractLocation"],[4,"AbstractMemoryLocation"],[4,"CastOpType"],[3,"AbstractIdentifierData"],[8,"Clone"],[4,"BrickDomain"],[4,"CharacterSet"],[8,"PartialOrd"],[8,"Ord"],[8,"MapMergeStrategy"],[3,"DomainMap"],[3,"UnionMergeStrategy"],[3,"IntersectMergeStrategy"],[3,"MergeTopStrategy"],[4,"Ordering"],[3,"BTreeMap"],[8,"Deserializer"],[8,"Deserialize"],[8,"PartialEq"],[8,"From"],[15,"never"],[3,"Tid"],[4,"Arg"],[8,"IntoIterator"],[3,"Variable"],[4,"Option"],[8,"Hasher"],[8,"Hash"],[8,"Eq"],[3,"Iter"],[8,"Iterator"],[3,"BTreeSet"],[8,"Serializer"],[8,"Serialize"],[8,"Display"],[4,"Value"],[8,"TryToBitvec"],[8,"TryToInterval"],[4,"UnOpType"],[15,"char"],[3,"Values"],[3,"ValuesMut"],[8,"Context"],[3,"GeneralizedContext"],[3,"Computation"],[6,"Graph"],[4,"Expression"],[3,"Sub"],[3,"Term"],[4,"Jmp"],[4,"Def"],[3,"EdgeIndex"],[3,"Blk"],[6,"CallGraph"],[3,"Program"],[3,"Project"],[3,"HashMap"],[3,"Context"],[4,"Node"],[8,"Context"],[3,"NodeIndex"],[6,"DiGraph"],[6,"FnvHashMap"],[8,"Context"],[3,"GeneralizedContext"],[3,"AccessPattern"],[3,"FunctionSignature"],[3,"ExternSymbol"],[15,"str"],[15,"usize"],[4,"Edge"],[4,"NodeValue"],[8,"Fn"],[3,"State"],[3,"AbstractObject"],[6,"Data"],[3,"RuntimeMemoryImage"],[3,"Config"],[3,"PointerInference"],[3,"AnalysisResults"],[4,"LogThreadMsg"],[3,"Sender"],[3,"CallingConvention"],[6,"ValueDomain"],[4,"ObjectType"],[3,"LogMessage"],[3,"Config"],[8,"DomainInsertion"],[3,"StringAbstraction"],[3,"Context"],[3,"State"],[3,"Match"],[3,"Regex"],[3,"HashSet"],[3,"Config"],[4,"StringLocation"],[3,"Config"],[3,"Config"],[3,"Config"],[3,"Config"],[3,"WarningContext"],[3,"CweWarning"],[3,"Config"],[3,"Config"],[4,"Taint"],[3,"Config"],[3,"Config"],[3,"Config"],[3,"Config"],[3,"DatatypeProperties"],[4,"Datatype"],[3,"RegisterProperties"],[3,"Variable"],[3,"Expression"],[4,"ExpressionType"],[3,"Jmp"],[3,"BitWidth"],[3,"Sub"],[8,"ToString"],[3,"BareMetalConfig"],[3,"Call"],[4,"JmpType"],[4,"Label"],[3,"Def"],[3,"Blk"],[3,"Arg"],[4,"ArgIntent"],[3,"ExternSymbol"],[3,"Program"],[3,"CallingConvention"],[3,"Project"],[8,"Into"],[3,"Path"],[3,"PathBuf"],[3,"MemorySegment"],[3,"ProgramHeader"],[3,"SectionTable"],[4,"LogLevel"],[3,"LogThread"],[3,"Receiver"],[8,"FnOnce"],[8,"Send"],[13,"GlobalAddress"],[13,"Location"],[13,"Pointer"],[13,"CallReturn"],[13,"CallSource"],[13,"CallFlowCombinator"],[8,"VsaResult"],[8,"BitvectorExtended"],[13,"Stack"],[13,"Register"],[13,"Load"],[13,"Store"],[13,"Assign"],[13,"UnOp"],[13,"Cast"],[13,"Subpiece"],[13,"Unknown"],[13,"BinOp"],[13,"CBranch"],[13,"CallOther"],[13,"Call"],[13,"CallInd"]]}\ +"acceptance_tests_ghidra":{"doc":"This crate contains acceptance tests using Ghidra as a …","t":"RRDRRFLLLLLLLLLFFFFFFLLLLLF","n":["ARCHITECTURES","COMPILERS","CweTestCase","WINDOWS_ARCHITECTURES","WINDOWS_COMPILERS","all_test_cases","borrow","borrow_mut","clone","clone_into","eq","fmt","from","hash","into","linux_test_cases","mark_architecture_skipped","mark_compiler_skipped","mark_skipped","new_test_cases","print_errors","run_test","to_owned","try_from","try_into","type_id","windows_test_cases"],"q":[[0,"acceptance_tests_ghidra"],[27,"alloc::vec"],[28,"core::fmt"],[29,"core::fmt"],[30,"alloc::string"],[31,"core::result"],[32,"core::any"]],"d":["CPU architectures contained in the test samples","Compilers contained in the test samples","A test case containing the necessary information to run an …","CPU architectures for the Windows-based test samples","Compilers used for the Windows-based test samples","Return a list of all possible test cases (Linux and …","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","Return a list with all possible Linux test cases for the …","Mark test cases using the given CPU architecture as skipped…","Mark test cases using the given compiler as skipped.","Mark test cases using the given CPU architecture + …","Generate test cases for all combinations of CPU …","Print the error messages of failed checks. The error_log …","Run the test case and print to the shell, whether the test …","","","","","Return a list with all possible Windows test cases for the …"],"i":[0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,0],"f":[0,0,0,0,0,[[1,1],[[3,[2]]]],[-1,-2,[],[]],[-1,-2,[],[]],[2,2],[[-1,-2],4,[],[]],[[2,2],5],[[2,6],7],[-1,-1,[]],[[2,-1],4,8],[-1,-2,[],[]],[[1,1],[[3,[2]]]],[[[9,[2]],1],4],[[[9,[2]],1],4],[[[9,[2]],1,1],4],[[1,[9,[1]],[9,[1]],1],[[3,[2]]]],[[[3,[[4,[10,10]]]]],4],[[2,1,11],[[12,[4,10]]]],[-1,-2,[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,13,[]],[[1,1],[[3,[2]]]]],"c":[],"p":[[15,"str"],[3,"CweTestCase",0],[3,"Vec",27],[15,"tuple"],[15,"bool"],[3,"Formatter",28],[6,"Result",28],[8,"Hasher",29],[15,"slice"],[3,"String",30],[15,"usize"],[4,"Result",31],[3,"TypeId",32]],"b":[]},\ +"cwe_checker":{"doc":"This crate defines the command line interface for the …","t":"DLLMMLLFLLMMFLLLLLLMFMMMMFMLLLLLM","n":["CmdlineArgs","augment_args","augment_args_for_update","bare_metal_config","binary","borrow","borrow_mut","check_file_existence","command","command_for_update","config","debug","filter_modules_for_partial_run","fmt","from","from_arg_matches","from_arg_matches_mut","group_id","into","json","main","module_versions","out","partial","quiet","run_with_ghidra","statistics","try_from","try_into","type_id","update_from_arg_matches","update_from_arg_matches_mut","verbose"],"q":[[0,"cwe_checker"],[33,"clap::builder::command"],[34,"alloc::string"],[35,"core::result"],[36,"cwe_checker_lib"],[37,"alloc::vec"],[38,"core::fmt"],[39,"core::fmt"],[40,"clap"],[41,"clap::util::id"],[42,"core::option"],[43,"anyhow"],[44,"core::any"]],"d":["Find vulnerable patterns in binary executables","","","Path to a configuration file for analysis of bare metal …","The path to the binary.","","","Return Ok(file_path) only if file_path points to an …","","","Path to a custom configuration file to use instead of the …","Output for debugging purposes. The current behavior of …","Only keep the modules specified by the --partial parameter …","","Returns the argument unchanged.","","","","Calls U::from(self).","Generate JSON output.","","Prints out the version numbers of all known modules.","Write the results to a file instead of stdout. This only …","Specify a specific set of checks to be run as a comma …","Do not print log messages. This prevents polluting stdout …","Run the cwe_checker with Ghidra as its backend.","Include various statistics in the log messages. This can …","","","","","","Print additional debug log messages."],"i":[0,8,8,8,8,8,8,0,8,8,8,8,0,8,8,8,8,8,8,8,0,8,8,8,8,0,8,8,8,8,8,8,8],"f":[0,[1,1],[1,1],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[2,[[4,[3,3]]]],[[],1],[[],1],0,0,[[[6,[5]],2],7],[[8,9],10],[-1,-1,[]],[11,[[4,[8,12]]]],[11,[[4,[8,12]]]],[[],[[14,[13]]]],[-1,-2,[],[]],0,[[],[[4,[7,15]]]],0,0,0,0,[8,[[4,[7,15]]]],0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,16,[]],[[8,11],[[4,[7,12]]]],[[8,11],[[4,[7,12]]]],0],"c":[],"p":[[3,"Command",33],[15,"str"],[3,"String",34],[4,"Result",35],[3,"CweModule",36],[3,"Vec",37],[15,"tuple"],[3,"CmdlineArgs",0],[3,"Formatter",38],[6,"Result",38],[3,"ArgMatches",39],[6,"Error",40],[3,"Id",41],[4,"Option",42],[3,"Error",43],[3,"TypeId",44]],"b":[]},\ +"cwe_checker_install":{"doc":"This crate automates the installation of cwe_checker. It …","t":"DDLLLLLLLLFFFFLFLLLLLLFFMMLFLLFFFFFLLLLLLLFMLL","n":["CmdlineArgs","GhidraConfig","augment_args","augment_args_for_update","borrow","borrow","borrow_mut","borrow_mut","command","command_for_update","copy_config_json","copy_dir_all","copy_ghidra_plugin","create_ghidra_json","deserialize","find_ghidra","fmt","fmt","from","from","from_arg_matches","from_arg_matches_mut","get_search_locations","get_user_choice","ghidra_path","ghidra_path","group_id","install_cwe_checker","into","into","is_good_ghidra_location","is_hidden","main","search_for_ghidrarun","select_ghidra_version","serialize","try_from","try_from","try_into","try_into","type_id","type_id","uninstall","uninstall","update_from_arg_matches","update_from_arg_matches_mut"],"q":[[0,"cwe_checker_install"],[46,"clap::builder::command"],[47,"std::path"],[48,"anyhow"],[49,"core::convert"],[50,"std::path"],[51,"serde::de"],[52,"core::fmt"],[53,"core::fmt"],[54,"clap"],[55,"alloc::vec"],[56,"clap::util::id"],[57,"core::option"],[58,"walkdir::dent"],[59,"serde::ser"],[60,"core::any"]],"d":["Installs cwe_checker","Structure for ghidra.json file","","","","","","","","","Copies src/config.json to specified location","Recursive copy of files and directories.","Copy src/ghidra to provided location.","Creates ghidra.json for a Ghidra location at provided …","","Returns None if Ghidra were not found. Else returns path …","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns vector of os-specific locations","Determines Ghidra versions and provides selection …","Path to a ghidra installation.","Path to a ghidra installation","","Runs Cargo install to install cwe_checker.","Calls U::from(self).","Calls U::from(self).","Determines if a path is a ghidra installation","check whether a path starts with “.”, indicating a …","","Searches for a file containing “ghidraRun” at provided …","Determines Ghidra versions and provides selection …","","","","","","","","Removes provided locations and uninstalls cwe_checker via …","If true, cwe_checker will be uninstalled.","",""],"i":[0,0,10,10,10,7,10,7,10,10,0,0,0,0,7,0,10,7,10,7,10,10,0,0,10,7,10,0,10,7,0,0,0,0,0,7,10,7,10,7,10,7,0,10,10,10],"f":[0,0,[1,1],[1,1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],1],[[],1],[2,[[4,[3]]]],[[-1,-2],[[4,[3]]],[[5,[2]]],[[5,[2]]]],[2,[[4,[3]]]],[[2,6],[[4,[3]]]],[-1,[[8,[7]]],9],[[],[[4,[6]]]],[[10,11],12],[[7,11],12],[-1,-1,[]],[-1,-1,[]],[13,[[8,[10,14]]]],[13,[[8,[10,14]]]],[[],[[15,[6]]]],[[[15,[6]]],[[4,[6]]]],0,0,[[],[[17,[16]]]],[[],[[4,[3]]]],[-1,-2,[],[]],[-1,-2,[],[]],[2,18],[19,18],[[],[[4,[3]]]],[2,[[15,[6]]]],[[[15,[6]]],[[4,[6]]]],[[7,-1],8,20],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,21,[]],[-1,21,[]],[[2,2],[[4,[3]]]],0,[[10,13],[[8,[3,14]]]],[[10,13],[[8,[3,14]]]]],"c":[],"p":[[3,"Command",46],[3,"Path",47],[15,"tuple"],[6,"Result",48],[8,"AsRef",49],[3,"PathBuf",47],[3,"GhidraConfig",0],[4,"Result",50],[8,"Deserializer",51],[3,"CmdlineArgs",0],[3,"Formatter",52],[6,"Result",52],[3,"ArgMatches",53],[6,"Error",54],[3,"Vec",55],[3,"Id",56],[4,"Option",57],[15,"bool"],[3,"DirEntry",58],[8,"Serializer",59],[3,"TypeId",60]],"b":[]},\ +"cwe_checker_lib":{"doc":"The main library of the cwe_checker containing all CWE …","t":"DGAALLALLFALMAAMLLLLAMIDDEEEEEEEDIDNNIDDDNIDDNNNIIINNNNNIIDNNNNNLLLLLLKLLLLLLKLLKLLKLLKLLLLLLKLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLKLLKLLKLLKLLKLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLKLLLLLLLLKLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLKLLLLMMMMMMAAAAAAAAAAAAAIDQLLFFFLLKLLKLLKKKLLLKKKLKGFFFFDLLLLLLFLFFLLLLLLLLLDIQQQLLLLLLLKLLLLLKLLLLLLLKIDQLLFFFFFLLKLLKLLKLLLKKKLKKDDLLLLLLLLLLFLLLLLLLLLLLLLLLLLLMLLLLLLLLLLMLLLLLLLALLLLLLLLLLLLLFFFAFFFFFNNNNNNNNNENGNENLLLLLLLLLLLLLLLLLLLLLLFFFLLLLLLLLLLLLLLLLMMMMNENLLLLLLLLLLLFLLLLLLMMHDGDDGLLLMLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLALLLLLFLLLLLMLLLLLLLLLLLLLLDNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFDDLLLLLLLALLLLLLMLLLLLLLLLLFLAMLLLLLLLDLLLMMLLLLLLLMLLLLMLLLLLLLLLLLLLLLLLLLMLLLLLLLMLLLMLLLLLLMALLLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLQIKKKKKAAAAAAAAAAAAAAAAAHFHDNNNENLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLLLHFHDLLFLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLLLHDDLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHFHDDLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLLLLLHDLLFLLLLLLLLLLLLAALLLLDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLENNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHHHFHDLLFLLLLLLLLLFFLLFLLLLLHDLLFFFLLLLLLLLLFLLLLLLHFFFHDLLFLLLLLLLLLLLLLLLLENNEGIDNNNNNNDNNNNDNENNEDENEDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNENNNNNNNDDNNDNNNDNDDNNENNDLLLMMMLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLMMMMKLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLMLMMMLLLLLLLLLLLLLLLLLLLLLKLKLLLLLMLMMMMMMLLMMMMLLLLMLLMLLLLLMMLLLMLLLMMLLLLLLLLLLLLLLLLLLLLLLMLLKLKLKLMMLLKLMLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDENNNNNNDNNNNNDDDNDEDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDENENNNDDNDNNDNDMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMLLMLLLLMMMMMMLLLLLLLLLLLLLLLLLMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMDMLLLLLLLMFLMLLMMMLLLLLLLAAFFAAAFAFFFFFDDMLLLLMLLLLLLLLLLLLLLMMLLLLLLLLLLLLLFMMMMLLLLLLLLLLMFFNDNNNNEDDENFLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMMLLLLLMLLLLFLLLLLMLLMMLMLLLLLLLLLLLLLLLLLLLLLMFFFF","n":["CweModule","CweModuleFn","abstract_domain","analysis","borrow","borrow_mut","checkers","fmt","from","get_modules","intermediate_representation","into","name","pcode","pipeline","run","to_string","try_from","try_into","type_id","utils","version","AbstractDomain","AbstractIdentifier","AbstractIdentifierData","AbstractLocation","AbstractMemoryLocation","BitvectorDomain","BrickDomain","BricksDomain","CharacterInclusionDomain","CharacterSet","DataDomain","DomainInsertion","DomainMap","GlobalAddress","GlobalPointer","HasTop","IntersectMergeStrategy","Interval","IntervalDomain","Location","MapMergeStrategy","MemRegion","MergeTopStrategy","Pointer","Pointer","Register","RegisterDomain","SizedDomain","SpecializeByConditional","Top","Top","Top","Top","Top","TryToBitvec","TryToInterval","UnionMergeStrategy","Value","Value","Value","Value","Value","add","add","add","add","add","add","add_not_equal_bound","add_not_equal_bound","add_not_equal_bound","add_offset","add_offset","add_offset_at_root","add_offset_to_all_indices","add_signed_greater_equal_bound","add_signed_greater_equal_bound","add_signed_greater_equal_bound","add_signed_less_equal_bound","add_signed_less_equal_bound","add_signed_less_equal_bound","add_unsigned_greater_equal_bound","add_unsigned_greater_equal_bound","add_unsigned_greater_equal_bound","add_unsigned_less_equal_bound","add_unsigned_less_equal_bound","add_unsigned_less_equal_bound","adjust_end_to_value_in_stride","adjust_start_to_value_in_stride","adjust_to_stride_and_remainder","all_bricks_are_top","append_string_domain","append_string_domain","append_string_domain","bin_op","bin_op","bin_op","bin_op","bin_op_bytesize","bitwise_not","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bytesize","bytesize","bytesize","bytesize","bytesize","bytesize","bytesize","bytesize","cast","cast","cast","cast","clear_top_values","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compare","compare","compare","compare","contains","contains_top","create_char_domain","create_char_domain","create_char_domain","create_empty_string_domain","create_empty_string_domain","create_empty_string_domain","create_float_value_domain","create_float_value_domain","create_float_value_domain","create_integer_domain","create_integer_domain","create_integer_domain","create_pointer_value_domain","create_pointer_value_domain","create_pointer_value_domain","create_top_value_domain","create_top_value_domain","create_top_value_domain","deref","deref","deref_mut","dereference","dereferenced","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","end","entry_map","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equal_as_value_sets","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend","extend","fits_into_size","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg","from_global_address","from_global_address","from_iter","from_stack_position","from_target","from_var","from_var","get","get_absolute_value","get_address_bytesize","get_all_parent_locations","get_id_with_parent_location","get_if_absolute_value","get_if_unique_target","get_location","get_parent_location","get_parent_location","get_path_hints","get_relative_values","get_tid","get_unsized","hash","hash","hash","hash","hash","hash","hash","hash","hash","insert_at_byte_index","int_2_comp","intersect","intersect","intersect","intersection","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_empty","is_less_or_equal","is_less_or_equal","is_top","is_top","is_top","is_top","is_top","is_top","is_top","is_top","is_top","is_top","iter","mark_all_values_as_top","mark_interval_values_as_top","merge","merge","merge","merge","merge","merge","merge","merge","merge","merge_map","merge_map","merge_map","merge_map","merge_write_top","neg","neg","new","new","new","new","new","new_empty","new_top","new_top","new_top","new_top","new_top","normalize","partial_cmp","partial_cmp","partial_cmp","partial_cmp","piece","recursion_depth","recursion_depth","referenced_ids","remove","remove_ids","replace_abstract_id","replace_all_ids","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","set_absolute_value","set_contains_top_flag","set_relative_values","shift_left","sign_extend","signed_intersect","signed_merge","signed_merge","signed_merge_and_widen","signed_mul","signed_mul","start","stride","sub","sub","sub","sub","sub","subpiece","subpiece","subpiece","subpiece","subpiece","subpiece_higher","subpiece_lower","subtract_offset","to_json_compact","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","top","top","top","top","top","top","top","top","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_to_bitvec","try_to_bitvec","try_to_bitvec","try_to_bitvec","try_to_interval","try_to_interval","try_to_interval","try_to_interval","try_to_offset","try_to_offset_interval","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","un_op","un_op","un_op","un_op","union","unset_contains_top_flag","unwrap_register","unwrap_value","unwrap_value","update_widening_lower_bound","update_widening_upper_bound","values","values_mut","widen","widen","with_offset_addendum","with_path_hint","without_last_path_hint","without_widening_hints","without_widening_hints","without_widening_hints","zero_extend","zero_extend","address","size","offset","offset","size","target","backward_interprocedural_fixpoint","callgraph","dead_variable_elimination","expression_propagation","fixpoint","forward_interprocedural_fixpoint","function_signature","graph","interprocedural_fixpoint_generic","pointer_inference","stack_alignment_substitution","string_abstraction","vsa_results","Context","GeneralizedContext","Value","borrow","borrow_mut","create_computation","create_computation_with_bottom_up_worklist_order","create_computation_with_top_down_worklist_order","from","get_context","get_graph","get_graph","into","merge","merge","new","specialize_conditional","split_call_stub","split_return_stub","try_from","try_into","type_id","update_call_stub","update_callsite","update_def","update_edge","update_jumpsite","CallGraph","find_call_sequences_to_target","get_program_callgraph","compute_alive_vars","remove_dead_var_assignments","Context","borrow","borrow_mut","from","get_graph","into","merge","merge_def_assignments_to_same_var","new","propagate_input_expression","propagate_input_expressions","specialize_conditional","try_from","try_into","type_id","update_call","update_call_stub","update_def","update_jump","update_return","Computation","Context","EdgeLabel","NodeLabel","NodeValue","borrow","borrow_mut","compute","compute_with_max_steps","from","from_node_priority_list","get_context","get_graph","get_graph","get_node_value","get_worklist","has_stabilized","into","merge","new","node_values","node_values_mut","set_node_value","try_from","try_into","type_id","update_edge","Context","GeneralizedContext","Value","borrow","borrow_mut","create_bottom_up_worklist","create_computation","create_computation_with_bottom_up_worklist_order","create_computation_with_top_down_worklist_order","create_top_down_worklist","from","get_context","get_graph","get_graph","into","merge","merge","new","specialize_conditional","try_from","try_into","type_id","update_call","update_call_stub","update_def","update_edge","update_jump","update_return","AccessPattern","FunctionSignature","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","compare","compute_function_signatures","default","default","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","get_stack_params_total_size","global_parameters","into","into","is_accessed","is_dereferenced","is_mutably_dereferenced","is_top","merge","new","new","new_unknown_access","parameters","partial_cmp","serialize","serialize","set_dereference_flag","set_mutably_dereferenced_flag","set_read_flag","set_unknown_access_flags","stubs","to_json_compact","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","with_dereference_flag","with_mutably_dereferenced_flag","with_read_flag","compute_return_value_for_stubbed_function","generate_param_access_stubs","get_stubbed_variadic_symbols","return_value_stubs","copy_param","new_mem_object_id","or_null","param_plus_unknown_offset","untracked","BlkEnd","BlkStart","Block","Call","CallCombine","CallReturn","CallSource","CrCallStub","CrReturnStub","Edge","ExternCallStub","Graph","Jump","Node","ReturnCombine","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","get_block","get_entry_nodes_of_subs","get_program_cfg","get_program_cfg_with_logs","get_sub","hash","hash","into","into","serialize","serialize","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","call","return_","source","target","CallFlowCombinator","NodeValue","Value","borrow","borrow_mut","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","from","into","merge_option","serialize","to_owned","try_from","try_into","type_id","unwrap_value","call_stub","interprocedural_flow","CWE_MODULE","Config","Data","PointerInference","State","ValueDomain","add_directly_reachable_ids_to_id_set","add_param_object_from_callee","add_recursively_referenced_ids_to_id_set","allocation_symbols","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","check_def_for_null_dereferences","clear_non_callee_saved_register","clear_stack_parameter","clone","clone","clone_into","clone_into","collected_logs","compute","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","eval","eval_abstract_location","eval_address_at_def","eval_at_jmp","eval_parameter_arg","eval_parameter_arg_at_call","eval_parameter_location_at_call","eval_value_at_def","extract_pi_analysis_results","filter_location_to_pointer_data_map","fmt","fmt","from","from","from","from_fn_sig","generate_compact_json","generate_target_objects_for_new_locations","get_context","get_fn_tid","get_global_mem_id","get_graph","get_id_renaming_map_at_call_tid","get_id_to_unified_ids_replacement_map","get_node_value","get_register","get_state_at_jmp_tid","handle_load","handle_register_assign","handle_store","hash","insert_pointers_to_unified_objects","into","into","into","is_top","load_value","load_value_from_address","map_abstract_locations_to_pointer_data","memory","merge","merge_mem_objects_with_unique_abstract_location","minimize_before_return_instruction","new","new","object","print_compact_json","print_yaml","remove_non_callee_saved_register","remove_unreferenced_objects","replace_ids_to_non_parameter_objects","run","serialize","serialize","set_mips_link_register","set_register","specialize_by_expression_result","stack_id","store_value","to_json_compact","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write_to_address","AbstractObject","GlobalMem","Heap","ObjectType","Stack","add_ids_to_pointer_targets","add_offset_to_all_indices","assume_arbitrary_writes","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","compare","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","get_mem_region","get_object_type","get_referenced_ids_overapproximation","get_referenced_ids_underapproximation","get_value","hash","into","into","is_top","is_unique","mark_as_not_unique","mark_as_unique","merge","merge_value","new","overwrite_mem_region","overwrite_with","partial_cmp","remove_ids","replace_ids","serialize","serialize","set_object_type","set_value","to_json_compact","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","substitute_and_on_stackpointer","Config","StringAbstraction","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","compute","context","deserialize","eq","equivalent","equivalent","equivalent","fmt","format_string_index","from","from","get_computation","get_context","get_graph","get_node_value","hash","into","into","new","run","serialize","state","string_symbols","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","Context","add_constant_or_top_value_to_return_locations","add_new_string_abstract_domain","approximate_string_domain_from_datatype","block_first_def_set","block_start_node_map","borrow","borrow_mut","concat_domains","create_abstract_domain_entries_for_function_return_values","create_string_domain_for_sprintf_snprintf","create_string_domain_using_constants_and_sub_domains","create_string_domain_using_data_type_approximations","extern_symbol_map","fetch_constant_and_domain_for_format_specifier","fetch_constant_domain_if_available","fetch_subdomains_if_available","filter_out_all_non_string_args","format_string_index_map","from","get_constant_char_domain","get_constant_integer_domain","get_constant_string_domain","get_constant_target","get_graph","handle_free","handle_generic_symbol_calls","handle_memcpy_calls","handle_scanf_calls","handle_sprintf_and_snprintf_calls","handle_sscanf_calls","handle_strcat_and_strncat_calls","handle_string_symbol_calls","handle_unknown_symbol_calls","has_input_target","has_multiple_targets","has_return_target","into","jmp_to_blk_end_node_map","map_source_string_parameters_to_return_arguments","merge","merge_domains_from_multiple_pointer_targets","new","no_specifiers","parse_bitvec_to_char","parse_format_string_and_add_new_string_domain","pointer_inference_results","process_domains_for_memcpy_calls","process_domains_for_memcpy_calls_with_one_unique_input","process_second_input_domain","project","push_constant_subsequences_before_and_between_specifiers","push_constant_suffix_if_available","push_format_specifier_approximation","re_format_specifier","source_string_mapped_to_return_locations","specialize_conditional","string_symbol_map","symbol_calls","trim_format_specifier","try_from","try_into","type_id","update_call","update_call_stub","update_def","update_jump","update_return","State","add_global_pointer_if_input_is_string_constant","add_new_heap_to_string_entry","add_new_stack_offset_to_string_entry","add_new_variable_to_pointer_entry","add_pointer_to_stack_map","add_relative_targets_to_string_maps","add_top_domain_values_for_additional_pointer_targets","add_unassigned_return_pointer","borrow","borrow_mut","check_if_output_is_string_pointer_and_add_targets","clone","clone_into","collect_all_tracked_pointers","delete_string_map_entries_if_no_pointer_targets_are_tracked","deserialize","eq","equivalent","equivalent","equivalent","evaluate_constant","filter_string_map_entries","fmt","from","get_current_sub","get_heap_to_string_map","get_pointer_inference_state","get_stack_offset_to_pointer_map","get_stack_offset_to_string_map","get_unassigned_return_pointer","get_variable_to_pointer_map","handle_assign_and_load","handle_store","into","is_stack_pointer","is_top","merge","new","pointer_added_to_stack_maps","pointer_added_to_variable_maps","pointer_is_in_pointer_maps","pointer_targets_partially_tracked","remove_heap_to_string_entry","remove_non_callee_saved_pointer_entries_for_external_symbol","serialize","set_all_maps_empty","set_pointer_inference_state","set_variable_to_pointer_map","to_owned","try_from","try_into","type_id","ValueDomain","VsaResult","eval_address_at_def","eval_at_jmp","eval_parameter_arg_at_call","eval_parameter_location_at_call","eval_value_at_def","cwe_119","cwe_134","cwe_190","cwe_215","cwe_243","cwe_332","cwe_337","cwe_367","cwe_416","cwe_426","cwe_467","cwe_476","cwe_560","cwe_676","cwe_78","cwe_782","cwe_789","CWE_MODULE","check_cwe","CWE_MODULE","Config","GlobalReadable","GlobalWriteable","NonGlobal","StringLocation","Unknown","borrow","borrow","borrow_mut","borrow_mut","check_cwe","clone","clone","clone_into","clone_into","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","into","into","serialize","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","check_cwe","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","Context","borrow","borrow","borrow_mut","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","from","get_graph","hash","into","into","merge","serialize","specialize_conditional","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","update_call","update_call_stub","update_def","update_jump","update_return","CWE_MODULE","check_cwe","CWE_MODULE","Config","WarningContext","borrow","borrow","borrow_mut","borrow_mut","check_cwe","clone","clone","clone_into","clone_into","cmp","compare","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","hash","hash","into","into","new","partial_cmp","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","state","taint","to_owned","try_from","try_into","type_id","State","borrow","borrow_mut","check_generic_function_params_for_taint","check_if_address_points_to_taint","check_mem_id_for_taint","check_return_values_for_taint","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","eval","fmt","from","get_pointer_inference_state","into","is_empty","is_top","load_taint_from_memory","merge","new","remove_all_memory_taints","remove_non_callee_saved_taint","save_taint_to_memory","serialize","set_pointer_inference_state","set_register_taint","to_json_compact","to_owned","try_from","try_into","type_id","Taint","Tainted","Top","bin_op","borrow","borrow_mut","bytesize","cast","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","fmt","from","hash","into","is_tainted","is_top","merge","new_top","serialize","subpiece","to_owned","to_string","top","try_from","try_into","type_id","un_op","CWE_MODULE","UPPER_BOUND_CORRECT_CHMOD_ARG_VALUE","UPPER_BOUND_CORRECT_UMASK_ARG_VALUE","check_cwe","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","generate_cwe_warnings","get_calls","hash","into","resolve_symbols","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","check_if_string_domain_indicates_vulnerability","check_system_call_parameter","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","generate_cwe_warning","into","serialize","to_owned","try_from","try_into","type_id","CWE_MODULE","check_cwe","generate_cwe_warning","handle_sub","CWE_MODULE","Config","borrow","borrow_mut","check_cwe","clone","clone_into","deserialize","eq","equivalent","equivalent","equivalent","fmt","from","hash","into","serialize","to_owned","try_from","try_into","type_id","Arg","Assign","BinOp","BinOpType","Bitvector","BitvectorExtended","Blk","BoolAnd","BoolNegate","BoolOr","BoolXOr","Branch","BranchInd","ByteSize","CBranch","Call","CallInd","CallOther","CallingConvention","Cast","CastOpType","Char","Const","Datatype","DatatypeProperties","Def","Double","Expression","ExternSymbol","Float","Float2Float","FloatAbs","FloatAdd","FloatCeil","FloatDiv","FloatEqual","FloatFloor","FloatLess","FloatLessEqual","FloatMult","FloatNaN","FloatNegate","FloatNotEqual","FloatRound","FloatSqrt","FloatSub","Int2Comp","Int2Float","IntAdd","IntAnd","IntCarry","IntDiv","IntEqual","IntLeft","IntLess","IntLessEqual","IntMult","IntNegate","IntNotEqual","IntOr","IntRem","IntRight","IntSBorrow","IntSCarry","IntSDiv","IntSExt","IntSLess","IntSLessEqual","IntSRem","IntSRight","IntSub","IntXOr","IntZExt","Integer","Jmp","Load","Long","LongDouble","LongLong","Piece","Pointer","PopCount","Program","Project","Register","Return","RuntimeMemoryImage","Short","Stack","Store","Sub","Subpiece","Term","Tid","Trunc","UnOp","UnOpType","Unknown","Var","Variable","add","add_assign","add_global_memory_offset","address","address_base_offset","addresses","as_bit_length","bin_op","bin_op","blk_id_at_address","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bytesize","bytesize","bytesize","bytesize","callee_saved_register","calling_convention","calling_convention","calling_conventions","cast","cast","char_size","check_for_zero_extension","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","compare","compare","compare","cpu_architecture","datatype_properties","defs","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","div","div_assign","double_size","empty","entry_points","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","eval_stack_offset","extern_symbols","find_block","find_sub_containing_jump","float_parameter_register","float_return_register","float_size","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_var","get_all_parameter_register","get_all_return_register","get_calling_convention","get_calling_convention","get_data_type","get_pointer_bytesize","get_ro_data_pointer_at_address","get_size_from_data_type","get_specific_calling_convention","get_standard_calling_convention","get_unique_parameter","get_unique_return_register","has_id_suffix","has_var_args","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","indirect_jmp_targets","input_vars","integer_parameter_register","integer_return_register","integer_size","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_ir_sub_term","into_resize_signed","into_resize_signed","into_resize_unsigned","into_resize_unsigned","is_address_writeable","is_global_memory_address","is_interval_readable","is_interval_writeable","is_little_endian","is_little_endian_byte_order","is_temp","jmps","long_double_size","long_long_size","long_size","memory_segments","mul","mul_assign","name","name","name","name","new","new","new","new_from_bare_metal","no_return","normalize","not","parameters","partial_cmp","partial_cmp","partial_cmp","plus","plus_const","pointer_size","program","read","read_string_until_null_terminator","recursion_depth","register_set","rem","rem_assign","remove_nonexisting_indirect_jump_targets","return_values","runtime_memory_image","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","shl","shl_assign","short_size","shr","shr_assign","signed_add_overflow_checked","signed_add_overflow_checked","signed_mult_with_overflow_flag","signed_mult_with_overflow_flag","signed_sub_overflow_checked","signed_sub_overflow_checked","size","stack_pointer_register","sub","sub_assign","subpiece","subpiece","subs","substitute_input_var","substitute_input_var","substitute_trivial_operations","sum","term","tid","tid","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","un_op","un_op","with_id_suffix","address","data_type","data_type","expr","size","address","address","value","value","var","var","arg","arg","arg","description","lhs","low_byte","op","op","op","rhs","size","size","size","condition","description","return_","return_","return_","target","target","target","Arg","ArgIntent","BOOL_AND","BOOL_NEGATE","BOOL_OR","BOOL_XOR","BRANCH","BRANCHIND","Blk","CALL","CALLIND","CALLOTHER","CBRANCH","COPY","Call","CallingConvention","Def","Direct","Expression","ExpressionType","ExternSymbol","FLOAT2FLOAT","FLOAT_ABS","FLOAT_ADD","FLOAT_CEIL","FLOAT_DIV","FLOAT_EQUAL","FLOAT_FLOOR","FLOAT_LESS","FLOAT_LESSEQUAL","FLOAT_MULT","FLOAT_NAN","FLOAT_NEG","FLOAT_NOTEQUAL","FLOAT_ROUND","FLOAT_SQRT","FLOAT_SUB","INPUT","INT2FLOAT","INT_2COMP","INT_ADD","INT_AND","INT_CARRY","INT_DIV","INT_EQUAL","INT_LEFT","INT_LESS","INT_LESSEQUAL","INT_MULT","INT_NEGATE","INT_NOTEQUAL","INT_OR","INT_REM","INT_RIGHT","INT_SBORROW","INT_SCARRY","INT_SDIV","INT_SEXT","INT_SLESS","INT_SLESSEQUAL","INT_SREM","INT_SRIGHT","INT_SUB","INT_XOR","INT_ZEXT","Indirect","Jmp","JmpType","LOAD","Label","OUTPUT","PIECE","POPCOUNT","Program","Project","RETURN","RegisterProperties","STORE","SUBPIECE","Sub","TRUNC","Variable","address","addresses","arguments","base_register","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","call","call_string","calling_convention","calling_convention","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","condition","cpu_architecture","datatype_properties","defs","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","entry_points","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extern_symbols","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","goto","has_var_args","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","image_base","input0","input1","input2","intent","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_ir_blk","into_ir_def","into_ir_program","into_ir_project","is_virtual","jmps","lhs","location","lsb","mnemonic","mnemonic","name","name","name","name","new_const","new_virtual","no_return","normalize","parse_address_to_bitvector","parse_const_to_bitvector","parse_to_bytesize","program","register","register_calling_convention","register_properties","return_","rhs","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","size","size","stack_pointer_register","subs","target","target_hints","tid","to_load_def","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","value","var","AnalysisResults","binary","borrow","borrow_mut","clone","clone_into","compute_function_signatures","compute_pointer_inference","compute_string_abstraction","control_flow_graph","disassemble_binary","from","function_signatures","into","new","pointer_inference","project","string_abstraction","to_owned","try_from","try_into","type_id","with_function_signatures","with_pointer_inference","with_string_abstraction","arguments","binary","get_binary_base_address","get_ghidra_plugin_path","ghidra","graph_utils","log","read_config_file","symbol_utils","calculate_parameter_locations","get_input_format_string","get_variable_parameters","parse_format_string_destination_and_return_content","parse_format_string_parameters","BareMetalConfig","MemorySegment","base_address","borrow","borrow","borrow_mut","borrow_mut","bytes","clone","clone","clone_into","clone_into","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","execute_flag","flash_base_address","fmt","fmt","from","from","from_bare_metal_file","from_elf_segment","from_pe_section","hash","hash","into","into","new_bare_metal_ram_segment","parse_binary_base_address","parse_hex_string_to_u64","processor_id","ram_base_address","ram_size","read_flag","serialize","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","write_flag","get_project_from_ghidra","is_sink_call_reachable_from_source_call","Cwe","CweWarning","Debug","Error","Info","Log","LogLevel","LogMessage","LogThread","LogThreadMsg","Terminate","add_debug_log_statistics","addresses","addresses","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","collect","collect_and_deduplicate","compare","compare","compare","compare","create_disconnected_sender","default","description","deserialize","deserialize","deserialize","deserialize","drop","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get_msg_sender","hash","hash","hash","hash","into","into","into","into","into","level","location","location","name","new","new_debug","new_error","new_info","other","other","partial_cmp","partial_cmp","partial_cmp","partial_cmp","print_all_messages","serialize","serialize","serialize","serialize","source","source","spawn","symbols","symbols","text","tids","tids","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","version","find_symbol","get_calls_to_symbols","get_callsites","get_symbol_map"],"q":[[0,"cwe_checker_lib"],[22,"cwe_checker_lib::abstract_domain"],[632,"cwe_checker_lib::abstract_domain::AbstractLocation"],[634,"cwe_checker_lib::abstract_domain::AbstractMemoryLocation"],[638,"cwe_checker_lib::analysis"],[651,"cwe_checker_lib::analysis::backward_interprocedural_fixpoint"],[678,"cwe_checker_lib::analysis::callgraph"],[681,"cwe_checker_lib::analysis::dead_variable_elimination"],[683,"cwe_checker_lib::analysis::expression_propagation"],[703,"cwe_checker_lib::analysis::fixpoint"],[730,"cwe_checker_lib::analysis::forward_interprocedural_fixpoint"],[758,"cwe_checker_lib::analysis::function_signature"],[822,"cwe_checker_lib::analysis::function_signature::stubs"],[826,"cwe_checker_lib::analysis::function_signature::stubs::return_value_stubs"],[831,"cwe_checker_lib::analysis::graph"],[887,"cwe_checker_lib::analysis::graph::Node"],[891,"cwe_checker_lib::analysis::interprocedural_fixpoint_generic"],[912,"cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"],[914,"cwe_checker_lib::analysis::pointer_inference"],[1021,"cwe_checker_lib::analysis::pointer_inference::object"],[1086,"cwe_checker_lib::analysis::stack_alignment_substitution"],[1087,"cwe_checker_lib::analysis::string_abstraction"],[1125,"cwe_checker_lib::analysis::string_abstraction::context"],[1193,"cwe_checker_lib::analysis::string_abstraction::state"],[1246,"cwe_checker_lib::analysis::vsa_results"],[1253,"cwe_checker_lib::checkers"],[1270,"cwe_checker_lib::checkers::cwe_119"],[1272,"cwe_checker_lib::checkers::cwe_134"],[1314,"cwe_checker_lib::checkers::cwe_190"],[1335,"cwe_checker_lib::checkers::cwe_215"],[1337,"cwe_checker_lib::checkers::cwe_243"],[1358,"cwe_checker_lib::checkers::cwe_332"],[1379,"cwe_checker_lib::checkers::cwe_337"],[1416,"cwe_checker_lib::checkers::cwe_367"],[1418,"cwe_checker_lib::checkers::cwe_416"],[1460,"cwe_checker_lib::checkers::cwe_426"],[1481,"cwe_checker_lib::checkers::cwe_467"],[1502,"cwe_checker_lib::checkers::cwe_476"],[1525,"cwe_checker_lib::checkers::cwe_476::state"],[1560,"cwe_checker_lib::checkers::cwe_476::taint"],[1593,"cwe_checker_lib::checkers::cwe_560"],[1597,"cwe_checker_lib::checkers::cwe_676"],[1621,"cwe_checker_lib::checkers::cwe_78"],[1644,"cwe_checker_lib::checkers::cwe_782"],[1648,"cwe_checker_lib::checkers::cwe_789"],[1669,"cwe_checker_lib::intermediate_representation"],[2301,"cwe_checker_lib::intermediate_representation::Arg"],[2306,"cwe_checker_lib::intermediate_representation::Def"],[2312,"cwe_checker_lib::intermediate_representation::Expression"],[2325,"cwe_checker_lib::intermediate_representation::Jmp"],[2333,"cwe_checker_lib::pcode"],[2781,"cwe_checker_lib::pipeline"],[2806,"cwe_checker_lib::utils"],[2815,"cwe_checker_lib::utils::arguments"],[2820,"cwe_checker_lib::utils::binary"],[2873,"cwe_checker_lib::utils::ghidra"],[2874,"cwe_checker_lib::utils::graph_utils"],[2875,"cwe_checker_lib::utils::log"],[3013,"cwe_checker_lib::utils::symbol_utils"],[3017,"core::fmt"],[3018,"core::fmt"],[3019,"alloc::string"],[3020,"core::result"],[3021,"core::any"],[3022,"core::fmt"],[3023,"core::clone"],[3024,"core::cmp"],[3025,"core::cmp"],[3026,"serde::de"],[3027,"serde::de"],[3028,"core::iter::traits::collect"],[3029,"core::option"],[3030,"core::hash"],[3031,"core::hash"],[3032,"alloc::collections::btree::set"],[3033,"serde::ser"],[3034,"serde::ser"],[3035,"core::fmt"],[3036,"std::collections::hash::map"],[3037,"petgraph::graph_impl"],[3038,"core::ops::function"],[3039,"crossbeam_channel::channel"],[3040,"regex::regex::string"],[3041,"regex::regex::string"],[3042,"apint::bitwidth"],[3043,"alloc::string"],[3044,"std::path"],[3045,"goblin::pe::section_table"],[3046,"crossbeam_channel::channel"]],"d":["A structure containing general information about a CWE …","The generic function signature for the main function of a …","This module defines traits describing general properties …","Modules necessary for graph-based and fixpoint-based …","","","The implemented CWE checks. See their module descriptions …","Print the module name and its version number.","Returns the argument unchanged.","Get a list of all known analysis modules.","This module defines the intermediate representation used …","Calls U::from(self).","The name of the CWE check.","Types to describe Ghidra P-Code and functions to translate …","This module contains functions and structs helpful for …","The function that executes the check and returns CWE …","","","","","This module contains various utility modules and helper …","The version number of the CWE check. Should be incremented …","The main trait describing an abstract domain.","An abstract identifier is used to identify an object or a …","The data contained in an abstract identifier","An abstract location describes how to find the value of a …","An abstract memory location is either an offset from the …","The BitvectorDomain is a simple abstract domain describing …","The single brick domain that represents a set of character …","The BricksDomain contains a sorted list of single …","The CharacterInclusionDomain is a abstract domain …","A domain that represents character sets.","An abstract domain representing a set of base values plus …","A set of functions that all abstract string domains should …","A DomainMap<Key, Value, MapMergeStrategy> is a wrapper …","The value itself is a constant address to global memory. …","The location is in memory. One needs to follow the pointer …","An abstract domain implementing this trait has a global …","A MapMergeStrategy where the merge function only keeps keys","A strided interval of values with a fixed byte size.","An abstract domain representing values in an interval …","A location inside the current memory object.","A MapMergeStrategy determines how the merge-method for a …","A memory region is an abstract domain representing a …","A MapMergeStrategy where for every key that only occurs in …","The location is in memory. One needs to follow the pointer …","A pointer which needs to be followed to get to the actual …","The location is given by a register.","A trait for abstract domains that can represent values …","A trait for types representing values with a fixed size …","A trait for domains whose values can be restricted by …","The Top value of the domain, representing the case that …","The Top value represents an invalid sequence.","The Top value represents the powerset over the alphabet of …","The Top value stands for an empty set of certainly …","The Top value represents a character set of all allowed …","A conversion trait for abstract domains that can represent …","A conversion trait for abstract domains that can represent …","A MapMergeStrategy where key-value pairs whose key is only …","The exact value of the bitvector is known.","This values represents a sequence of string subsequences.","The set of character sequences as well as the minimum and …","The set of certainly contained characters and a set of …","Represents a real subset of all allowed characters.","","","Add a value to the memory region.","Compute the interval of possible results if one adds a …","","Compute the interval of possible results if one adds a …","Return the restriction of self to values satisfying …","","","Add an offset to a memory location.","Add offset to all contained absolute and relative values …","Add an offset to the root location of the memory location.","Add the given offset to the indices of all values …","Return the restriction of self to values satisfying …","","","Return the restriction of self to values satisfying …","","","Return the restriction of self to values satisfying …","","","Return the restriction of self to values satisfying …","","","Round down self.end to the nearest value such that …","Round up self.start to the nearest value such that …","Change the given interval such that it only contains …","Checks whether all bricks of the BricksDomain are Top …","Inserts a string domain at a certain position if order is …","Appends new bricks to the current BricksDomain. Used to …","Append string domain as part of a concatenation. …","Compute the (abstract) result of a binary operation","Evaluate the given binary operation.","Compute the (abstract) result of a binary operation","Compute the result of a binary operation between two …","Return the bytesize of the result of the given binary …","Compute the bitwise negation of values in the interval. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the size of the represented value in bytes.","Return the bytesize of self.","Get the bytesize of the value represented by the abstract …","Get the bytesize of the value represented by the abstract …","Get the bytesize of the value represented by the abstract …","Return the bytesize of self.","Get the size in bytes of values contained in the interval.","Return the size in bytes of the represented values.","Perform a typecast to extend a bitvector or to cast …","Perform a size-changing cast on a bitvector.","Cast a bitvector using the given cast type","Compute the result of a cast operation on the interval …","Remove all values representing the Top element from the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return true if bitvec is contained in the strided interval.","Returns true if the domain contains Top values, i.e. …","Creates a string domain with characters that usually …","Create a string domain that approximates char values.","Create a string domain that approximates char values.","Creates an empty string domain.","Create a string domain that represents an empty string.","Create a string domain that represents an empty string.","Creates a string domain with characters that usually …","Create a string domain that approximates float values.","Create a string domain that approximates float values.","Creates a string domain with characters that usually …","Create a string domain that approximates integer values.","Create a string domain that approximates integer values.","Creates a string domain with characters that usually …","Create a string domain that approximates pointer values.","Create a string domain that approximates pointer values.","Creates a top value of the currently used domain.","Creates a top value of the domain.","Creates a top value of the domain.","","","","Dereference the pointer that self is pointing to.","Return the abstract location that one gets when …","","","","","","","","","","","","","","","","","","The end of the interval. The bound is included in the …","Get the map of all elements including their offset into …","","","","","","","","","","","","","","","","","","Returns true if the two intervals represent the same value …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Extend the location string by adding further derefence …","Extend the location string by adding further derefence …","Check whether all values in the interval are representable …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Create an interval that only contains the given bitvector.","Returns the argument unchanged.","Returns the argument unchanged.","Generate an interval domain without widening hints.","Create an interval containing only bitvec.","Returns the argument unchanged.","Returns a new instance of the Bricks Domain","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Generate a new DomainMap from the BTreeMap that it should …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create an abstract identifier from a parameter argument.","Create an abstract location representing an address …","Create an abstract identifier from an address into global …","Generate a new DomainMap from an iterator over the …","Create an abstract location on the stack. The returned …","Return a new value representing a variable plus an offset, …","Create an abstract location from a variable corresponding …","Create a new abstract identifier where the abstract …","Get the value at the given position. If there is no value …","Return the absolute value contained in the domain if …","Get the bytesize of pointers for the address space that …","Get a list of all (recursive) parent locations. The list …","If the abstract location of self has a parent location …","Return the contained absolute value only if self contains …","Return the target ID and offset of the contained relative …","Get the location component of the abstract ID.","Get the abstract location representing the pointer …","Get the abstract memory location representing the pointer …","Get the path hints array of self.","Return the relative values contained in the domain.","Get the TID representing the time component of the …","Get the value at the given position regardless of the …","","","","","","","","","","Insert a value into the memory region at the given …","Take the 2’s complement of values in the interval.","Return the intersection of two values or an error if the …","Compute the intersetion of two DataDomains.","Compute the intersection of two intervals. Return an error …","Takes the intersection of two character sets. None of the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the domain does not represent any value.","Checks whether the current BricksDomain is less or equal …","Checks whether the current BrickDomain is less or equal …","Returns whether the element represents the top element …","Check if the value is Top.","Return whether the element represents a top element or not.","The Top element is represented by an empty memory region.","Returns true if all values representable by bitvectors of …","Return true if the interval spans all possible values.","Check if the value is Top.","Check if the value is Top.","Check if the value is Top.","A DomainMap is considered to be a Top element if it is …","Get an iterator over all elements together with their …","Emulate a write operation to an unknown offset by merging …","Emulate a write operation of a value to an unknown offset …","Return an upper bound (with respect to the partial order …","merge two values. Returns Top if the values are not equal.","","Short-circuting the MemRegionData::merge function if …","Merge two interval domains and perform widening if …","Takes care of merging lists of bricks","Takes care of merging single bricks by taking the union of …","Merge two values; Takes the intersection of the certainly …","Merge two DomainMaps according to the MapMergeStrategy of …","This function determines how two DomainMap instances are …","","","","If the MemRegion contains an element at the given position …","","","Create a new abstract identifier.","Create a new, empty memory region.","Construct a new interval.","Create a new interval domain with the given bounds.","Returns a new instance of the Brick Domain","Return a new empty value with the given bytesize.","Return a new top element with the given bytesize. The …","Get a Top element with the given bitsize.","Return a new Top element with the given bytesize.","Construct a new unconstrained interval.","Return a new Top value with the given bytesize.","A set of strings can be built from multiple configurations …","","","","","Piece two intervals together, where self contains the most …","Get the recursion depth of the abstract location, i.e. how …","Get the recursion depth of the abstract memory location, …","Return an iterator over all referenced abstract IDs.","Remove all elements intersecting the provided interval.","Remove all provided IDs from the list of relative values.","For pointer values replace an abstract identifier with …","Replace all abstract IDs in self with the corresponding …","","","","","","","","","","","","","","","","","","Replace the absolute value contained in the domain with …","Indicate that the domain may contain Top values in …","Replace the map of relative values with the given one.","Compute the resulting interval after a left shift …","Sign-extend the values in the interval to the given width.","Compute the intersection of two intervals as intervals of …","Merge two intervals interpreting both as intervals of …","Merge as signed intervals without performing widenings.","Merge as signed intervals and perform widening if …","Compute the interval of possible results if one multiplies …","Compute the interval of possible results if one multiplies …","The start of the interval. The bound is included in the …","The stride.","","","Compute the interval of possible results if one subtracts …","","Compute the interval of possible results if one subtracts …","Extract a sub-bitvector","Extract a sub-bitvector out of a bitvector","extract a sub-bitvector","Take a subpiece of the bitvectors.","Take a sub-bitvector of the values in the interval domain.","Truncate the bitvectors in the interval by removing the …","Truncate the bitvectors in the interval to size, i.e. the …","Subtract offset from all contained absolute and relative …","Get a more compact json-representation of the data domain. …","","","","","","","","","","","","","","","","","","","","","","","","","","","Return an instance of the Top element.","Return a Top value with the same bytesize as self.","Generate a new Top element with the same bytesize as self.","Return a new, empty memory region with the same address …","Return a new interval with the same byte size as self and …","Return a Top value","Return a Top value","Return a Top value","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If self represents a single absolute value, return it. In …","If the domain represents an absoulute value, return it.","If the domain represents a single, absolute value, return …","If the domain represents an interval of length one, return …","If self represents an interval of absolute values (or can …","If the domain represents an absolute value, return it as …","If the domain represents (or can be widened to) an …","If the domain represents a bounded (i.e. not Top) …","If self represents a single absolute value, try to convert …","If self represents an interval of absolute values (or can …","","","","","","","","","","","","","","","","","","Compute the (abstract) result of a unary operation","Evaluate the given unary operation.","Compute the (abstract) result of a unary operation","Compute the result of an unary operation on the interval …","Takes the union of two character sets. If either of them …","Indicate that the domain does not contain any Top values …","Get the register associated to the abstract location. …","Unwraps the values from the Character Inclusion Domain","Unwraps the values from the CharacterSet","If bound is more exact/restrictive than the current lower …","If bound is more exact/restrictive than the current upper …","Get an iterator over all values in the memory region","Get an iterator over all values in the memory region for …","The widen function of the BricksDomain widens the values …","The widen function of the BrickDomain takes the union of …","Add an offset to the abstract location.","Create a new abstract identifier by pushing the given path …","Create a new abstract identifier by removing the last path …","Remove all widening hints from self. Necessary for cases …","","","Compute the interval represented if the byte size of the …","Zero-extend the values in the interval to the given width.","The address in global memory.","The byte size of the address (not the pointed-to value!).","The offset with respect to the zero offset of the memory …","The offset inside the current memory object where the …","The size in bytes of the value that the memory location …","The memory location inside the target of the pointer that …","Creating and computing backward interprocedural fixpoint …","Generate call graphs out of a program term.","This module contains a fixpoint computation to compute …","This module contains a fixpoint computation for …","Creating and computing generic fixpoint computations.","Creating and computing forward interprocedural fixpoint …","A fixpoint algorithm computing parameters of functions and …","Generate control flow graphs out of a program term.","Types and functions shared between the implementations of …","A fixpoint algorithm analyzing all memory accesses in a …","Substitutes stack pointer alignment operations utilising …","A fixpoint analysis that abstracts strings in the program …","This module provides the VsaResult trait which defines an …","The context for an backward interprocedural fixpoint …","This struct is a wrapper to create a general fixpoint …","The type of the values that are assigned to nodes during …","","","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Returns the argument unchanged.","Get the inner context object.","Get a reference to the graph that the fixpoint is computed …","Get a reference to the underlying graph.","Calls U::from(self).","Merge two node values.","Merge two values using the merge function from the …","Create a new generalized context out of an interprocedural …","This function is used to refine the value using the …","Transition function for call stub split. Has access to the …","Transition function for return stub split. Has access to …","","","","Transition function for calls to functions not contained …","Transition function for in-program calls. The target value …","Transition function for Def terms. The transition function …","Backward edge transition function. Applies the transition …","Transition function for (conditional and unconditional) Jmp…","The graph type of a call graph","Collect and return all call TIDs of call sequences that …","Generate a call graph for the given program.","Compute alive variables by means of an intraprocedural …","Remove all dead assignments from all basic blocks in the …","The context struct for the expression propagation fixpoint …","","","Returns the argument unchanged.","","Calls U::from(self).","Merges two values by intersecting their …","Merge subsequent assignments to the same variable to a …","Create a new context object for the given project and …","Replaces variables by expressions that can be propagated …","Wherever possible, substitute input variables of …","","","","","","","Adds the expression for the assigned variable to the table.","","","The computation struct contains an intermediate result of …","The context of a fixpoint computation.","the type of edge labels of the underlying graph","the type of node labels of the underlying graph","The type of the value that gets assigned to each node. The …","","","Compute the fixpoint of the fixpoint problem. If the …","Compute the fixpoint of the fixpoint problem. Each node …","Returns the argument unchanged.","Create a new fixpoint computation from a fixpoint problem, …","Get a reference to the underlying context object","Get the graph on which the fixpoint computation operates.","Get a reference to the underlying graph","Get the value of a node.","Return a list of all nodes which are marked as …","Returns True if the computation has stabilized, i.e. the …","Calls U::from(self).","This function describes how to merge two values","Create a new fixpoint computation from a fixpoint problem, …","Get a reference to the internal map where one can look up …","Get a mutable iterator over all node values. Also add all …","Set the value of a node and mark the node as not yet …","","","","This function describes how the value at the end node of …","The context for an interprocedural fixpoint computation.","This struct is a wrapper to create a general fixpoint …","The type of the values that are assigned to nodes during …","","","Returns a node ordering with callee nodes behind caller …","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Generate a new computation from the corresponding context …","Returns a node ordering with caller nodes behind callee …","Returns the argument unchanged.","Get the inner context object.","Get a reference to the graph that the fixpoint is computed …","Get a reference to the underlying graph.","Calls U::from(self).","Merge two node values.","Merge two values using the merge function from the …","Create a new generalized context out of an interprocedural …","This function is used to refine the value using the …","","","","Transition function for in-program calls.","Transition function for calls to functions not contained …","Transition function for Def terms. The transition function …","Forward edge transition function. Applies the transition …","Transition function for (conditional and unconditional) Jmp…","Transition function for return instructions. Has access to …","Access flags to track different kind of access/usage …","The signature of a function. Currently only contains …","","","","","","","","","","","Compute the function signatures for all functions in the …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","The returned number is the maximum of stack offset plus …","Values in writeable global memory accessed by the function.","Calls U::from(self).","Calls U::from(self).","Returns true if any of the access flags is set.","Returns true if the dereferenced or mutably dereferenced …","Returns true if the mutably dereferenced access flag is …","Returns true if all of the access flags are set.","An access flag in the merged AccessPattern object is set …","Generate a new AccessPattern object with none of the …","Generate an empty function signature.","Generate a new AccessPattern object with all access flags …","The parameters of the function together with their access …","","","","Set the access flag for immutable pointer dereference.","Set the access flag for pointer dereference (with write …","Set the access flag for read access.","Set all access flags to indicate that any kind of access …","This module contains stubs for frequently used LibC-symbols","Generate a compact JSON-representation of the function …","","","","","","","","","","Set the access flag for immutable pointer dereference and …","Set the access flag for pointer dereference with write …","Set the access flag for read access and return self.","Compute the return value of a call to a known extern …","Returns a map that maps the names of known extern …","Return a map that maps names of stubbed variadic symbols …","Helper functions for computing return values for extern …","A return value that is just a copy of a parameter.","A return value that contains a pointer to the start of a …","The return value may also be zero in addition to its other …","A return value that adds an unknown offset to a given …","An untracked value is just a Top value. It is used for any …","A node corresponding to the end of the basic block, i.e. …","A node corresponding to the start of a basic block, i.e. …","An edge between the BlkStart and BlkEnd nodes of a basic …","An edge corresponding to a function call instruction. Only …","An artificial edge to combine intra- and interprocedural …","An artificial node. See the module-level documentation for …","An artificial node. See the module-level documentation for …","An artificial edge. See the module-level documentation for …","An artificial edge. See the module-level documentation for …","The edge type of an interprocedural fixpoint graph.","An edge corresponding to a call to a function not …","The graph type of an interprocedural control flow graph","An edge corresponding to an intraprocedural jump …","The node type of an interprocedural control flow graph","An artificial edge to combine intra- and interprocedural …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get the block corresponding to the node for BlkStart and …","Returns a map from function TIDs to the node index of the …","Build the interprocedural control flow graph for a program …","Build the interprocedural control flow graph for a program …","Get the sub corresponding to the node for BlkStart and …","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","The block containing the callsite of the call.","The block that the called functions returns to.","The block containing the callsite of the call","The block containing the target of the call, i.e. the …","The value saved at artificial combinator nodes.","NodeValue that can either be a single abstract value or a …","A single abstract value","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","Helper function to merge to values wrapped in Option<..>. …","","","","","","Unwraps the contained value for non-combinator nodes. …","The value flowing through the intraprocedural edge of the …","The value flowing through the interprocedural edge of the …","The name and version number of the “Memory” CWE check.","Configurable parameters for the analysis.","The abstract domain type for representing register values.","A wrapper struct for the pointer inference computation …","Contains all information known about the state of a …","The abstract domain to use for absolute values.","Search (recursively) through all memory objects referenced …","Add the given param_object from the callee state to self …","Search (recursively) through all memory objects referenced …","Names of extern functions that are malloc-like, i.e. the …","","","","","","","Check whether the given def could result in a memory …","Clear all non-callee-saved registers from the state. This …","Mark those parameter values of an extern function call, …","","","","","The log messages and CWE warnings that have been generated …","Compute the fixpoint of the pointer inference analysis. …","","","","","","","","","","","Evaluate the value of an expression in the current state.","Evaluate the value of the given abstract location on the …","Return the value of the address at the given read or store …","Evaluate the value of the given expression at the given …","Evaluate the value of a parameter of an extern symbol for …","Evaluate the value of the given parameter at the given …","Evaluate the value of the given parameter at the given …","Return the assigned value for store or assignment …","The entry point for the memory analysis check. Does not …","Filter out those locations from the location to pointer …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a new state from a function signature.","Generate a compacted json representation of the results. …","Merge the target objects that are non-parameter objects …","Get the context object of the computation.","Get the Tid of the function that this state belongs to.","Get the abstract ID of the global memory object …","Get the underlying graph of the computation.","Get the mapping from callee IDs to caller values for the …","Create an ID renaming map that maps IDs in self to the …","Get the value associated to a node in the computed fixpoint","Get the value of a register or Top() if no value is known.","Get the state of the fixpoint computation at the block end …","Handle a load instruction by assigning the value loaded …","Evaluate expression on the given state and write the …","Evaluate the store instruction, given by its address and …","","Explicitly insert pointers to unified objects at the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","A state has no Top element","Evaluate the given address expression and return the data …","Load the value at the given address from the state and …","Generate a map from abstract locations pointing to …","The list of all known memory objects.","Merge two states","Try to determine unique pointer locations for …","Remove all objects and registers from the state whose …","Generate a new pointer inference computation for a project.","Create a new state that contains one memory object …","This module contains the definition of the abstract memory …","Print a compacted json representation of the results to …","Print results serialized as YAML to stdout","Remove all knowledge about the contents of …","Remove all objects that cannot longer be reached by any …","Replace all IDs pointing to non-parameter objects.","Compute the pointer inference analysis and return its …","","","Set the MIPS link register t9 to the address of the callee …","Set the value of a register.","Try to restrict the input variables of expression on self …","The abstract identifier of the current stack frame. It …","Store value at the given address.","Get a more compact json-representation of the state. …","","","","","","","","","","","","Write a value to the address one gets when evaluating the …","An abstract object contains all knowledge tracked about a …","A memory oject indicating the global memory space.","A memory object located on the heap.","An object can be a stack, a heap, or a global memory …","A stack object, i.e. the stack frame of a function.","Add IDs to the list of pointer targets for the memory …","Add an offset to all values contained in the abstract …","Marks all memory as Top and adds the additional_targets to …","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get the memory region abstract domain associated to the …","Get the type of the memory object.","Get all abstract IDs that the object may contain pointers …","Get all abstract IDs for which the object contains …","Read the value at the given offset of the given size …","","Calls U::from(self).","Calls U::from(self).","The domain has no Top element, thus this function always …","Returns false if the abstract object may represent more …","Mark the abstract object as possibly representing more …","Mark the abstract object as unique, i.e. it represents …","Merge two abstract objects","Merge value at position offset with the value currently …","Create a new abstract object with given object type and …","Overwrite the memory region abstract domain associated to …","Overwrite the values in self with those in other under the …","","Remove the provided IDs from the target lists of all …","Replace all abstract IDs in self with the values given by …","","","Set the type of the memory object.","Write a value at the given offset to the memory region.","Get a more compact json-representation of the abstract …","","","","","","","","","Substitutes logical AND on the stackpointer register by …","Configurable parameters for the analysis.","A wrapper struct for the string abstraction computation …","","","","","","","Compute the fixpoint of the string abstraction analysis. …","This module contains the Context Object for the String …","","","","","","","The index of the format string parameter in the function …","Returns the argument unchanged.","Returns the argument unchanged.","Get the string abstraction computation.","Get the context object of the computation.","Get the underlying graph of the computation.","Get the value associated to a node in the computed fixpoint","","Calls U::from(self).","Calls U::from(self).","Generate a new string abstraction computation for a …","Compute the string abstraction and return its results.","","The state module holds all information at CFG nodes that …","Names of extern functions that manipulate strings or could …","","","","","","","","Contains all context information needed for the string …","Adds constant or Top value to return location given a …","Takes the pointer target if there is only one and checks …","Calls the appropriate data type approximator.","A set containing a given Def as the first Def of the block.","A map to get the node index of the BlkStart node …","","","Takes a vector of string domains and concatenates them.","Creates string abstract domains for return values of …","Creates a string domain for a s(n)printf call by …","Creates a string domain from found constants and sub …","Creates a domain from a format string where all specifiers …","Maps the TIDs of functions that shall be treated as …","Tries to fetch a constant or sub domain for the format …","Takes a data domain and tries to get a constant value.","Fetches subdomains if they are available for a pointer …","Filters out all parameters that are not of type string.","Maps string symbols to their corresponding format string …","Returns the argument unchanged.","Inserts a char constant into the format string.","Inserts an integer constant into the format string.","Inserts a string constant into the format string.","Returns the content of a global memory target if there is …","Get the underlying graph on which the analysis operates.","Deletes string entries in the heap to string map if the …","Handles generic symbol calls by deleting all non callee …","Handles the detection of string parameters to memcpy calls.","Handles the detection of string parameters to scanf calls. …","Handles the detection of string parameters to sprintf and …","Handles calls to sscanf. If the source string is known, it …","Handles the resulting string domain from strcat and …","The output of a string symbol is added to the map of …","Handles calls to external symbols for which no …","Checks whether the second input parameter contains a …","Checks whether a data domain has multiple targets.","Checks whether the first input parameter contains a return …","Calls U::from(self).","A map to get the node index of the BlkEnd node containing …","Maps source strings parameters to return arguments for …","Merge two state values.","Merges domains from multiple pointer targets. The merged …","Create a new context object for a given project.","Checks whether the string has no format specifiers.","Parses a bitvector to a char if possible.","Gets the input format string, parses the input parameters …","A pointer to the results of the pointer inference analysis.","Processes string domains in memcpy calls on a case by case …","Processes domains for memcpy calls where at least one of …","Processes the contents of the second input parameter.","A reference to the Project object representing the binary","Creates string domains from constant subsequences that …","Pushes a potential constant suffix to the string domain …","Creates a string domain by approximating a format …","Regex that filters format specifier from a format string.","Maps the source string to the return locations of the call …","","Maps the TIDs of functions that shall be treated as string …","This module handles the string processing at external …","Removes the ‘%’ character and any size number from a …","","","","","","","","","Contains all information known about the state of a …","If the input is a string constant, add the global pointer …","Adds a new heap id to string entry to the map.","Adds a new offset to string entry to the map.","Adds a new variable to pointer entry to the map.","If a string pointer is to be stored on the stack, add it …","Adds all relative targets of the given DataDomain to the …","Adds Top values to stack and heap maps for additional …","Adds a return pointer to the unassigned return pointer set.","","","Checks whether the given pointer points to a string and …","","","Returns a vector of all currently tracked pointers.","Deletes all entries in the string maps that do not have …","","","","","","Evaluates the constant used as input of a Def Term. It …","Removes all string entries for which the pointers are not …","","Returns the argument unchanged.","Gets the current subroutine since the analysis is …","Returns a reference to the heap to string map.","Get the current pointer inference state if it is contained …","Returns a reference to the variable to pointer map.","Returns a reference to the stack offset to string map.","Returns the set of function return pointer that have not …","Returns a reference to the variable to pointer map.","Handles assign and load Def Terms.","Handles store Def Terms.","Calls U::from(self).","Checks whether a target refers to the Stack.","The state has no explicit Top element.","Merges two states.","Creates a new state.","Adds a pointer to the stack pointer maps if its targets …","Adds a pointer to the variable pointer maps if its targets …","Checks whether a given pointer is contained in one of the …","If only some targets of a pointer point to tracked …","Removes a string from the heap to string map for the given …","Removes all non callee saved register entries from the …","","Removes all entries from the string maps.","Set the current pointer inference state for self.","Sets the variable to pointer map to a new value.","","","","","The type of the returned values. Usually this should be an …","A trait providing an interface for accessing the results …","Return the value of the address where something is read or …","Evaluate the value of the given expression at the given …","Return the value of a parameter at the given jump …","Return the value of a parameter at the given jump …","Return the value stored for write instructions, the value …","This module implements a check for CWE-119: Buffer Overflow","This module implements a check for CWE-134: Use of …","This module implements a check for CWE-190: Integer …","This module implements a check for CWE-215: Information …","This module implements a check for CWE-243: Creation of …","This module implements a check for CWE-332: Insufficient …","This module implements a check for CWE-337: Predictable …","This module implements a check for CWE-367: Time-of-check …","This module implements a check for CWE-415: Double Free …","This module implements a check for CWE-426: Untrusted …","This module implements a check for CWE-467: Use of …","This module implements a check for CWE-476: NULL Pointer …","This module implements a check for CWE-560: Use of umask() …","This module implements a check for CWE-676: Use of …","This module implements a check for CWE-78: Improper …","This module implements a check for CWE-782: Exposed IOCTL …","This module implements a check for CWE-789: Memory …","The module name and version","Run the check for CWE-119: Buffer Overflows.","The module name and version","The configuration struct","Global read only memory","Global read and write memory","Non Global memory","The categorization of the string location based on kinds …","Unknown memory","","","","","This check searches for external symbols that take a …","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","The module name and version","The configuration struct. The symbols are extern function …","","","Run the CWE check. For each call to one of the symbols …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","Run the check.","The module name and version","The configuration struct contains the list of functions …","","","Run the check.","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","The configuration struct contains pairs of symbol names, …","","","Run the CWE check. See the module-level description for …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","The configuration struct","The Context struct for the …","","","","","This check checks if a return value of any of the sources …","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Provide access to the control flow graph.","","Calls U::from(self).","Calls U::from(self).","Just forward the value merging to the AbstractDomain.","","We don’t care if there was some condition on the random …","","","","","","","","For now we stop the search on any sort of call.","For now we stop the search on any sort of call. But report …","Keep track of register taint through Defs. Currently, we …","We don’t care if there was some condition on the random …","For now we stop the search on any sort of call.","The module name and version","Run the check. See the module-level documentation for more …","The module name and version","The configuration struct","A struct for collecting CWE warnings together with context …","","","","","Run the check for CWE-416: Use After Free.","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Generate a new warning context object.","","","","","","","","","","","The module name and version","Function symbols read from config.json. The symbols are …","","","Run the CWE check. We check whether a function calls both …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","Function symbols read from config.json. All parameters of …","","","Execute the CWE check.","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","The module name and version","The configuration struct","","","Run the CWE check. We check whether the return values of …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","Module for the taint tracking state. Reused by the check …","Taint tracking module. Reused by the check for CWE-337, …","","","","","The state object of the taint analysis representing all …","","","Check whether a generic function call may contain tainted …","If the given address points to the stack, return true if …","Return true if the memory object with the given ID …","Check whether the return registers may contain tainted …","","","","Two states are equal if the same values are tainted in …","","","","Evaluate whether the result of the given expression is …","","Returns the argument unchanged.","Get the current pointer inference state if it is contained …","Calls U::from(self).","Check whether self contains any taint at all.","The state has no explicit Top element.","Return whether the value at the given address (with the …","Merge two states. Any value tainted in at least one input …","Get a new state in which only the return values of the …","Remove all knowledge about taints contained in memory …","Remove the taint from all registers not contained in the …","Mark the value at the given address with the given taint.","","Set the current pointer inference state for self.","Set the taint of a register.","Get a more compact json-representation of the state. …","","","","","An abstract domain representing a value that is either …","A tainted value of a particular bytesize.","An untainted value of a particular bytesize","The result of a binary operation is tainted if at least …","","","The size in bytes of the Taint value.","The result of a cast operation is tainted if the input was …","","","","","","","","Print the value of a Taint object.","","Returns the argument unchanged.","","Calls U::from(self).","Checks whether the given value is in fact tainted.","Checks whether the value is an untainted Top-value.","The result of merging two Taint values is tainted if at …","Get a new Top-value with the given bytesize.","","A subpiece of a tainted value is again tainted.","","","Get a new Top-value with the same bytesize as self.","","","","The result of a unary operation is tainted if the input …","The module name and version","An upper bound for the value of a chmod-style argument.","An upper bound for the value of a presumably correct umask …","Execute the CWE check.","The module name and version","struct containing dangerous symbols from config.json","","","Iterate through all function calls inside the program and …","","","","","","","","","Returns the argument unchanged.","Generate cwe warnings for potentially dangerous function …","For each subroutine and each found dangerous symbol, check …","","Calls U::from(self).","Filter external symbols by dangerous symbols","","","","","","The module name and version","The configuration struct","","","This check checks the string parameter at system calls …","Checks if the Bricks Domain indicates a vulnerability at …","Checks the system call parameter given by the Bricks …","","","","","","","","","Returns the argument unchanged.","Generates the CWE Warning for the CWE 78 check","Calls U::from(self).","","","","","","The module name and version","Iterate through all calls of the program and flag calls to …","generate the cwe warning for CWE 782","check whether the ioctl symbol is called by any …","The module name and version","The configuration struct. If a threshold is exceeded, the …","","","Run the CWE check. For each function, we check calls of …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","A parameter or return argument of a function.","A register assignment, assigning the result of the …","A binary operation. Note that most (but not all) …","The type/mnemonic of a binary operation. See the Ghidra …","A bitvector is a fixed-length vector of bits with the …","A trait to extend the bitvector type with useful helper …","A basic block is a sequence of Def instructions followed …","","","","","A direct intraprocedural jump to the targeted Blk term …","An indirect intraprocedural jump to the address that the …","An unsigned number of bytes.","A direct intraprocedural jump that is only taken if the …","A direct interprocedural jump representing a subroutine …","An indirect interprocedural jump to the address the target …","This instruction is used for all side effects that are not …","Calling convention related data","A cast operation for type cast between integer and …","The type/mnemonic of a typecast See the Ghidra P-Code …","C char data type","A constant value represented by a bitvector.","C/C++ data types.","Properties of C/C++ data types such as size.","A side-effectful operation. Can be a register assignment …","C double data type","An expression is a calculation rule on how to compute a …","An extern symbol represents a funtion that is dynamically …","C float data type","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","C integer data type","A Jmp instruction affects the control flow of a program, …","A memory load into the register given by var.","C long data type","C long double data type","C long long data type","","C pointer data type","","The Program structure represents a disassembled binary.","The Project struct is the main data structure representing …","The argument is passed in a register","A indirect interprocedural jump indicating a return from a …","A representation of the runtime image of a binary after …","C short data type","The argument is passed on the stack.","A memory store operation.","A Sub or subroutine represents a function with a given …","Extracting a sub-bitvector from the argument expression.","A term is an object inside a binary with an address and an …","A term identifier consisting of an ID string (which is …","","A unary operation","The type/mnemonic of an unary operation See the Ghidra …","An unknown value but with known size. This may be …","A variable representing a register or temporary value of …","A variable represents a register with a known size and …","","","Add a global offset to the base addresses of all memory …","The address where the term is located.","An offset that has been added to all addresses in the …","Addresses of possibly multiple locations of the same …","Convert to the equivalent size in bits (by multiplying …","Perform a binary operation on the given bitvectors. …","Perform a binary operation on the given bitvectors. …","Generate the ID of a block starting at the given address.","The basic blocks belonging to the subroutine. The first …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the size in bytes of the bitvector.","Return the size in bytes of the bitvector.","Return the size (in bytes) of the result value of the …","Return the bytesize of the argument.","A list of callee-saved register, i.e. the values of these …","The calling convention used to call if known","The calling convention used for the extern symbol if known","The known calling conventions that may be used for calls …","Perform a cast operation on the bitvector. Returns an …","Perform a cast operation on the bitvector. Returns an …","Holds the size of the char type","This function checks whether the instruction is a zero …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The CPU architecture on which the binary is assumed to be …","Contains the properties of C data types. (e.g. size)","The Def instructions of the basic block in order of …","","","","","","","","","","","","","","","","","","","","","","","Holds the size of the double type","Generate a runtime memory image containing no memory …","Entry points into to binary, i.e. the term identifiers of …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the argument is a stack argument, return its offset …","Extern symbols linked to the binary by the linker.","Find a block term by its term identifier. WARNING: The …","Find the sub containing a specific jump instruction …","Possible float parameter registers. Given as expressions, …","A list of possible return register for float values. Given …","Holds the size of the float type","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Translate a P-Code variable into a register variable of …","Create a variable representing the same register as the …","Returns the argument unchanged.","Translates a P-Code expression into an expression of the …","Translate a P-Code variable into a Varor Const expression …","Returns the argument unchanged.","Translates expression types. Panics when given a type not …","Translates expression types. Panics when given a type not …","Returns the argument unchanged.","Translates expression types. Panics when given a type not …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert a P-Code jump to the internally used IR.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Convert to ByteSize, while always rounding up to the …","Returns the argument unchanged.","The purpose of this conversion is to locate parameters to …","Returns the argument unchanged.","Generate a new register argument.","Return a list of all parameter registers of the calling …","Return a list of all return registers of the calling …","Get the calling convention corresponding to the extern …","Return the calling convention associated to the given …","Returns the data type field of an Arg object.","Return the size (in bytes) for pointers of the given …","For an address to global read-only memory, return the …","Matches a given data type with its size from the …","Try to find a specific calling convention in the list of …","Try to guess a standard calling convention from the list …","If the extern symbol has exactly one parameter, return the …","If the extern symbol has exactly one return value that is …","Returns true if the ID string ends with the provided …","If the function has a variable number of parameters, this …","","","","","","","","","","","","","","","","","","","If the basic block contains an indirect jump, this field …","Return an array of all input variables of the given …","Possible integer parameter registers.","A list of possible return register for non-float values.","Holds the size of the integer type","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Convert a Sub term in the P-Code representation to a Sub …","Resize self to the target byte size by either sign …","Resize self to the target byte size by either sign …","Resize self to the target byte size by either zero …","Resize self to the target byte size by either zero …","Check whether the given address points to a writeable …","Checks whether the constant is a global memory address.","Check whether all addresses in the given interval point to …","Check whether all addresses in the given interval point to …","Endianness","Return whether values in the memory image should be …","Set to false for physical registers and to true for …","The Jmp instructions of the basic block","Holds the size of the long double type","Holds the size of the long long type","Holds the size of the long type","Sequence of memory segments.","","","The name of the variable. Equals the register name if the …","The name of the subroutine","The name of the extern symbol","The name of the calling convention","Generate a new term identifier with the given ID string …","Generate a runtime memory image for a given binary.","Create a new ByteSize object","Generate a runtime memory image for a bare metal binary.","If set to true, the function is assumed to never return to …","Run some normalization passes over the project.","","Parameters of an extern symbol. May be empty if there are …","","","","Shortcut for creating an IntAdd-expression","Construct an expression that adds a constant value to the …","Holds the size of the pointer type","All (known) executable code of the binary is contained in …","Read the contents of the memory image at the given address …","Read the contents of memory from a given address onwards …","Compute a recursion depth for the expression.","The set of all known physical registers for the CPU …","","","Remove indirect jump target addresses for which no …","Return values of an extern symbol. May be empty if there …","Represents the memory after loading the binary.","","","","","","","","","","","","","","","","","","","","","","","Holds the size of the short type","","","Returns the result of self + rhs if the computation does …","Returns the result of self + rhs if the computation does …","Return the result of multiplying self with rhs and a flag …","Return the result of multiplying self with rhs and a flag …","Returns the result of self - rhs if the computation does …","Returns the result of self - rhs if the computation does …","The size (in bytes) of the variable.","The stack pointer register for the given CPU architecture.","","","Extract a subpiece from the given bitvector.","Extract a subpiece from the given bitvector.","The known functions contained in the binary","Substitute every occurrence of input_var in self with the …","Substitute every occurence of input_var in the address and …","Substitute some trivial expressions with their result. …","","The object","The term identifier, which also contains the address of …","The term ID of the extern symbol.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Perform a unary operation on the given bitvector. Returns …","Perform a unary operation on the given bitvector. Returns …","Add a suffix to the ID string and return the new Tid","The expression that computes the address of the argument …","An optional data type indicator.","An optional data type indicator.","The expression evaluating to the argument.","The size in bytes of the argument.","The expression computing the address from which to read …","The expression computing the address that is written to. …","The expression computing the value that is written to …","The expression computing the value that is assigned to the …","The target register of the memory load. The size of var …","The register that is written to.","The argument expression","The argument of the expression","The argument from which to extract the bitvector from.","A description of the operation","The left hand side expression","The lowest byte (i.e. least significant byte if …","The opcode/type of the operation","The opcode/type of the operation","The opcode/type of the cast operation","The right hand side expression","The byte size of the result value of the expresion","The byte size of the result of the unknown expression","The size of the resulting sub-bitvector","The jump is only taken if this expression evaluates to true…","A description of the side effect.","The term ID of the block that the called function returns …","The term ID of the block that the called function returns …","The block term identifier of the block where the …","The term ID of the target block of the jump.","The term ID of the target subroutine (Sub) or extern …","An expression computing the target address of the call.","An argument (parameter or return value) of an extern …","The intent (input or output) of a function argument.","","","","","","","A basic block.","","","","","","A call instruction.","A struct describing a calling convention.","An assignment instruction, assigning the result of an …","The term identifier of the target of a direct jump.","A P-Code expression.","Expression Opcodes as parsed from Ghidra","An extern symbol, i.e. a function not contained in the …","","","","","","","","","","","","","","","","","The argument is an input parameter.","","","","","","","","","","","","","","","","","","","","","","","","","","","","The varnode holding the target address of an indirect jump.","A jump instruction.","A jump type mnemonic.","","A jump label for distinguishing between direct and …","The argument is a return value.","","","The program struct containing all information about the …","The project struct describing all known information about …","","Properties of a register with respect to its base register.","","","A subfunction.","","A variable representing a varnode in Ghidra P-Code","If the varnode represents an implicit LOAD from memory, …","The addresses to call the extern symbol. May be more than …","The input and output arguments of the function.","The name of the base register.","The basic blocks of the function.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The call struct for interprocedural jumps.","A description of the instruction for CALLOTHER …","The calling convention used (as reported by Ghidra, i.e. …","The calling convention used (as reported by Ghidra, i.e. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the jump is a conditional jump, the varnode that has to …","The CPU-architecture that the binary uses.","Contains the properties of C data types. (e.g. size)","The Def instructions of the block in chronological order.","","","","","","","","","","","","","","","","","","The term identifiers of entry points into the binary.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The extern symbols referenced by the binary.","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","The target label for intraprocedural jumps.","If the function has a variable number of parameters, this …","","","","","","","","","","","","","","","","","","The base address of the memory image of the binary in RAM …","The first input varnode (if it exists).","The second input varnode (if it exists).","The third input varnode (if it exists).","The intent (input or output) of the argument.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Convert a P-Code block to the internally used IR.","Convert a P-Code instruction to the internally used IR.","Convert a program parsed from Ghidra to the internally …","Convert a project parsed from Ghidra to the internally …","A flag set to true for virtual/temporary registers.","The jump instructions at the end of the basic block.","The target varnode whose value gets overwritten.","The expression computing the location of the argument if …","The least significant byte of the register when viewed as …","The instruction mnemonic","The mnemonic of the jump.","The name of the register if the varnode represents a …","The name of the function.","The name of the extern symbol.","The name of the calling convention.","Generate a variable representing a constant","Generate a virtual variable with the given name and size.","If the function is assumed to never return to the caller, …","This function runs normalization passes to bring the …","Parses a variable representing an address to a …","Parses a variable representing a concrete value to a …","Translates a variable into the byte size that it …","The program struct containing all binary-specific …","The register name.","Information about known calling conventions for the given …","Information about all CPU-architecture-specific registers.","The return label if the call is expected to return.","The expression that determines the value to be written.","","","","","","","","","","","","","","","","","","The size (in bytes) of the varnode","The size (in bytes) of the register","The stack pointer register of the CPU-architecture.","The subfunctions contained in the binary.","The target label. May be None for CALLOTHER instructions.","A list of potential jump targets for indirect jumps.","The term identifier of the extern symbol.","Create a LOAD instruction out of a variable representing a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The value of the varnode if it represents a constant","The register containing the argument if it is passed in a …","A struct containing pointers to all known analysis results …","The content of the binary file","","","","","Compute the function signatures for internal functions.","Compute the pointer inference analysis. The result gets …","Compute the string abstraction. As the string abstraction …","The computed control flow graph of the program.","Disassemble the given binary and parse it to a Project …","Returns the argument unchanged.","The results of the function signature analysis if already …","Calls U::from(self).","Create a new AnalysisResults struct with only the project …","The result of the pointer inference analysis if already …","A pointer to the project struct","The result of the string abstraction if already computed.","","","","","Create a new AnalysisResults struct containing the given …","Create a new AnalysisResults struct containing the given …","Create a new AnalysisResults struct containing the given …","Handles argument detection by parsing format string …","Utility structs and functions which directly parse the …","Get the base address for the image of a binary when loaded …","Get the folder path to a Ghidra plugin bundled with the …","Utility functions for executing Ghidra and extracting …","Helper functions for common tasks utilizing the control …","Structs and functions for generating log messages and CWE …","Get the contents of a configuration file.","Helper functions for common tasks utilizing extern symbols,","Calculates the register and stack positions of format …","Parses the input format string for the corresponding …","Returns an argument vector of detected variable parameters.","Parses the destiniation address of the format string. It …","Parses the format string parameters using a regex, …","Contains all information parsed out of the bare metal …","A continuous segment in the memory image.","The base address, i.e. the address of the first byte of …","","","","","The contents of the segment","","","","","","","","","","","","","","","Is the segment executable","The base address of the non-volatile memory (usually flash …","","","Returns the argument unchanged.","Returns the argument unchanged.","Generate a segment with the given base_address and content …","Generate a segment from a program header of an ELF file.","Generate a segment from a section table from a PE file.","","","Calls U::from(self).","Calls U::from(self).","Generate a segment with the given base address and size. …","Return the base address of the binary as an integer.","A helper function to parse a hex string to an integer.","The CPU type.","The base address of the volatile memory (RAM) used by the …","The size of the volatile memory (RAM) used by the chip. …","Is the segment readable","","","","","","","","","","","Is the segment writeable","Execute the p_code_extractor plugin in Ghidra and parse …","Check whether a call to the sink_symbol is reachable from …","A CWE warning","A CWE warning message.","Messages intended for debugging.","Errors encountered during analysis.","Non-error messages intended for the user.","A normal log message.","The severity/type of a log message.","A generic log message.","A type for managing threads for collecting log messages.","The message types a logging thread can receive. See the …","If the log collector thread receives this signal, it …","For each analysis count the number of debug log messages …","Sets the address field of the CweWarning","Addresses in the binary associated with the CWE warning. …","","","","","","","","","","","","","","","","","","","","","","","Stop the logging thread by sending it the Terminate signal …","This function is collects logs from the given receiver …","","","","","Just create a disconnected sender to a (non-existing) …","","A short description of the warning that is presented to …","","","","","If the logging thread still exists, send it the Terminate …","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Get a sender that can be used to send messages to the …","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The severity/type of the log message.","Associate a specific location to the log message.","The location inside the binary that the message is related …","A short name of the CWE check, e.g. CWE190.","Creates a new CweWarning by only setting name, version and …","Create a new Debug-level log message","Create a new Error-level log message","Create a new Info-level log message","Sets the other field of the CweWarning","Other useful information. Content depends on the check …","","","","","Print all provided log- and CWE-messages.","","","","","Set the name of the source analysis for the log message.","The analysis where the message originated.","Create a new LogThread object with a handle to a freshly …","Sets the symbols field of the CweWarning","Symbol names (usually of extern symbols) associated to the …","The log message.","Sets the Tids field of the CweWarning","Term IDs associated to the CWE warning. May be more exact …","","","","","","","","","","","","","","","","","","","","","","The version number of the check.","Find the extern symbol object for a symbol name and return …","Match direct calls’ target tids in the program’s …","Find calls to TIDs contained as keys in the given symbol …","Get a map from TIDs to the corresponding extern symbol …"],"i":[0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,0,0,0,0,22,0,0,0,32,22,32,0,0,0,8,28,25,29,37,0,0,0,8,28,25,29,37,8,9,11,18,19,19,21,9,19,22,9,22,11,21,9,19,21,9,19,21,9,19,21,9,19,18,18,18,28,120,28,29,10,8,9,19,10,18,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,15,8,32,22,33,9,18,19,10,8,9,19,11,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,32,22,33,35,32,22,33,35,18,9,120,28,29,120,28,29,120,28,29,120,28,29,120,28,29,120,28,29,33,38,38,22,32,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,18,11,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,19,8,8,8,32,32,32,22,22,22,33,33,33,35,35,35,9,9,9,11,11,11,18,18,18,19,19,19,28,28,28,25,25,25,29,29,29,37,37,37,38,38,38,42,42,42,43,43,43,44,44,44,32,22,19,8,8,32,32,22,22,33,33,35,9,11,18,19,19,28,28,25,25,29,29,37,37,38,42,43,44,8,8,32,22,33,35,9,9,9,9,11,18,18,19,19,19,28,28,25,29,29,37,38,38,42,43,44,33,32,33,38,32,9,32,33,11,9,11,32,33,9,9,33,32,22,33,9,33,11,8,32,22,33,35,9,11,18,19,11,18,21,9,19,37,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,9,28,25,14,8,9,11,18,19,28,25,29,38,11,11,11,14,8,9,11,19,28,25,29,38,41,42,43,44,11,8,19,33,11,18,19,25,9,15,8,9,18,19,28,32,22,33,35,18,32,22,9,11,9,9,9,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,9,9,9,19,19,18,18,19,19,18,19,18,18,8,9,18,19,19,10,8,9,18,19,18,18,9,9,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,8,32,22,33,19,28,25,29,37,16,8,9,11,19,28,29,37,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,67,8,9,19,68,8,9,19,67,68,8,32,22,33,35,9,11,18,19,28,25,29,37,38,42,43,44,10,8,9,19,37,9,33,29,37,19,19,11,11,28,25,32,33,33,21,9,19,18,19,177,177,178,179,178,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,75,73,73,0,0,0,73,73,75,73,73,75,73,73,75,75,75,73,73,73,75,75,75,73,75,0,0,0,0,0,0,88,88,88,88,88,88,0,88,0,0,88,88,88,88,88,88,88,88,88,0,0,90,90,90,74,74,74,74,74,74,74,90,74,74,74,74,74,90,74,74,74,74,74,74,74,90,0,0,95,94,94,0,0,0,0,0,94,94,95,94,94,95,94,94,95,94,94,94,95,95,95,94,95,95,0,0,96,97,96,97,96,97,96,97,96,96,0,96,97,96,97,96,97,96,96,96,97,97,97,96,96,97,96,97,97,97,96,97,96,96,96,96,96,96,97,96,97,96,96,97,96,96,96,96,0,97,96,97,96,96,97,96,97,96,97,96,96,96,0,0,0,0,0,0,0,0,0,89,89,102,102,102,89,89,102,102,0,102,0,102,0,102,89,102,89,102,89,102,89,102,89,102,89,89,89,102,102,102,89,89,102,89,102,89,0,0,0,89,89,102,89,102,89,102,89,102,89,89,102,89,102,89,102,180,180,181,181,103,0,103,103,103,103,103,103,103,103,103,103,103,103,0,103,103,103,103,103,103,182,182,0,0,0,0,0,0,105,105,105,109,110,105,109,110,105,109,105,105,105,105,109,105,109,110,110,105,109,105,109,105,105,105,109,109,109,105,105,110,110,105,110,110,110,0,105,105,109,110,105,109,105,110,105,110,105,105,110,110,105,110,105,110,105,105,105,109,105,110,105,109,105,105,105,105,105,105,105,105,110,105,0,110,110,105,105,105,0,105,109,105,105,105,105,105,105,105,109,110,105,109,110,105,109,110,105,109,105,0,117,117,0,117,106,106,106,106,117,106,117,106,117,106,117,117,117,106,117,106,117,106,106,106,117,117,117,106,117,106,117,106,106,106,106,106,117,106,117,106,106,106,106,106,106,106,106,106,117,106,106,106,117,106,106,106,106,117,106,117,106,117,106,117,0,0,0,119,118,119,118,118,118,119,0,118,118,118,118,118,118,118,119,118,119,119,119,119,118,119,118,119,0,118,0,118,118,119,118,119,118,119,118,0,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,0,121,121,121,121,121,121,121,121,121,0,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,183,0,183,183,183,183,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,127,127,0,127,126,127,126,127,0,126,127,126,127,126,127,126,127,126,126,126,127,127,127,126,127,126,127,126,127,126,127,126,127,126,127,126,127,126,127,0,0,128,128,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,0,0,0,0,129,129,0,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,0,0,130,130,0,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,0,0,0,132,131,132,131,0,131,131,131,131,131,131,131,131,132,131,132,131,132,131,132,131,132,131,132,131,132,131,132,131,132,132,132,132,132,0,0,0,0,0,134,135,134,135,0,134,135,134,135,135,135,134,134,135,134,134,134,135,135,135,134,135,134,135,134,135,134,135,135,135,134,134,135,134,135,134,135,134,135,0,0,136,136,0,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,0,0,137,137,0,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,0,138,138,0,138,138,138,138,138,138,138,138,138,138,138,138,0,0,138,138,138,138,0,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,0,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,0,0,0,0,0,0,140,140,0,140,140,140,140,140,140,140,140,140,0,0,140,140,0,140,140,140,140,140,0,0,141,141,0,0,0,141,141,141,141,141,141,141,141,141,0,141,141,141,141,141,141,0,0,0,0,0,0,142,142,0,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,0,81,77,0,0,0,0,30,69,30,30,80,80,0,80,80,80,80,0,77,0,144,77,0,0,0,144,0,0,144,34,69,30,69,30,30,69,30,30,30,69,69,30,69,69,30,69,34,30,30,30,30,30,30,30,30,30,69,30,30,30,30,30,30,30,34,30,30,30,30,30,30,34,144,0,81,144,144,144,30,144,34,0,0,53,80,0,144,53,81,0,77,0,0,34,77,0,77,77,0,31,31,108,52,85,99,31,184,12,52,78,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,184,12,77,53,113,78,99,86,184,12,143,79,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,52,31,55,52,31,86,86,83,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,31,31,143,108,85,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,55,55,77,77,77,30,30,30,34,34,34,69,69,69,52,52,52,79,79,79,81,81,81,80,80,80,83,83,83,78,78,78,53,53,53,99,99,99,113,113,113,85,85,85,86,86,86,108,108,108,31,31,31,143,143,143,144,144,144,53,85,85,85,113,113,143,55,55,77,77,30,30,34,34,69,69,52,52,79,81,81,80,80,83,83,78,53,99,113,85,86,108,31,31,31,31,31,31,143,144,55,55,55,77,77,77,30,30,34,34,69,69,52,79,81,80,80,83,78,53,99,113,85,86,108,31,31,31,143,144,144,53,113,113,99,86,53,86,108,143,86,86,99,99,52,99,55,77,30,34,69,52,79,81,80,83,78,53,99,113,108,31,143,144,83,77,113,113,143,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,79,184,12,184,12,108,108,108,108,108,108,55,83,143,143,143,108,31,31,55,78,99,113,52,108,31,108,99,86,31,99,55,52,31,77,77,143,86,108,108,77,86,31,31,79,99,86,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,31,31,143,31,31,184,12,184,12,184,12,55,86,31,31,184,12,85,77,79,77,31,79,79,99,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,77,30,34,69,52,81,80,83,31,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,55,77,30,34,69,52,79,81,80,83,78,53,99,113,85,86,108,31,143,144,184,12,52,185,186,185,186,185,187,188,188,189,187,189,190,191,192,193,194,192,194,190,191,194,191,193,192,195,196,197,198,196,195,197,198,0,0,148,148,148,148,156,156,0,156,156,156,156,148,0,0,0,157,0,0,0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,161,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,157,0,0,148,0,161,148,148,0,0,156,0,148,148,0,148,0,145,162,162,146,152,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,149,155,152,162,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,149,165,165,159,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,163,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,145,145,147,147,147,148,148,148,146,146,146,155,155,155,149,149,149,156,156,156,157,157,157,158,158,158,159,159,159,160,160,160,161,161,161,152,152,152,162,162,162,163,163,163,164,164,164,165,165,165,163,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,149,162,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,163,147,147,147,160,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,159,158,163,165,145,159,158,160,146,147,149,145,152,162,164,145,145,162,165,145,145,145,165,146,165,165,155,158,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,146,165,163,155,149,162,145,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,147,148,146,155,149,156,157,158,159,160,161,152,162,163,164,165,145,160,0,111,111,111,111,111,111,111,111,111,0,111,111,111,111,111,111,111,111,111,111,111,111,111,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,154,169,154,169,169,154,169,154,169,154,169,154,169,154,154,154,169,169,169,169,154,154,169,154,169,169,169,169,154,169,154,169,169,154,0,154,154,154,169,154,169,154,169,154,169,154,169,154,169,169,0,0,114,0,172,172,172,114,0,0,0,0,114,0,112,112,173,112,98,172,114,173,112,98,172,114,112,98,172,114,112,98,172,114,112,98,172,114,173,173,112,98,172,114,173,112,112,112,98,172,114,173,112,98,172,114,112,112,112,98,98,98,172,172,172,114,114,114,112,112,98,98,172,114,173,112,98,172,114,114,114,173,112,98,172,114,173,112,98,172,114,98,98,98,112,112,98,98,98,112,112,112,98,172,114,0,112,98,172,114,98,98,173,112,112,98,112,112,112,98,172,114,112,98,173,112,98,172,114,173,112,98,172,114,173,112,98,172,114,112,0,0,0,0],"f":[0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],0,[[1,2],3],[-1,-1,[]],[[],[[4,[1]]]],0,[-1,-2,[],[]],0,0,0,0,[-1,5,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[8,8],8],[[[9,[-1]],[9,[-1]]],[[9,[-1]]],10],[[[11,[-1]],-1,12],13,[14,15,16,17]],[[18,18],18],[[19,19],19],[[19,19],19],[[-1,12],[[6,[-1,20]]],[]],[[[9,[-1]],12],[[6,[[9,[-1]],20]]],[21,10]],[[19,12],[[6,[19,20]]]],[[22,23],13],[[[9,[-1]],-1],[[9,[-1]]],10],[[22,23],13],[[[11,[-1]],23],13,[14,15,16,17]],[[-1,12],[[6,[-1,20]]],[]],[[[9,[-1]],12],[[6,[[9,[-1]],20]]],[21,10]],[[19,12],[[6,[19,20]]]],[[-1,12],[[6,[-1,20]]],[]],[[[9,[-1]],12],[[6,[[9,[-1]],20]]],[21,10]],[[19,12],[[6,[19,20]]]],[[-1,12],[[6,[-1,20]]],[]],[[[9,[-1]],12],[[6,[[9,[-1]],20]]],[21,10]],[[19,12],[[6,[19,20]]]],[[-1,12],[[6,[-1,20]]],[]],[[[9,[-1]],12],[[6,[[9,[-1]],20]]],[21,10]],[[19,12],[[6,[19,20]]]],[18,13],[18,13],[[18,24,24],[[6,[18,20]]]],[[[26,[25]]],27],[[-1,-1],-1,[]],[[28,28],28],[[29,29],29],[[-1,30,-1],-1,[]],[[8,30,8],8],[[[9,[-1]],30,[9,[-1]]],[[9,[-1]]],10],[[19,30,19],19],[[-1,30,-1],31,[]],[18,18],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,31,[]],[8,31],[32,31],[22,31],[33,31],[[[9,[-1]]],31,10],[18,31],[19,31],[[-1,34,31],-1,[]],[[8,34,31],8],[[[9,[-1]],34,31],[[9,[-1]]],10],[[19,34,31],19],[[[11,[-1]]],13,[14,15,16,17]],[8,8],[32,32],[22,22],[33,33],[35,35],[[[9,[-1]]],[[9,[-1]]],[36,10]],[[[11,[-1]]],[[11,[-1]]],[36,14,15,16,17]],[18,18],[19,19],[28,28],[25,25],[29,29],[37,37],[[[38,[-1,-2,-3]]],[[38,[-1,-2,-3]]],[39,40,36,36],[14,36],[[41,[-1,-2]],36]],[42,42],[43,43],[44,44],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[32,32],45],[[22,22],45],[[33,33],45],[[35,35],45],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[18,12],27],[[[9,[-1]]],27,10],[[],-1,[]],[[],28],[[],29],[[],-1,[]],[[],28],[[],29],[[],-1,[]],[[],28],[[],29],[[],-1,[]],[[],28],[[],29],[[],-1,[]],[[],28],[[],29],[[],-1,[]],[[],28],[[],29],[33],[[[38,[-1,-2,-3]]],[],[39,40,36],14,[[41,[-1,-2]]]],[[[38,[-1,-2,-3]]],[[46,[-1,-2]]],[39,40,36],14,[[41,[-1,-2]]]],[[22,31,31],13],[[32,31,31],32],[-1,[[6,[8]]],47],[-1,[[6,[32]]],47],[-1,[[6,[22]]],47],[-1,[[6,[33]]],47],[-1,[[6,[35]]],47],[-1,[[6,[[9,[-2]]]]],47,[48,10]],[-1,[[6,[[11,[-2]]]]],47,[48,14,15,16,17]],[-1,[[6,[18]]],47],[-1,[[6,[19]]],47],[-1,[[6,[28]]],47],[-1,[[6,[25]]],47],[-1,[[6,[29]]],47],[-1,[[6,[37]]],47],[-1,[[6,[[38,[-2,-3,-4]]]]],47,[39,40,36,48],[14,48],[[41,[-2,-3]]]],[-1,[[6,[42]]],47],[-1,[[6,[43]]],47],[-1,[[6,[44]]],47],0,[[[11,[-1]]],[[46,[23,-1]]],[14,15,16,17]],[[8,8],27],[[32,32],27],[[22,22],27],[[33,33],27],[[35,35],27],[[[9,[-1]],[9,[-1]]],27,[49,10]],[[[11,[-1]],[11,[-1]]],27,[49,14,15,16,17]],[[18,18],27],[[19,19],27],[[28,28],27],[[25,25],27],[[29,29],27],[[37,37],27],[[[38,[-1,-2,-3]],[38,[-1,-2,-3]]],27,[39,40,36,49],[14,49],[[41,[-1,-2]],49]],[[42,42],27],[[43,43],27],[[44,44],27],[[19,19],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[32,22,31],13],[[22,22,31],13],[[19,31],27],[[8,2],3],[[8,2],3],[[32,2],3],[[32,2],3],[[22,2],3],[[22,2],3],[[33,2],3],[[33,2],3],[[35,2],3],[[[9,[-1]],2],3,[17,10]],[[[11,[-1]],2],3,[17,14,15,16,17]],[[18,2],3],[[19,2],3],[[19,2],3],[[28,2],3],[[28,2],3],[[25,2],3],[[25,2],3],[[29,2],3],[[29,2],3],[[37,2],3],[[37,2],3],[[[38,[-1,-2,-3]],2],3,[39,40,36,17],[14,17],[[41,[-1,-2]],17]],[[42,2],3],[[43,2],3],[[44,2],3],[12,8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,[[9,[-1]]],10],[12,[[9,[-1]]],[10,[50,[12]]]],[51,-1,[]],[-1,-1,[]],[-1,-1,[]],[12,18],[-1,-1,[]],[-1,-1,[]],[18,19],[12,19],[-1,-1,[]],[5,28],[-1,-1,[]],[-1,-1,[]],[5,29],[-1,-1,[]],[[[46,[-1,-2]]],[[38,[-1,-2,-3]]],[39,40,36],14,[[41,[-1,-2]]]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[52,53],33],[12,32],[[52,12],33],[-1,[[38,[-2,-3,-4]]],54,[39,40,36],14,[[41,[-2,-3]]]],[[55,23,31],32],[[33,-1],[[9,[-1]]],10],[55,[[6,[32,20]]]],[[52,55],33],[[[11,[-1]],12,31],-1,[14,15,16,17]],[[[9,[-1]]],[[56,[-1]]],10],[[[11,[-1]]],31,[14,15,16,17]],[[32,31],[[4,[32]]]],[[33,31],[[56,[33]]]],[[[9,[-1]]],[[56,[-1]]],10],[[[9,[-1]]],[[56,[[13,[33,-1]]]]],10],[33,32],[[32,31],[[6,[[13,[32,23]],20]]]],[[22,31],[[6,[[13,[22,23]],23]]]],[33,[[26,[52]]]],[[[9,[-1]]],[[46,[33,-1]]],10],[33,52],[[[11,[-1]],12],[[56,[-1]]],[14,15,16,17]],[[8,-1],13,57],[[32,-1],13,57],[[22,-1],13,57],[[33,-1],13,57],[[35,-1],13,57],[[[9,[-1]],-2],13,[58,10],57],[[[11,[-1]],-2],13,[58,14,15,16,17],57],[[18,-1],13,57],[[19,-1],13,57],[[[11,[-1]],-1,23],13,[14,15,16,17]],[18,18],[[-1,-1],[[6,[-1,20]]],[]],[[[9,[-1]],[9,[-1]]],[[6,[[9,[-1]],20]]],[21,10]],[[19,19],[[6,[19,20]]]],[[37,37],37],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[9,[-1]]],27,10],[[28,28],27],[[25,25],27],[-1,27,[]],[8,27],[[[9,[-1]]],27,10],[[[11,[-1]]],27,[14,15,16,17]],[18,27],[19,27],[28,27],[25,27],[29,27],[[[38,[-1,-2,-3]]],27,[39,40,36],14,[[41,[-1,-2]],36,59]],[[[11,[-1]]],[[60,[23,-1]]],[14,15,16,17]],[[[11,[-1]]],13,[14,15,16,17]],[[[11,[-1]],23,23,31],13,[14,15,16,17]],[[-1,-1],-1,[]],[[8,8],8],[[[9,[-1]],[9,[-1]]],[[9,[-1]]],10],[[[11,[-1]],[11,[-1]]],[[11,[-1]]],[14,15,16,17]],[[19,19],19],[[28,28],28],[[25,25],25],[[29,29],29],[[[38,[-1,-2,-3]],[38,[-1,-2,-3]]],[[38,[-1,-2,-3]]],[39,40,36],14,[[41,[-1,-2]],36,59]],[[[46,[-1,-2]],[46,[-1,-2]]],[[46,[-1,-2]]],[],[]],[[[46,[-1,-2]],[46,[-1,-2]]],[[46,[-1,-2]]],[40,36],14],[[[46,[-1,-2]],[46,[-1,-2]]],[[46,[-1,-2]]],[40,36],14],[[[46,[-1,-2]],[46,[-1,-2]]],[[46,[-1,-2]]],[40,36],[14,16]],[[[11,[-1]],12,31],13,[14,15,16,17]],[8,8],[19,19],[[52,32],33],[31,[[11,[-1]]],[14,15,16,17]],[[12,12,24],18],[[12,12],19],[5,25],[31,[[9,[-1]]],10],[31,-1,[]],[31,8],[31,[[9,[-1]]],10],[31,18],[31,19],[28,28],[[32,32],[[56,[45]]]],[[22,22],[[56,[45]]]],[[33,33],[[56,[45]]]],[[35,35],[[56,[45]]]],[[18,18],18],[32,24],[22,24],[[[9,[-1]]],[[0,[61]]],10],[[[11,[-1]],12,12],13,[14,15,16,17]],[[[9,[-1]],[62,[33]]],13,10],[[[9,[-1]],33,33,-1],13,10],[[[9,[-1]],[46,[33,[9,[-1]]]]],13,10],[[8,-1],6,63],[[32,-1],6,63],[[22,-1],6,63],[[33,-1],6,63],[[35,-1],6,63],[[[9,[-1]],-2],6,[64,10],63],[[[11,[-1]],-2],6,[64,14,15,16,17],63],[[18,-1],6,63],[[19,-1],6,63],[[28,-1],6,63],[[25,-1],6,63],[[29,-1],6,63],[[37,-1],6,63],[[[38,[-1,-2,-3]],-4],6,[39,40,36,64],[14,64],[[41,[-1,-2]]],63],[[42,-1],6,63],[[43,-1],6,63],[[44,-1],6,63],[[[9,[-1]],[56,[-1]]],13,10],[[[9,[-1]]],13,10],[[[9,[-1]],[46,[33,-1]]],13,10],[[19,19],19],[[19,31],19],[[18,18],[[6,[18,20]]]],[[18,18],18],[[19,19],19],[[19,19],19],[[18,18],18],[[19,19],19],0,0,[[8,8],8],[[[9,[-1]],[9,[-1]]],[[9,[-1]]],10],[[18,18],18],[[19,19],19],[[19,19],19],[[-1,31,31],-1,[]],[[8,31,31],8],[[[9,[-1]],31,31],[[9,[-1]]],10],[[18,31,31],18],[[19,31,31],19],[[18,31],18],[[18,31],18],[[[9,[-1]],-1],[[9,[-1]]],10],[[[9,[-1]]],65,[10,66]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,-1,[]],[8,8],[[[9,[-1]]],[[9,[-1]]],10],[[[11,[-1]]],[[11,[-1]]],[14,15,16,17]],[19,19],[28,28],[29,29],[37,37],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[12,20]]],[]],[8,[[6,[12,20]]]],[[[9,[-1]]],[[6,[12,20]]],[10,67]],[19,[[6,[12,20]]]],[-1,[[6,[18,20]]],[]],[8,[[6,[18,20]]]],[[[9,[-1]]],[[6,[18,20]]],[10,68]],[19,[[6,[18,20]]]],[-1,[[6,[23,20]]],[]],[-1,[[6,[[13,[23,23]],20]]],[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[[-1,69],-1,[]],[[8,69],8],[[[9,[-1]],69],[[9,[-1]]],10],[[19,69],19],[[37,37],37],[[[9,[-1]]],13,10],[33,55],[29,[[13,[37,37]]]],[37,[[62,[70]]]],[[19,[56,[12]]],13],[[19,[56,[12]]],13],[[[11,[-1]]],[[71,[23,-1]]],[14,15,16,17]],[[[11,[-1]]],[[72,[23,-1]]],[14,15,16,17]],[[28,28],28],[[25,25],25],[[32,23],32],[[33,52],[[6,[33,20]]]],[33,[[13,[33,[56,[52]]]]]],[-1,-1,[]],[[[9,[-1]]],[[9,[-1]]],[21,10]],[19,19],[[18,31],18],[[19,31],19],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[-1,56],[[74,[[73,[-1]]]]],75],[[-1,56],[[74,[[73,[-1]]]]],75],[[-1,56],[[74,[[73,[-1]]]]],75],[-1,-1,[]],[[[73,[-1]]],-1,75],[-1,76,[]],[[[73,[-1]]],76,75],[-1,-2,[],[]],[-1,[],[]],[[[73,[-1]]],[],75],[-1,[[73,[-1]]],75],[[-1,77,27],56,[]],[-1,56,[]],[[-1,[79,[78]]],56,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[-1,[79,[80]]],56,[]],[[-1,56,56,[79,[78]],[79,[80]],[79,[80]]],56,[]],[[-1,[79,[81]]],56,[]],[[[73,[-1]],82],56,75],[[-1,[79,[80]],[56,[[79,[80]]]],[79,[83]]],56,[]],0,[[84,52,52],[[62,[52]]]],[[[79,[85]]],84],[86,[[87,[52,[62,[55]]]]]],[86,13],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-1,[]],[88,76],[-1,-2,[],[]],[88],[[[79,[83]]],13],[76,88],[86,13],[[[79,[83]],[56,[[87,[55,77]]]]],13],[[88,77,[79,[83]],27],56],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[88,[79,[80]],89,[56,[5]]],56],[[88,[79,[80]]],56],[[88,[79,[81]]],56],[[88,[79,[80]],[56,[[79,[80]]]],[79,[83]]],56],[[88,56,56,[79,[80]],[79,[80]],[56,[5]]],56],0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[74,[-1]]],13,90],[[[74,[-1]],24],13,90],[-1,-1,[]],[[-1,56,[4,[91]]],[[74,[-1]]],90],[[[74,[-1]]],-1,90],[-1,92,[]],[[[74,[-1]]],92,90],[[[74,[-1]],91],56,90],[[[74,[-1]]],[[4,[91]]],90],[[[74,[-1]]],27,90],[-1,-2,[],[]],[-1,[],[]],[[-1,56],[[74,[-1]]],90],[[[74,[-1]]],[[93,[91]]],90],[[[74,[-1]]],[[0,[61]]],90],[[[74,[-1]],91],13,90],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[-1,82],56,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[76,[[4,[91]]]],[[-1,56],[[74,[[94,[-1]]]]],95],[[-1,56],[[74,[[94,[-1]]]]],95],[[-1,56],[[74,[[94,[-1]]]]],95],[76,[[4,[91]]]],[-1,-1,[]],[[[94,[-1]]],-1,95],[-1,76,[]],[[[94,[-1]]],76,95],[-1,-2,[],[]],[-1,[],[]],[[[94,[-1]]],[],95],[-1,[[94,[-1]]],95],[[-1,77,[79,[83]],27],56,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[-1,[79,[80]],89,[56,[5]]],56,[]],[[-1,[79,[80]]],56,[]],[[-1,[79,[81]]],56,[]],[[[94,[-1]],82],56,95],[[-1,[79,[80]],[56,[[79,[80]]]],[79,[83]]],56,[]],[[-1,56,56,[79,[80]],[79,[80]],[56,[5]]],56,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[96,96],[97,97],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[96,96],45],[[-1,-2],45,[],[]],[[86,76],[[13,[[46,[52,97]],[4,[98]]]]]],[[],96],[[],97],[-1,[[6,[96]]],47],[-1,[[6,[97]]],47],[[96,96],27],[[97,97],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[96,2],3],[[96,2],3],[[97,2],3],[-1,-1,[]],[-1,-1,[]],[[97,55],23],0,[-1,-2,[],[]],[-1,-2,[],[]],[96,27],[96,27],[96,27],[96,27],[[96,96],96],[[],96],[[],97],[[],96],0,[[96,96],[[56,[45]]]],[[96,-1],6,63],[[97,-1],6,63],[96,13],[96,13],[96,13],[96,13],0,[97,65],[-1,-2,[],[]],[-1,-2,[],[]],[-1,5,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[96,96],[96,96],[96,96],0,[[],[[46,[100,[4,[96]]]]]],[[],[[46,[100,[13,[101,96]]]]]],0,0,[[52,53],[[9,[8]]]],[[[9,[8]]],[[9,[8]]]],0,[31,[[9,[8]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[89,89],[102,102],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[89,89],27],[[102,102],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[89,2],3],[[89,2],3],[[102,2],3],[-1,-1,[]],[-1,-1,[]],[89,[[79,[83]]]],[76,[[87,[52,91]]]],[[[79,[85]]],76],[[[79,[85]]],[[13,[76,[4,[98]]]]]],[89,[[79,[78]]]],[[89,-1],13,57],[[102,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[[89,-1],6,63],[[102,-1],6,63],[-1,-2,[],[]],[-1,-2,[],[]],[-1,5,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[103,[-1]]],[[103,[-1]]],[36,49,59,36]],[[-1,-2],13,[],[]],[-1,[[6,[[103,[-2]]]]],47,[48,49,59,36]],[[[103,[-1]],[103,[-1]]],27,[49,49,59,36]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[-1,-1,[]],[-1,-2,[],[]],[[[56,[-1]],[56,[-1]],-2],[[56,[-1]]],36,104],[[[103,[-1]],-2],6,[64,49,59,36],63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[[103,[-1]]],-1,[49,59,36]],0,0,0,0,0,0,0,0,[[105,[62,[33]]],[[62,[33]]]],[[105,106,107],[[6,[13,20]]]],[[105,[62,[33]]],[[62,[33]]]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[105,[79,[81]]],[[6,[27,20]]]],[[105,[26,[55]]],13],[[105,99,108],[[6,[13,20]]]],[105,105],[109,109],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],0,[[110,27],13],[-1,[[6,[105]]],47],[-1,[[6,[109]]],47],[[105,105],27],[[109,109],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[105,77],107],[[105,32,108],107],[[110,52],[[56,[107]]]],[[110,52,77],[[56,[107]]]],[[105,53,108],[[6,[107,20]]]],[[110,52,53],[[56,[107]]]],[[110,52,32],[[56,[107]]]],[[110,52],[[56,[107]]]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[[105,[46,[33,107]]],13],[[105,2],3],[[109,2],3],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[97,55,52],105],[110,65],[[105,[46,[33,107]]],[[46,[33,106]]]],0,[105,52],[105,33],[110,76],[[110,52],[[56,[[46,[33,107]]]]]],[[105,[46,[33,107]]],[[46,[33,107]]]],[[110,91],[[56,[[103,[105]]]]]],[[105,55],107],[[110,52],[[56,[105]]]],[[105,55,77,108],[[6,[13,20]]]],[[105,55,77],13],[[105,77,77,108],[[6,[13,20]]]],[[109,-1],13,57],[[105,[46,[33,107]],52],13],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[105,27],[[105,77,31,108],[[6,[107,20]]]],[[105,107,31,108],[[6,[107,20]]]],[[105,52],[[46,[33,107]]]],0,[[105,105],105],[[105,52],13],[[105,97,113],13],[[111,109,[115,[114]],27],110],[[55,52,[62,[24]]],105],0,[110,13],[110,13],[[105,113],13],[105,13],[[105,[46,[33,107]]],13],[[111,109,27,27],110],[[105,-1],6,63],[[109,-1],6,63],[[105,52,31],[[6,[13,20]]]],[[105,55,107],13],[[105,77,107],[[6,[13,20]]]],0,[[105,107,107,108],[[6,[13,20]]]],[105,65],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[[105,77,107,108],[[6,[13,20]]]],0,0,0,0,0,[[106,[62,[33]]],13],[[106,116],13],[[106,[62,[33]]],13],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[106,106],[117,117],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[117,117],45],[[-1,-2],45,[],[]],[-1,[[6,[106]]],47],[-1,[[6,[117]]],47],[[106,106],27],[[117,117],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[106,2],3],[[117,2],3],[-1,-1,[]],[-1,-1,[]],[106,[[11,[107]]]],[106,[[56,[117]]]],[106,[[62,[33]]]],[106,[[62,[33]]]],[[106,12,31],107],[[117,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[106,27],[106,27],[106,13],[106,13],[[106,106],106],[[106,107,116],13],[[[56,[117]],31],106],[[106,[11,[107]]],13],[[106,106,116],13],[[117,117],[[56,[45]]]],[[106,[62,[33]]],13],[[106,[46,[33,107]]],13],[[106,-1],6,63],[[117,-1],6,63],[[106,[56,[117]]],13],[[106,107,116],[[6,[13,20]]]],[106,65],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[86,[[56,[[4,[98]]]]]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[118,118],[[-1,-2],13,[],[]],[[[119,[-1]]],13,[14,120,16,59,[50,[5]]]],0,[-1,[[6,[118]]],47],[[118,118],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[118,2],3],0,[-1,-1,[]],[-1,-1,[]],[[[119,[-1]]],[[74,[[94,[[121,[-1]]]]]]],[14,120,16,59,[50,[5]]]],[[[119,[-1]]],[[121,[-1]]],[14,120,16,59,[50,[5]]]],[[[119,[-1]]],76,[14,120,16,59,[50,[5]]]],[[[119,[-1]],91],[[56,[[103,[[122,[-1]]]]]]],[14,120,16,59,[50,[5]]]],[[118,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[[86,76,110,118],[[119,[-1]]],[14,120,16,59,[50,[5]]]],[[86,76,110,118],[[119,[-1]]],[14,16,59,[50,[5]],120]],[[118,-1],6,63],0,0,[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],0,[[[122,[-1]],105,[9,[19]],[56,[5]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],105,[46,[33,19]],-1],13,[14,120,16,59,[50,[5]]]],[5,-1,[14,120,16,59,[50,[5]]]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[4,[-1]]],-1,[14,120,16,59,[50,[5]]]],[[[121,[-1]],105,[122,[-1]],[87,[53,[56,[5]]]]],13,[14,120,16,59,[50,[5]]]],[[[121,[-1]],105,[122,[-1]],99,5],-1,[14,120,16,59,[50,[5]]]],[[[121,[-1]],5,[26,[53]],105,[122,[-1]]],-1,[14,120,16,59,[50,[5]]]],[[[121,[-1]],5],-1,[14,120,16,59,[50,[5]]]],0,[[[121,[-1]],53,5,105,[122,[-1]]],-1,[14,120,16,59,[50,[5]]]],[[[121,[-1]],[9,[19]],53],[[56,[-1]]],[14,120,16,59,[50,[5]]]],[[[9,[19]],[122,[-1]],105,53,[56,[-1]]],[[56,[-1]]],[14,120,16,59,[50,[5]]]],[[[4,[53]],[4,[5]]],[[87,[53,[56,[5]]]]]],0,[-1,-1,[]],[[[121,[-1]],12],[[56,[-1]]],[14,120,16,59,[50,[5]]]],[12,[[56,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],12],[[56,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[9,[19]]],[[56,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]]],76,[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],99,[122,[-1]]],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],99,[122,[-1]]],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]]],13,[14,120,16,59,[50,[5]]]],[[[121,[-1]],99,105],[[6,[[9,[19]],20]]],[14,120,16,59,[50,[5]]]],[[[9,[19]]],27],[[[121,[-1]],99,105],[[6,[[9,[19]],20]]],[14,120,16,59,[50,[5]]]],[-1,-2,[],[]],0,[[[121,[-1]],105,99,100],[[6,[[87,[53,[56,[5]]]],20]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]]],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]],105,[46,[33,19]]],-1,[14,120,16,59,[50,[5]]]],[[86,110,118],[[121,[-1]]],[14,16,59,[50,[5]],120]],[5,27],[12,[[56,[70]]]],[[[121,[-1]],[122,[-1]],105,99,101,[9,[19]]],13,[14,120,16,59,[50,[5]]]],0,[[[121,[-1]],[122,[-1]],105,[9,[19]],[56,[[9,[19]]]]],13,[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],105,[9,[19]],[46,[33,19]]],13,[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],99,105],-1,[14,120,16,59,[50,[5]]]],0,[[[4,[-1]],100,123,101,101],13,[14,120,16,59,[50,[5]]]],[[[4,[-1]],100,101],13,[14,120,16,59,[50,[5]]]],[[[4,[-1]],123],13,[14,120,16,59,[50,[5]]]],[[],124],[[[121,[-1]],105,[122,[-1]],[9,[19]],99],27,[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],77,[79,[83]],27],[[56,[[122,[-1]]]]],[14,120,16,59,[50,[5]]]],0,0,[5,5],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[[121,[-1]],[122,[-1]],[79,[80]],89,[56,[5]]],[[56,[[122,[-1]]]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],[79,[80]]],[[56,[[122,[-1]]]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],[79,[81]]],[[56,[[122,[-1]]]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[122,[-1]],[79,[80]],[56,[[79,[80]]]],[79,[83]]],[[56,[[122,[-1]]]]],[14,120,16,59,[50,[5]]]],[[[121,[-1]],[56,[[122,[-1]]]],[56,[[122,[-1]]]],[79,[80]],[79,[80]],[56,[5]]],[[56,[[122,[-1]]]]],[14,120,16,59,[50,[5]]]],0,[[[122,[-1]],108,[125,[[13,[52,52]]]],55,77],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]],33,-1],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],23,-1],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],55,[9,[19]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],77,[9,[19]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],105,[9,[19]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],[4,[23]],[4,[33]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],[9,[19]]],13,[14,120,16,59,[50,[5]]]],[-1,-2,[],[]],[-1,-2,[],[]],[[[122,[-1]],105,55,108,[125,[[13,[52,52]]]]],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[122,[-1]]],[36,14,120,16,59,[50,[5]]]],[[-1,-2],13,[],[]],[[[122,[-1]]],[[4,[[9,[19]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[-1,[[6,[[122,[-2]]]]],47,[48,14,120,16,59,[50,[5]]]],[[[122,[-1]],[122,[-1]]],27,[49,14,120,16,59,[50,[5]]]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[[122,[-1]],108,[125,[[13,[52,52]]]],12],[[56,[[9,[19]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]],105],[[13,[[87,[23,-1]],[87,[33,-1]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]],2],3,[17,14,120,16,59,[50,[5]]]],[-1,-1,[]],[[[122,[-1]]],[[56,[[79,[78]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[87,[33,-1]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[56,[105]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[87,[23,[9,[19]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[87,[23,-1]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[125,[[9,[19]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]]],[[87,[55,[9,[19]]]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]],55,77,108,[125,[[13,[52,52]]]],27],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],77,77,108,[125,[[13,[52,52]]]]],13,[14,120,16,59,[50,[5]]]],[-1,-2,[],[]],[[105,33],27],[[[122,[-1]]],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]],[122,[-1]]],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[91,110],[[122,[-1]]],[14,120,16,59,[50,[5]]]],[[[122,[-1]],105,77,[9,[19]]],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]],105,55,[9,[19]]],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]],[9,[19]]],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]],105,[9,[19]]],27,[14,120,16,59,[50,[5]]]],[[[122,[-1]],33],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],86,99],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],-2],6,[64,14,120,16,59,[50,[5]]],63],[[[122,[-1]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],[56,[105]]],13,[14,120,16,59,[50,[5]]]],[[[122,[-1]],[87,[55,[9,[19]]]]],13,[14,120,16,59,[50,[5]]]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,[[-1,52],56,[]],[[-1,52,77],56,[]],[[-1,52,53],56,[]],[[-1,52,32],56,[]],[[-1,52],56,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[111,65],[[13,[[4,[98]],[4,[112]]]]]],0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[126,126],[127,127],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[-1,[[6,[126]]],47],[-1,[[6,[127]]],47],[[126,126],27],[[127,127],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[126,2],3],[[127,2],3],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[[126,-1],6,63],[[127,-1],6,63],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[128,128],[[-1,-2],13,[],[]],[-1,[[6,[128]]],47],[[128,128],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[128,2],3],[-1,-1,[]],[[128,-1],13,57],[-1,-2,[],[]],[[128,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,[[111,65],[[13,[[4,[98]],[4,[112]]]]]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[129,129],[[-1,-2],13,[],[]],[-1,[[6,[129]]],47],[[129,129],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[129,2],3],[-1,-1,[]],[[129,-1],13,57],[-1,-2,[],[]],[[129,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[130,130],[[-1,-2],13,[],[]],[-1,[[6,[130]]],47],[[130,130],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[130,2],3],[-1,-1,[]],[[130,-1],13,57],[-1,-2,[],[]],[[130,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[131,131],[[-1,-2],13,[],[]],[-1,[[6,[131]]],47],[[131,131],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[131,2],3],[-1,-1,[]],[-1,-1,[]],[132,76],[[131,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[132],[[131,-1],6,63],[[132,133,77,[79,[83]],27],56],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[[132,[79,[80]],89,[56,[5]]],56],[[132,133,[79,[80]]],56],[[132,133,[79,[81]]],56],[[132,133,[79,[80]],[56,[[79,[80]]]],[79,[83]]],56],[[132,56,56,[79,[80]],[79,[80]],[56,[5]]],56],0,[[111,65],[[13,[[4,[98]],[4,[112]]]]]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[134,134],[135,135],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[135,135],45],[[-1,-2],45,[],[]],[-1,[[6,[134]]],47],[[134,134],27],[[135,135],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[134,2],3],[[135,2],3],[-1,-1,[]],[-1,-1,[]],[[134,-1],13,57],[[135,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[[112,[4,[[13,[33,[4,[52]]]]]],52],135],[[135,135],[[56,[45]]]],[[134,-1],6,63],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[136,136],[[-1,-2],13,[],[]],[-1,[[6,[136]]],47],[[136,136],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[136,2],3],[-1,-1,[]],[[136,-1],13,57],[-1,-2,[],[]],[[136,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[137,137],[[-1,-2],13,[],[]],[-1,[[6,[137]]],47],[[137,137],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[137,2],3],[-1,-1,[]],[[137,-1],13,57],[-1,-2,[],[]],[[137,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[138,138],[[-1,-2],13,[],[]],[-1,[[6,[138]]],47],[[138,138],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[138,2],3],[-1,-1,[]],[[138,-1],13,57],[-1,-2,[],[]],[[138,-1],6,63],0,0,[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[[133,86,[56,[105]],[56,[5]]],27],[[133,107,105],27],[[133,33],27],[[133,86,[56,[105]],[56,[5]]],27],[133,133],[[-1,-2],13,[],[]],[-1,[[6,[133]]],47],[[133,133],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[133,77],139],[[133,2],3],[-1,-1,[]],[133,[[56,[105]]]],[-1,-2,[],[]],[133,27],[133,27],[[133,107,31],139],[[133,133],133],[[99,[56,[105]]],133],[133,13],[[133,113],13],[[133,107,139],13],[[133,-1],6,63],[[133,[56,[105]]],13],[[133,55,139],13],[133,65],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,0,[[139,30,139],139],[-1,-2,[],[]],[-1,-2,[],[]],[139,31],[[139,34,31],139],[139,139],[[-1,-2],13,[],[]],[-1,[[6,[139]]],47],[[139,139],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[139,2],3],[[139,2],3],[-1,-1,[]],[[139,-1],13,57],[-1,-2,[],[]],[139,27],[139,27],[[139,139],139],[31,139],[[139,-1],6,63],[[139,31,31],139],[-1,-2,[],[]],[-1,5,[]],[139,139],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[139,69],139],0,0,0,[[111,65],[[13,[[4,[98]],[4,[112]]]]]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[140,140],[[-1,-2],13,[],[]],[-1,[[6,[140]]],47],[[140,140],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[140,2],3],[-1,-1,[]],[[[4,[[13,[100,52,100]]]]],[[4,[112]]]],[[[46,[52,[79,[78]]]],[87,[52,100]]],[[4,[[13,[100,52,100]]]]]],[[140,-1],13,57],[-1,-2,[],[]],[[[46,[52,99]],[26,[5]]],[[87,[52,100]]]],[[140,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[[28,52,[79,[78]],99,[115,[112]]],13],[[[122,[28]],105,99,52,[115,[112]],[115,[98]],108],13],[141,141],[[-1,-2],13,[],[]],[-1,[[6,[141]]],47],[[141,141],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[141,2],3],[-1,-1,[]],[[100,52,100],112],[-1,-2,[],[]],[[141,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[[[26,[[13,[100,52,100]]]]],[[4,[112]]]],[[[79,[78]],[87,[52,100]]],[[4,[112]]]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[111,65],[[13,[[4,[98]],[4,[112]]]]]],[142,142],[[-1,-2],13,[],[]],[-1,[[6,[142]]],47],[[142,142],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[142,2],3],[-1,-1,[]],[[142,-1],13,57],[-1,-2,[],[]],[[142,-1],6,63],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[31,31],31],[[31,31],13],[[108,24],13],0,0,0,[31,101],[[-1,30,-1],[[6,[-1,20]]],[]],[[12,30,12],[[6,[12,20]]]],[100,52],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,31,[]],[12,31],[77,31],[53,31],0,0,0,0,[[-1,34,31],[[6,[-1,20]]],[]],[[12,34,31],[[6,[12,20]]]],0,[[[79,[81]],5,5],[[56,[52]]]],[55,55],[77,77],[30,30],[34,34],[69,69],[52,52],[[[79,[-1]]],[[79,[-1]]],36],[81,81],[80,80],[83,83],[78,78],[53,53],[99,99],[113,113],[85,85],[86,86],[108,108],[31,31],[143,143],[144,144],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[55,55],45],[[52,52],45],[[31,31],45],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],0,0,0,[-1,[[6,[55]]],47],[-1,[[6,[77]]],47],[-1,[[6,[30]]],47],[-1,[[6,[34]]],47],[-1,[[6,[69]]],47],[-1,[[6,[52]]],47],[-1,[[6,[[79,[-2]]]]],47,48],[-1,[[6,[81]]],47],[-1,[[6,[80]]],47],[-1,[[6,[83]]],47],[-1,[[6,[78]]],47],[-1,[[6,[53]]],47],[-1,[[6,[99]]],47],[-1,[[6,[113]]],47],[-1,[[6,[85]]],47],[-1,[[6,[86]]],47],[-1,[[6,[108]]],47],[-1,[[6,[31]]],47],[-1,[[6,[143]]],47],[-1,[[6,[144]]],47],[[31,-1],31,[]],[[31,-1],13,[]],0,[27,108],0,[[55,55],27],[[77,77],27],[[30,30],27],[[34,34],27],[[69,69],27],[[52,52],27],[[[79,[-1]],[79,[-1]]],27,49],[[81,81],27],[[80,80],27],[[83,83],27],[[78,78],27],[[53,53],27],[[99,99],27],[[113,113],27],[[85,85],27],[[86,86],27],[[108,108],27],[[31,31],27],[[143,143],27],[[144,144],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[53,[[6,[12,20]]]],0,[[85,52],[[56,[[79,[83]]]]]],[[85,52],[[56,[52]]]],0,0,0,[[55,2],3],[[55,2],3],[[77,2],3],[[77,2],3],[[30,2],3],[[30,2],3],[[34,2],3],[[34,2],3],[[69,2],3],[[69,2],3],[[52,2],3],[[52,2],3],[[[79,[-1]],2],3,17],[[81,2],3],[[81,2],3],[[80,2],3],[[80,2],3],[[83,2],3],[[83,2],3],[[78,2],3],[[53,2],3],[[99,2],3],[[113,2],3],[[85,2],3],[[86,2],3],[[108,2],3],[[31,2],3],[[31,2],3],[[31,2],3],[[31,2],3],[[31,2],3],[[31,2],3],[[143,2],3],[[144,2],3],[-1,-1,[]],[145,55],[146,55],[-1,-1,[]],[147,77],[145,77],[-1,-1,[]],[148,30],[148,34],[-1,-1,[]],[148,69],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[149,80],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[24,31],[-1,-1,[]],[150,31],[-1,-1,[]],[5,144],[-1,-1,[]],[[55,[56,[144]]],53],[113,[[4,[55]]]],[113,[[4,[55]]]],[[99,86],113],[[86,99],113],[53,[[56,[144]]]],[86,31],[[108,12],[[6,[[13,[[26,[151]],101]],20]]]],[[143,144],31],[[86,[56,[5]]],[[56,[113]]]],[86,[[56,[113]]]],[99,[[6,[53,20]]]],[99,[[6,[55,20]]]],[[52,100],27],0,[[55,-1],13,57],[[77,-1],13,57],[[30,-1],13,57],[[34,-1],13,57],[[69,-1],13,57],[[52,-1],13,57],[[[79,[-1]],-2],13,58,57],[[81,-1],13,57],[[80,-1],13,57],[[83,-1],13,57],[[78,-1],13,57],[[53,-1],13,57],[[99,-1],13,57],[[113,-1],13,57],[[108,-1],13,57],[[31,-1],13,57],[[143,-1],13,57],[[144,-1],13,57],0,[77,[[4,[55]]]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[79,[152]],31],[[79,[78]]]],[[-1,31],-1,[]],[[12,31],12],[[-1,31],-1,[]],[[12,31],12],[[108,12],[[6,[27,20]]]],[[108,12],27],[[108,24,24],[[6,[27,20]]]],[[108,24,24],[[6,[27,20]]]],0,[108,27],0,0,0,0,0,0,[[31,-1],31,[]],[[31,-1],13,[]],0,0,0,0,[-1,52,153],[[[26,[151]]],[[6,[108,20]]]],[24,31],[[[26,[151]],154],[[6,[108,20]]]],0,[86,[[4,[98]]]],[31,31],0,[[55,55],[[56,[45]]]],[[52,52],[[56,[45]]]],[[31,31],[[56,[45]]]],[[77,77],77],[[77,23],77],0,0,[[108,12,31],[[6,[[56,[12]],20]]]],[[108,12],[[6,[100,20]]]],[77,24],0,[[31,-1],31,[]],[[31,-1],13,[]],[[[79,[83]],[125,[52]]],[[6,[13,[4,[98]]]]]],0,0,[[55,-1],6,63],[[77,-1],6,63],[[30,-1],6,63],[[34,-1],6,63],[[69,-1],6,63],[[52,-1],6,63],[[[79,[-1]],-2],6,64,63],[[81,-1],6,63],[[80,-1],6,63],[[83,-1],6,63],[[78,-1],6,63],[[53,-1],6,63],[[99,-1],6,63],[[113,-1],6,63],[[85,-1],6,63],[[86,-1],6,63],[[108,-1],6,63],[[31,-1],6,63],[[143,-1],6,63],[[144,-1],6,63],[[31,-1],31,[]],[[31,-1],13,[]],0,[[31,-1],31,[]],[[31,-1],13,[]],[[-1,-1],[[56,[-1]]],[]],[[12,12],[[56,[12]]]],[[-1,-1],[[6,[[13,[-1,27]],20]]],[]],[[12,12],[[6,[[13,[12,27]],20]]]],[[-1,-1],[[56,[-1]]],[]],[[12,12],[[56,[12]]]],0,0,[[31,31],31],[[31,31],13],[[-1,31,31],-1,[]],[[12,31,31],12],0,[[77,55,77],13],[[[79,[81]],55,77],13],[77,13],[-1,31,61],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[[-1,69],[[6,[-1,20]]],[]],[[12,69],[[6,[12,20]]]],[[52,100],52],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,[145,145],[147,147],[148,148],[146,146],[155,155],[149,149],[156,156],[157,157],[158,158],[159,159],[160,160],[161,161],[152,152],[162,162],[163,163],[164,164],[165,165],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],0,0,0,0,[-1,[[6,[145]]],47],[-1,[[6,[147]]],47],[-1,[[6,[148]]],47],[-1,[[6,[146]]],47],[-1,[[6,[155]]],47],[-1,[[6,[149]]],47],[-1,[[6,[156]]],47],[-1,[[6,[157]]],47],[-1,[[6,[158]]],47],[-1,[[6,[159]]],47],[-1,[[6,[160]]],47],[-1,[[6,[161]]],47],[-1,[[6,[152]]],47],[-1,[[6,[162]]],47],[-1,[[6,[163]]],47],[-1,[[6,[164]]],47],[-1,[[6,[165]]],47],0,[[145,145],27],[[147,147],27],[[148,148],27],[[146,146],27],[[155,155],27],[[149,149],27],[[156,156],27],[[157,157],27],[[158,158],27],[[159,159],27],[[160,160],27],[[161,161],27],[[152,152],27],[[162,162],27],[[163,163],27],[[164,164],27],[[165,165],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],0,[[145,2],3],[[147,2],3],[[148,2],3],[[146,2],3],[[155,2],3],[[149,2],3],[[156,2],3],[[157,2],3],[[158,2],3],[[159,2],3],[[160,2],3],[[161,2],3],[[152,2],3],[[162,2],3],[[163,2],3],[[164,2],3],[[165,2],3],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,[[145,-1],13,57],[[147,-1],13,57],[[148,-1],13,57],[[146,-1],13,57],[[155,-1],13,57],[[149,-1],13,57],[[156,-1],13,57],[[157,-1],13,57],[[158,-1],13,57],[[159,-1],13,57],[[160,-1],13,57],[[161,-1],13,57],[[152,-1],13,57],[[162,-1],13,57],[[163,-1],13,57],[[164,-1],13,57],[[165,-1],13,57],0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[159,31],83],[[158,31],81],[[163,24,[26,[164]],145,100],85],[[165,24],86],0,0,0,0,0,0,0,0,0,0,0,[[-1,31],145,[[166,[5]]]],[[-1,31],145,[[166,[5]]]],0,[165,[[4,[98]]]],[[145,31],12],[145,12],[145,31],0,0,0,0,0,0,[[145,-1],6,63],[[147,-1],6,63],[[148,-1],6,63],[[146,-1],6,63],[[155,-1],6,63],[[149,-1],6,63],[[156,-1],6,63],[[157,-1],6,63],[[158,-1],6,63],[[159,-1],6,63],[[160,-1],6,63],[[161,-1],6,63],[[152,-1],6,63],[[162,-1],6,63],[[163,-1],6,63],[[164,-1],6,63],[[165,-1],6,63],0,0,0,0,0,0,0,[[145,-1,31],158,[[166,[5]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[111,111],[[-1,-2],13,[],[]],[111,[[13,[[46,[52,97]],[4,[98]]]]]],[[111,65,27],110],[[111,65,[56,[110]]],[[119,[28]]]],0,[[167,[56,[154]],27],[[6,[[13,[[4,[151]],86,[4,[98]]]],20]]]],[-1,-1,[]],0,[-1,-2,[],[]],[[[26,[151]],76,86],111],0,0,0,[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[[111,[56,[[46,[52,97]]]]],111],[[111,[56,[110]]],111],[[111,[56,[[119,[28]]]]],111],0,0,[[[26,[151]]],[[6,[24,20]]]],[100,168],0,0,0,[100,[[6,[65,20]]]],0,[[[4,[[13,[144,31]]]],99,86],[[4,[53]]]],[[105,99,101,108],[[6,[5,20]]]],[[86,105,99,[87,[5,101]]],[[6,[[4,[53]],20]]]],[[12,108],[[6,[5,20]]]],[[100,143],[[6,[[4,[[13,[144,31]]]],20]]]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[154,154],[169,169],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[-1,[[6,[154]]],47],[-1,[[6,[169]]],47],[[154,154],27],[[169,169],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],0,0,[[154,2],3],[[169,2],3],[-1,-1,[]],[-1,-1,[]],[[[26,[151]],24],169],[[[26,[151]],170],169],[[[26,[151]],171],169],[[154,-1],13,57],[[169,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[[24,24],169],[154,24],[100,[[6,[24,20]]]],0,0,0,0,[[154,-1],6,63],[[169,-1],6,63],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],0,[[167,[26,[151]],[56,[154]],27],[[6,[[13,[86,[4,[98]]]],20]]]],[[76,91,52,52],[[56,[52]]]],0,0,0,0,0,0,0,0,0,0,0,[[[4,[98]]],13],[[112,[4,[5]]],112],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[112,112],[98,98],[172,172],[114,114],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[-1,-2],13,[],[]],[[112,112],45],[[98,98],45],[[172,172],45],[[114,114],45],[173,[[13,[[4,[98]],[4,[112]]]]]],[[[174,[114]]],[[13,[[4,[98]],[4,[112]]]]]],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[-1,-2],45,[],[]],[[],[[115,[114]]]],[[],112],0,[-1,[[6,[112]]],47],[-1,[[6,[98]]],47],[-1,[[6,[172]]],47],[-1,[[6,[114]]],47],[173,13],[[112,112],27],[[98,98],27],[[172,172],27],[[114,114],27],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[-1,-2],27,[],[]],[[112,2],3],[[112,2],3],[[98,2],3],[[98,2],3],[[172,2],3],[[114,2],3],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[112,114],[98,114],[-1,-1,[]],[173,[[115,[114]]]],[[112,-1],13,57],[[98,-1],13,57],[[172,-1],13,57],[[114,-1],13,57],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[[98,52],98],0,0,[[-1,-2,-3],112,153,153,153],[-1,98,[[166,[5]]]],[-1,98,[[166,[5]]]],[-1,98,[[166,[5]]]],[[112,[4,[[4,[5]]]]],112],0,[[112,112],[[56,[45]]]],[[98,98],[[56,[45]]]],[[172,172],[[56,[45]]]],[[114,114],[[56,[45]]]],[[[4,[98]],[4,[112]],[56,[100]],27],13],[[112,-1],6,63],[[98,-1],6,63],[[172,-1],6,63],[[114,-1],6,63],[[98,-1],98,[[166,[5]]]],0,[-1,173,[175,176]],[[112,[4,[5]]],112],0,0,[[112,[4,[5]]],112],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,5,[]],[-1,5,[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,[[6,[-2]]],[],[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],0,[[[79,[85]],100],[[56,[[13,[52,100]]]]]],[[[79,[78]],[87,[52,100]]],[[4,[[13,[100,52,100]]]]]],[[[79,[78]],[87,[52,99]]],[[4,[[13,[[79,[83]],[79,[80]],99]]]]]],[[86,[26,[5]]],[[87,[52,99]]]]],"c":[],"p":[[3,"CweModule",0],[3,"Formatter",3017],[6,"Result",3017],[3,"Vec",3018],[3,"String",3019],[4,"Result",3020],[3,"TypeId",3021],[4,"BitvectorDomain",22],[3,"DataDomain",22],[8,"RegisterDomain",22],[3,"MemRegion",22],[6,"Bitvector",1669],[15,"tuple"],[8,"AbstractDomain",22],[8,"SizedDomain",22],[8,"HasTop",22],[8,"Debug",3017],[3,"Interval",22],[3,"IntervalDomain",22],[3,"Error",3022],[8,"SpecializeByConditional",22],[4,"AbstractMemoryLocation",22],[15,"i64"],[15,"u64"],[4,"BrickDomain",22],[15,"slice"],[15,"bool"],[4,"BricksDomain",22],[4,"CharacterInclusionDomain",22],[4,"BinOpType",1669],[3,"ByteSize",1669],[4,"AbstractLocation",22],[3,"AbstractIdentifier",22],[4,"CastOpType",1669],[3,"AbstractIdentifierData",22],[8,"Clone",3023],[4,"CharacterSet",22],[3,"DomainMap",22],[8,"PartialOrd",3024],[8,"Ord",3024],[8,"MapMergeStrategy",22],[3,"UnionMergeStrategy",22],[3,"IntersectMergeStrategy",22],[3,"MergeTopStrategy",22],[4,"Ordering",3024],[3,"BTreeMap",3025],[8,"Deserializer",3026],[8,"Deserialize",3026],[8,"PartialEq",3024],[8,"From",3027],[15,"never"],[3,"Tid",1669],[4,"Arg",1669],[8,"IntoIterator",3028],[3,"Variable",1669],[4,"Option",3029],[8,"Hasher",3030],[8,"Hash",3030],[8,"Eq",3024],[3,"Iter",3025],[8,"Iterator",3031],[3,"BTreeSet",3032],[8,"Serializer",3033],[8,"Serialize",3033],[4,"Value",3034],[8,"Display",3017],[8,"TryToBitvec",22],[8,"TryToInterval",22],[4,"UnOpType",1669],[15,"char"],[3,"Values",3025],[3,"ValuesMut",3025],[3,"GeneralizedContext",651],[3,"Computation",703],[8,"Context",651],[6,"Graph",831],[4,"Expression",1669],[3,"Sub",1669],[3,"Term",1669],[4,"Jmp",1669],[4,"Def",1669],[3,"EdgeIndex",3035],[3,"Blk",1669],[6,"CallGraph",678],[3,"Program",1669],[3,"Project",1669],[3,"HashMap",3036],[3,"Context",683],[4,"Node",831],[8,"Context",703],[3,"NodeIndex",3035],[6,"DiGraph",3035],[6,"FnvHashMap",3037],[3,"GeneralizedContext",730],[8,"Context",730],[3,"AccessPattern",758],[3,"FunctionSignature",758],[3,"LogMessage",2875],[3,"ExternSymbol",1669],[15,"str"],[15,"usize"],[4,"Edge",831],[4,"NodeValue",891],[8,"Fn",3038],[3,"State",914],[3,"AbstractObject",1021],[6,"Data",914],[3,"RuntimeMemoryImage",1669],[3,"Config",914],[3,"PointerInference",914],[3,"AnalysisResults",2781],[3,"CweWarning",2875],[3,"CallingConvention",1669],[4,"LogThreadMsg",2875],[3,"Sender",3039],[6,"ValueDomain",914],[4,"ObjectType",1021],[3,"Config",1087],[3,"StringAbstraction",1087],[8,"DomainInsertion",22],[3,"Context",1125],[3,"State",1193],[3,"Match",3040],[3,"Regex",3040],[3,"HashSet",3041],[3,"Config",1272],[4,"StringLocation",1272],[3,"Config",1314],[3,"Config",1337],[3,"Config",1358],[3,"Config",1379],[3,"Context",1379],[3,"State",1525],[3,"Config",1418],[3,"WarningContext",1418],[3,"Config",1460],[3,"Config",1481],[3,"Config",1502],[4,"Taint",1560],[3,"Config",1597],[3,"Config",1621],[3,"Config",1648],[3,"DatatypeProperties",1669],[4,"Datatype",1669],[3,"Variable",2333],[3,"RegisterProperties",2333],[3,"Expression",2333],[4,"ExpressionType",2333],[3,"Jmp",2333],[3,"BitWidth",3042],[15,"u8"],[3,"Sub",2333],[8,"ToString",3019],[3,"BareMetalConfig",2820],[3,"Call",2333],[4,"JmpType",2333],[4,"Label",2333],[3,"Def",2333],[3,"Blk",2333],[3,"Arg",2333],[4,"ArgIntent",2333],[3,"ExternSymbol",2333],[3,"Program",2333],[3,"CallingConvention",2333],[3,"Project",2333],[8,"Into",3027],[3,"Path",3043],[3,"PathBuf",3043],[3,"MemorySegment",2820],[3,"ProgramHeader",3044],[3,"SectionTable",3045],[4,"LogLevel",2875],[3,"LogThread",2875],[3,"Receiver",3039],[8,"FnOnce",3038],[8,"Send",3046],[13,"GlobalAddress",632],[13,"Location",634],[13,"Pointer",634],[13,"CallReturn",887],[13,"CallSource",887],[13,"CallFlowCombinator",912],[8,"VsaResult",1246],[8,"BitvectorExtended",1669],[13,"Stack",2301],[13,"Register",2301],[13,"Load",2306],[13,"Store",2306],[13,"Assign",2306],[13,"UnOp",2312],[13,"Cast",2312],[13,"Subpiece",2312],[13,"Unknown",2312],[13,"BinOp",2312],[13,"CBranch",2325],[13,"CallOther",2325],[13,"Call",2325],[13,"CallInd",2325]],"b":[[68,"impl-Add-for-IntervalDomain"],[69,"impl-IntervalDomain"],[307,"impl-Display-for-BitvectorDomain"],[308,"impl-Debug-for-BitvectorDomain"],[309,"impl-Debug-for-AbstractLocation"],[310,"impl-Display-for-AbstractLocation"],[311,"impl-Display-for-AbstractMemoryLocation"],[312,"impl-Debug-for-AbstractMemoryLocation"],[313,"impl-Debug-for-AbstractIdentifier"],[314,"impl-Display-for-AbstractIdentifier"],[319,"impl-Debug-for-IntervalDomain"],[320,"impl-Display-for-IntervalDomain"],[321,"impl-Debug-for-BricksDomain"],[322,"impl-Display-for-BricksDomain"],[323,"impl-Display-for-BrickDomain"],[324,"impl-Debug-for-BrickDomain"],[325,"impl-Display-for-CharacterInclusionDomain"],[326,"impl-Debug-for-CharacterInclusionDomain"],[327,"impl-Debug-for-CharacterSet"],[328,"impl-Display-for-CharacterSet"],[339,"impl-From%3CT%3E-for-DataDomain%3CT%3E"],[340,"impl-From%3CApInt%3E-for-DataDomain%3CT%3E"],[347,"impl-From%3CInterval%3E-for-IntervalDomain"],[348,"impl-From%3CApInt%3E-for-IntervalDomain"],[503,"impl-Sub-for-IntervalDomain"],[504,"impl-IntervalDomain"],[783,"impl-Debug-for-AccessPattern"],[784,"impl-Display-for-AccessPattern"],[862,"impl-Display-for-Node%3C\'a%3E"],[863,"impl-Debug-for-Node%3C\'a%3E"],[1575,"impl-Display-for-Taint"],[1576,"impl-Debug-for-Taint"],[1993,"impl-Debug-for-Variable"],[1994,"impl-Display-for-Variable"],[1995,"impl-Display-for-Expression"],[1996,"impl-Debug-for-Expression"],[1997,"impl-Debug-for-BinOpType"],[1998,"impl-Display-for-BinOpType"],[1999,"impl-Display-for-CastOpType"],[2000,"impl-Debug-for-CastOpType"],[2001,"impl-Display-for-UnOpType"],[2002,"impl-Debug-for-UnOpType"],[2003,"impl-Debug-for-Tid"],[2004,"impl-Display-for-Tid"],[2006,"impl-Debug-for-Def"],[2007,"impl-Display-for-Def"],[2008,"impl-Debug-for-Jmp"],[2009,"impl-Display-for-Jmp"],[2010,"impl-Display-for-Blk"],[2011,"impl-Debug-for-Blk"],[2019,"impl-LowerHex-for-ByteSize"],[2020,"impl-Debug-for-ByteSize"],[2021,"impl-UpperHex-for-ByteSize"],[2022,"impl-Display-for-ByteSize"],[2023,"impl-Binary-for-ByteSize"],[2024,"impl-Octal-for-ByteSize"],[2028,"impl-From%3CVariable%3E-for-Variable"],[2029,"impl-From%3C%26RegisterProperties%3E-for-Variable"],[2031,"impl-From%3CExpression%3E-for-Expression"],[2032,"impl-From%3CVariable%3E-for-Expression"],[2052,"impl-From%3Cu64%3E-for-ByteSize"],[2054,"impl-From%3CBitWidth%3E-for-ByteSize"],[2941,"impl-Debug-for-CweWarning"],[2942,"impl-Display-for-CweWarning"],[2943,"impl-Debug-for-LogMessage"],[2944,"impl-Display-for-LogMessage"],[2951,"impl-From%3CCweWarning%3E-for-LogThreadMsg"],[2952,"impl-From%3CLogMessage%3E-for-LogThreadMsg"]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/doc/html/settings.html b/doc/html/settings.html index 41b908ba8..bb05299ef 100644 --- a/doc/html/settings.html +++ b/doc/html/settings.html @@ -1 +1 @@ -Rustdoc settings

      Rustdoc settings

      Back
      \ No newline at end of file +Settings

      Rustdoc settings

      Back
      \ No newline at end of file diff --git a/doc/html/source-files.js b/doc/html/source-files.js deleted file mode 100644 index b373ff9c5..000000000 --- a/doc/html/source-files.js +++ /dev/null @@ -1,7 +0,0 @@ -var sourcesIndex = JSON.parse('{\ -"acceptance_tests_ghidra":["",[],["lib.rs"]],\ -"cwe_checker":["",[],["main.rs"]],\ -"cwe_checker_install":["",[],["main.rs"]],\ -"cwe_checker_lib":["",[["abstract_domain",[["bricks",[],["brick.rs","widening.rs"]],["data",[],["arithmetics.rs","conditional_specialization.rs","trait_impl.rs"]],["interval",[],["bin_ops.rs","simple_interval.rs"]]],["bitvector.rs","bricks.rs","character_inclusion.rs","data.rs","domain_map.rs","identifier.rs","interval.rs","mem_region.rs","mod.rs","strings.rs"]],["analysis",[["backward_interprocedural_fixpoint",[],["mod.rs"]],["dead_variable_elimination",[],["alive_vars_computation.rs","mod.rs"]],["expression_propagation",[],["mod.rs"]],["function_signature",[["state",[],["call_handling.rs"]]],["access_pattern.rs","context.rs","global_var_propagation.rs","mod.rs","state.rs","stubs.rs"]],["pointer_inference",[["context",[],["id_manipulation.rs","mod.rs","stubs.rs","trait_impls.rs"]],["object",[],["id_manipulation.rs","mod.rs","value_access.rs"]],["object_list",[],["id_manipulation.rs","list_manipulation.rs","mod.rs"]],["state",[],["access_handling.rs","id_manipulation.rs","mod.rs","value_specialization.rs"]]],["mod.rs","statistics.rs","vsa_result_impl.rs"]],["stack_alignment_substitution",[],["mod.rs"]],["string_abstraction",[["context",[["symbol_calls",[],["memcpy.rs","scanf.rs","sprintf.rs","strcat.rs"]]],["mod.rs","symbol_calls.rs","trait_impls.rs"]],["state",[],["mod.rs"]]],["mod.rs"]],["vsa_results",[],["mod.rs"]]],["callgraph.rs","fixpoint.rs","forward_interprocedural_fixpoint.rs","graph.rs","interprocedural_fixpoint_generic.rs","mod.rs"]],["checkers",[["cwe_119",[["context",[],["bounds_computation.rs","mod.rs","param_replacement.rs","trait_impls.rs"]]],["mod.rs","state.rs","stubs.rs"]],["cwe_416",[],["context.rs","mod.rs","state.rs"]],["cwe_476",[],["context.rs","state.rs","taint.rs"]]],["cwe_134.rs","cwe_190.rs","cwe_215.rs","cwe_243.rs","cwe_332.rs","cwe_367.rs","cwe_426.rs","cwe_467.rs","cwe_476.rs","cwe_560.rs","cwe_676.rs","cwe_78.rs","cwe_782.rs","cwe_789.rs"]],["intermediate_representation",[["expression",[],["builder.rs","trivial_operation_substitution.rs"]],["project",[],["block_duplication_normalization.rs","propagate_control_flow.rs"]],["term",[],["builder_high_lvl.rs","builder_low_lvl.rs"]]],["bitvector.rs","blk.rs","def.rs","expression.rs","jmp.rs","mod.rs","program.rs","project.rs","runtime_memory_image.rs","sub.rs","term.rs","variable.rs"]],["pcode",[["subregister_substitution",[],["mod.rs"]]],["expressions.rs","mod.rs","term.rs"]],["pipeline",[],["mod.rs","results.rs"]],["utils",[],["arguments.rs","binary.rs","ghidra.rs","graph_utils.rs","log.rs","mod.rs","symbol_utils.rs"]]],["checkers.rs","lib.rs"]]\ -}'); -createSourceSidebar(); diff --git a/doc/html/src-files.js b/doc/html/src-files.js new file mode 100644 index 000000000..30ee160be --- /dev/null +++ b/doc/html/src-files.js @@ -0,0 +1,7 @@ +var srcIndex = JSON.parse('{\ +"acceptance_tests_ghidra":["",[],["lib.rs"]],\ +"cwe_checker":["",[],["main.rs"]],\ +"cwe_checker_install":["",[],["main.rs"]],\ +"cwe_checker_lib":["",[["abstract_domain",[["bricks",[],["brick.rs","widening.rs"]],["data",[],["arithmetics.rs","conditional_specialization.rs","trait_impl.rs"]],["identifier",[],["location.rs","mem_location.rs","mod.rs"]],["interval",[],["bin_ops.rs","simple_interval.rs"]]],["bitvector.rs","bricks.rs","character_inclusion.rs","data.rs","domain_map.rs","interval.rs","mem_region.rs","mod.rs","strings.rs"]],["analysis",[["backward_interprocedural_fixpoint",[],["mod.rs"]],["dead_variable_elimination",[],["alive_vars_computation.rs","mod.rs"]],["expression_propagation",[],["mod.rs"]],["function_signature",[["context",[],["mod.rs"]],["state",[["call_handling",[],["mod.rs"]]],["memory_handling.rs","mod.rs"]]],["access_pattern.rs","global_var_propagation.rs","mod.rs","stubs.rs"]],["pointer_inference",[["context",[],["id_manipulation.rs","mod.rs","stubs.rs","trait_impls.rs"]],["object",[],["id_manipulation.rs","mod.rs","value_access.rs"]],["object_list",[],["id_manipulation.rs","list_manipulation.rs","mod.rs"]],["state",[],["access_handling.rs","id_manipulation.rs","mod.rs","value_specialization.rs"]]],["mod.rs","statistics.rs","vsa_result_impl.rs"]],["stack_alignment_substitution",[],["mod.rs"]],["string_abstraction",[["context",[["symbol_calls",[],["memcpy.rs","scanf.rs","sprintf.rs","strcat.rs"]]],["mod.rs","symbol_calls.rs","trait_impls.rs"]],["state",[],["mod.rs"]]],["mod.rs"]],["vsa_results",[],["mod.rs"]]],["callgraph.rs","fixpoint.rs","forward_interprocedural_fixpoint.rs","graph.rs","interprocedural_fixpoint_generic.rs","mod.rs"]],["checkers",[["cwe_119",[["context",[],["bounds_computation.rs","mod.rs","param_replacement.rs","trait_impls.rs"]]],["mod.rs","state.rs","stubs.rs"]],["cwe_416",[],["context.rs","mod.rs","state.rs"]],["cwe_476",[],["context.rs","state.rs","taint.rs"]]],["cwe_134.rs","cwe_190.rs","cwe_215.rs","cwe_243.rs","cwe_332.rs","cwe_337.rs","cwe_367.rs","cwe_426.rs","cwe_467.rs","cwe_476.rs","cwe_560.rs","cwe_676.rs","cwe_78.rs","cwe_782.rs","cwe_789.rs"]],["intermediate_representation",[["expression",[],["builder.rs","trivial_operation_substitution.rs"]],["project",[],["block_duplication_normalization.rs","propagate_control_flow.rs"]],["term",[],["builder_high_lvl.rs","builder_low_lvl.rs"]]],["bitvector.rs","blk.rs","def.rs","expression.rs","jmp.rs","mod.rs","program.rs","project.rs","runtime_memory_image.rs","sub.rs","term.rs","variable.rs"]],["pcode",[["subregister_substitution",[],["mod.rs"]]],["expressions.rs","mod.rs","term.rs"]],["pipeline",[],["mod.rs","results.rs"]],["utils",[],["arguments.rs","binary.rs","ghidra.rs","graph_utils.rs","log.rs","mod.rs","symbol_utils.rs"]]],["checkers.rs","lib.rs"]]\ +}'); +createSrcSidebar(); diff --git a/doc/html/src/acceptance_tests_ghidra/lib.rs.html b/doc/html/src/acceptance_tests_ghidra/lib.rs.html index bf0529fa1..d01011880 100644 --- a/doc/html/src/acceptance_tests_ghidra/lib.rs.html +++ b/doc/html/src/acceptance_tests_ghidra/lib.rs.html @@ -1,4 +1,4 @@ -lib.rs - source
      1
      +lib.rs - source
      1
       2
       3
       4
      @@ -663,6 +663,30 @@
       663
       664
       665
      +666
      +667
      +668
      +669
      +670
      +671
      +672
      +673
      +674
      +675
      +676
      +677
      +678
      +679
      +680
      +681
      +682
      +683
      +684
      +685
      +686
      +687
      +688
      +689
       
      //! This crate contains acceptance tests using Ghidra as a backend for the *cwe_checker*.
       
       use colored::*;
      @@ -1059,6 +1083,29 @@
               }
           }
       
      +    #[test]
      +    #[ignore]
      +    fn cwe_337() {
      +        let mut error_log = Vec::new();
      +        let mut tests = all_test_cases("cwe_337", "CWE337");
      +
      +        mark_architecture_skipped(&mut tests, "ppc64"); // Ghidra generates mangled function names here for some reason.
      +        mark_architecture_skipped(&mut tests, "ppc64le"); // Ghidra generates mangled function names here for some reason.
      +
      +        mark_architecture_skipped(&mut tests, "x86"); // x86 uses the stack for return values/arguments, the check is only register based.
      +
      +        for test_case in tests {
      +            let num_expected_occurences = 1;
      +            if let Err(error) = test_case.run_test("[CWE337]", num_expected_occurences) {
      +                error_log.push((test_case.get_filepath(), error));
      +            }
      +        }
      +        if !error_log.is_empty() {
      +            print_errors(error_log);
      +            panic!();
      +        }
      +    }
      +
           #[test]
           #[ignore]
           fn cwe_367() {
      @@ -1115,6 +1162,7 @@
               mark_architecture_skipped(&mut tests, "ppc64le"); // Ghidra generates mangled function names here for some reason.
       
               mark_skipped(&mut tests, "x86", "mingw32-gcc"); // TODO: Check reason for failure! Probably same as above?
      +        mark_skipped(&mut tests, "x64", "mingw32-gcc"); // We find an additional false positive in unrelated code.
       
               for test_case in tests {
                   let num_expected_occurences = 1;
      diff --git a/doc/html/src/cwe_checker/main.rs.html b/doc/html/src/cwe_checker/main.rs.html
      index 80a94abaa..ee04032aa 100644
      --- a/doc/html/src/cwe_checker/main.rs.html
      +++ b/doc/html/src/cwe_checker/main.rs.html
      @@ -1,4 +1,4 @@
      -main.rs - source
      1
      +main.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_install/main.rs.html b/doc/html/src/cwe_checker_install/main.rs.html
      index 738cf86d3..7d6c20b8a 100644
      --- a/doc/html/src/cwe_checker_install/main.rs.html
      +++ b/doc/html/src/cwe_checker_install/main.rs.html
      @@ -1,4 +1,4 @@
      -main.rs - source
      1
      +main.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/bitvector.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/bitvector.rs.html
      index 9d8c334ae..4e0580708 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/bitvector.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/bitvector.rs.html
      @@ -1,4 +1,4 @@
      -bitvector.rs - source
      1
      +bitvector.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/bricks.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/bricks.rs.html
      index b676776be..27f12f5ba 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/bricks.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/bricks.rs.html
      @@ -1,4 +1,4 @@
      -bricks.rs - source
      1
      +bricks.rs - source
      1
       2
       3
       4
      @@ -378,8 +378,6 @@
       378
       379
       380
      -381
      -382
       
      //! This module contains the BricksDomain and BrickDomain.
       //!
       //! The BricksDomain contains a sorted list of normalized BrickDomains.
      @@ -547,15 +545,13 @@
       
               for i in 0..long_list.len() {
                   if empty_bricks_added >= len_diff {
      -                new_list.push(short_list.get(0).unwrap().clone());
      +                new_list.push(short_list[0].clone());
                       short_list.remove(0);
      -            } else if short_list.is_empty()
      -                || short_list.get(0).unwrap() != long_list.get(i).unwrap()
      -            {
      +            } else if short_list.is_empty() || &short_list[0] != long_list.get(i).unwrap() {
                       new_list.push(BrickDomain::get_empty_brick_domain());
                       empty_bricks_added += 1;
                   } else {
      -                new_list.push(short_list.get(0).unwrap().clone());
      +                new_list.push(short_list[0].clone());
                       short_list.remove(0);
                   }
               }
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/bricks/brick.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/bricks/brick.rs.html
      index f4025166c..f1143f58d 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/bricks/brick.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/bricks/brick.rs.html
      @@ -1,4 +1,4 @@
      -brick.rs - source
      1
      +brick.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/bricks/widening.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/bricks/widening.rs.html
      index 7ff42de82..d0a62d40d 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/bricks/widening.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/bricks/widening.rs.html
      @@ -1,4 +1,4 @@
      -widening.rs - source
      1
      +widening.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/character_inclusion.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/character_inclusion.rs.html
      index 45cc934cf..5d6307c93 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/character_inclusion.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/character_inclusion.rs.html
      @@ -1,4 +1,4 @@
      -character_inclusion.rs - source
      1
      +character_inclusion.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/data.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/data.rs.html
      index ccab8ca1b..26df1b1d2 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/data.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/data.rs.html
      @@ -1,4 +1,4 @@
      -data.rs - source
      1
      +data.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/data/arithmetics.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/data/arithmetics.rs.html
      index bd569ab8b..c2f5af2e7 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/data/arithmetics.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/data/arithmetics.rs.html
      @@ -1,4 +1,4 @@
      -arithmetics.rs - source
      1
      +arithmetics.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/data/conditional_specialization.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/data/conditional_specialization.rs.html
      index 07d00d4db..a92f1be02 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/data/conditional_specialization.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/data/conditional_specialization.rs.html
      @@ -1,4 +1,4 @@
      -conditional_specialization.rs - source
      1
      +conditional_specialization.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/data/trait_impl.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/data/trait_impl.rs.html
      index 9b87635fb..8de643d30 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/data/trait_impl.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/data/trait_impl.rs.html
      @@ -1,4 +1,4 @@
      -trait_impl.rs - source
      1
      +trait_impl.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/domain_map.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/domain_map.rs.html
      index 4b2f96678..c60a51e15 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/domain_map.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/domain_map.rs.html
      @@ -1,4 +1,4 @@
      -domain_map.rs - source
      1
      +domain_map.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/identifier/location.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/identifier/location.rs.html
      new file mode 100644
      index 000000000..80029d597
      --- /dev/null
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/identifier/location.rs.html
      @@ -0,0 +1,665 @@
      +location.rs - source
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +63
      +64
      +65
      +66
      +67
      +68
      +69
      +70
      +71
      +72
      +73
      +74
      +75
      +76
      +77
      +78
      +79
      +80
      +81
      +82
      +83
      +84
      +85
      +86
      +87
      +88
      +89
      +90
      +91
      +92
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
      +205
      +206
      +207
      +208
      +209
      +210
      +211
      +212
      +213
      +214
      +215
      +216
      +217
      +218
      +219
      +220
      +221
      +222
      +223
      +224
      +225
      +226
      +227
      +228
      +229
      +230
      +231
      +232
      +233
      +234
      +235
      +236
      +237
      +238
      +239
      +240
      +241
      +242
      +243
      +244
      +245
      +246
      +247
      +248
      +249
      +250
      +251
      +252
      +253
      +254
      +255
      +256
      +257
      +258
      +259
      +260
      +261
      +262
      +263
      +264
      +265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +289
      +290
      +291
      +292
      +293
      +294
      +295
      +296
      +297
      +298
      +299
      +300
      +301
      +302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +
      use super::AbstractMemoryLocation;
      +use crate::intermediate_representation::*;
      +use crate::prelude::*;
      +
      +/// An abstract location describes how to find the value of a variable in memory at a given time.
      +///
      +/// It is defined recursively, where the root is either a register or a (constant) global address.
      +/// This way only locations that the local state knows about are representable.
      +/// It is also impossible to accidentally describe circular references.
      +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
      +pub enum AbstractLocation {
      +    /// The location is given by a register.
      +    Register(Variable),
      +    /// The value itself is a constant address to global memory.
      +    /// Note that the `size` is the size of the pointer and not the size
      +    /// of the value residing at the specific address in global memory.
      +    GlobalAddress {
      +        /// The address in global memory.
      +        address: u64,
      +        /// The byte size of the address (not the pointed-to value!).
      +        size: ByteSize,
      +    },
      +    /// The location is in memory.
      +    /// One needs to follow the pointer in the given register
      +    /// and then follow the abstract memory location inside the pointed to memory object
      +    /// to find the actual memory location.
      +    Pointer(Variable, AbstractMemoryLocation),
      +    /// The location is in memory.
      +    /// One needs to follow the pointer located at the given global address
      +    /// and then follow the abstract memory location inside the pointed to memory object
      +    /// to find the actual memory location.
      +    GlobalPointer(u64, AbstractMemoryLocation),
      +}
      +
      +impl std::fmt::Display for AbstractLocation {
      +    fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
      +        match self {
      +            Self::Register(var) => write!(formatter, "{}", var.name)?,
      +            Self::GlobalAddress { address, size: _ } => write!(formatter, "0x{address:x}")?,
      +            Self::Pointer(var, location) => write!(formatter, "{}{}", var.name, location)?,
      +            Self::GlobalPointer(address, location) => write!(formatter, "0x{address:x}{location}")?,
      +        };
      +        write!(formatter, ":i{}", self.bytesize().as_bit_length())
      +    }
      +}
      +
      +impl AbstractLocation {
      +    /// Create an abstract location from a variable corresponding to a register.
      +    /// This function returns an error if the variable is not a physical register.
      +    pub fn from_var(variable: &Variable) -> Result<AbstractLocation, Error> {
      +        if variable.is_temp {
      +            return Err(anyhow!(
      +                "Cannot create abstract location from temporary variables."
      +            ));
      +        }
      +        Ok(AbstractLocation::Register(variable.clone()))
      +    }
      +
      +    /// Create an abstract location on the stack.
      +    /// The returned location describes the value of the given `size`
      +    /// at the given `offset` relative to the memory location that the `stack_register` is pointing to.
      +    pub fn from_stack_position(
      +        stack_register: &Variable,
      +        offset: i64,
      +        size: ByteSize,
      +    ) -> AbstractLocation {
      +        let stack_pos = AbstractMemoryLocation::Location { offset, size };
      +        AbstractLocation::Pointer(stack_register.clone(), stack_pos)
      +    }
      +
      +    /// Create an abstract location representing an address pointing to global memory.
      +    pub fn from_global_address(address: &Bitvector) -> AbstractLocation {
      +        let size = address.bytesize();
      +        let address = address
      +            .try_to_u64()
      +            .expect("Global address larger than 64 bits encountered.");
      +        AbstractLocation::GlobalAddress { address, size }
      +    }
      +
      +    /// Add an offset to the abstract location.
      +    pub fn with_offset_addendum(self, addendum: i64) -> AbstractLocation {
      +        match self {
      +            Self::Register(_) => panic!("Cannot add an offset to a register abstract location"),
      +            Self::GlobalAddress { address, size } => Self::GlobalAddress {
      +                address: address + (addendum as u64),
      +                size,
      +            },
      +            Self::Pointer(var, mut location) => {
      +                location.add_offset(addendum);
      +                Self::Pointer(var, location)
      +            }
      +            Self::GlobalPointer(address, mut location) => {
      +                location.add_offset(addendum);
      +                Self::GlobalPointer(address, location)
      +            }
      +        }
      +    }
      +
      +    /// Return the abstract location that one gets when dereferencing the pointer that `self` is pointing to.
      +    ///
      +    /// Panics if `self` is not pointer-sized.
      +    pub fn dereferenced(
      +        self,
      +        new_size: ByteSize,
      +        generic_pointer_size: ByteSize,
      +    ) -> AbstractLocation {
      +        match self {
      +            Self::Register(var) => Self::Pointer(
      +                var,
      +                AbstractMemoryLocation::Location {
      +                    offset: 0,
      +                    size: new_size,
      +                },
      +            ),
      +            Self::GlobalAddress { address, size } => {
      +                assert_eq!(
      +                    size, generic_pointer_size,
      +                    "Cannot dereference an abstract memory location that is not pointer-sized."
      +                );
      +                Self::GlobalPointer(
      +                    address,
      +                    AbstractMemoryLocation::Location {
      +                        offset: 0,
      +                        size: new_size,
      +                    },
      +                )
      +            }
      +            Self::GlobalPointer(address, mut location) => {
      +                location.dereference(new_size, generic_pointer_size);
      +                Self::GlobalPointer(address, location)
      +            }
      +            Self::Pointer(var, mut location) => {
      +                location.dereference(new_size, generic_pointer_size);
      +                Self::Pointer(var.clone(), location)
      +            }
      +        }
      +    }
      +
      +    /// Get the bytesize of the value represented by the abstract location.
      +    pub fn bytesize(&self) -> ByteSize {
      +        match self {
      +            Self::Register(var) => var.size,
      +            Self::GlobalAddress { size, .. } => *size,
      +            Self::Pointer(_, mem_location) | Self::GlobalPointer(_, mem_location) => {
      +                mem_location.bytesize()
      +            }
      +        }
      +    }
      +
      +    /// Get the recursion depth of the abstract location,
      +    /// i.e. how many times one has to dereference a pointer until reaching the actual location.
      +    pub fn recursion_depth(&self) -> u64 {
      +        match self {
      +            Self::Register(_) => 0,
      +            Self::GlobalAddress { .. } => 1,
      +            Self::Pointer(_, mem_location) | Self::GlobalPointer(_, mem_location) => {
      +                1 + mem_location.recursion_depth()
      +            }
      +        }
      +    }
      +
      +    /// Extend the location string by adding further derefence operations to it according to the given extension.
      +    pub fn extend(&mut self, extension: AbstractMemoryLocation, generic_pointer_size: ByteSize) {
      +        match self {
      +            Self::Pointer(_, location) | Self::GlobalPointer(_, location) => {
      +                location.extend(extension, generic_pointer_size);
      +            }
      +            Self::GlobalAddress { address, size } => {
      +                assert_eq!(*size, generic_pointer_size);
      +                *self = Self::GlobalPointer(*address, extension);
      +            }
      +            Self::Register(var) => {
      +                assert_eq!(var.size, generic_pointer_size);
      +                *self = Self::Pointer(var.clone(), extension);
      +            }
      +        }
      +    }
      +
      +    /// Get the abstract location representing the pointer pointing to the memory object
      +    /// that contains the location represented by `self`
      +    /// together with the offset that one has to add to the pointer to get the location of self.
      +    ///
      +    /// Returns an error if the abstract location contains no dereference operation
      +    /// (e.g. if `self` represents a register value).
      +    pub fn get_parent_location(
      +        &self,
      +        generic_pointer_size: ByteSize,
      +    ) -> Result<(AbstractLocation, i64), Error> {
      +        match self {
      +            AbstractLocation::GlobalAddress { .. } | AbstractLocation::Register(_) => {
      +                Err(anyhow!("Root location without a parent."))
      +            }
      +            AbstractLocation::GlobalPointer(address, location) => {
      +                match location.get_parent_location(generic_pointer_size) {
      +                    Ok((inner_parent_location, innermost_offset)) => Ok((
      +                        Self::GlobalPointer(*address, inner_parent_location),
      +                        innermost_offset,
      +                    )),
      +                    Err(innermost_offset) => Ok((
      +                        Self::GlobalAddress {
      +                            address: *address,
      +                            size: generic_pointer_size,
      +                        },
      +                        innermost_offset,
      +                    )),
      +                }
      +            }
      +            AbstractLocation::Pointer(var, location) => {
      +                match location.get_parent_location(generic_pointer_size) {
      +                    Ok((inner_parent_location, innermost_offset)) => Ok((
      +                        Self::Pointer(var.clone(), inner_parent_location),
      +                        innermost_offset,
      +                    )),
      +                    Err(innermost_offset) => Ok((Self::Register(var.clone()), innermost_offset)),
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Get a list of all (recursive) parent locations.
      +    /// The list is sorted by recursion depth, starting with the root location.
      +    pub fn get_all_parent_locations(
      +        &self,
      +        generic_pointer_size: ByteSize,
      +    ) -> Vec<AbstractLocation> {
      +        match self {
      +            AbstractLocation::GlobalAddress { .. } | AbstractLocation::Register(_) => Vec::new(),
      +            AbstractLocation::GlobalPointer(_, _) | AbstractLocation::Pointer(_, _) => {
      +                let (parent, _) = self.get_parent_location(generic_pointer_size).unwrap();
      +                let mut all_parents = parent.get_all_parent_locations(generic_pointer_size);
      +                all_parents.push(parent);
      +                all_parents
      +            }
      +        }
      +    }
      +}
      +
      +#[cfg(test)]
      +pub mod tests {
      +    use super::*;
      +    use crate::variable;
      +
      +    impl AbstractLocation {
      +        /// Mock an abstract location with a variable as root.
      +        pub fn mock(
      +            root_var: &str,
      +            offsets: &[i64],
      +            size: impl Into<ByteSize>,
      +        ) -> AbstractLocation {
      +            let var = variable!(root_var);
      +            match offsets {
      +                [] => {
      +                    assert_eq!(var.size, size.into());
      +                    AbstractLocation::Register(var)
      +                }
      +                _ => AbstractLocation::Pointer(var, AbstractMemoryLocation::mock(offsets, size)),
      +            }
      +        }
      +        /// Mock an abstract location with a global address as root.
      +        pub fn mock_global(
      +            root_address: u64,
      +            offsets: &[i64],
      +            size: impl Into<ByteSize>,
      +        ) -> AbstractLocation {
      +            match offsets {
      +                [] => AbstractLocation::GlobalAddress {
      +                    address: root_address,
      +                    size: size.into(),
      +                },
      +                _ => AbstractLocation::GlobalPointer(
      +                    root_address,
      +                    AbstractMemoryLocation::mock(offsets, size),
      +                ),
      +            }
      +        }
      +    }
      +
      +    #[test]
      +    fn test_from_variants() {
      +        let loc = AbstractLocation::from_var(&variable!("RAX:8")).unwrap();
      +        assert_eq!(&format!("{loc}"), "RAX:i64");
      +        let loc = AbstractLocation::from_global_address(&Bitvector::from_u64(32));
      +        assert_eq!(
      +            loc,
      +            AbstractLocation::GlobalAddress {
      +                address: 32,
      +                size: ByteSize::new(8)
      +            }
      +        );
      +        let loc = AbstractLocation::from_stack_position(&variable!("RSP:8"), 16, ByteSize::new(8));
      +        assert_eq!(loc, AbstractLocation::mock("RSP:8", &[16], 8));
      +    }
      +
      +    #[test]
      +    fn test_with_offset_addendum() {
      +        let loc = AbstractLocation::mock("RAX:8", &[1, 2, 3], 4).with_offset_addendum(12);
      +        assert_eq!(loc, AbstractLocation::mock("RAX:8", &[1, 2, 15], 4));
      +    }
      +
      +    #[test]
      +    fn test_dereferenced() {
      +        let loc = AbstractLocation::mock("RAX:8", &[], 8)
      +            .dereferenced(ByteSize::new(4), ByteSize::new(8));
      +        assert_eq!(loc, AbstractLocation::mock("RAX:8", &[0], 4));
      +    }
      +
      +    #[test]
      +    fn test_recursion_depth() {
      +        let loc = AbstractLocation::mock("RAX:8", &[1, 2, 3], 4);
      +        assert_eq!(loc.recursion_depth(), 3);
      +    }
      +
      +    #[test]
      +    fn test_extend() {
      +        let mut loc = AbstractLocation::mock("RAX:8", &[1, 2, 3], 4);
      +        let extension = AbstractMemoryLocation::mock(&[4, 5, 6], 1);
      +        loc.extend(extension, ByteSize::new(4));
      +        assert_eq!(loc, AbstractLocation::mock("RAX:8", &[1, 2, 3, 4, 5, 6], 1));
      +    }
      +
      +    #[test]
      +    fn test_get_parent_location() {
      +        let loc = AbstractLocation::mock("RAX:8", &[1], 4);
      +        let (parent, last_offset) = loc.get_parent_location(ByteSize::new(8)).unwrap();
      +        assert_eq!(parent, AbstractLocation::mock("RAX:8", &[], 8));
      +        assert_eq!(last_offset, 1);
      +        let loc = AbstractLocation::mock("RAX:8", &[1, 2, 3], 4);
      +        let (parent, last_offset) = loc.get_parent_location(ByteSize::new(8)).unwrap();
      +        assert_eq!(parent, AbstractLocation::mock("RAX:8", &[1, 2], 8));
      +        assert_eq!(last_offset, 3);
      +    }
      +}
      +
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/identifier/mem_location.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/identifier/mem_location.rs.html new file mode 100644 index 000000000..23860638f --- /dev/null +++ b/doc/html/src/cwe_checker_lib/abstract_domain/identifier/mem_location.rs.html @@ -0,0 +1,413 @@ +mem_location.rs - source
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +63
      +64
      +65
      +66
      +67
      +68
      +69
      +70
      +71
      +72
      +73
      +74
      +75
      +76
      +77
      +78
      +79
      +80
      +81
      +82
      +83
      +84
      +85
      +86
      +87
      +88
      +89
      +90
      +91
      +92
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
      +205
      +206
      +
      use crate::prelude::*;
      +
      +/// An abstract memory location is either an offset from the given location, where the actual value can be found,
      +/// or an offset to a pointer to another memory location,
      +/// where the value can be found by (recursively) following the embedded `target` memory location.
      +///
      +/// The offset and size variables are given in bytes.
      +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
      +pub enum AbstractMemoryLocation {
      +    /// A location inside the current memory object.
      +    Location {
      +        /// The offset with respect to the zero offset of the memory object where the value can be found.
      +        offset: i64,
      +        /// The size in bytes of the value that the memory location points to.
      +        size: ByteSize,
      +    },
      +    /// A pointer which needs to be followed to get to the actual memory location
      +    Pointer {
      +        /// The offset inside the current memory object where the pointer can be found.
      +        offset: i64,
      +        /// The memory location inside the target of the pointer that this memory location points to.
      +        target: Box<AbstractMemoryLocation>,
      +    },
      +}
      +
      +impl AbstractMemoryLocation {
      +    /// Get the abstract memory location representing the pointer pointing to the memory object
      +    /// that contains the location represented by `self`
      +    /// together with the offset that one has to add to the pointer to get the location of self.
      +    ///
      +    /// If `self` is a location (and not a pointer), return the offset in the location instead.
      +    pub fn get_parent_location(
      +        &self,
      +        generic_pointer_size: ByteSize,
      +    ) -> Result<(AbstractMemoryLocation, i64), i64> {
      +        match self {
      +            Self::Location { offset, .. } => Err(*offset),
      +            Self::Pointer { offset, target } => {
      +                match target.get_parent_location(generic_pointer_size) {
      +                    Ok((inner_parent, innermost_offset)) => Ok((
      +                        Self::Pointer {
      +                            offset: *offset,
      +                            target: Box::new(inner_parent),
      +                        },
      +                        innermost_offset,
      +                    )),
      +                    Err(inner_offset) => Ok((
      +                        Self::Location {
      +                            offset: *offset,
      +                            size: generic_pointer_size,
      +                        },
      +                        inner_offset,
      +                    )),
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Add an offset to a memory location.
      +    pub fn add_offset(&mut self, addendum: i64) {
      +        match self {
      +            Self::Location { offset, .. } => *offset += addendum,
      +            Self::Pointer { target, .. } => target.add_offset(addendum),
      +        }
      +    }
      +
      +    /// Add an offset to the root location of the memory location.
      +    pub fn add_offset_at_root(&mut self, addendum: i64) {
      +        match self {
      +            Self::Location { offset, .. } | Self::Pointer { offset, .. } => *offset += addendum,
      +        }
      +    }
      +
      +    /// Dereference the pointer that `self` is pointing to.
      +    ///
      +    /// Panics if the old value of `self` is not pointer-sized.
      +    pub fn dereference(&mut self, new_size: ByteSize, generic_pointer_size: ByteSize) {
      +        match self {
      +            Self::Pointer { target, .. } => target.dereference(new_size, generic_pointer_size),
      +            Self::Location { offset, size } => {
      +                assert_eq!(
      +                    *size, generic_pointer_size,
      +                    "Cannot dereference an abstract memory location that is not pointer-sized."
      +                );
      +                *self = Self::Pointer {
      +                    offset: *offset,
      +                    target: Box::new(Self::Location {
      +                        offset: 0,
      +                        size: new_size,
      +                    }),
      +                }
      +            }
      +        };
      +    }
      +
      +    /// Extend the location string by adding further derefence operations to it according to the given extension.
      +    pub fn extend(&mut self, extension: AbstractMemoryLocation, generic_pointer_size: ByteSize) {
      +        match self {
      +            Self::Location { offset, size } => {
      +                assert_eq!(*size, generic_pointer_size);
      +                *self = Self::Pointer {
      +                    offset: *offset,
      +                    target: Box::new(extension),
      +                };
      +            }
      +            Self::Pointer { target, .. } => target.extend(extension, generic_pointer_size),
      +        }
      +    }
      +
      +    /// Get the bytesize of the value represented by the abstract memory location.
      +    pub fn bytesize(&self) -> ByteSize {
      +        match self {
      +            Self::Location { size, .. } => *size,
      +            Self::Pointer { target, .. } => target.bytesize(),
      +        }
      +    }
      +
      +    /// Get the recursion depth of the abstract memory location,
      +    /// i.e. how many times one has to dereference a pointer until reaching the actual location.
      +    pub fn recursion_depth(&self) -> u64 {
      +        match self {
      +            Self::Location { .. } => 0,
      +            Self::Pointer { target, .. } => 1 + target.recursion_depth(),
      +        }
      +    }
      +}
      +
      +impl std::fmt::Display for AbstractMemoryLocation {
      +    fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
      +        match self {
      +            Self::Location { offset, .. } => write!(formatter, "[0x{offset:x}]"),
      +            Self::Pointer { offset, target } => write!(formatter, "[0x{offset:x}]{target}"),
      +        }
      +    }
      +}
      +
      +#[cfg(test)]
      +pub mod tests {
      +    use super::*;
      +
      +    impl AbstractMemoryLocation {
      +        /// Mock a memory location with a given sequence of offsets.
      +        /// The first element in the sequence is the root offset.
      +        pub fn mock(offsets: &[i64], size: impl Into<ByteSize>) -> AbstractMemoryLocation {
      +            match offsets {
      +                [] => panic!(),
      +                [offset] => AbstractMemoryLocation::Location {
      +                    offset: *offset,
      +                    size: size.into(),
      +                },
      +                [offset, tail @ ..] => AbstractMemoryLocation::Pointer {
      +                    offset: *offset,
      +                    target: Box::new(AbstractMemoryLocation::mock(tail, size)),
      +                },
      +            }
      +        }
      +    }
      +
      +    #[test]
      +    fn test_mock() {
      +        let loc = AbstractMemoryLocation::mock(&[1, 2, 3], 4);
      +        assert_eq!(&format!("{loc}"), "[0x1][0x2][0x3]");
      +    }
      +
      +    #[test]
      +    fn test_get_parent_location() {
      +        let loc = AbstractMemoryLocation::mock(&[1, 2, 3], 4);
      +        let (parent_loc, last_offset) = loc.get_parent_location(ByteSize::new(8)).unwrap();
      +        assert_eq!(parent_loc, AbstractMemoryLocation::mock(&[1, 2], 8));
      +        assert_eq!(last_offset, 3);
      +        let loc = AbstractMemoryLocation::mock(&[1], 4);
      +        assert!(loc.get_parent_location(ByteSize::new(8)).is_err());
      +    }
      +
      +    #[test]
      +    fn test_offset_addendums() {
      +        let mut loc = AbstractMemoryLocation::mock(&[1, 2, 3], 4);
      +        loc.add_offset(6);
      +        assert_eq!(&loc, &AbstractMemoryLocation::mock(&[1, 2, 9], 4));
      +        loc.add_offset_at_root(-5);
      +        assert_eq!(&loc, &AbstractMemoryLocation::mock(&[-4, 2, 9], 4));
      +    }
      +
      +    #[test]
      +    fn test_dereference() {
      +        let mut loc = AbstractMemoryLocation::mock(&[1, 2, 3], 4);
      +        loc.dereference(ByteSize::new(8), ByteSize::new(4));
      +        assert_eq!(loc, AbstractMemoryLocation::mock(&[1, 2, 3, 0], 8))
      +    }
      +
      +    #[test]
      +    fn test_extend() {
      +        let mut loc = AbstractMemoryLocation::mock(&[1, 2, 3], 4);
      +        let extension = AbstractMemoryLocation::mock(&[4, 5, 6], 1);
      +        loc.extend(extension, ByteSize::new(4));
      +        assert_eq!(loc, AbstractMemoryLocation::mock(&[1, 2, 3, 4, 5, 6], 1));
      +    }
      +
      +    #[test]
      +    fn test_recursion_depth() {
      +        let loc = AbstractMemoryLocation::mock(&[1, 2, 3], 4);
      +        assert_eq!(loc.recursion_depth(), 2);
      +        let loc = AbstractMemoryLocation::mock(&[1], 4);
      +        assert_eq!(loc.recursion_depth(), 0);
      +    }
      +}
      +
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/identifier.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/identifier/mod.rs.html similarity index 59% rename from doc/html/src/cwe_checker_lib/abstract_domain/identifier.rs.html rename to doc/html/src/cwe_checker_lib/abstract_domain/identifier/mod.rs.html index 68295ddd1..0541c9315 100644 --- a/doc/html/src/cwe_checker_lib/abstract_domain/identifier.rs.html +++ b/doc/html/src/cwe_checker_lib/abstract_domain/identifier/mod.rs.html @@ -1,4 +1,4 @@ -identifier.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -250,109 +250,23 @@
       250
       251
       252
      -253
      -254
      -255
      -256
      -257
      -258
      -259
      -260
      -261
      -262
      -263
      -264
      -265
      -266
      -267
      -268
      -269
      -270
      -271
      -272
      -273
      -274
      -275
      -276
      -277
      -278
      -279
      -280
      -281
      -282
      -283
      -284
      -285
      -286
      -287
      -288
      -289
      -290
      -291
      -292
      -293
      -294
      -295
      -296
      -297
      -298
      -299
      -300
      -301
      -302
      -303
      -304
      -305
      -306
      -307
      -308
      -309
      -310
      -311
      -312
      -313
      -314
      -315
      -316
      -317
      -318
      -319
      -320
      -321
      -322
      -323
      -324
      -325
      -326
      -327
      -328
      -329
      -330
      -331
      -332
      -333
      -334
      -335
      -336
      -337
      -338
      -339
      -340
      -341
      -342
      -343
      -344
       
      use crate::intermediate_representation::*;
       use crate::prelude::*;
       use derive_more::Deref;
      +use std::ops::Deref;
       use std::sync::Arc;
       
      +mod location;
      +pub use location::AbstractLocation;
      +mod mem_location;
      +pub use mem_location::AbstractMemoryLocation;
      +
       /// An abstract identifier is used to identify an object or a value in an abstract state.
       ///
       /// Since many program states can be represented by the same abstract state in data-flow analysis,
       /// one sometimes needs a way to uniquely identify a variable or a memory object in all of the represented program states.
       /// Abstract identifiers achieve this by identifying a *time*, i.e. a specific abstract state,
      -/// and a *location*, i.e. a recipe for abstracting a concrete value from any concrete state that is represented by the abstract state.
      +/// and a *location*, i.e. a recipe for computing a concrete value from any concrete state that is represented by the abstract state.
       /// The value in question then serves as the identifier.
       /// For example, a pointer may uniquely determine the memory object it is pointing to.
       /// Or a value may represent the value of a variable at a certain time,
      @@ -364,15 +278,15 @@
       /// E.g. it may represent the union of all values at the specific *location* for each time the program point is visited during an execution trace
       /// or it may only represent the value at the last time the program point was visited.
       ///
      -/// Alternatively one can also add path hints to an identifier to further distinguish points in time in an execution trace.
      +/// Alternatively, one can also add path hints to an identifier to further distinguish points in time in an execution trace.
       /// Path hints are given as a possibly empty array of time identifiers.
       /// To prevent infinitely long path hints, each time identifier is only allowed to appear at most once in the array.
       /// The specific meaning of the path hints depends upon the use case.
       ///
       /// An abstract identifier is given by a time identifier, a location identifier and a path hints array (containing time identifiers).
       ///
      -/// For the location identifier see `AbstractLocation`.
      -/// The time identifier is given by a `Tid`.
      +/// For the location identifier see [`AbstractLocation`].
      +/// The time identifier is given by a [`Tid`].
       /// If it is the `Tid` of a basic block, then it describes the point in time *before* execution of the first instruction in the block.
       /// If it is the `Tid` of a `Def` or `Jmp`, then it describes the point in time *after* the execution of the `Def` or `Jmp`.
       #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone, PartialOrd, Ord, Deref)]
      @@ -489,6 +403,24 @@
           pub fn bytesize(&self) -> ByteSize {
               self.location.bytesize()
           }
      +
      +    /// If the abstract location of `self` has a parent location
      +    /// then return the ID one gets when replacing the abstract location in `self` with its parent location.
      +    pub fn get_id_with_parent_location(
      +        &self,
      +        generic_pointer_size: ByteSize,
      +    ) -> Option<AbstractIdentifier> {
      +        if let Ok((parent_location, _)) = self.location.get_parent_location(generic_pointer_size) {
      +            let id_data = AbstractIdentifierData {
      +                time: self.deref().time.clone(),
      +                location: parent_location,
      +                path_hints: self.deref().path_hints.clone(),
      +            };
      +            Some(AbstractIdentifier(Arc::new(id_data)))
      +        } else {
      +            None
      +        }
      +    }
       }
       
       impl std::fmt::Display for AbstractIdentifier {
      @@ -505,136 +437,6 @@
           }
       }
       
      -/// An abstract location describes how to find the value of a variable in memory at a given time.
      -///
      -/// It is defined recursively, where the root is always a register.
      -/// This way only locations that the local state knows about are representable.
      -/// It is also impossible to accidentally describe circular references.
      -#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
      -pub enum AbstractLocation {
      -    /// The location is given by a register.
      -    Register(Variable),
      -    /// The value itself is a constant address to global memory.
      -    /// Note that the `size` is the size of the pointer and not the size
      -    /// of the value residing at the specific address in global memory.
      -    GlobalAddress {
      -        /// The address in global memory.
      -        address: u64,
      -        /// The byte size of the address (not the pointed-to value!).
      -        size: ByteSize,
      -    },
      -    /// The location is in memory.
      -    /// One needs to follow the pointer in the given register
      -    /// and then follow the abstract memory location inside the pointed to memory object
      -    /// to find the actual memory location.
      -    Pointer(Variable, AbstractMemoryLocation),
      -    /// The location is in memory.
      -    /// One needs to follow the pointer located at the given global address
      -    /// and then follow the abstract memory location inside the pointed to memory object
      -    /// to find the actual memory location.
      -    GlobalPointer(u64, AbstractMemoryLocation),
      -}
      -
      -impl std::fmt::Display for AbstractLocation {
      -    fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
      -        match self {
      -            Self::Register(var) => write!(formatter, "{}", var.name),
      -            Self::GlobalAddress { address, size: _ } => write!(formatter, "0x{address:x}"),
      -            Self::Pointer(var, location) => write!(formatter, "{}->{}", var.name, location),
      -            Self::GlobalPointer(address, location) => {
      -                write!(formatter, "0x{address:x}->{location}")
      -            }
      -        }
      -    }
      -}
      -
      -impl AbstractLocation {
      -    /// Create an abstract location from a variable corresponding to a register.
      -    /// This function returns an error if the variable is not a physical register.
      -    pub fn from_var(variable: &Variable) -> Result<AbstractLocation, Error> {
      -        if variable.is_temp {
      -            return Err(anyhow!(
      -                "Cannot create abstract location from temporary variables."
      -            ));
      -        }
      -        Ok(AbstractLocation::Register(variable.clone()))
      -    }
      -
      -    /// Create an abstract location on the stack.
      -    /// The returned location describes the value of the given `size`
      -    /// at the given `offset` relative to the memory location that the `stack_register` is pointing to.
      -    pub fn from_stack_position(
      -        stack_register: &Variable,
      -        offset: i64,
      -        size: ByteSize,
      -    ) -> AbstractLocation {
      -        let stack_pos = AbstractMemoryLocation::Location { offset, size };
      -        AbstractLocation::Pointer(stack_register.clone(), stack_pos)
      -    }
      -
      -    /// Create an abstract location representing an address pointing to global memory.
      -    pub fn from_global_address(address: &Bitvector) -> AbstractLocation {
      -        let size = address.bytesize();
      -        let address = address
      -            .try_to_u64()
      -            .expect("Global address larger than 64 bits encountered.");
      -        AbstractLocation::GlobalAddress { address, size }
      -    }
      -
      -    /// Get the bytesize of the value represented by the abstract location.
      -    pub fn bytesize(&self) -> ByteSize {
      -        match self {
      -            Self::Register(var) => var.size,
      -            Self::GlobalAddress { size, .. } => *size,
      -            Self::Pointer(_, mem_location) | Self::GlobalPointer(_, mem_location) => {
      -                mem_location.bytesize()
      -            }
      -        }
      -    }
      -}
      -
      -/// An abstract memory location is either an offset from the given location, where the actual value can be found,
      -/// or an offset to a pointer to another memory location,
      -/// where the value can be found by (recursively) following the embedded `target` memory location.
      -///
      -/// The offset and size variables are given in bytes.
      -#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
      -pub enum AbstractMemoryLocation {
      -    /// A location inside the current memory object.
      -    Location {
      -        /// The offset with respect to the zero offset of the memory object where the value can be found.
      -        offset: i64,
      -        /// The size in bytes of the value that the memory location points to.
      -        size: ByteSize,
      -    },
      -    /// A pointer which needs to be followed to get to the actual memory location
      -    Pointer {
      -        /// The offset inside the current memory object where the pointer can be found.
      -        offset: i64,
      -        /// The memory location inside the target of the pointer that this memory location points to.
      -        target: Box<AbstractMemoryLocation>,
      -    },
      -}
      -
      -impl AbstractMemoryLocation {
      -    /// Get the bytesize of the value represented by the abstract memory location.
      -    pub fn bytesize(&self) -> ByteSize {
      -        match self {
      -            Self::Location { size, .. } => *size,
      -            Self::Pointer { target, .. } => target.bytesize(),
      -        }
      -    }
      -}
      -
      -impl std::fmt::Display for AbstractMemoryLocation {
      -    fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
      -        match self {
      -            Self::Location { offset, .. } => write!(formatter, "({offset})"),
      -            Self::Pointer { offset, target } => write!(formatter, "({offset})->{target}"),
      -        }
      -    }
      -}
      -
       #[cfg(test)]
       pub mod tests {
           use super::*;
      @@ -657,6 +459,20 @@
                       .unwrap(),
                   )
               }
      +
      +        /// Mock an abstract identifier with the given TID name
      +        /// and with a nested abstract location starting at the register given by `var`.
      +        pub fn mock_nested(
      +            tid: impl ToString,
      +            var: &str,
      +            offsets: &[i64],
      +            size: impl Into<ByteSize>,
      +        ) -> Self {
      +            AbstractIdentifier::new(
      +                Tid::new(tid.to_string()),
      +                AbstractLocation::mock(var, offsets, size),
      +            )
      +        }
           }
       
           #[test]
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/interval.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/interval.rs.html
      index 934d1b529..5a713c241 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/interval.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/interval.rs.html
      @@ -1,4 +1,4 @@
      -interval.rs - source
      1
      +interval.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/interval/bin_ops.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/interval/bin_ops.rs.html
      index 8c1f453cf..2c0c5ca82 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/interval/bin_ops.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/interval/bin_ops.rs.html
      @@ -1,4 +1,4 @@
      -bin_ops.rs - source
      1
      +bin_ops.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/interval/simple_interval.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/interval/simple_interval.rs.html
      index eb7fa360a..8c3378d82 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/interval/simple_interval.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/interval/simple_interval.rs.html
      @@ -1,4 +1,4 @@
      -simple_interval.rs - source
      1
      +simple_interval.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/mem_region.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/mem_region.rs.html
      index f5bdfd0af..b086d165d 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/mem_region.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/mem_region.rs.html
      @@ -1,4 +1,4 @@
      -mem_region.rs - source
      1
      +mem_region.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/mod.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/mod.rs.html
      index 09eb80f9a..b910c3c86 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/abstract_domain/strings.rs.html b/doc/html/src/cwe_checker_lib/abstract_domain/strings.rs.html
      index e7469a695..489df4e8c 100644
      --- a/doc/html/src/cwe_checker_lib/abstract_domain/strings.rs.html
      +++ b/doc/html/src/cwe_checker_lib/abstract_domain/strings.rs.html
      @@ -1,4 +1,4 @@
      -strings.rs - source
      1
      +strings.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/mod.rs.html
      index 9112c3095..bc8afcaca 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/backward_interprocedural_fixpoint/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/callgraph.rs.html b/doc/html/src/cwe_checker_lib/analysis/callgraph.rs.html
      index 0e994f51a..6422d73f9 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/callgraph.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/callgraph.rs.html
      @@ -1,4 +1,4 @@
      -callgraph.rs - source
      1
      +callgraph.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/alive_vars_computation.rs.html b/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/alive_vars_computation.rs.html
      index 6fda9d7ca..4b458bce6 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/alive_vars_computation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/alive_vars_computation.rs.html
      @@ -1,4 +1,4 @@
      -alive_vars_computation.rs - source
      1
      +alive_vars_computation.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/mod.rs.html
      index 83812b238..c4dade34d 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/dead_variable_elimination/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/expression_propagation/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/expression_propagation/mod.rs.html
      index 07cb8fc9a..6f7dfa20a 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/expression_propagation/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/expression_propagation/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -346,6 +346,16 @@
       346
       347
       348
      +349
      +350
      +351
      +352
      +353
      +354
      +355
      +356
      +357
      +358
       
      //! This module contains a fixpoint computation for intra-procedual expression propagation
       //! and contains a function for inserting such expressions.
       
      @@ -581,10 +591,20 @@
                       var,
                       value: expression,
                   } => {
      -                // insert known input expressions
      -                for (input_var, input_expr) in insertable_expressions.iter() {
      -                    expression.substitute_input_var(input_var, input_expr);
      +                // Extend the considered expression with already known expressions.
      +                let mut extended_expression = expression.clone();
      +                for input_var in expression.input_vars().into_iter() {
      +                    if let Some(expr) = insertable_expressions.get(input_var) {
      +                        // We limit the complexity of expressions to insert.
      +                        // This prevents extremely large expressions that can lead to extremely high RAM usage.
      +                        // FIXME: Right now this limit is quite arbitrary. Maybe there is a better way to achieve the same result?
      +                        if expr.recursion_depth() < 10 {
      +                            extended_expression.substitute_input_var(input_var, expr)
      +                        }
      +                    }
                       }
      +                extended_expression.substitute_trivial_operations();
      +                *expression = extended_expression;
                       // expressions dependent on the assigned variable are no longer insertable
                       insertable_expressions.retain(|input_var, input_expr| {
                           input_var != var && !input_expr.input_vars().into_iter().any(|x| x == var)
      diff --git a/doc/html/src/cwe_checker_lib/analysis/fixpoint.rs.html b/doc/html/src/cwe_checker_lib/analysis/fixpoint.rs.html
      index adb19920d..c33b1ac8a 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/fixpoint.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/fixpoint.rs.html
      @@ -1,4 +1,4 @@
      -fixpoint.rs - source
      1
      +fixpoint.rs - source
      1
       2
       3
       4
      @@ -367,6 +367,16 @@
       367
       368
       369
      +370
      +371
      +372
      +373
      +374
      +375
      +376
      +377
      +378
      +379
       
      //! Creating and computing generic fixpoint computations.
       //!
       //! For general information on dataflow analysis using fixpoint algorithms see [Wikipedia](https://en.wikipedia.org/wiki/Data-flow_analysis).
      @@ -603,6 +613,16 @@
               &self.node_values
           }
       
      +    /// Get a mutable iterator over all node values.
      +    /// Also add all nodes that have values to the worklist, because one can change all their values through the iterator.
      +    pub fn node_values_mut(&mut self) -> impl Iterator<Item = &mut T::NodeValue> {
      +        for node in self.node_values.keys() {
      +            let priority = self.node_priority_list[node.index()];
      +            self.worklist.insert(priority);
      +        }
      +        self.node_values.values_mut()
      +    }
      +
           /// Get a reference to the underlying graph
           pub fn get_graph(&self) -> &DiGraph<T::NodeLabel, T::EdgeLabel> {
               self.fp_context.get_graph()
      diff --git a/doc/html/src/cwe_checker_lib/analysis/forward_interprocedural_fixpoint.rs.html b/doc/html/src/cwe_checker_lib/analysis/forward_interprocedural_fixpoint.rs.html
      index 8ddf3e68c..c4c344459 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/forward_interprocedural_fixpoint.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/forward_interprocedural_fixpoint.rs.html
      @@ -1,4 +1,4 @@
      -forward_interprocedural_fixpoint.rs - source
      1
      +forward_interprocedural_fixpoint.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/access_pattern.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/access_pattern.rs.html
      index f2ca19846..7b47810b2 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/access_pattern.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/access_pattern.rs.html
      @@ -1,4 +1,4 @@
      -access_pattern.rs - source
      1
      +access_pattern.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/context.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/context/mod.rs.html
      similarity index 82%
      rename from doc/html/src/cwe_checker_lib/analysis/function_signature/context.rs.html
      rename to doc/html/src/cwe_checker_lib/analysis/function_signature/context/mod.rs.html
      index f5733c8a4..5e0286909 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/context.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/context/mod.rs.html
      @@ -1,4 +1,4 @@
      -context.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -497,9 +497,42 @@
       497
       498
       499
      -
      use crate::abstract_domain::{
      -    AbstractDomain, AbstractIdentifier, AbstractLocation, BitvectorDomain, DataDomain, SizedDomain,
      -    TryToBitvec,
      +500
      +501
      +502
      +503
      +504
      +505
      +506
      +507
      +508
      +509
      +510
      +511
      +512
      +513
      +514
      +515
      +516
      +517
      +518
      +519
      +520
      +521
      +522
      +523
      +524
      +525
      +526
      +527
      +528
      +529
      +530
      +531
      +
      use super::*;
      +use crate::abstract_domain::{
      +    AbstractDomain, AbstractIdentifier, AbstractLocation, BitvectorDomain, DataDomain,
      +    RegisterDomain as _, SizedDomain, TryToBitvec,
       };
       use crate::utils::arguments;
       use crate::{
      @@ -507,8 +540,6 @@
           intermediate_representation::Project,
       };
       
      -use super::*;
      -
       /// The context struct for the fixpoint algorithm.
       pub struct Context<'a> {
           graph: &'a Graph<'a>,
      @@ -534,11 +565,9 @@
           /// Compute the return values of a call and return them (without adding them to the caller state).
           ///
           /// The `callee_state` is the state of the callee at the return site.
      -    /// The return values are expressed in the abstract IDs that are known to the caller.
      -    /// If a return value may contain `Top` values,
      -    /// i.e. values for which the origin is not known or not expressible in the abstract IDs known to the caller,
      -    /// then a call- and register-specific abstract ID is added to the corresponding return value.
      -    /// This ID is not added to the tracked IDs of the caller state.
      +    /// Return values corresponding to callee parameters are expressed in the abstract IDs that are known to the caller.
      +    /// Additionally, each return value also contains one abstract ID specific to the call instruction and return register.
      +    /// This ID is used to track abstract location access patterns to the return value of the call in the caller.
           fn compute_return_values_of_call<'cconv>(
               &self,
               caller_state: &mut State,
      @@ -573,8 +602,9 @@
           /// Compute the return value for the given register.
           ///
           /// The return value contains the IDs of all possible input IDs of the call that it may reference.
      -    /// If the value may also contain a value not originating from the caller
      -    /// then replace it with a call- and register-specific abstract ID.
      +    /// Additionally, it also contains a call- and register-specific abstract ID,
      +    /// which can be used to track the access patterns of the return value
      +    /// independently of whether the return value only references caller values or not.
           fn compute_return_register_value_of_call(
               &self,
               caller_state: &mut State,
      @@ -585,20 +615,18 @@
               let callee_value = callee_state.get_register(return_register);
               let mut return_value: DataDomain<BitvectorDomain> =
                   DataDomain::new_empty(return_register.size);
      -        // For absolute or Top-values originating in the callee the Top-flag of the return value is set.
      -        if callee_value.contains_top() || callee_value.get_absolute_value().is_some() {
      -            return_value.set_contains_top_flag();
      -        }
      +
               // For every relative value in the callee we check whether it is relative a parameter to the callee.
               // If yes, we can compute it relative to the value of the parameter at the callsite and add the result to the return value.
      -        // Else we just set the Top-flag of the return value to indicate some value originating in the callee.
      -        for (callee_id, callee_offset) in callee_value.get_relative_values() {
      -            if callee_id.get_tid() == callee_state.get_current_function_tid()
      -                && matches!(
      -                    callee_id.get_location(),
      -                    AbstractLocation::GlobalAddress { .. }
      -                )
      -            {
      +        for (callee_id, callee_offset) in callee_value
      +            .get_relative_values()
      +            .iter()
      +            .filter(|(callee_id, _)| callee_id.get_tid() == callee_state.get_current_function_tid())
      +        {
      +            if matches!(
      +                callee_id.get_location(),
      +                AbstractLocation::GlobalAddress { .. } | AbstractLocation::GlobalPointer(_, _)
      +            ) {
                       // Globals get the same ID as if the global pointer originated in the caller.
                       let caller_global_id = AbstractIdentifier::new(
                           caller_state.get_current_function_tid().clone(),
      @@ -608,13 +636,13 @@
                       let caller_global =
                           DataDomain::from_target(caller_global_id, callee_offset.clone());
                       return_value = return_value.merge(&caller_global);
      -            } else if let Some(param_arg) = callee_state.get_arg_corresponding_to_id(callee_id) {
      -                let param_value = caller_state.eval_parameter_arg(&param_arg);
      +            } else {
      +                let param_value = caller_state.eval_param_location(
      +                    callee_id.get_location(),
      +                    &self.project.runtime_memory_image,
      +                );
                       let param_value = caller_state
                           .substitute_global_mem_address(param_value, &self.project.runtime_memory_image);
      -                if param_value.contains_top() || param_value.get_absolute_value().is_some() {
      -                    return_value.set_contains_top_flag()
      -                }
                       for (param_id, param_offset) in param_value.get_relative_values() {
                           let value = DataDomain::from_target(
                               param_id.clone(),
      @@ -622,19 +650,14 @@
                           );
                           return_value = return_value.merge(&value);
                       }
      -            } else {
      -                return_value.set_contains_top_flag();
                   }
               }
      -        // If the Top-flag of the return value was set we replace it with an ID representing the return register
      -        // to indicate where the unknown value originated from.
      -        if return_value.contains_top() {
      -            let id = AbstractIdentifier::from_var(call.tid.clone(), return_register);
      -            let value =
      -                DataDomain::from_target(id, Bitvector::zero(return_register.size.into()).into());
      -            return_value = return_value.merge(&value);
      -            return_value.unset_contains_top_flag();
      -        }
      +        // Also add an ID representing the return register (regardless of what was added before).
      +        // This ID is used to track abstract location access patterns in relation to the return value.
      +        let id = AbstractIdentifier::from_var(call.tid.clone(), return_register);
      +        let value =
      +            DataDomain::from_target(id, Bitvector::zero(return_register.size.into()).into());
      +        return_value = return_value.merge(&value);
       
               return_value
           }
      @@ -813,6 +836,34 @@
               }
               None
           }
      +
      +    /// Adjust the stack register after a call to a function.
      +    ///
      +    /// On x86, this removes the return address from the stack
      +    /// (other architectures pass the return address in a register, not on the stack).
      +    /// On other architectures the stack register retains the value it had before the call.
      +    /// Note that in some calling conventions the callee also clears function parameters from the stack.
      +    /// We do not detect and handle these cases yet.
      +    fn adjust_stack_register_on_return_from_call(
      +        &self,
      +        state_before_call: &State,
      +        new_state: &mut State,
      +    ) {
      +        let stack_register = &self.project.stack_pointer_register;
      +        let stack_pointer = state_before_call.get_register(stack_register);
      +        match self.project.cpu_architecture.as_str() {
      +            "x86" | "x86_32" | "x86_64" => {
      +                let offset = Bitvector::from_u64(stack_register.size.into())
      +                    .into_truncate(apint::BitWidth::from(stack_register.size))
      +                    .unwrap();
      +                new_state.set_register(
      +                    stack_register,
      +                    stack_pointer.bin_op(BinOpType::IntAdd, &offset.into()),
      +                );
      +            }
      +            _ => new_state.set_register(stack_register, stack_pointer),
      +        }
      +    }
       }
       
       impl<'a> forward_interprocedural_fixpoint::Context<'a> for Context<'a> {
      @@ -838,7 +889,8 @@
                       new_state.set_register(var, value);
                   }
                   Def::Load { var, address } => {
      -                new_state.set_deref_flag_for_input_ids_of_expression(address);
      +                new_state.set_deref_flag_for_pointer_inputs_of_expression(address);
      +                new_state.set_read_flag_for_input_ids_of_expression(address);
                       let address = new_state.substitute_global_mem_address(
                           state.eval(address),
                           &self.project.runtime_memory_image,
      @@ -851,10 +903,13 @@
                       );
                       let value = new_state
                           .substitute_global_mem_address(value, &self.project.runtime_memory_image);
      +                new_state.track_contained_ids(&value);
      +                new_state.set_read_flag_for_contained_ids(&value);
                       new_state.set_register(var, value);
                   }
                   Def::Store { address, value } => {
      -                new_state.set_mutable_deref_flag_for_input_ids_of_expression(address);
      +                new_state.set_mutable_deref_flag_for_pointer_inputs_of_expression(address);
      +                new_state.set_read_flag_for_input_ids_of_expression(address);
                       let address = new_state.substitute_global_mem_address(
                           state.eval(address),
                           &self.project.runtime_memory_image,
      @@ -919,6 +974,7 @@
                               cconv,
                               &self.project.runtime_memory_image,
                           );
      +                    self.adjust_stack_register_on_return_from_call(state, &mut new_state);
                           return Some(new_state);
                       }
                   }
      @@ -926,6 +982,7 @@
                       if let Some(extern_symbol) = self.project.program.term.extern_symbols.get(target) {
                           self.handle_extern_symbol_call(&mut new_state, extern_symbol, &call.tid);
                           if !extern_symbol.no_return {
      +                        self.adjust_stack_register_on_return_from_call(state, &mut new_state);
                               return Some(new_state);
                           }
                       } else if let Some(cconv) = self.project.get_standard_calling_convention() {
      @@ -934,6 +991,7 @@
                               cconv,
                               &self.project.runtime_memory_image,
                           );
      +                    self.adjust_stack_register_on_return_from_call(state, &mut new_state);
                           return Some(new_state);
                       }
                   }
      @@ -949,18 +1007,21 @@
               state_before_call: Option<&State>,
               call_term: &Term<Jmp>,
               _return_term: &Term<Jmp>,
      -        _calling_convention: &Option<String>,
      +        calling_convention_opt: &Option<String>,
           ) -> Option<State> {
               if state.is_none() || state_before_call.is_none() {
                   return None;
               }
      -        let calling_convention = match self.project.get_standard_calling_convention() {
      +        let calling_convention = match self
      +            .project
      +            .get_specific_calling_convention(calling_convention_opt)
      +        {
                   Some(cconv) => cconv,
                   None => return None,
               };
      -        let old_state = state_before_call.unwrap();
      +        let state_before_call = state_before_call.unwrap();
               let callee_state = state.unwrap();
      -        let mut new_state = old_state.clone();
      +        let mut new_state = state_before_call.clone();
               // Merge parameter access patterns with the access patterns from the callee.
               let parameters = callee_state.get_params_of_current_function();
               new_state.merge_parameter_access(&parameters, &self.project.runtime_memory_image);
      @@ -976,8 +1037,11 @@
               new_state.clear_non_callee_saved_register(&calling_convention.callee_saved_register);
               // Now we can insert the return values into the state
               for (var, value) in return_value_list {
      +            // The return values may contain new IDs that have to be tracked.
      +            new_state.track_contained_ids(&value);
                   new_state.set_register(var, value);
               }
      +        self.adjust_stack_register_on_return_from_call(state_before_call, &mut new_state);
               Some(new_state)
           }
       
      diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/global_var_propagation.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/global_var_propagation.rs.html
      index 71b10442e..d9b8771c6 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/global_var_propagation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/global_var_propagation.rs.html
      @@ -1,4 +1,4 @@
      -global_var_propagation.rs - source
      1
      +global_var_propagation.rs - source
      1
       2
       3
       4
      @@ -300,12 +300,108 @@
       300
       301
       302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +333
      +334
      +335
      +336
      +337
      +338
      +339
      +340
      +341
      +342
      +343
      +344
      +345
      +346
      +347
      +348
      +349
      +350
      +351
      +352
      +353
      +354
      +355
      +356
      +357
      +358
      +359
      +360
      +361
      +362
      +363
      +364
      +365
      +366
      +367
      +368
      +369
      +370
      +371
      +372
      +373
      +374
      +375
      +376
      +377
      +378
      +379
      +380
      +381
      +382
      +383
      +384
      +385
      +386
      +387
      +388
      +389
      +390
      +391
      +392
      +393
      +394
      +395
      +396
      +397
       
      //! This module implements propagation of global variables via two fixpoint algorithms on the call graph.
       //! For more details see [`propagate_globals`].
       
       use super::AccessPattern;
       use super::FunctionSignature;
       use crate::abstract_domain::AbstractDomain;
      +use crate::abstract_domain::AbstractLocation;
       use crate::abstract_domain::DomainMap;
       use crate::abstract_domain::UnionMergeStrategy;
       use crate::analysis::callgraph::get_program_callgraph;
      @@ -314,6 +410,7 @@
       use crate::intermediate_representation::*;
       use crate::utils::log::LogMessage;
       use std::collections::BTreeMap;
      +use std::collections::BTreeSet;
       use std::collections::HashSet;
       
       /// The context object for propagating known global variables top-down in the call graph.
      @@ -333,7 +430,7 @@
           type EdgeLabel = &'a Term<Jmp>;
           type NodeLabel = Tid;
           /// The values at nodes are the sets of known addresses of global variables for that function.
      -    type NodeValue = HashSet<u64>;
      +    type NodeValue = BTreeSet<AbstractLocation>;
       
           /// Get the call graph corresponding to the context object.
           fn get_graph(&self) -> &CallGraph<'a> {
      @@ -341,10 +438,14 @@
           }
       
           /// The merge function returns the union of the two input sets of global addresses.
      -    fn merge(&self, set1: &HashSet<u64>, set2: &HashSet<u64>) -> HashSet<u64> {
      +    fn merge(
      +        &self,
      +        set1: &BTreeSet<AbstractLocation>,
      +        set2: &BTreeSet<AbstractLocation>,
      +    ) -> BTreeSet<AbstractLocation> {
               let mut result = set1.clone();
               for address in set2 {
      -            result.insert(*address);
      +            result.insert(address.clone());
               }
               result
           }
      @@ -352,9 +453,9 @@
           /// We always propagate all known addresses of global variables along the edges of the call graph.
           fn update_edge(
               &self,
      -        globals: &HashSet<u64>,
      +        globals: &BTreeSet<AbstractLocation>,
               _edge: petgraph::stable_graph::EdgeIndex,
      -    ) -> Option<HashSet<u64>> {
      +    ) -> Option<BTreeSet<AbstractLocation>> {
               Some(globals.clone())
           }
       }
      @@ -368,7 +469,7 @@
       fn propagate_known_globals_top_down(
           project: &Project,
           fn_sigs: &BTreeMap<Tid, FunctionSignature>,
      -) -> BTreeMap<Tid, HashSet<u64>> {
      +) -> BTreeMap<Tid, BTreeSet<AbstractLocation>> {
           let graph = get_program_callgraph(&project.program);
           let context = KnownGlobalsContext::new(&graph);
           let mut computation = Computation::new(context, None);
      @@ -398,12 +499,15 @@
           /// The reversed (!) call graph of the program.
           graph: &'a CallGraph<'a>,
           /// A map from TIDs of functions to the set of known addresses of global variables for that function.
      -    known_globals: &'a BTreeMap<Tid, HashSet<u64>>,
      +    known_globals: &'a BTreeMap<Tid, BTreeSet<AbstractLocation>>,
       }
       
       impl<'a> GlobalsPropagationContext<'a> {
           /// Create a new [`GlobalsPropagationContext`] object.
      -    fn new(graph: &'a CallGraph<'a>, known_globals: &'a BTreeMap<Tid, HashSet<u64>>) -> Self {
      +    fn new(
      +        graph: &'a CallGraph<'a>,
      +        known_globals: &'a BTreeMap<Tid, BTreeSet<AbstractLocation>>,
      +    ) -> Self {
               GlobalsPropagationContext {
                   graph,
                   known_globals,
      @@ -415,9 +519,9 @@
           type EdgeLabel = &'a Term<Jmp>;
           type NodeLabel = Tid;
           /// The node values for the fixpoint comutation
      -    /// are maps from addresses of global variables known to the function represented by the node
      +    /// are maps from locations of (possibly nested) global variables known to the function represented by the node
           /// to the corresponding access pattern of the global variable.
      -    type NodeValue = DomainMap<u64, AccessPattern, UnionMergeStrategy>;
      +    type NodeValue = DomainMap<AbstractLocation, AccessPattern, UnionMergeStrategy>;
       
           /// Get the (reversed!) call graph corresponding to the program
           fn get_graph(&self) -> &CallGraph<'a> {
      @@ -446,7 +550,7 @@
                   .iter()
                   .filter_map(|(address, access_pattern)| {
                       if caller_known_globals.contains(address) {
      -                    Some((*address, *access_pattern))
      +                    Some((address.clone(), *access_pattern))
                       } else {
                           None
                       }
      @@ -463,7 +567,7 @@
       /// that are known to the caller anyway (i.e. some function upwards in the call graph accesses the global variable).
       fn propagate_globals_bottom_up(
           project: &Project,
      -    known_globals: &BTreeMap<Tid, HashSet<u64>>,
      +    known_globals: &BTreeMap<Tid, BTreeSet<AbstractLocation>>,
           fn_sigs: &mut BTreeMap<Tid, FunctionSignature>,
           logs: &mut Vec<LogMessage>,
       ) {
      @@ -480,7 +584,7 @@
               let globals = fn_sig
                   .global_parameters
                   .iter()
      -            .map(|(address, access_pattern)| (*address, *access_pattern))
      +            .map(|(address, access_pattern)| (address.clone(), *access_pattern))
                   .collect();
               computation.set_node_value(node, globals);
           }
      @@ -500,7 +604,7 @@
               let fn_globals = &mut fn_sigs.get_mut(fn_tid).unwrap().global_parameters;
               for (address, propagated_access_pattern) in propagated_globals.iter() {
                   fn_globals
      -                .entry(*address)
      +                .entry(address.clone())
                       .and_modify(|access_pattern| {
                           *access_pattern = access_pattern.merge(propagated_access_pattern);
                       })
      @@ -509,6 +613,48 @@
           }
       }
       
      +/// For all nested global parameters add the corresponding parent locations to the function signatures.
      +///
      +/// This ensures that subsequent analyses can safely assume
      +/// that for each nested parameter the parent location is also a parameter.
      +fn add_parents_of_known_nested_globals(
      +    fn_sigs: &mut BTreeMap<Tid, FunctionSignature>,
      +    generic_pointer_size: ByteSize,
      +) {
      +    for fn_sig in fn_sigs.values_mut() {
      +        let mut parents_to_add = HashSet::new();
      +        for global in fn_sig.global_parameters.keys() {
      +            parents_to_add.extend(get_parents_of_global(global, generic_pointer_size).into_iter());
      +        }
      +        for parent in parents_to_add {
      +            fn_sig
      +                .global_parameters
      +                .entry(parent)
      +                .and_modify(|pattern| pattern.set_dereference_flag())
      +                .or_insert(
      +                    AccessPattern::new()
      +                        .with_read_flag()
      +                        .with_dereference_flag(),
      +                );
      +        }
      +    }
      +}
      +
      +/// get all parent locations for the given potentially nested global location.
      +fn get_parents_of_global(
      +    location: &AbstractLocation,
      +    generic_pointer_size: ByteSize,
      +) -> Vec<AbstractLocation> {
      +    if let AbstractLocation::GlobalPointer(_, _) = location {
      +        let (parent, _offset) = location.get_parent_location(generic_pointer_size).unwrap();
      +        let mut parents = get_parents_of_global(&parent, generic_pointer_size);
      +        parents.push(parent);
      +        parents
      +    } else {
      +        Vec::new()
      +    }
      +}
      +
       /// Propagate the access patterns of global variables along the edges of the call graph of the given project.
       ///
       /// The propagation works as follows:
      @@ -532,14 +678,22 @@
       ) {
           let known_globals = propagate_known_globals_top_down(project, fn_sigs);
           propagate_globals_bottom_up(project, &known_globals, fn_sigs, logs);
      +    // Also add parent locations of propagated globals to the function signatures
      +    add_parents_of_known_nested_globals(fn_sigs, project.get_pointer_bytesize());
       }
       
       #[cfg(test)]
       pub mod tests {
      -    use std::collections::HashMap;
      -
           use super::*;
       
      +    /// Mock the abstract location of a global parameter.
      +    fn mock_global(address: u64) -> AbstractLocation {
      +        AbstractLocation::GlobalAddress {
      +            address: address,
      +            size: ByteSize::new(4),
      +        }
      +    }
      +
           #[test]
           fn test_globals_propagation() {
               let mut project = Project::mock_arm32();
      @@ -567,15 +721,16 @@
               let mut sig_main = FunctionSignature::new();
               sig_main
                   .global_parameters
      -            .insert(1000, AccessPattern::new().with_read_flag());
      +            .insert(mock_global(1000), AccessPattern::new().with_read_flag());
               let mut sig_callee1 = FunctionSignature::new();
      -        sig_callee1
      -            .global_parameters
      -            .insert(2000, AccessPattern::new().with_dereference_flag());
      +        sig_callee1.global_parameters.insert(
      +            mock_global(2000),
      +            AccessPattern::new().with_dereference_flag(),
      +        );
               let mut sig_callee2 = FunctionSignature::new();
               sig_callee2
                   .global_parameters
      -            .insert(1000, AccessPattern::new_unknown_access());
      +            .insert(mock_global(1000), AccessPattern::new_unknown_access());
               let mut fn_sigs = BTreeMap::from([
                   (Tid::new("main"), sig_main),
                   (Tid::new("callee1"), sig_callee1),
      @@ -587,18 +742,53 @@
               // Check propagation results
               assert_eq!(
                   &fn_sigs[&Tid::new("main")].global_parameters,
      -            &HashMap::from([(1000, AccessPattern::new_unknown_access())])
      +            &BTreeMap::from([(mock_global(1000), AccessPattern::new_unknown_access())])
               );
               assert_eq!(
                   &fn_sigs[&Tid::new("callee1")].global_parameters,
      -            &HashMap::from([
      -                (1000, AccessPattern::new_unknown_access()),
      -                (2000, AccessPattern::new().with_dereference_flag())
      +            &BTreeMap::from([
      +                (mock_global(1000), AccessPattern::new_unknown_access()),
      +                (
      +                    mock_global(2000),
      +                    AccessPattern::new().with_dereference_flag()
      +                )
                   ])
               );
               assert_eq!(
                   &fn_sigs[&Tid::new("callee2")].global_parameters,
      -            &HashMap::from([(1000, AccessPattern::new_unknown_access())])
      +            &BTreeMap::from([(mock_global(1000), AccessPattern::new_unknown_access())])
      +        );
      +    }
      +
      +    #[test]
      +    fn test_add_parent_locations() {
      +        // The case of a known nested global parameter without knowing the parent locations happens
      +        // when a callee returns a nested global in a return register.
      +        let location = AbstractLocation::mock_global(0x2000, &[8, 16], 8);
      +        let globals = BTreeMap::from([(location, AccessPattern::new_unknown_access())]);
      +        let fn_sig = FunctionSignature {
      +            parameters: BTreeMap::new(),
      +            global_parameters: globals,
      +        };
      +        let mut fn_sigs = BTreeMap::from([(Tid::new("func"), fn_sig)]);
      +        add_parents_of_known_nested_globals(&mut fn_sigs, ByteSize::new(8));
      +        let fn_sig = &fn_sigs[&Tid::new("func")];
      +        let deref_pattern = AccessPattern::new()
      +            .with_read_flag()
      +            .with_dereference_flag();
      +        assert_eq!(
      +            fn_sig.global_parameters,
      +            BTreeMap::from([
      +                (
      +                    AbstractLocation::mock_global(0x2000, &[8, 16], 8),
      +                    AccessPattern::new_unknown_access()
      +                ),
      +                (
      +                    AbstractLocation::mock_global(0x2000, &[8], 8),
      +                    deref_pattern
      +                ),
      +                (AbstractLocation::mock_global(0x2000, &[], 8), deref_pattern),
      +            ])
               );
           }
       }
      diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/mod.rs.html
      index 22fd6f74f..0bfb8b0fa 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -413,6 +413,34 @@
       413
       414
       415
      +416
      +417
      +418
      +419
      +420
      +421
      +422
      +423
      +424
      +425
      +426
      +427
      +428
      +429
      +430
      +431
      +432
      +433
      +434
      +435
      +436
      +437
      +438
      +439
      +440
      +441
      +442
      +443
       
      //! A fixpoint algorithm computing parameters of functions and their access patterns.
       //!
       //! The fixpoint algorithm tracks the values of registers and the stack,
      @@ -421,6 +449,11 @@
       //! (is the value read, dereferenced for read access or dereferenced for write access).
       //! Accesses to constant addresses that may correspond to global variables are also tracked.
       //!
      +//! For values that are not directly tracked,
      +//! the algorithm tracks the abstract location that describes how the pointer to that value was computed.
      +//! This enables tracking of nested parameter objects
      +//! without actually tracking the memory objects where these objects are located.
      +//!
       //! Known limitations of the analysis:
       //! * The analysis is an overapproximation in the sense that it may generate more input parameters
       //!   than actually exist in some cases.
      @@ -432,16 +465,22 @@
       //! * Parameters that are used as input values for variadic functions may be missed.
       //!   Some variadic functions are stubbed, i.e. parameter recognition should work for these.
       //!   But not all variadic functions are stubbed.
      -//! * If only a part (e.g. a single byte) of a stack parameter is accessed instead of the whole parameter
      -//!   then a duplicate stack parameter may be generated.
      -//!   A proper sanitation for this case is not yet implemented,
      -//!   although error messages are generated if such a case is detected.
       //! * For floating point parameter registers the base register is detected as a parameter,
       //!   although only a smaller sub-register is the actual parameter in many cases.
       //!   Also, if a function uses sub-registers of floating point registers as local variables,
       //!   the registers may be incorrectly flagged as input parameters.
      +//! * Tracking of nested parameters via their abstract locations is an unsound, heuristic approach,
      +//!   as the analysis does not keep track of when such nested pointers might get overwritten.
      +//!   Nevertheless, it should result in an overapproximation of parameters and their access patterns in most cases.
      +//! * The nesting depth for tracked nested parameters is limited
      +//!   to avoid generating infinitely many parameters for recursive types like linked lists.
      +//! * For arrays no parameters should be created for the array elements.
      +//!   However, if only a particular element in an array is accessed without iteration over the array,
      +//!   then a parameter might be generated for that element.
       
       use crate::abstract_domain::AbstractDomain;
      +use crate::abstract_domain::AbstractLocation;
      +use crate::abstract_domain::AbstractMemoryLocation;
       use crate::analysis::fixpoint::Computation;
       use crate::analysis::forward_interprocedural_fixpoint::create_computation;
       use crate::analysis::forward_interprocedural_fixpoint::GeneralizedContext;
      @@ -451,12 +490,10 @@
       use crate::prelude::*;
       use crate::utils::log::LogMessage;
       use std::collections::BTreeMap;
      -use std::collections::HashMap;
       
       mod context;
       use context::*;
       mod state;
      -use itertools::Itertools;
       use state::State;
       mod access_pattern;
       pub use access_pattern::AccessPattern;
      @@ -469,26 +506,24 @@
       fn generate_fixpoint_computation<'a>(
           project: &'a Project,
           graph: &'a Graph,
      +    pointer_recursion_depth_limit: u64,
       ) -> Computation<GeneralizedContext<'a, Context<'a>>> {
           let context = Context::new(project, graph);
           let mut computation = create_computation(context, None);
           // Set the node values for all function entry nodes.
           for node in graph.node_indices() {
               if let Node::BlkStart(block, sub) = graph[node] {
      -            if let Some(entry_block) = sub.term.blocks.get(0) {
      +            if let Some(entry_block) = sub.term.blocks.first() {
                       if entry_block.tid == block.tid {
                           // The node of a function entry point
                           let calling_convention = project
                               .get_specific_calling_convention(&sub.term.calling_convention)
      -                        .unwrap_or_else(|| {
      -                            project
      -                                .get_standard_calling_convention()
      -                                .expect("No standard calling convention found.")
      -                        });
      +                        .expect("No standard calling convention found.");
                           let mut fn_start_state = State::new(
                               &sub.tid,
                               &project.stack_pointer_register,
                               calling_convention,
      +                        pointer_recursion_depth_limit,
                           );
                           if project.cpu_architecture.contains("MIPS") {
                               let _ = fn_start_state
      @@ -560,13 +595,40 @@
           project: &'a Project,
           graph: &'a Graph,
       ) -> (BTreeMap<Tid, FunctionSignature>, Vec<LogMessage>) {
      -    let mut computation = generate_fixpoint_computation(project, graph);
      +    let max_pointer_recursion_depth_limit: u64 = 2;
      +    // We gradually increase the recursion depth limit used in the fixpoint computation.
      +    // The idea is that for array accesses the offset has time to converge to `Top` before IDs for nested objects are created.
      +    // Otherwise the algorithm would generate an object for the first element of an array
      +    // before it can check that it is an array access that we want to ignore.
      +    let mut computation = generate_fixpoint_computation(project, graph, 0);
           computation.compute_with_max_steps(100);
      +    for pointer_recursion_limit in 1..=max_pointer_recursion_depth_limit {
      +        for node_value in computation.node_values_mut() {
      +            match node_value {
      +                NodeValue::Value(state) => {
      +                    state.set_pointer_recursion_depth_limit(pointer_recursion_limit)
      +                }
      +                NodeValue::CallFlowCombinator {
      +                    call_stub,
      +                    interprocedural_flow,
      +                } => {
      +                    for state in call_stub.iter_mut() {
      +                        state.set_pointer_recursion_depth_limit(pointer_recursion_limit);
      +                    }
      +                    for state in interprocedural_flow.iter_mut() {
      +                        state.set_pointer_recursion_depth_limit(pointer_recursion_limit);
      +                    }
      +                }
      +            }
      +        }
      +        computation.compute_with_max_steps(100);
      +    }
      +
           let mut fn_sig_map = extract_fn_signatures_from_fixpoint(project, graph, computation);
           // Sanitize the parameters
           let mut logs = Vec::new();
           for (fn_tid, fn_sig) in fn_sig_map.iter_mut() {
      -        let (info_log, debug_log) = fn_sig.sanitize(project);
      +        let info_log = fn_sig.sanitize(project);
               for log in info_log {
                   logs.push(
                       LogMessage::new_info(log)
      @@ -574,13 +636,6 @@
                           .source("Function Signature Analysis"),
                   )
               }
      -        for log in debug_log {
      -            logs.push(
      -                LogMessage::new_debug(log)
      -                    .location(fn_tid.clone())
      -                    .source("Function Signature Analysis"),
      -            )
      -        }
           }
           // Propagate globals in bottom-up direction in the call graph
           propagate_globals(project, &mut fn_sig_map, &mut logs);
      @@ -593,30 +648,42 @@
       #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
       pub struct FunctionSignature {
           /// The parameters of the function together with their access patterns.
      -    pub parameters: HashMap<Arg, AccessPattern>,
      +    pub parameters: BTreeMap<AbstractLocation, AccessPattern>,
           /// Values in writeable global memory accessed by the function.
      -    /// Does not contain indirectly accessed values, e.g. values accessed by callees of this function.
      -    pub global_parameters: HashMap<u64, AccessPattern>,
      +    pub global_parameters: BTreeMap<AbstractLocation, AccessPattern>,
       }
       
       impl FunctionSignature {
           /// Generate an empty function signature.
           pub fn new() -> Self {
               Self {
      -            parameters: HashMap::new(),
      -            global_parameters: HashMap::new(),
      +            parameters: BTreeMap::new(),
      +            global_parameters: BTreeMap::new(),
               }
           }
       
           /// The returned number is the maximum of stack offset plus parameter size
           /// taken over all stack parameters in the function signature.
      -    pub fn get_stack_params_total_size(&self) -> i64 {
      +    pub fn get_stack_params_total_size(&self, stack_register: &Variable) -> i64 {
               let mut stack_params_total_size: i64 = 0;
               for param in self.parameters.keys() {
      -            if let Ok(param_offset) = param.eval_stack_offset() {
      -                let param_upper_bound =
      -                    param_offset.try_to_i64().unwrap() + (u64::from(param.bytesize()) as i64);
      -                stack_params_total_size = std::cmp::max(stack_params_total_size, param_upper_bound);
      +            if let AbstractLocation::Pointer(var, mem_location) = param {
      +                if var == stack_register {
      +                    match mem_location {
      +                        AbstractMemoryLocation::Location { offset, size } => {
      +                            stack_params_total_size = std::cmp::max(
      +                                stack_params_total_size,
      +                                offset + (u64::from(*size) as i64),
      +                            );
      +                        }
      +                        AbstractMemoryLocation::Pointer { offset, target: _ } => {
      +                            stack_params_total_size = std::cmp::max(
      +                                stack_params_total_size,
      +                                offset + (u64::from(stack_register.size) as i64),
      +                            );
      +                        }
      +                    }
      +                }
                   }
               }
               stack_params_total_size
      @@ -625,21 +692,21 @@
           /// Merge the parameter list and the global parameter list of `self` with the given lists.
           fn merge_parameter_lists(
               &mut self,
      -        params: &[(Arg, AccessPattern)],
      -        global_params: &[(u64, AccessPattern)],
      +        params: &[(&AbstractLocation, AccessPattern)],
      +        global_params: &[(&AbstractLocation, AccessPattern)],
           ) {
               for (arg, sig_new) in params {
                   if let Some(sig_self) = self.parameters.get_mut(arg) {
                       *sig_self = sig_self.merge(sig_new);
                   } else {
      -                self.parameters.insert(arg.clone(), *sig_new);
      +                self.parameters.insert((*arg).clone(), *sig_new);
                   }
               }
               for (address, sig_new) in global_params {
                   if let Some(sig_self) = self.global_parameters.get_mut(address) {
                       *sig_self = sig_self.merge(sig_new);
                   } else {
      -                self.global_parameters.insert(*address, *sig_new);
      +                self.global_parameters.insert((*address).clone(), *sig_new);
                   }
               }
           }
      @@ -658,172 +725,161 @@
           ///   This may indicate an error in the analysis
           ///   as no proper sanitation pass is implemented for such cases yet.
           /// * Merge intersecting stack parameters
      -    fn sanitize(&mut self, project: &Project) -> (Vec<String>, Vec<String>) {
      +    fn sanitize(&mut self, project: &Project) -> Vec<String> {
               match project.cpu_architecture.as_str() {
                   "x86" | "x86_32" | "x86_64" => {
      -                let return_addr_expr = Expression::Var(project.stack_pointer_register.clone());
      -                let return_addr_arg = Arg::Stack {
      -                    address: return_addr_expr,
      -                    size: project.stack_pointer_register.size,
      -                    data_type: None,
      -                };
      -                self.parameters.remove(&return_addr_arg);
      +                let return_addr_location = AbstractLocation::from_stack_position(
      +                    &project.stack_pointer_register,
      +                    0,
      +                    project.get_pointer_bytesize(),
      +                );
      +                self.parameters.remove(&return_addr_location);
                   }
                   _ => (),
               }
      -        let debug_messages = self.merge_intersecting_stack_parameters();
      -        let info_messages = self.check_for_unaligned_stack_params(&project.stack_pointer_register);
      -
      -        (info_messages, debug_messages)
      +        // FIXME: We check for intersecting stack parameter register, but not for intersecting nested parameters.
      +        // We should add a check for these to generate log messages (but probably without trying to merge such parameters)
      +        self.merge_intersecting_stack_parameters(&project.stack_pointer_register);
      +        self.check_for_unaligned_stack_params(&project.stack_pointer_register)
           }
       
           /// Return a log message for every unaligned stack parameter
           /// or a stack parameter of different size than the generic pointer size is found.
           fn check_for_unaligned_stack_params(&self, stack_register: &Variable) -> Vec<String> {
               let mut log_messages: Vec<String> = vec![];
      -        for arg in self.parameters.keys() {
      -            if let Arg::Stack { size, .. } = arg {
      -                if *size != stack_register.size {
      +        for param in self.parameters.keys() {
      +            if let Some(offset) = get_offset_if_simple_stack_param(param, stack_register) {
      +                if param.bytesize() != stack_register.size {
                           log_messages.push("Unexpected stack parameter size".into());
                       }
      -                if let Ok(offset) = arg.eval_stack_offset() {
      -                    if offset.try_to_u64().unwrap_or(0) % u64::from(stack_register.size) != 0 {
      -                        log_messages.push("Unexpected stack parameter alignment".into());
      -                    }
      +                if offset % u64::from(stack_register.size) as i64 != 0 {
      +                    log_messages.push("Unexpected stack parameter alignment".into());
                       }
                   }
               }
               log_messages
           }
      -    /// Merges two intersecting stack parameters by joining them into one stack parameter.
      +
      +    /// Merges intersecting stack parameters by joining them into one stack parameter.
           ///
      -    /// Two [Arg](crate::intermediate_representation::Arg) are merged if *all* of the following applies:
      -    /// * parameters return `Ok` on `Arg::eval_stack_offset()`
      -    /// * parameters intersect
      -    fn merge_intersecting_stack_parameters(&mut self) -> Vec<String> {
      -        let mut stack_parms = self
      +    /// Only non-nested stack parameters are joined by this function.
      +    fn merge_intersecting_stack_parameters(&mut self, stack_register: &Variable) {
      +        let stack_params: BTreeMap<(i64, ByteSize), (AbstractLocation, AccessPattern)> = self
                   .parameters
      -            .clone()
      -            .into_iter()
      -            .filter(|x| x.0.eval_stack_offset().is_ok())
      -            .sorted_by(|a, b| {
      -                match a
      -                    .0
      -                    .eval_stack_offset()
      -                    .unwrap()
      -                    .checked_sgt(&b.0.eval_stack_offset().unwrap())
      -                    .unwrap()
      -                {
      -                    true => std::cmp::Ordering::Greater,
      -                    false => std::cmp::Ordering::Less,
      -                }
      +            .iter()
      +            .filter_map(|(location, access_pattern)| {
      +                get_offset_if_simple_stack_param(location, stack_register).map(|offset| {
      +                    (
      +                        (offset, location.bytesize()),
      +                        (location.clone(), *access_pattern),
      +                    )
      +                })
                   })
      -            .collect_vec();
      -        let mut logs = vec![];
      +            .collect();
       
      -        if !stack_parms.is_empty() {
      -            let mut i = 0;
      -            while i < stack_parms.len() - 1 {
      -                if let Ok((merged_arg, log)) =
      -                    get_bounds_intersecting_stack_arg(&stack_parms[i].0, &stack_parms[i + 1].0)
      -                {
      -                    self.parameters.remove(&stack_parms[i].0);
      -                    self.parameters.remove(&stack_parms[i + 1].0);
      -                    self.parameters.insert(
      -                        merged_arg.clone(),
      -                        stack_parms[i].1.merge(&stack_parms[i + 1].1),
      -                    );
      -
      -                    stack_parms.insert(
      -                        i,
      -                        (merged_arg, stack_parms[i].1.merge(&stack_parms[i + 1].1)),
      +        let mut current_param: Option<(i64, i64, AccessPattern)> = None;
      +        for ((offset, _), (param, access_pattern)) in stack_params.into_iter() {
      +            self.parameters.remove(&param);
      +            if let Some((cur_offset, cur_size, cur_access_pattern)) = current_param {
      +                if offset < cur_offset + cur_size {
      +                    let merged_size = std::cmp::max(
      +                        cur_size,
      +                        offset - cur_offset + u64::from(param.bytesize()) as i64,
                           );
      -                    stack_parms.remove(i + 1);
      -                    stack_parms.remove(i + 1);
      -
      -                    logs.extend(log);
      +                    let merged_access_pattern = cur_access_pattern.merge(&access_pattern);
      +                    current_param = Some((cur_offset, merged_size, merged_access_pattern));
                       } else {
      -                    i += 1;
      +                    self.parameters.insert(
      +                        generate_simple_stack_param(
      +                            cur_offset,
      +                            ByteSize::new(cur_size as u64),
      +                            stack_register,
      +                        ),
      +                        cur_access_pattern,
      +                    );
      +                    current_param =
      +                        Some((offset, u64::from(param.bytesize()) as i64, access_pattern));
                       }
      +            } else {
      +                current_param = Some((offset, u64::from(param.bytesize()) as i64, access_pattern));
                   }
               }
      -
      -        logs
      +        if let Some((cur_offset, cur_size, cur_access_pattern)) = current_param {
      +            self.parameters.insert(
      +                generate_simple_stack_param(
      +                    cur_offset,
      +                    ByteSize::new(cur_size as u64),
      +                    stack_register,
      +                ),
      +                cur_access_pattern,
      +            );
      +        }
           }
       }
       
      -/// Merges two stack parameters and returns the merged [Arg](crate::intermediate_representation::Arg).
      -/// Also returns a message, if one argument is not a subset of the other one.
      -///
      -/// Assumes the provided `Arg` are ordered by equal or increasing stack offset.
      -///
      -/// Returns `Err` if `first_arg` or `second_arg`:
      -/// * are not `Arg::Stack` types
      -/// * return `Err` on `Arg::eval_stack_offset()`
      -/// * do not intersect
      -fn get_bounds_intersecting_stack_arg(
      -    first_arg: &Arg,
      -    second_arg: &Arg,
      -) -> Result<(Arg, Vec<String>), Error> {
      -    if let (
      -        Arg::Stack {
      -            data_type: _,
      -            size: first_size,
      -            address: first_address,
      -        },
      -        Arg::Stack {
      -            data_type: _,
      -            size: second_size,
      -            ..
      -        },
      -    ) = (first_arg, second_arg)
      -    {
      -        let first_arg_offset = first_arg.eval_stack_offset()?.try_to_u64()?;
      -        let first_arg_size = u64::from(*first_size);
      -        let second_arg_offset = second_arg.eval_stack_offset()?.try_to_u64()?;
      -        let second_arg_size = u64::from(*second_size);
      -
      -        let mut logs = vec![];
      -        let first_arg_upper_bound = first_arg_offset + first_arg_size;
      -
      -        // Check if they intersect
      -        if first_arg_upper_bound > second_arg_offset {
      -            let second_arg_upper_bound = second_arg_offset + second_arg_size;
      +impl Default for FunctionSignature {
      +    fn default() -> Self {
      +        Self::new()
      +    }
      +}
       
      -            // Check if subset
      -            if second_arg_upper_bound <= first_arg_upper_bound
      -                && second_arg_offset >= first_arg_offset
      -            {
      -                // second arg is a subset, we just keep first_arg
      -                return Ok((first_arg.clone(), logs));
      -            }
      -            if first_arg_upper_bound <= second_arg_upper_bound
      -                && first_arg_offset >= second_arg_offset
      -            {
      -                // first arg is a subset, we just keep second_arg
      -                return Ok((second_arg.clone(), logs));
      -            }
      -            logs.push(
      -                "Merged a stack parameter, that intersect another but is no subset".to_string(),
      +impl FunctionSignature {
      +    /// Generate a compact JSON-representation of the function signature for pretty printing.
      +    #[allow(dead_code)]
      +    pub fn to_json_compact(&self) -> serde_json::Value {
      +        let mut json_map = serde_json::Map::new();
      +        let mut param_map = serde_json::Map::new();
      +        for (param, pattern) in self.parameters.iter() {
      +            param_map.insert(
      +                format!("{param}"),
      +                serde_json::Value::String(format!("{pattern}")),
      +            );
      +        }
      +        json_map.insert(
      +            "Parameters".to_string(),
      +            serde_json::Value::Object(param_map),
      +        );
      +        let mut global_param_map = serde_json::Map::new();
      +        for (param, pattern) in self.global_parameters.iter() {
      +            global_param_map.insert(
      +                format!("{param}"),
      +                serde_json::Value::String(format!("{pattern}")),
                   );
      -
      -            let merged_arg = Arg::Stack {
      -                address: first_address.clone(),
      -                size: (second_arg_upper_bound - first_arg_offset).into(),
      -                data_type: None,
      -            };
      -            return Ok((merged_arg, logs));
      -        } else {
      -            return Err(anyhow!("Args do not intersect"));
               }
      +        json_map.insert(
      +            "Globals".to_string(),
      +            serde_json::Value::Object(global_param_map),
      +        );
      +        serde_json::Value::Object(json_map)
           }
      -    Err(anyhow!("Args are no stack arguments"))
       }
       
      -impl Default for FunctionSignature {
      -    fn default() -> Self {
      -        Self::new()
      +/// If the abstract location is a location on the stack
      +/// then return its offset relative to the zero position on the stack.
      +fn get_offset_if_simple_stack_param(
      +    param: &AbstractLocation,
      +    stack_register: &Variable,
      +) -> Option<i64> {
      +    if let AbstractLocation::Pointer(var, mem_location) = param {
      +        if var == stack_register {
      +            if let AbstractMemoryLocation::Location { offset, .. } = mem_location {
      +                return Some(*offset);
      +            }
      +        }
           }
      +    None
      +}
      +
      +/// Generate an abstract location of a (non-nested) stack parameter.
      +fn generate_simple_stack_param(
      +    offset: i64,
      +    size: ByteSize,
      +    stack_register: &Variable,
      +) -> AbstractLocation {
      +    AbstractLocation::Pointer(
      +        stack_register.clone(),
      +        AbstractMemoryLocation::Location { offset, size },
      +    )
       }
       
       #[cfg(test)]
      diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/state/call_handling.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/state/call_handling/mod.rs.html
      similarity index 52%
      rename from doc/html/src/cwe_checker_lib/analysis/function_signature/state/call_handling.rs.html
      rename to doc/html/src/cwe_checker_lib/analysis/function_signature/state/call_handling/mod.rs.html
      index 008afeec4..5a9a2eb5c 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/state/call_handling.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/state/call_handling/mod.rs.html
      @@ -1,4 +1,4 @@
      -call_handling.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -255,6 +255,100 @@
       255
       256
       257
      +258
      +259
      +260
      +261
      +262
      +263
      +264
      +265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +289
      +290
      +291
      +292
      +293
      +294
      +295
      +296
      +297
      +298
      +299
      +300
      +301
      +302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +333
      +334
      +335
      +336
      +337
      +338
      +339
      +340
      +341
      +342
      +343
      +344
      +345
      +346
      +347
      +348
      +349
      +350
      +351
       
      use super::*;
       
       impl State {
      @@ -348,22 +442,21 @@
       
           /// Fill every return register that might be a pointer with a value that may point to any pointer-sized input ID
           /// or to an output ID specific to the call and output register.
      +    /// Non-pointer-sized output registers are only filled with an ID specific to the call and output register.
           fn generate_return_values_for_call(
               &mut self,
               input_ids: &BTreeSet<AbstractIdentifier>,
               return_args: &[Arg],
               call_tid: &Tid,
           ) {
      -        // Fill every output register with a value that may point to any pointer-sized input ID
      -        // or to an output ID specific to the call and output register.
      -        let generic_pointer_size = self.stack_id.unwrap_register().size;
      +        let generic_pointer_size = self.stack_id.bytesize();
               let generic_output_relative_values: BTreeMap<AbstractIdentifier, BitvectorDomain> =
                   input_ids
                       .iter()
                       .filter(|id| id.bytesize() == generic_pointer_size)
                       .map(|id| (id.clone(), BitvectorDomain::new_top(generic_pointer_size)))
                       .collect();
      -        let mut generic_output = DataDomain::new_top(generic_pointer_size);
      +        let mut generic_output = DataDomain::new_empty(generic_pointer_size);
               generic_output.set_relative_values(generic_output_relative_values);
       
               for output_arg in return_args {
      @@ -372,13 +465,15 @@
                       data_type: _,
                   } = output_arg
                   {
      +                let specific_id = AbstractIdentifier::from_var(call_tid.clone(), var);
      +                self.add_id_to_tracked_ids(&specific_id);
      +                let specific_target =
      +                    DataDomain::from_target(specific_id, Bitvector::zero(var.size.into()).into());
                       if var.size == generic_pointer_size {
      -                    let specific_target = DataDomain::from_target(
      -                        AbstractIdentifier::from_var(call_tid.clone(), var),
      -                        Bitvector::zero(var.size.into()).into(),
      -                    );
                           let output = generic_output.merge(&specific_target);
                           self.set_register(var, output);
      +                } else {
      +                    self.set_register(var, specific_target);
                       }
                   }
               }
      @@ -388,21 +483,21 @@
           ///
           /// A register (or stack position with positive offset) is considered a parameter
           /// if any access to its value at function start is recorded in the corresponding object signature.
      -    pub fn get_params_of_current_function(&self) -> Vec<(Arg, AccessPattern)> {
      +    /// A nested location is considered a parameter if it was dereferenced during the function execution.
      +    pub fn get_params_of_current_function(&self) -> Vec<(&AbstractLocation, AccessPattern)> {
               let mut params = Vec::new();
               for (id, access_pattern) in self.tracked_ids.iter() {
      -            if id.get_tid() == self.get_current_function_tid() {
      -                if let Ok(param_arg) = generate_param_arg_from_abstract_id(id) {
      -                    if access_pattern.is_accessed() {
      -                        params.push((param_arg, *access_pattern));
      -                    } else if matches!(id.get_location(), &AbstractLocation::Pointer { .. }) {
      -                        // This is a stack parameter.
      -                        // If it was only loaded into a register but otherwise not used, then the read-flag needs to be set.
      -                        let mut access_pattern = *access_pattern;
      -                        access_pattern.set_read_flag();
      -                        params.push((param_arg, access_pattern));
      -                    }
      +            if self.is_register_based_param_id(id) {
      +                if (id.get_location().recursion_depth() > 0 && access_pattern.is_dereferenced())
      +                    || (id.get_location().recursion_depth() == 0 && access_pattern.is_accessed())
      +                {
      +                    params.push((id.get_location(), *access_pattern));
                       }
      +            } else if self.is_stack_based_param_id(id)
      +                && ((id.get_location().recursion_depth() > 1 && access_pattern.is_dereferenced())
      +                    || (id.get_location().recursion_depth() == 1 && access_pattern.is_accessed()))
      +            {
      +                params.push((id.get_location(), *access_pattern));
                   }
               }
               params
      @@ -410,16 +505,26 @@
       
           /// Return a list of all potential global memory addresses
           /// for which any type of access has been tracked by the current state.
      -    pub fn get_global_mem_params_of_current_function(&self) -> Vec<(u64, AccessPattern)> {
      +    pub fn get_global_mem_params_of_current_function(
      +        &self,
      +    ) -> Vec<(&AbstractLocation, AccessPattern)> {
               let mut global_params = Vec::new();
               for (id, access_pattern) in self.tracked_ids.iter() {
                   if id.get_tid() == self.get_current_function_tid() {
      -                match id.get_location() {
      -                    AbstractLocation::GlobalPointer(address, _)
      -                    | AbstractLocation::GlobalAddress { address, .. } => {
      -                        global_params.push((*address, *access_pattern));
      +                let location = id.get_location();
      +                match location {
      +                    AbstractLocation::GlobalAddress { .. } => {
      +                        if access_pattern.is_accessed() {
      +                            global_params.push((location, *access_pattern));
      +                        }
      +                    }
      +                    AbstractLocation::GlobalPointer(_, _) => {
      +                        // Nested parameters are only explicitly tracked if they are dereferenced.
      +                        if access_pattern.is_dereferenced() {
      +                            global_params.push((location, *access_pattern));
      +                        }
                           }
      -                    AbstractLocation::Pointer(_, _) | AbstractLocation::Register(_) => (),
      +                    _ => (),
                       }
                   }
               }
      @@ -434,52 +539,155 @@
           /// Note that this may create new stack parameter objects for self.
           pub fn merge_parameter_access(
               &mut self,
      -        params: &[(Arg, AccessPattern)],
      +        params: &[(&AbstractLocation, AccessPattern)],
               global_memory: &RuntimeMemoryImage,
           ) {
               for (parameter, call_access_pattern) in params {
      -            let param_value = self.eval_parameter_arg(parameter);
      +            let param_value = self.eval_param_location(parameter, global_memory);
                   let param_value = self.substitute_global_mem_address(param_value, global_memory);
      +
                   for (id, offset) in param_value.get_relative_values() {
                       if let Some(object) = self.tracked_ids.get_mut(id) {
                           *object = object.merge(call_access_pattern);
      -                }
      -                if *id == self.stack_id && call_access_pattern.is_dereferenced() {
      -                    if let Ok(offset) = offset.try_to_bitvec() {
      -                        // We also have to dereference the stack pointer and set the access flags of the pointed-to value
      -                        let value = self.load_unsized_value_from_stack(offset.clone());
      -                        for id in value.referenced_ids() {
      -                            if let Some(object) = self.tracked_ids.get_mut(id) {
      -                                // Since we do not know whether the value itself was also dereferenced in the callee,
      -                                // we have to assume some unknown access to the value.
      -                                object.set_unknown_access_flags();
      +                } else if *id == self.stack_id {
      +                    // Add stack IDs only if they correspond to stack parameters, i.e. the offset is positive.
      +                    if let Ok(concrete_offset) = offset.try_to_bitvec() {
      +                        if !concrete_offset.sign_bit().to_bool() {
      +                            if let Some(stack_param) = self.generate_stack_param_id_if_nonexistent(
      +                                concrete_offset,
      +                                id.bytesize(),
      +                            ) {
      +                                let object = self.tracked_ids.get_mut(&stack_param).unwrap();
      +                                *object = object.merge(call_access_pattern);
                                   }
                               }
                           }
      -                    if call_access_pattern.is_mutably_dereferenced() {
      -                        // The stack value may have been overwritten by the call
      -                        if let Ok(offset) = offset.try_to_offset() {
      -                            self.stack.mark_interval_values_as_top(
      -                                offset,
      -                                offset,
      -                                ByteSize::new(1),
      -                            );
      -                        }
      +                } else {
      +                    self.tracked_ids.insert(id.clone(), *call_access_pattern);
      +                }
      +
      +                if *id == self.stack_id && call_access_pattern.is_mutably_dereferenced() {
      +                    // The stack value may have been overwritten by the call
      +                    if let Ok(offset) = offset.try_to_offset() {
      +                        self.stack
      +                            .mark_interval_values_as_top(offset, offset, ByteSize::new(1));
                           }
                       }
                   }
               }
           }
       
      -    /// If the given abstract ID represents a possible parameter of the current function
      -    /// then return an argument object corresponding to the parameter.
      -    pub fn get_arg_corresponding_to_id(&self, id: &AbstractIdentifier) -> Option<Arg> {
      -        if id.get_tid() == self.stack_id.get_tid() {
      -            generate_param_arg_from_abstract_id(id).ok()
      -        } else {
      -            None
      -        }
      +    /// Evaluate the value of a parameter location from a call on the current state.
      +    ///
      +    /// This function panics for global parameters.
      +    pub fn eval_param_location(
      +        &mut self,
      +        param_location: &AbstractLocation,
      +        global_memory: &RuntimeMemoryImage,
      +    ) -> DataDomain<BitvectorDomain> {
      +        match param_location {
      +            AbstractLocation::GlobalAddress { .. } | AbstractLocation::GlobalPointer(_, _) => {
      +                panic!("Globals are not valid parameter locations.")
      +            }
      +            AbstractLocation::Register(var) => {
      +                let value = self.get_register(var);
      +                self.substitute_global_mem_address(value, global_memory)
      +            }
      +            AbstractLocation::Pointer(var, mem_location) => {
      +                if var == self.stack_id.unwrap_register() {
      +                    self.eval_stack_pointer_param_location(mem_location, global_memory)
      +                } else {
      +                    let value = self.get_register(var);
      +                    let value = self.substitute_global_mem_address(value, global_memory);
      +                    self.eval_mem_location_relative_value(value, mem_location)
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Evaluate the value of a parameter location relative to the stack pointer position in the current state.
      +    fn eval_stack_pointer_param_location(
      +        &mut self,
      +        mem_location: &AbstractMemoryLocation,
      +        global_memory: &RuntimeMemoryImage,
      +    ) -> DataDomain<BitvectorDomain> {
      +        let stack_register = self.stack_id.unwrap_register();
      +        match mem_location {
      +            AbstractMemoryLocation::Location { offset, size } => {
      +                if let Some(stack_offset) =
      +                    self.get_offset_if_exact_stack_pointer(&self.get_register(stack_register))
      +                {
      +                    let stack_offset = stack_offset
      +                        + &Bitvector::from_i64(*offset).into_sign_resize(self.stack_id.bytesize());
      +                    self.load_value_from_stack(stack_offset, *size)
      +                } else {
      +                    DataDomain::new_top(*size)
      +                }
      +            }
      +            AbstractMemoryLocation::Pointer {
      +                offset,
      +                target: inner_mem_location,
      +            } => {
      +                if let Some(stack_offset) =
      +                    self.get_offset_if_exact_stack_pointer(&self.get_register(stack_register))
      +                {
      +                    let stack_offset = stack_offset
      +                        + &Bitvector::from_i64(*offset).into_sign_resize(self.stack_id.bytesize());
      +                    let value = self.load_value_from_stack(stack_offset, self.stack_id.bytesize());
      +                    let value = self.substitute_global_mem_address(value, global_memory);
      +                    self.eval_mem_location_relative_value(value, inner_mem_location)
      +                } else {
      +                    DataDomain::new_top(inner_mem_location.bytesize())
      +                }
      +            }
      +        }
           }
      +
      +    /// Return `true` if the given ID is a parameter ID,
      +    /// but not a global parameter.
      +    /// This function does not check access patterns for the ID.
      +    fn is_register_based_param_id(&self, id: &AbstractIdentifier) -> bool {
      +        if id.get_tid() != self.get_current_function_tid() || id == &self.stack_id {
      +            return false;
      +        }
      +        // Filter out global IDs
      +        if matches!(
      +            id.get_location(),
      +            AbstractLocation::GlobalAddress { .. } | AbstractLocation::GlobalPointer(_, _)
      +        ) {
      +            return false;
      +        }
      +        // Filter out stack based IDs
      +        if let AbstractLocation::Pointer(var, _) = id.get_location() {
      +            if var == self.stack_id.unwrap_register() {
      +                return false;
      +            }
      +        }
      +        true
      +    }
      +
      +    /// Return `true` if the given ID is a stack parameter ID or a nested stack parameter ID.
      +    /// This function does not check access patterns for the ID.
      +    fn is_stack_based_param_id(&self, id: &AbstractIdentifier) -> bool {
      +        if id.get_tid() != self.get_current_function_tid() || id == &self.stack_id {
      +            return false;
      +        }
      +        if let AbstractLocation::Pointer(register, mem_location) = id.get_location() {
      +            if register == self.stack_id.unwrap_register() {
      +                // ID is stack based, we have to filter out negative stack offsets.
      +                match mem_location {
      +                    AbstractMemoryLocation::Location { offset, .. }
      +                    | AbstractMemoryLocation::Pointer { offset, .. } => {
      +                        if *offset < 0 {
      +                            return false;
      +                        }
      +                    }
      +                }
      +                return true;
      +            }
      +        }
      +        false
      +    }
       }
       
       /// Generate register arguments from a list of registers.
      @@ -490,26 +698,6 @@
               .collect()
       }
       
      -/// Generate an argument representing the location in the given abstract ID.
      -/// If the location is a pointer, it is assumed that the pointer points to the stack.
      -/// Returns an error if the location contains a second level of indirection
      -/// or if the location is associated to global memory.
      -fn generate_param_arg_from_abstract_id(id: &AbstractIdentifier) -> Result<Arg, Error> {
      -    match id.get_location() {
      -        AbstractLocation::Register(var) => Ok(Arg::from_var(var.clone(), None)),
      -        AbstractLocation::Pointer(var, mem_location) => match mem_location {
      -            AbstractMemoryLocation::Location { offset, size } => Ok(Arg::Stack {
      -                address: Expression::Var(var.clone()).plus_const(*offset),
      -                size: *size,
      -                data_type: None,
      -            }),
      -            AbstractMemoryLocation::Pointer { .. } => {
      -                Err(anyhow!("Memory location is not a stack offset."))
      -            }
      -        },
      -        AbstractLocation::GlobalAddress { .. } | AbstractLocation::GlobalPointer(_, _) => {
      -            Err(anyhow!("Global values are not parameters."))
      -        }
      -    }
      -}
      +#[cfg(test)]
      +pub mod tests;
       
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/state/memory_handling.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/state/memory_handling.rs.html new file mode 100644 index 000000000..5db892987 --- /dev/null +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/state/memory_handling.rs.html @@ -0,0 +1,655 @@ +memory_handling.rs - source
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +63
      +64
      +65
      +66
      +67
      +68
      +69
      +70
      +71
      +72
      +73
      +74
      +75
      +76
      +77
      +78
      +79
      +80
      +81
      +82
      +83
      +84
      +85
      +86
      +87
      +88
      +89
      +90
      +91
      +92
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
      +205
      +206
      +207
      +208
      +209
      +210
      +211
      +212
      +213
      +214
      +215
      +216
      +217
      +218
      +219
      +220
      +221
      +222
      +223
      +224
      +225
      +226
      +227
      +228
      +229
      +230
      +231
      +232
      +233
      +234
      +235
      +236
      +237
      +238
      +239
      +240
      +241
      +242
      +243
      +244
      +245
      +246
      +247
      +248
      +249
      +250
      +251
      +252
      +253
      +254
      +255
      +256
      +257
      +258
      +259
      +260
      +261
      +262
      +263
      +264
      +265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +289
      +290
      +291
      +292
      +293
      +294
      +295
      +296
      +297
      +298
      +299
      +300
      +301
      +302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +
      use super::State;
      +use crate::abstract_domain::*;
      +use crate::intermediate_representation::*;
      +
      +impl State {
      +    /// Load the value at the given address.
      +    ///
      +    /// Only values on the stack and in registers are tracked directly.
      +    /// For all other values abstract location strings are generated
      +    /// that track how the pointer to the value is computed.
      +    ///
      +    /// This function does not set any access flags for input IDs in the address value.
      +    pub fn load_value(
      +        &mut self,
      +        address: DataDomain<BitvectorDomain>,
      +        size: ByteSize,
      +        global_memory: Option<&RuntimeMemoryImage>,
      +    ) -> DataDomain<BitvectorDomain> {
      +        let mut loaded_value = DataDomain::new_empty(size);
      +        for (id, offset) in address.get_relative_values() {
      +            loaded_value = loaded_value.merge(&self.load_value_via_id_and_offset(id, offset, size));
      +        }
      +        if let Some(global_address) = address.get_absolute_value() {
      +            loaded_value =
      +                loaded_value.merge(&self.load_global_address(global_address, size, global_memory));
      +        }
      +        if address.contains_top() {
      +            loaded_value.set_contains_top_flag();
      +        }
      +        loaded_value
      +    }
      +
      +    /// Load the value whose position is given by derefencing the given ID and then adding an offset.
      +    ///
      +    /// If the ID is the stack then this function actually loads the value at the given stack position.
      +    /// Otherwise it only generates the abstract location of the value and returns it as a relative value.
      +    fn load_value_via_id_and_offset(
      +        &mut self,
      +        id: &AbstractIdentifier,
      +        offset: &BitvectorDomain,
      +        size: ByteSize,
      +    ) -> DataDomain<BitvectorDomain> {
      +        if *id == self.stack_id {
      +            // Try to load a value from the stack (which may generate a new stack parameter)
      +            match offset.try_to_bitvec() {
      +                Ok(stack_offset) => self.load_value_from_stack(stack_offset, size),
      +                Err(_) => DataDomain::new_top(size),
      +            }
      +        } else if let (true, Ok(constant_offset)) = (
      +            id.get_location().recursion_depth() < self.pointer_recursion_depth_limit,
      +            offset.try_to_offset(),
      +        ) {
      +            // Extend the abstract location string
      +            let new_id = AbstractIdentifier::new(
      +                id.get_tid().clone(),
      +                id.get_location()
      +                    .clone()
      +                    .dereferenced(size, self.stack_id.bytesize())
      +                    .with_offset_addendum(constant_offset),
      +            );
      +            DataDomain::from_target(new_id, Bitvector::zero(size.into()).into())
      +        } else {
      +            // The abstract location string cannot be extended
      +            DataDomain::new_top(size)
      +        }
      +    }
      +
      +    /// Load a value from the global address space.
      +    /// If the address is located in writeable global memory then generate a new abstract ID for the value
      +    /// and return a value relative to the new ID.
      +    fn load_global_address(
      +        &mut self,
      +        global_address: &BitvectorDomain,
      +        size: ByteSize,
      +        global_memory: Option<&RuntimeMemoryImage>,
      +    ) -> DataDomain<BitvectorDomain> {
      +        if let (Ok(offset), Some(global_mem)) = (global_address.try_to_bitvec(), global_memory) {
      +            match global_mem.read(&offset, size) {
      +                Ok(Some(value)) => value.into(),
      +                Ok(None) => {
      +                    let address = global_address.try_to_offset().unwrap() as u64;
      +                    let global_mem_location = AbstractLocation::GlobalAddress { address, size };
      +                    let global_mem_id = AbstractIdentifier::new(
      +                        self.get_current_function_tid().clone(),
      +                        global_mem_location,
      +                    );
      +                    DataDomain::from_target(global_mem_id, Bitvector::zero(size.into()).into())
      +                }
      +                Err(_) => DataDomain::new_top(size),
      +            }
      +        } else {
      +            DataDomain::new_top(size)
      +        }
      +    }
      +
      +    /// Load the value at the given stack offset.
      +    /// If the offset is non-negative a corresponding stack parameter is generated if necessary.
      +    pub fn load_value_from_stack(
      +        &mut self,
      +        stack_offset: Bitvector,
      +        size: ByteSize,
      +    ) -> DataDomain<BitvectorDomain> {
      +        if !stack_offset.sign_bit().to_bool() {
      +            // Stack offset is nonnegative, i.e. this is a stack parameter access.
      +            self.get_stack_param(stack_offset, size)
      +        } else {
      +            self.stack.get(stack_offset, size)
      +        }
      +    }
      +
      +    /// Load a value of unknown bytesize at the given stack offset.
      +    /// If the offset is non-negative, a corresponding stack parameter is generated if necessary.
      +    ///
      +    /// One must be careful to not rely on the correctness of the bytesize of the returned value!
      +    /// If the size of the value cannot be guessed from the contents of the stack,
      +    /// then a size of 1 byte is assumed, which will be wrong in general!
      +    pub fn load_unsized_value_from_stack(
      +        &mut self,
      +        offset: Bitvector,
      +    ) -> DataDomain<BitvectorDomain> {
      +        if !offset.sign_bit().to_bool() {
      +            // This is a pointer to a stack parameter of the current function
      +            self.stack
      +                .get_unsized(offset.clone())
      +                .unwrap_or_else(|| self.get_stack_param(offset, ByteSize::new(1)))
      +        } else {
      +            self.stack
      +                .get_unsized(offset)
      +                .unwrap_or_else(|| DataDomain::new_top(ByteSize::new(1)))
      +        }
      +    }
      +
      +    /// If `address` is a stack offset, then write `value` onto the stack.
      +    ///
      +    /// If address points to a stack parameter, whose ID does not yet exists,
      +    /// then the ID is generated and added to the tracked IDs.
      +    ///
      +    /// This function does not set any access flags for input IDs of the given address or value.
      +    pub fn write_value(
      +        &mut self,
      +        address: DataDomain<BitvectorDomain>,
      +        value: DataDomain<BitvectorDomain>,
      +    ) {
      +        if let Some(stack_offset) = self.get_offset_if_exact_stack_pointer(&address) {
      +            if !stack_offset.sign_bit().to_bool() {
      +                // We generate a new stack parameter object, but do not set any access flags,
      +                // since the stack parameter is not accessed but overwritten.
      +                let _ = self
      +                    .generate_stack_param_id_if_nonexistent(stack_offset.clone(), value.bytesize());
      +            }
      +            self.stack.add(value, stack_offset);
      +        } else if let Some(stack_offset_domain) = address.get_relative_values().get(&self.stack_id)
      +        {
      +            if let Ok(stack_offset) = stack_offset_domain.try_to_bitvec() {
      +                if !stack_offset.sign_bit().to_bool() {
      +                    // We generate a new stack parameter object, but do not set any access flags,
      +                    // since the stack parameter is not accessed but overwritten.
      +                    let _ = self.generate_stack_param_id_if_nonexistent(
      +                        stack_offset.clone(),
      +                        value.bytesize(),
      +                    );
      +                }
      +                let previous_value = self.stack.get(stack_offset.clone(), value.bytesize());
      +                self.stack.add(previous_value.merge(&value), stack_offset);
      +            } else {
      +                self.stack.mark_all_values_as_top();
      +            }
      +        }
      +    }
      +
      +    /// Get the value located at a positive stack offset.
      +    /// This function panics if the address is a negative offset.
      +    ///
      +    /// If no corresponding stack parameter ID exists for the value,
      +    /// generate it and then return it as an unmodified stack parameter.
      +    /// Otherwise just read the value at the given stack address.
      +    fn get_stack_param(
      +        &mut self,
      +        address: Bitvector,
      +        size: ByteSize,
      +    ) -> DataDomain<BitvectorDomain> {
      +        assert!(!address.sign_bit().to_bool());
      +        if let Some(param_id) = self.generate_stack_param_id_if_nonexistent(address.clone(), size) {
      +            let stack_param =
      +                DataDomain::from_target(param_id, Bitvector::zero(size.into()).into());
      +            self.stack.add(stack_param.clone(), address);
      +            stack_param
      +        } else {
      +            self.stack.get(address, size)
      +        }
      +    }
      +
      +    /// If the address is an exactly known pointer to the stack with a constant offset, then return the offset.
      +    pub fn get_offset_if_exact_stack_pointer(
      +        &self,
      +        address: &DataDomain<BitvectorDomain>,
      +    ) -> Option<Bitvector> {
      +        if let Some((target, offset)) = address.get_if_unique_target() {
      +            if *target == self.stack_id {
      +                return offset.try_to_bitvec().ok();
      +            }
      +        }
      +        None
      +    }
      +}
      +
      +#[cfg(test)]
      +pub mod tests {
      +    use super::*;
      +    use crate::{bitvec, variable};
      +
      +    /// Mock an abstract ID representing the stack.
      +    fn mock_stack_id() -> AbstractIdentifier {
      +        AbstractIdentifier::from_var(Tid::new("mock_fn"), &variable!("sp:4"))
      +    }
      +
      +    /// Mock an abstract ID of a stack parameter
      +    fn mock_stack_param_id(offset: i64, size: u64) -> AbstractIdentifier {
      +        AbstractIdentifier::new(
      +            Tid::new("mock_fn"),
      +            AbstractLocation::from_stack_position(
      +                mock_stack_id().unwrap_register(),
      +                offset,
      +                ByteSize::new(size),
      +            ),
      +        )
      +    }
      +
      +    #[test]
      +    fn test_get_offset_if_exact_stack_pointer() {
      +        let state = State::mock_arm32();
      +        let stack_pointer =
      +            DataDomain::from_target(mock_stack_id(), Bitvector::from_i32(-10).into());
      +        assert_eq!(
      +            state.get_offset_if_exact_stack_pointer(&stack_pointer),
      +            Some(Bitvector::from_i32(-10))
      +        );
      +    }
      +
      +    #[test]
      +    fn test_get_stack_param() {
      +        // Reading a previously non-existing stack parameter
      +        let mut state = State::mock_arm32();
      +        let stack_param = state.get_stack_param(bitvec!("0xc:4"), ByteSize::new(8));
      +        let expected_stack_id = AbstractIdentifier::mock_nested("mock_fn", "sp:4", &[12], 8);
      +        let expected_value =
      +            DataDomain::from_target(expected_stack_id.clone(), bitvec!("0x0:8").into());
      +        assert_eq!(&stack_param, &expected_value);
      +        assert!(state.tracked_ids.contains_key(&expected_stack_id));
      +        // Reading the stack parameter again. The position should still contain the stack parameter.
      +        let stack_param = state.get_stack_param(bitvec!("0xc:4"), ByteSize::new(8));
      +        assert_eq!(&stack_param, &expected_value);
      +        // Reading the stack parameter after it has been overwritten with a value.
      +        state
      +            .stack
      +            .insert_at_byte_index(bitvec!("0x2a:8").into(), 12);
      +        let value = state.get_stack_param(bitvec!("0xc:4"), ByteSize::new(8));
      +        assert_eq!(value, bitvec!("0x2a:8").into());
      +    }
      +
      +    #[test]
      +    fn test_store_and_load_from_stack() {
      +        let mut state = State::mock_arm32();
      +        let address = DataDomain::from_target(mock_stack_id(), bitvec!("-4:4").into());
      +        let value: DataDomain<BitvectorDomain> = bitvec!("0x0:4").into();
      +        // write and load a value to the current stack frame
      +        state.write_value(address.clone(), value.clone());
      +        assert_eq!(state.stack.iter().len(), 1);
      +        assert_eq!(
      +            state.stack.get(bitvec!("-4:4"), ByteSize::new(4)),
      +            value.clone()
      +        );
      +        assert_eq!(state.load_value(address, ByteSize::new(4), None), value);
      +        // Load a parameter register and check that the parameter gets generated
      +        let address = DataDomain::from_target(mock_stack_id(), bitvec!("0x4:4").into());
      +        let stack_param_id = mock_stack_param_id(4, 4);
      +        let stack_param = DataDomain::from_target(stack_param_id.clone(), bitvec!("0x0:4").into());
      +        assert_eq!(state.tracked_ids.iter().len(), 6);
      +        assert_eq!(
      +            state.load_value(address.clone(), ByteSize::new(4), None),
      +            stack_param
      +        );
      +        assert_eq!(state.tracked_ids.iter().len(), 7);
      +        assert_eq!(
      +            state
      +                .tracked_ids
      +                .get(&stack_param_id)
      +                .unwrap()
      +                .is_accessed(),
      +            false
      +        ); // The load method does not set access flags.
      +    }
      +
      +    #[test]
      +    fn test_load_unsized_from_stack() {
      +        let mut state = State::mock_arm32();
      +        // Load an existing stack param (generated by a sized load at the same address)
      +        let address = DataDomain::from_target(mock_stack_id(), bitvec!("0x0:4").into());
      +        let stack_param_id = mock_stack_param_id(0, 4);
      +        let stack_param = DataDomain::from_target(stack_param_id.clone(), bitvec!("0x0:4").into());
      +        state.load_value(address, ByteSize::new(4), None);
      +        let unsized_load = state.load_unsized_value_from_stack(bitvec!("0x0:4").into());
      +        assert_eq!(unsized_load, stack_param);
      +        assert!(state.tracked_ids.get(&stack_param_id).is_some());
      +        // Load a non-existing stack param
      +        let stack_param_id = mock_stack_param_id(4, 1);
      +        let stack_param = DataDomain::from_target(stack_param_id.clone(), bitvec!("0x0:1").into());
      +        let unsized_load = state.load_unsized_value_from_stack(bitvec!("0x4:4"));
      +        assert_eq!(unsized_load, stack_param);
      +        assert!(state.tracked_ids.get(&stack_param_id).is_some());
      +        // Unsized load from the current stack frame
      +        let unsized_load = state.load_unsized_value_from_stack(bitvec!("-4:4"));
      +        assert_eq!(unsized_load, DataDomain::new_top(ByteSize::new(1)));
      +    }
      +
      +    #[test]
      +    fn test_load_nested_pointers() {
      +        let mut state = State::mock_arm32();
      +        let global_memory = RuntimeMemoryImage::mock();
      +        let parent_id = AbstractIdentifier::mock_nested("mock_fn", "r0:4", &[4], 4);
      +        let pointer = DataDomain::from_target(parent_id.clone(), bitvec!("0x8:4").into());
      +        let loaded_value = state.load_value(pointer, ByteSize::new(4), Some(&global_memory));
      +        let expected_id = AbstractIdentifier::mock_nested("mock_fn", "r0:4", &[4, 8], 4);
      +        let expected_value = DataDomain::from_target(expected_id.clone(), bitvec!("0x0:4").into());
      +        assert_eq!(loaded_value, expected_value);
      +    }
      +}
      +
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/state.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/state/mod.rs.html similarity index 76% rename from doc/html/src/cwe_checker_lib/analysis/function_signature/state.rs.html rename to doc/html/src/cwe_checker_lib/analysis/function_signature/state/mod.rs.html index 715e9ae1f..64fd3f29c 100644 --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/state.rs.html +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/state/mod.rs.html @@ -1,4 +1,4 @@ -state.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -457,33 +457,17 @@
       457
       458
       459
      -460
      -461
      -462
      -463
      -464
      -465
      -466
      -467
      -468
      -469
      -470
      -471
      -472
      -473
      -474
      -475
      -
      use std::collections::BTreeMap;
      -use std::collections::BTreeSet;
      -
      +
      use super::AccessPattern;
       use crate::abstract_domain::*;
       use crate::intermediate_representation::*;
       use crate::prelude::*;
      -
      -use super::AccessPattern;
      +use std::collections::BTreeMap;
      +use std::collections::BTreeSet;
       
       /// Methods of [`State`] related to handling call instructions.
       mod call_handling;
      +/// Methods of [`State`] related to handling load and store instructions.
      +mod memory_handling;
       
       /// The state tracks knowledge about known register values,
       /// known values on the stack, and access patterns of tracked variables.
      @@ -501,6 +485,10 @@
           stack: MemRegion<DataDomain<BitvectorDomain>>,
           /// Maps each tracked ID to an [`AccessPattern`], which tracks known access patterns to the object.
           tracked_ids: DomainMap<AbstractIdentifier, AccessPattern, UnionMergeStrategy>,
      +    /// The recursion depth limit for abstract locations to be tracked by the function signature analysis,
      +    /// i.e. how many dereference operations an abstract location is allowed to contain
      +    /// before the analysis stops tracking the location.
      +    pointer_recursion_depth_limit: u64,
       }
       
       impl State {
      @@ -511,6 +499,7 @@
               func_tid: &Tid,
               stack_register: &Variable,
               calling_convention: &CallingConvention,
      +        pointer_recursion_depth_limit: u64,
           ) -> State {
               let mut register_map = BTreeMap::new();
               let mut tracked_ids = BTreeMap::new();
      @@ -538,9 +527,18 @@
                   stack_id,
                   stack,
                   tracked_ids: DomainMap::from(tracked_ids),
      +            pointer_recursion_depth_limit,
               }
           }
       
      +    /// Set the pointer recursion depth limit to the provided value.
      +    ///
      +    /// Note that one should call this function for all states,
      +    /// because merging two states with different depth limits will panic.
      +    pub fn set_pointer_recursion_depth_limit(&mut self, limit: u64) {
      +        self.pointer_recursion_depth_limit = limit;
      +    }
      +
           /// Set the MIPS link register `t9` to the address of the function TID.
           ///
           /// According to the System V ABI for MIPS the caller has to save the callee address in register `t9`
      @@ -588,90 +586,6 @@
               self.stack_id.get_tid()
           }
       
      -    /// Load the value at the given address.
      -    ///
      -    /// Only constant addresses on the stack are tracked.
      -    /// Thus this function will always return a `Top` domain for any address
      -    /// that may not be a stack address with constant offset.
      -    ///
      -    /// This function does not set any access flags for input IDs in the address value.
      -    pub fn load_value(
      -        &mut self,
      -        address: DataDomain<BitvectorDomain>,
      -        size: ByteSize,
      -        global_memory: Option<&RuntimeMemoryImage>,
      -    ) -> DataDomain<BitvectorDomain> {
      -        if let Some(stack_offset) = self.get_offset_if_exact_stack_pointer(&address) {
      -            self.load_value_from_stack(stack_offset, size)
      -        } else if let (Ok(global_address), Some(global_mem)) =
      -            (address.try_to_bitvec(), global_memory)
      -        {
      -            if let Ok(Some(value)) = global_mem.read(&global_address, size) {
      -                value.into()
      -            } else {
      -                DataDomain::new_top(size)
      -            }
      -        } else {
      -            DataDomain::new_top(size)
      -        }
      -    }
      -
      -    /// Load the value at the given stack offset.
      -    /// If the offset is non-negative a corresponding stack parameter is generated if necessary.
      -    fn load_value_from_stack(
      -        &mut self,
      -        stack_offset: Bitvector,
      -        size: ByteSize,
      -    ) -> DataDomain<BitvectorDomain> {
      -        if !stack_offset.sign_bit().to_bool() {
      -            // Stack offset is nonnegative, i.e. this is a stack parameter access.
      -            self.get_stack_param(stack_offset, size)
      -        } else {
      -            self.stack.get(stack_offset, size)
      -        }
      -    }
      -
      -    /// Load a value of unknown bytesize at the given stack offset.
      -    /// If the offset is non-negative, a corresponding stack parameter is generated if necessary.
      -    ///
      -    /// One must be careful to not rely on the correctness of the bytesize of the returned value!
      -    /// If the size of the value cannot be guessed from the contents of the stack,
      -    /// then a size of 1 byte is assumed, which will be wrong in general!
      -    fn load_unsized_value_from_stack(&mut self, offset: Bitvector) -> DataDomain<BitvectorDomain> {
      -        if !offset.sign_bit().to_bool() {
      -            // This is a pointer to a stack parameter of the current function
      -            self.stack
      -                .get_unsized(offset.clone())
      -                .unwrap_or_else(|| self.get_stack_param(offset, ByteSize::new(1)))
      -        } else {
      -            self.stack
      -                .get_unsized(offset)
      -                .unwrap_or_else(|| DataDomain::new_top(ByteSize::new(1)))
      -        }
      -    }
      -
      -    /// If `address` is a stack offset, then write `value` onto the stack.
      -    ///
      -    /// If address points to a stack parameter, whose ID does not yet exists,
      -    /// then the ID is generated and added to the tracked IDs.
      -    ///
      -    /// This function does not set any access flags for input IDs of the given address or value.
      -    pub fn write_value(
      -        &mut self,
      -        address: DataDomain<BitvectorDomain>,
      -        value: DataDomain<BitvectorDomain>,
      -    ) {
      -        if let Some(stack_offset) = self.get_offset_if_exact_stack_pointer(&address) {
      -            // We generate a new stack parameter object, but do not set any access flags,
      -            // since the stack parameter is not accessed but overwritten.
      -            if !stack_offset.sign_bit().to_bool() {
      -                let _ = self
      -                    .generate_stack_param_id_if_nonexistent(stack_offset.clone(), value.bytesize());
      -            }
      -            self.stack.add(value, stack_offset);
      -        }
      -    }
      -
           /// If the stack parameter ID corresponding to the given stack offset does not exist
           /// then generate it, add it to the list of tracked IDs, and return it.
           fn generate_stack_param_id_if_nonexistent(
      @@ -703,40 +617,6 @@
               }
           }
       
      -    /// Get the value located at a positive stack offset.
      -    ///
      -    /// If no corresponding stack parameter ID exists for the value,
      -    /// generate it and then return it as an unmodified stack parameter.
      -    /// Otherwise just read the value at the given stack address.
      -    fn get_stack_param(
      -        &mut self,
      -        address: Bitvector,
      -        size: ByteSize,
      -    ) -> DataDomain<BitvectorDomain> {
      -        assert!(!address.sign_bit().to_bool());
      -        if let Some(param_id) = self.generate_stack_param_id_if_nonexistent(address.clone(), size) {
      -            let stack_param =
      -                DataDomain::from_target(param_id, Bitvector::zero(size.into()).into());
      -            self.stack.add(stack_param.clone(), address);
      -            stack_param
      -        } else {
      -            self.stack.get(address, size)
      -        }
      -    }
      -
      -    /// If the address is an exactly known pointer to the stack with a constant offset, then return the offset.
      -    pub fn get_offset_if_exact_stack_pointer(
      -        &self,
      -        address: &DataDomain<BitvectorDomain>,
      -    ) -> Option<Bitvector> {
      -        if let Some((target, offset)) = address.get_if_unique_target() {
      -            if *target == self.stack_id {
      -                return offset.try_to_bitvec().ok();
      -            }
      -        }
      -        None
      -    }
      -
           /// Merges the access pattern of the given abstract identifer in `self` with the provided access pattern.
           ///
           /// Does not add the identifier to the list of tracked identifiers if it is not already tracked in `self`.
      @@ -783,13 +663,56 @@
                       size,
                       data_type: _,
                   } => {
      -                self.set_deref_flag_for_input_ids_of_expression(address);
      +                self.set_deref_flag_for_pointer_inputs_of_expression(address);
      +                self.set_read_flag_for_input_ids_of_expression(address);
                       let address = self.eval(address);
                       self.load_value(address, *size, None)
                   }
               }
           }
       
      +    /// Evaluate the value at the given memory location
      +    /// where `value` represents the root pointer relative to which the memory location needs to be computed.
      +    fn eval_mem_location_relative_value(
      +        &mut self,
      +        value: DataDomain<BitvectorDomain>,
      +        mem_location: &AbstractMemoryLocation,
      +    ) -> DataDomain<BitvectorDomain> {
      +        let target_size = mem_location.bytesize();
      +        let mut eval_result = DataDomain::new_empty(target_size);
      +        for (id, offset) in value.get_relative_values() {
      +            let mut location = id.get_location().clone();
      +            let mut mem_location = mem_location.clone();
      +            match offset.try_to_offset() {
      +                Ok(concrete_offset) => mem_location.add_offset_at_root(concrete_offset),
      +                Err(_) => {
      +                    eval_result.set_contains_top_flag();
      +                    continue;
      +                }
      +            };
      +            location.extend(mem_location, self.stack_id.bytesize());
      +            if location.recursion_depth() <= self.pointer_recursion_depth_limit {
      +                eval_result = eval_result.merge(&DataDomain::from_target(
      +                    AbstractIdentifier::new(id.get_tid().clone(), location),
      +                    Bitvector::zero(target_size.into()).into(),
      +                ));
      +            } else {
      +                eval_result.set_contains_top_flag();
      +            }
      +        }
      +        if value.contains_top() || value.get_absolute_value().is_some() {
      +            eval_result.set_contains_top_flag();
      +        }
      +        eval_result
      +    }
      +
      +    /// Add all relative IDs in `data` to the list of tracked IDs.
      +    pub fn track_contained_ids(&mut self, data: &DataDomain<BitvectorDomain>) {
      +        for id in data.referenced_ids() {
      +            self.add_id_to_tracked_ids(id);
      +        }
      +    }
      +
           /// If the given expression is not an [`Expression::Var`] set the read flags
           /// for all IDs that may be referenced when computing the value of the expression.
           ///
      @@ -816,22 +739,34 @@
               }
           }
       
      -    /// Set the read and dereferenced flag for every tracked ID
      -    /// that may be referenced when computing the value of the expression.
      -    pub fn set_deref_flag_for_input_ids_of_expression(&mut self, expression: &Expression) {
      -        for register in expression.input_vars() {
      +    /// Set the read and dereferenced flag for every tracked pointer ID
      +    /// that may be referenced when computing the value of the given address expression.
      +    pub fn set_deref_flag_for_pointer_inputs_of_expression(&mut self, expression: &Expression) {
      +        for register in get_pointer_inputs_vars_of_address_expression(expression) {
                   self.set_deref_flag_for_contained_ids(&self.get_register(register));
               }
           }
       
      -    /// Set the read and mutably dereferenced flag for every tracked ID
      -    /// that may be referenced when computing the value of the expression.
      -    pub fn set_mutable_deref_flag_for_input_ids_of_expression(&mut self, expression: &Expression) {
      -        for register in expression.input_vars() {
      +    /// Set the read and mutably dereferenced flag for every tracked pointer ID
      +    /// that may be referenced when computing the value of the given address expression.
      +    pub fn set_mutable_deref_flag_for_pointer_inputs_of_expression(
      +        &mut self,
      +        expression: &Expression,
      +    ) {
      +        for register in get_pointer_inputs_vars_of_address_expression(expression) {
                   self.set_deref_mut_flag_for_contained_ids(&self.get_register(register));
               }
           }
       
      +    /// Set the read flag for every tracked ID contained in the given value.
      +    pub fn set_read_flag_for_contained_ids(&mut self, value: &DataDomain<BitvectorDomain>) {
      +        for id in value.referenced_ids() {
      +            if let Some(object) = self.tracked_ids.get_mut(id) {
      +                object.set_read_flag();
      +            }
      +        }
      +    }
      +
           /// Set the read and dereferenced flag for every tracked ID contained in the given value.
           pub fn set_deref_flag_for_contained_ids(&mut self, value: &DataDomain<BitvectorDomain>) {
               for id in value.referenced_ids() {
      @@ -888,9 +823,41 @@
           }
       }
       
      +/// Get a list of possible pointer input variables for the given address expression.
      +///
      +/// Only addition, subtraction and bitwise AND, OR, XOR can have pointers as inputs.
      +/// All other subexpressions are assumed to only compute offsets.
      +fn get_pointer_inputs_vars_of_address_expression(expr: &Expression) -> Vec<&Variable> {
      +    let mut input_vars = Vec::new();
      +    match expr {
      +        Expression::BinOp { op, lhs, rhs } => {
      +            match op {
      +                BinOpType::IntAdd | BinOpType::IntAnd | BinOpType::IntXOr | BinOpType::IntOr => {
      +                    // There could be a pointer on either of the sides
      +                    input_vars.extend(get_pointer_inputs_vars_of_address_expression(lhs));
      +                    input_vars.extend(get_pointer_inputs_vars_of_address_expression(rhs));
      +                }
      +                BinOpType::IntSub => {
      +                    // Only the left side could be a pointer
      +                    input_vars.extend(get_pointer_inputs_vars_of_address_expression(lhs));
      +                }
      +                _ => (),
      +            }
      +        }
      +        Expression::Var(var) => input_vars.push(var),
      +        _ => (),
      +    }
      +
      +    input_vars
      +}
      +
       impl AbstractDomain for State {
           /// Merge two states
           fn merge(&self, other: &Self) -> Self {
      +        assert_eq!(
      +            self.pointer_recursion_depth_limit,
      +            other.pointer_recursion_depth_limit
      +        );
               let stack_id = self.stack_id.clone();
               let stack = self.stack.merge(&other.stack);
               State {
      @@ -898,6 +865,7 @@
                   stack_id,
                   stack,
                   tracked_ids: self.tracked_ids.merge(&other.tracked_ids),
      +            pointer_recursion_depth_limit: self.pointer_recursion_depth_limit,
               }
           }
       
      @@ -947,5 +915,5 @@
       }
       
       #[cfg(test)]
      -mod tests;
      +pub mod tests;
       
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/analysis/function_signature/stubs.rs.html b/doc/html/src/cwe_checker_lib/analysis/function_signature/stubs.rs.html index 6931135de..f55a099e3 100644 --- a/doc/html/src/cwe_checker_lib/analysis/function_signature/stubs.rs.html +++ b/doc/html/src/cwe_checker_lib/analysis/function_signature/stubs.rs.html @@ -1,4 +1,4 @@ -stubs.rs - source
      1
      +stubs.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/graph.rs.html b/doc/html/src/cwe_checker_lib/analysis/graph.rs.html
      index eae688d28..d35ae6c51 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/graph.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/graph.rs.html
      @@ -1,4 +1,4 @@
      -graph.rs - source
      1
      +graph.rs - source
      1
       2
       3
       4
      @@ -664,7 +664,6 @@
       664
       665
       666
      -667
       
      //! Generate control flow graphs out of a program term.
       //!
       //! The generated graphs follow some basic principles:
      @@ -1144,8 +1143,7 @@
       
           /// Add all non-return-instruction-related jump edges to the graph.
           fn add_jump_and_call_edges(&mut self) {
      -        while !self.block_worklist.is_empty() {
      -            let node = self.block_worklist.pop().unwrap();
      +        while let Some(node) = self.block_worklist.pop() {
                   match self.graph[node] {
                       Node::BlkEnd(block, _) => self.add_outgoing_edges(node, block),
                       _ => panic!(),
      @@ -1180,7 +1178,7 @@
           let mut sub_to_entry_node_map: HashMap<Tid, NodeIndex> = HashMap::new();
           for node in graph.node_indices() {
               if let Node::BlkStart(block, sub) = graph[node] {
      -            if let Some(entry_block) = sub.term.blocks.get(0) {
      +            if let Some(entry_block) = sub.term.blocks.first() {
                       if block.tid == entry_block.tid {
                           sub_to_entry_node_map.insert(sub.tid.clone(), node);
                       }
      diff --git a/doc/html/src/cwe_checker_lib/analysis/interprocedural_fixpoint_generic.rs.html b/doc/html/src/cwe_checker_lib/analysis/interprocedural_fixpoint_generic.rs.html
      index c5b2ceea2..dfed13efb 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/interprocedural_fixpoint_generic.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/interprocedural_fixpoint_generic.rs.html
      @@ -1,4 +1,4 @@
      -interprocedural_fixpoint_generic.rs - source
      1
      +interprocedural_fixpoint_generic.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/mod.rs.html
      index 1c41b22e3..386ad3e29 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/id_manipulation.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/id_manipulation.rs.html
      index 076f4d52a..3d25a34da 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/id_manipulation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/id_manipulation.rs.html
      @@ -1,4 +1,4 @@
      -id_manipulation.rs - source
      1
      +id_manipulation.rs - source
      1
       2
       3
       4
      @@ -110,6 +110,61 @@
       110
       111
       112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
       
      use super::*;
       use crate::analysis::function_signature::AccessPattern;
       
      @@ -118,50 +173,52 @@
           /// to the value that represents it in the caller.
           ///
           /// For parameter IDs this is the value of the parameter on function call.
      -    /// For IDs of objects created in the callee it is the ID together with a path hint given by the call TID.
      +    /// For IDs of objects created in the callee it is the ID itself.
           /// For other IDs (including the callee stack frame ID) it is a `Top` value,
           /// i.e. the value of the ID should be unknown to the caller.
      +    ///
      +    /// Note that this function assumes that callee-originating IDs have already been renamed
      +    /// to the name they should represent in the caller beforehand.
           pub fn create_callee_id_to_caller_data_map(
               &self,
               state_before_call: &State,
               state_before_return: &State,
      -        call_tid: &Tid,
           ) -> BTreeMap<AbstractIdentifier, Data> {
               let stack_register = &self.project.stack_pointer_register;
               let mut id_map = BTreeMap::new();
               let callee_tid = state_before_return.get_fn_tid();
      -        let callee_fn_sig = self.fn_signatures.get(callee_tid).unwrap();
      -        for param in callee_fn_sig.parameters.keys() {
      -            let param_id = AbstractIdentifier::from_arg(callee_tid, param);
      -            if let Ok(param_value) =
      -                state_before_call.eval_parameter_arg(param, &self.project.runtime_memory_image)
      -            {
      +        if let Some(callee_fn_sig) = self.fn_signatures.get(callee_tid) {
      +            for param in callee_fn_sig.parameters.keys() {
      +                let param_id = AbstractIdentifier::new(callee_tid.clone(), param.clone());
      +                let param_value = state_before_call
      +                    .eval_abstract_location(param, &self.project.runtime_memory_image);
                       id_map.insert(param_id, param_value);
      -            } else {
      -                id_map.insert(param_id, Data::new_top(param.bytesize()));
      +            }
      +            for global_param in callee_fn_sig.global_parameters.keys() {
      +                let global_param_id =
      +                    AbstractIdentifier::new(callee_tid.clone(), global_param.clone());
      +                let global_param_value = state_before_call
      +                    .eval_abstract_location(global_param, &self.project.runtime_memory_image);
      +                id_map.insert(global_param_id, global_param_value);
                   }
               }
               for object_id in state_before_return.memory.get_all_object_ids() {
                   if object_id.get_tid() != callee_tid || !object_id.get_path_hints().is_empty() {
                       // Object is neither a parameter object nor the stack frame of the callee.
      -                if let Ok(new_object_id) = object_id.with_path_hint(call_tid.clone()) {
      -                    id_map.insert(
      +                id_map.insert(
      +                    object_id.clone(),
      +                    Data::from_target(
                               object_id,
      -                        Data::from_target(
      -                            new_object_id,
      -                            Bitvector::zero(stack_register.size.into()).into(),
      -                        ),
      -                    );
      -                } else {
      -                    id_map.insert(object_id, Data::new_top(stack_register.size));
      -                }
      +                        Bitvector::zero(stack_register.size.into()).into(),
      +                    ),
      +                );
                   }
               }
               id_map.insert(
                   state_before_return.stack_id.clone(),
                   Data::new_top(stack_register.size),
               );
      -        // Also insert the global memory IDs to the map.
      +        // Also insert the global memory ID to the map.
               id_map.insert(
                   state_before_return.get_global_mem_id(),
                   Data::from_target(
      @@ -173,6 +230,55 @@
               id_map
           }
       
      +    /// Create a map that maps callee IDs to the value assigned to it in the caller after a return instruction.
      +    ///
      +    /// This is *not* the map used in the internal `update_return` handling.
      +    /// Instead, the created map combines several ID renaming steps used internally into one renaming map.
      +    /// The map is intended for use in other analyses depending on the PointerInference,
      +    /// but not in the PointerInference itself.
      +    pub fn create_full_callee_id_to_caller_data_map(
      +        &self,
      +        state_before_call: &State,
      +        state_before_return: &State,
      +        call_tid: &Tid,
      +    ) -> BTreeMap<AbstractIdentifier, Data> {
      +        let cconv = &self.project.program.term.subs[state_before_return.get_fn_tid()]
      +            .term
      +            .calling_convention;
      +        let cconv = match self.project.get_specific_calling_convention(cconv) {
      +            Some(cconv) => cconv,
      +            None => {
      +                return BTreeMap::new();
      +            }
      +        };
      +        let callee_fn_sig = self
      +            .fn_signatures
      +            .get(state_before_return.get_fn_tid())
      +            .unwrap();
      +        let mut minimized_return_state = state_before_return.clone();
      +        minimized_return_state.minimize_before_return_instruction(callee_fn_sig, cconv);
      +        let mut location_to_data_map =
      +            minimized_return_state.map_abstract_locations_to_pointer_data(call_tid);
      +        minimized_return_state.filter_location_to_pointer_data_map(&mut location_to_data_map);
      +        let mut replacement_map =
      +            minimized_return_state.get_id_to_unified_ids_replacement_map(&location_to_data_map);
      +        minimized_return_state.merge_mem_objects_with_unique_abstract_location(call_tid);
      +        let unified_to_caller_replacement_map =
      +            self.create_callee_id_to_caller_data_map(state_before_call, &minimized_return_state);
      +        // In the ID-to-unified-ID map replace parameter IDs with their corresponding values in the caller.
      +        for value in replacement_map.values_mut() {
      +            value.replace_all_ids(&unified_to_caller_replacement_map);
      +        }
      +        // Add all parameter IDs to the map
      +        let callee_tid = state_before_return.get_fn_tid();
      +        for (id, value) in unified_to_caller_replacement_map {
      +            if id.get_tid() == callee_tid && id.get_path_hints().is_empty() {
      +                replacement_map.insert(id, value);
      +            }
      +        }
      +        replacement_map
      +    }
      +
           /// Create a map from the parameter IDs (of the function that the given state corresponds to)
           /// to the corresponding access patterns.
           pub fn create_id_to_access_pattern_map(
      @@ -183,7 +289,11 @@
               let fn_tid = state.get_fn_tid();
               let callee_fn_sig = self.fn_signatures.get(fn_tid).unwrap();
               for (param, access_pattern) in &callee_fn_sig.parameters {
      -            let param_id = AbstractIdentifier::from_arg(fn_tid, param);
      +            let param_id = AbstractIdentifier::new(fn_tid.clone(), param.clone());
      +            id_to_access_pattern_map.insert(param_id.clone(), access_pattern);
      +        }
      +        for (param, access_pattern) in &callee_fn_sig.global_parameters {
      +            let param_id = AbstractIdentifier::new(fn_tid.clone(), param.clone());
                   id_to_access_pattern_map.insert(param_id.clone(), access_pattern);
               }
       
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/mod.rs.html
      index bc357b1e9..30b03fafa 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -409,6 +409,42 @@
       409
       410
       411
      +412
      +413
      +414
      +415
      +416
      +417
      +418
      +419
      +420
      +421
      +422
      +423
      +424
      +425
      +426
      +427
      +428
      +429
      +430
      +431
      +432
      +433
      +434
      +435
      +436
      +437
      +438
      +439
      +440
      +441
      +442
      +443
      +444
      +445
      +446
      +447
       
      use crate::abstract_domain::*;
       use crate::analysis::function_signature::AccessPattern;
       use crate::analysis::function_signature::FunctionSignature;
      @@ -508,6 +544,18 @@
               }
           }
       
      +    /// If `result` is an `Err`, log the error message as an error message through the `log_collector` channel.
      +    pub fn log_error(&self, result: Result<(), Error>, location: Option<&Tid>) {
      +        if let Err(err) = result {
      +            let mut log_message =
      +                LogMessage::new_error(format!("{err}")).source("Pointer Inference");
      +            if let Some(loc) = location {
      +                log_message = log_message.location(loc.clone());
      +            };
      +            let _ = self.log_collector.send(LogThreadMsg::Log(log_message));
      +        }
      +    }
      +
           /// Detect and log if the stack pointer is not as expected when returning from a function.
           fn detect_stack_pointer_information_loss_on_return(
               &self,
      @@ -710,7 +758,7 @@
       
           /// Merge global memory data from the callee global memory object to the caller global memory object
           /// if the corresponding global variable is marked as mutable in both the caller and callee.
      -    fn merge_global_mem_from_callee(
      +    fn merge_non_nested_global_mem_from_callee(
               &self,
               caller_state: &mut State,
               callee_global_mem: &AbstractObject,
      @@ -771,21 +819,45 @@
           caller_fn_sig: &FunctionSignature,
           callee_fn_sig: &FunctionSignature,
       ) -> BTreeMap<u64, AccessPattern> {
      +    let caller_mut_indices: BTreeSet<u64> = caller_fn_sig
      +        .global_parameters
      +        .iter()
      +        .filter_map(|(location, access_pattern)| {
      +            if let AbstractLocation::GlobalAddress { address, .. } = location {
      +                if access_pattern.is_mutably_dereferenced() {
      +                    return Some(*address);
      +                }
      +            }
      +            None
      +        })
      +        .collect();
      +    let callee_mut_indices: BTreeSet<u64> = callee_fn_sig
      +        .global_parameters
      +        .iter()
      +        .filter_map(|(location, access_pattern)| {
      +            if let AbstractLocation::GlobalAddress { address, .. } = location {
      +                if access_pattern.is_mutably_dereferenced() {
      +                    return Some(*address);
      +                }
      +            }
      +            None
      +        })
      +        .collect();
           let mut intervals: BTreeMap<u64, AccessPattern> = caller_fn_sig
               .global_parameters
               .keys()
               .chain(callee_fn_sig.global_parameters.keys())
      -        .map(|index| (*index, AccessPattern::new()))
      +        .filter_map(|location| {
      +            if let AbstractLocation::GlobalAddress { address, .. } = location {
      +                Some((*address, AccessPattern::new()))
      +            } else {
      +                None
      +            }
      +        })
               .collect();
           for (index, access_pattern) in intervals.iter_mut() {
      -        if let (Some(caller_pattern), Some(callee_pattern)) = (
      -            caller_fn_sig.global_parameters.get(index),
      -            callee_fn_sig.global_parameters.get(index),
      -        ) {
      -            if caller_pattern.is_mutably_dereferenced() && callee_pattern.is_mutably_dereferenced()
      -            {
      -                access_pattern.set_mutably_dereferenced_flag();
      -            }
      +        if caller_mut_indices.contains(index) && callee_mut_indices.contains(index) {
      +            access_pattern.set_mutably_dereferenced_flag();
               }
           }
       
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/stubs.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/stubs.rs.html
      index 87e27a316..7156d24c9 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/stubs.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/stubs.rs.html
      @@ -1,4 +1,4 @@
      -stubs.rs - source
      1
      +stubs.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/trait_impls.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/trait_impls.rs.html
      index 2bbd919ef..e664f7242 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/trait_impls.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/context/trait_impls.rs.html
      @@ -1,4 +1,4 @@
      -trait_impls.rs - source
      1
      +trait_impls.rs - source
      1
       2
       3
       4
      @@ -310,6 +310,13 @@
       310
       311
       312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
       
      use super::*;
       
       impl<'a> crate::analysis::forward_interprocedural_fixpoint::Context<'a> for Context<'a> {
      @@ -436,6 +443,20 @@
                       return None;
                   }
               };
      +        let callee_fn_sig = match self.fn_signatures.get(state_before_return.get_fn_tid()) {
      +            Some(fn_sig) => fn_sig,
      +            None => {
      +                let location = state_before_return.get_fn_tid();
      +                self.log_error(
      +                    Err(anyhow!(
      +                        "Internal function {} has no function signature.",
      +                        location
      +                    )),
      +                    Some(location),
      +                );
      +                return None;
      +            }
      +        };
       
               // Detect possible information loss on the stack pointer and report it.
               if let Err(err) = self.detect_stack_pointer_information_loss_on_return(state_before_return)
      @@ -445,19 +466,19 @@
                   // or a call to a non-returning extern function that was not marked as non-returning.
                   return None;
               }
      -
      +        // Minimize the callee state and replace callee-originating object IDs whenever possible.
      +        let mut state_before_return = state_before_return.clone();
      +        state_before_return.minimize_before_return_instruction(callee_fn_sig, cconv);
      +        state_before_return.merge_mem_objects_with_unique_abstract_location(&call_term.tid);
               // Create a mapping of IDs from the callee to IDs that should be used in the caller.
      -        let id_map = self.create_callee_id_to_caller_data_map(
      -            state_before_call,
      -            state_before_return,
      -            &call_term.tid,
      -        );
      +        let id_map =
      +            self.create_callee_id_to_caller_data_map(state_before_call, &state_before_return);
               let callee_id_to_access_pattern_map =
      -            self.create_id_to_access_pattern_map(state_before_return);
      +            self.create_id_to_access_pattern_map(&state_before_return);
               // Identify caller IDs for which the callee analysis may be unsound for this callsite.
               let unsound_caller_ids =
                   self.get_unsound_caller_ids(&id_map, &callee_id_to_access_pattern_map);
      -        // TODO: Unsound caller IDs occur too often to log the cases right now.
      +        // FIXME: Unsound caller IDs occur too often to log the cases right now.
               // We have to investigate the reasons for it (maybe too many parameters on the caller stack?)
               // and find better heuristics to prevent them poisoning the analysis soundness.
       
      @@ -479,11 +500,7 @@
                       continue;
                   }
                   if *callee_object_id == state_before_return.get_global_mem_id() {
      -                let callee_fn_sig = self
      -                    .fn_signatures
      -                    .get(state_before_return.get_fn_tid())
      -                    .unwrap();
      -                self.merge_global_mem_from_callee(
      +                self.merge_non_nested_global_mem_from_callee(
                           &mut state_after_return,
                           callee_object,
                           &id_map,
      @@ -508,11 +525,9 @@
                       .is_none()
                   {
                       // Add a callee object that does not correspond to a parameter to the caller or the stack of the callee.
      -                if let Ok(new_object_id) = callee_object_id.with_path_hint(call_term.tid.clone()) {
      -                    state_after_return
      -                        .memory
      -                        .insert(new_object_id, callee_object);
      -                }
      +                state_after_return
      +                    .memory
      +                    .insert(callee_object_id.clone(), callee_object);
                   } else {
                       // The callee object is a parameter object.
                       self.log_debug(
      @@ -529,8 +544,7 @@
                   state_after_return
                       .memory
                       .assume_arbitrary_writes_to_object(id, &BTreeSet::new());
      -            // TODO: We should specify more possible reference targets.
      -        }
      +        }
               // Cleanup
               state_after_return.remove_unreferenced_objects();
       
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/mod.rs.html
      index 8feb5d5e8..80fc33d07 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -490,6 +490,8 @@
       490
       491
       492
      +493
      +494
       
      //! A fixpoint algorithm analyzing all memory accesses in a program.
       //!
       //! The goal of the pointer inference analysis is to keep track of all memory objects and pointers
      @@ -541,6 +543,8 @@
       
       /// The version number of the analysis.
       const VERSION: &str = "0.2";
      +/// The recursion limit for nested pointers.
      +const POINTER_RECURSION_DEPTH_LIMIT: u64 = 2;
       
       /// The name and version number of the "Memory" CWE check.
       pub static CWE_MODULE: crate::CweModule = crate::CweModule {
      @@ -795,7 +799,7 @@
                           call: (caller_blk, _caller_sub),
                           return_: _,
                       } => {
      -                    let call_tid = match caller_blk.term.jmps.get(0) {
      +                    let call_tid = match caller_blk.term.jmps.first() {
                               Some(call) => &call.tid,
                               _ => continue,
                           };
      @@ -807,7 +811,7 @@
                                   }) => (state_before_call, state_before_return),
                                   _ => continue,
                               };
      -                    let id_to_data_map = context.create_callee_id_to_caller_data_map(
      +                    let id_to_data_map = context.create_full_callee_id_to_caller_data_map(
                               state_before_call,
                               state_before_return,
                               call_tid,
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/id_manipulation.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/id_manipulation.rs.html
      index d16557702..2e322b140 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/id_manipulation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/id_manipulation.rs.html
      @@ -1,4 +1,4 @@
      -id_manipulation.rs - source
      1
      +id_manipulation.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/mod.rs.html
      index aa35ff96c..727848f7b 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -236,6 +236,18 @@
       236
       237
       238
      +239
      +240
      +241
      +242
      +243
      +244
      +245
      +246
      +247
      +248
      +249
      +250
       
      //! This module contains the definition of the abstract memory object type.
       
       use super::{Data, ValueDomain};
      @@ -325,11 +337,23 @@
               inner.is_unique = false;
           }
       
      +    /// Mark the abstract object as unique, i.e. it represents exactly one memory object.
      +    pub fn mark_as_unique(&mut self) {
      +        let inner = Arc::make_mut(&mut self.inner);
      +        inner.is_unique = true;
      +    }
      +
           /// Get the type of the memory object.
           pub fn get_object_type(&self) -> Option<ObjectType> {
               self.inner.type_
           }
       
      +    /// Set the type of the memory object.
      +    pub fn set_object_type(&mut self, object_type: Option<ObjectType>) {
      +        let inner = Arc::make_mut(&mut self.inner);
      +        inner.type_ = object_type;
      +    }
      +
           /// Overwrite the values in `self` with those in `other`
           /// under the assumption that the zero offset in `other` corresponds to the offset `offset_other` in `self`.
           ///
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/value_access.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/value_access.rs.html
      index 543d34b37..0c1fb2e69 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/value_access.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object/value_access.rs.html
      @@ -1,4 +1,4 @@
      -value_access.rs - source
      1
      +value_access.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/id_manipulation.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/id_manipulation.rs.html
      index bc3a6e3e0..47aea8d48 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/id_manipulation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/id_manipulation.rs.html
      @@ -1,4 +1,4 @@
      -id_manipulation.rs - source
      1
      +id_manipulation.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/list_manipulation.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/list_manipulation.rs.html
      index bd44ae42f..a65d7a11e 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/list_manipulation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/list_manipulation.rs.html
      @@ -1,4 +1,4 @@
      -list_manipulation.rs - source
      1
      +list_manipulation.rs - source
      1
       2
       3
       4
      @@ -70,6 +70,10 @@
       70
       71
       72
      +73
      +74
      +75
      +76
       
      //! Methods of [`AbstractObjectList`] that add or remove objects from the object list
       //! or provide information about the set of objects in the object list.
       
      @@ -77,7 +81,6 @@
       
       impl AbstractObjectList {
           /// Get a reference to the object corresponding to the given ID.
      -    #[cfg(test)]
           pub fn get_object(&self, id: &AbstractIdentifier) -> Option<&AbstractObject> {
               self.objects.get(id)
           }
      @@ -136,6 +139,11 @@
               self.objects.iter()
           }
       
      +    /// Get an iterator of mutable references over the abstract objects in `self`.
      +    pub fn iter_objects_mut(&mut self) -> impl Iterator<Item = &mut AbstractObject> {
      +        self.objects.values_mut()
      +    }
      +
           /// Get the number of objects that are currently tracked.
           #[cfg(test)]
           pub fn get_num_objects(&self) -> usize {
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/mod.rs.html
      index 0562d1629..48d6637c2 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/object_list/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -182,6 +182,26 @@
       182
       183
       184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
       
      use super::object::*;
       use super::Data;
       use crate::abstract_domain::*;
      @@ -321,6 +341,26 @@
                   None => Err(anyhow!("Object ID not contained in object list.")),
               }
           }
      +
      +    /// Only retain those memory objects for which the provided predicate returns `true`.
      +    /// All memory objects for which the predicate returns `False` are removed from `self`.
      +    pub fn retain<F>(&mut self, f: F)
      +    where
      +        F: FnMut(&AbstractIdentifier, &mut AbstractObject) -> bool,
      +    {
      +        self.objects.retain(f)
      +    }
      +
      +    /// Remove an object from the object list.
      +    /// Returns the removed object if its ID was indeed contained in the object list.
      +    pub fn remove(&mut self, id: &AbstractIdentifier) -> Option<AbstractObject> {
      +        self.objects.remove(id)
      +    }
      +
      +    /// Return `true` if the object list contains a memory object indexed by the given ID.
      +    pub fn contains(&self, id: &AbstractIdentifier) -> bool {
      +        self.objects.contains_key(id)
      +    }
       }
       
       impl AbstractDomain for AbstractObjectList {
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/access_handling.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/access_handling.rs.html
      index 5cbd49424..fa8341729 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/access_handling.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/access_handling.rs.html
      @@ -1,4 +1,4 @@
      -access_handling.rs - source
      1
      +access_handling.rs - source
      1
       2
       3
       4
      @@ -263,6 +263,92 @@
       263
       264
       265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +289
      +290
      +291
      +292
      +293
      +294
      +295
      +296
      +297
      +298
      +299
      +300
      +301
      +302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +333
      +334
      +335
      +336
      +337
      +338
      +339
      +340
      +341
      +342
      +343
      +344
      +345
      +346
      +347
      +348
      +349
      +350
      +351
       
      //! Methods of [`State`] for handling memory and register access operations.
       
       use super::*;
      @@ -343,7 +429,7 @@
               self.write_to_address(address, &self.eval(value), global_memory)
           }
       
      -    /// Evaluate the given load instruction and return the data read on success.
      +    /// Evaluate the given address expression and return the data read from that address on success.
           pub fn load_value(
               &self,
               address: &Expression,
      @@ -351,6 +437,17 @@
               global_memory: &RuntimeMemoryImage,
           ) -> Result<Data, Error> {
               let address = self.eval(address);
      +        self.load_value_from_address(&address, size, global_memory)
      +    }
      +
      +    /// Load the value at the given address from the state and return the data read on success.
      +    /// If the address contains more than one possible pointer target the results are merged for all possible pointer targets.
      +    pub fn load_value_from_address(
      +        &self,
      +        address: &Data,
      +        size: ByteSize,
      +        global_memory: &RuntimeMemoryImage,
      +    ) -> Result<Data, Error> {
               let mut result = if let Some(global_address) = address.get_absolute_value() {
                   if let Ok(address_bitvector) = global_address.try_to_bitvec() {
                       match global_memory.read(&address_bitvector, size) {
      @@ -374,7 +471,7 @@
               } else {
                   Data::new_empty(size)
               };
      -        result = result.merge(&self.memory.get_value(&address, size));
      +        result = result.merge(&self.memory.get_value(address, size));
       
               if let Ok(offset) = result.try_to_offset() {
                   if result.bytesize() == self.stack_id.bytesize()
      @@ -482,6 +579,81 @@
               }
           }
       
      +    /// Evaluate the value of the given abstract location on the current state.
      +    /// If the actual value cannot be determined (e.g. if an intermediate pointer returns `Top`)
      +    /// then a `Top` value is returned.
      +    pub fn eval_abstract_location(
      +        &self,
      +        location: &AbstractLocation,
      +        global_memory: &RuntimeMemoryImage,
      +    ) -> Data {
      +        match location {
      +            AbstractLocation::GlobalAddress { address, size } => {
      +                assert_eq!(*size, self.stack_id.bytesize());
      +                Data::from_target(
      +                    self.get_global_mem_id().clone(),
      +                    Bitvector::from_u64(*address)
      +                        .into_resize_unsigned(self.stack_id.bytesize())
      +                        .into(),
      +                )
      +            }
      +            AbstractLocation::GlobalPointer(address, nested_location) => {
      +                let pointer = Data::from_target(
      +                    self.get_global_mem_id().clone(),
      +                    Bitvector::from_u64(*address)
      +                        .into_resize_unsigned(self.stack_id.bytesize())
      +                        .into(),
      +                );
      +                self.eval_abstract_memory_location(nested_location, pointer, global_memory)
      +            }
      +            AbstractLocation::Register(var) => self.get_register(var),
      +            AbstractLocation::Pointer(var, nested_location) => {
      +                let pointer = self.get_register(var);
      +                self.eval_abstract_memory_location(nested_location, pointer, global_memory)
      +            }
      +        }
      +    }
      +
      +    /// Evaluate the value of the given abstract memory location on the current state
      +    /// with the given `root_pointer` as the start point of the location description.
      +    fn eval_abstract_memory_location(
      +        &self,
      +        location: &AbstractMemoryLocation,
      +        root_pointer: Data,
      +        global_memory: &RuntimeMemoryImage,
      +    ) -> Data {
      +        match location {
      +            AbstractMemoryLocation::Location { offset, size } => {
      +                let pointer = root_pointer.add_offset(
      +                    &Bitvector::from_i64(*offset)
      +                        .into_resize_unsigned(self.stack_id.bytesize())
      +                        .into(),
      +                );
      +                self.load_value_from_address(&pointer, *size, global_memory)
      +                    .unwrap_or_else(|_| Data::new_top(*size))
      +            }
      +            AbstractMemoryLocation::Pointer { offset, target } => {
      +                let pointer = root_pointer.add_offset(
      +                    &Bitvector::from_i64(*offset)
      +                        .into_resize_unsigned(self.stack_id.bytesize())
      +                        .into(),
      +                );
      +                match self.load_value_from_address(
      +                    &pointer,
      +                    self.stack_id.bytesize(),
      +                    global_memory,
      +                ) {
      +                    Ok(nested_root_pointer) => self.eval_abstract_memory_location(
      +                        target,
      +                        nested_root_pointer,
      +                        global_memory,
      +                    ),
      +                    Err(_) => Data::new_top(location.bytesize()),
      +                }
      +            }
      +        }
      +    }
      +
           /// Check whether the given `def` could result in a memory access through a NULL pointer.
           ///
           /// If no NULL pointer dereference is detected then `Ok(false)` is returned.
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/id_manipulation.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/id_manipulation.rs.html
      index 611def9f0..b76e51c08 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/id_manipulation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/id_manipulation.rs.html
      @@ -1,4 +1,4 @@
      -id_manipulation.rs - source
      1
      +id_manipulation.rs - source
      1
       2
       3
       4
      @@ -90,10 +90,398 @@
       90
       91
       92
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
      +205
      +206
      +207
      +208
      +209
      +210
      +211
      +212
      +213
      +214
      +215
      +216
      +217
      +218
      +219
      +220
      +221
      +222
      +223
      +224
      +225
      +226
      +227
      +228
      +229
      +230
      +231
      +232
      +233
      +234
      +235
      +236
      +237
      +238
      +239
      +240
      +241
      +242
      +243
      +244
      +245
      +246
      +247
      +248
      +249
      +250
      +251
      +252
      +253
      +254
      +255
      +256
      +257
      +258
      +259
      +260
      +261
      +262
      +263
      +264
      +265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +289
      +290
      +291
      +292
      +293
      +294
      +295
      +296
      +297
      +298
      +299
      +300
      +301
      +302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +333
      +334
      +335
      +336
      +337
      +338
      +339
      +340
      +341
      +342
      +343
      +344
      +345
      +346
      +347
      +348
      +349
      +350
      +351
      +352
      +353
      +354
      +355
      +356
      +357
      +358
      +359
      +360
      +361
      +362
      +363
      +364
      +365
      +366
      +367
      +368
      +369
      +370
      +371
      +372
      +373
      +374
      +375
      +376
      +377
      +378
      +379
      +380
      +381
      +382
      +383
      +384
      +385
      +386
      +387
      +388
      +389
      +390
      +391
      +392
      +393
      +394
      +395
      +396
      +397
      +398
      +399
      +400
      +401
      +402
      +403
      +404
      +405
      +406
      +407
      +408
      +409
      +410
      +411
      +412
      +413
      +414
      +415
      +416
      +417
      +418
      +419
      +420
      +421
      +422
      +423
      +424
      +425
      +426
      +427
      +428
      +429
      +430
      +431
      +432
      +433
      +434
      +435
      +436
      +437
      +438
      +439
      +440
      +441
      +442
      +443
      +444
      +445
      +446
      +447
      +448
      +449
      +450
      +451
      +452
      +453
      +454
      +455
      +456
      +457
      +458
      +459
      +460
      +461
      +462
      +463
      +464
      +465
      +466
      +467
      +468
      +469
      +470
      +471
      +472
      +473
      +474
      +475
      +476
      +477
      +478
      +479
       
      //! Methods of [`State`] for manipulating abstract IDs.
       
       use super::*;
       use crate::analysis::pointer_inference::object::AbstractObject;
      +use crate::analysis::pointer_inference::POINTER_RECURSION_DEPTH_LIMIT;
       
       impl State {
           /// Search (recursively) through all memory objects referenced by the given IDs
      @@ -181,5 +569,391 @@
               }
               Ok(())
           }
      +
      +    /// Create an ID renaming map that maps IDs in `self` to the values representing them
      +    /// after unifying and renaming non-parameter objects in `self` in preparation of returning to a caller.
      +    pub fn get_id_to_unified_ids_replacement_map(
      +        &self,
      +        location_to_data_map: &BTreeMap<AbstractIdentifier, Data>,
      +    ) -> BTreeMap<AbstractIdentifier, Data> {
      +        let mut id_replacement_map = BTreeMap::new();
      +        for (unified_id, value) in location_to_data_map.iter() {
      +            for (old_id, offset) in value.get_relative_values() {
      +                if old_id.get_tid() != self.get_fn_tid() || !old_id.get_path_hints().is_empty() {
      +                    let mut pointer_to_unified_id =
      +                        Data::from_target(unified_id.clone(), offset.un_op(UnOpType::Int2Comp));
      +                    pointer_to_unified_id.set_contains_top_flag();
      +                    id_replacement_map.insert(old_id.clone(), pointer_to_unified_id);
      +                }
      +            }
      +        }
      +        for value in self.register.values() {
      +            for id in value.get_relative_values().keys() {
      +                if id.get_tid() == self.get_fn_tid() && id.get_path_hints().is_empty() {
      +                    // This is a parameter ID
      +                    id_replacement_map.insert(
      +                        id.clone(),
      +                        Data::from_target(id.clone(), Bitvector::zero(id.bytesize().into()).into()),
      +                    );
      +                }
      +            }
      +        }
      +        for object_id in self.memory.get_all_object_ids() {
      +            for id in self.memory.get_referenced_ids_overapproximation(&object_id) {
      +                if id.get_tid() == self.get_fn_tid() && id.get_path_hints().is_empty() {
      +                    // This is a parameter ID
      +                    id_replacement_map.insert(
      +                        id.clone(),
      +                        Data::from_target(id.clone(), Bitvector::zero(id.bytesize().into()).into()),
      +                    );
      +                }
      +            }
      +        }
      +        id_replacement_map
      +    }
      +
      +    /// Replace all IDs pointing to non-parameter objects.
      +    /// - IDs contained in the values of the location to data map are replaced by the corresponding key (with adjusted offset).
      +    ///   But the Top flag is also set, because the pointers may point to other objects.
      +    /// - All other non-parameter IDs are replaced with Top.
      +    pub fn replace_ids_to_non_parameter_objects(
      +        &mut self,
      +        location_to_data_map: &BTreeMap<AbstractIdentifier, Data>,
      +    ) {
      +        let id_replacement_map = self.get_id_to_unified_ids_replacement_map(location_to_data_map);
      +        // Now use the replacement map to replace IDs
      +        for value in self.register.values_mut() {
      +            value.replace_all_ids(&id_replacement_map);
      +        }
      +        for object in self.memory.iter_objects_mut() {
      +            object.replace_ids(&id_replacement_map);
      +        }
      +        // Clean up registers left as Top after the replacement
      +        self.register.retain(|_var, value| !value.is_top());
      +    }
      +
      +    /// Explicitly insert pointers to unified objects at the locations specified by their abstract location.
      +    ///
      +    /// Note that these are the only locations where we (by definition) know
      +    /// that the pointer is unique, i.e. we do not have to set a Top flag.
      +    /// However, we still have to add targets to parameter objects, absolute values or the `Top` flag
      +    /// to the pointer if the original pointer value contained them,
      +    /// because these targets were not merged to the unified object.
      +    pub fn insert_pointers_to_unified_objects(
      +        &mut self,
      +        location_to_data_map: &BTreeMap<AbstractIdentifier, Data>,
      +        call_tid: &Tid,
      +    ) {
      +        for (unified_id, old_value) in location_to_data_map.iter() {
      +            // Compute the pointer (which may also contain pointers to parameter objects and absolute values).
      +            let mut pointer_to_unified_object = Data::from_target(
      +                unified_id.clone(),
      +                Bitvector::zero(unified_id.bytesize().into()).into(),
      +            );
      +            for (old_id, old_offset) in old_value.get_relative_values() {
      +                if old_id.get_tid() == self.get_fn_tid() && old_id.get_path_hints().is_empty() {
      +                    pointer_to_unified_object = pointer_to_unified_object
      +                        .merge(&Data::from_target(old_id.clone(), old_offset.clone()));
      +                }
      +            }
      +            pointer_to_unified_object.set_absolute_value(old_value.get_absolute_value().cloned());
      +            if old_value.contains_top() {
      +                pointer_to_unified_object.set_contains_top_flag()
      +            }
      +            // Insert the pointer at the corresponding abstract location
      +            match unified_id.get_location() {
      +                AbstractLocation::Register(var) => {
      +                    self.set_register(var, pointer_to_unified_object)
      +                }
      +                unified_location => {
      +                    let (parent_location, offset_in_parent_object) = unified_location
      +                        .get_parent_location(self.stack_id.bytesize())
      +                        .unwrap();
      +                    let parent_tid = if unified_id.get_tid() == call_tid {
      +                        call_tid.clone()
      +                    } else {
      +                        // We know that the parent is a parameter object, since we cannot track nested pointers in parameter objects.
      +                        self.stack_id.get_tid().clone()
      +                    };
      +                    let parent_object = self
      +                        .memory
      +                        .get_object_mut(&AbstractIdentifier::new(parent_tid, parent_location))
      +                        .unwrap();
      +                    parent_object
      +                        .set_value(
      +                            pointer_to_unified_object,
      +                            &Bitvector::from_i64(offset_in_parent_object)
      +                                .into_resize_signed(self.stack_id.bytesize())
      +                                .into(),
      +                        )
      +                        .unwrap();
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Merge the target objects that are non-parameter objects for the given location to data mapping.
      +    /// Return the results as a location to memory object map.
      +    ///
      +    /// This function is a step in the process of unifying callee-originating memory objects on a return instruction.
      +    /// The memory objects are also marked as unique, because they will represent a unique object in the caller.
      +    pub fn generate_target_objects_for_new_locations(
      +        &self,
      +        location_to_data_map: &BTreeMap<AbstractIdentifier, Data>,
      +    ) -> BTreeMap<AbstractIdentifier, AbstractObject> {
      +        let mut location_to_object_map: BTreeMap<AbstractIdentifier, AbstractObject> =
      +            BTreeMap::new();
      +        for (location_id, value) in location_to_data_map {
      +            let mut new_object: Option<AbstractObject> = None;
      +            'target_loop: for (target_id, target_offset) in value.get_relative_values() {
      +                if (target_id.get_tid() == self.get_fn_tid()
      +                    && target_id.get_path_hints().is_empty())
      +                    || !self.memory.contains(target_id)
      +                {
      +                    continue 'target_loop;
      +                }
      +                let target_offset = match target_offset.try_to_offset() {
      +                    Ok(offset) => offset,
      +                    Err(_) => {
      +                        match &mut new_object {
      +                            Some(object) => object.assume_arbitrary_writes(&BTreeSet::new()),
      +                            None => {
      +                                new_object =
      +                                    Some(AbstractObject::new(None, self.stack_id.bytesize()))
      +                            }
      +                        }
      +                        continue 'target_loop;
      +                    }
      +                };
      +                let target_object = self.memory.get_object(target_id).unwrap();
      +                let mut target_object = target_object.clone();
      +                target_object
      +                    .add_offset_to_all_indices(&Bitvector::from_i64(-target_offset).into());
      +                match &mut new_object {
      +                    None => new_object = Some(target_object),
      +                    Some(object) => *object = object.merge(&target_object),
      +                }
      +            }
      +            let mut new_object =
      +                new_object.unwrap_or_else(|| AbstractObject::new(None, self.stack_id.bytesize()));
      +            new_object.mark_as_unique();
      +            new_object.set_object_type(None);
      +
      +            location_to_object_map.insert(location_id.clone(), new_object);
      +        }
      +        location_to_object_map
      +    }
      +
      +    /// Filter out those locations from the location to pointer data map
      +    /// whose non-parameter object targets intersect with any of the other locations.
      +    ///
      +    /// Note that this does not filter out locations whose targets contain the `Top` flag,
      +    /// despite the fact that these locations theoretically may point to the same non-parameter object.
      +    /// I.e. we trade soundness in the general case for exactness in the common case here.
      +    pub fn filter_location_to_pointer_data_map(
      +        &self,
      +        location_to_data_map: &mut BTreeMap<AbstractIdentifier, Data>,
      +    ) {
      +        let mut visited_targets = HashSet::new();
      +        let mut non_unique_targets = HashSet::new();
      +        for value in location_to_data_map.values() {
      +            for id in value.get_relative_values().keys() {
      +                if id.get_tid() != self.get_fn_tid() && self.memory.contains(id) {
      +                    if visited_targets.contains(id) {
      +                        non_unique_targets.insert(id.clone());
      +                    } else {
      +                        visited_targets.insert(id.clone());
      +                    }
      +                }
      +            }
      +        }
      +        let mut filtered_out_ids = HashSet::new();
      +        location_to_data_map.retain(|location_id, value| {
      +            for id in value.get_relative_values().keys() {
      +                if non_unique_targets.contains(id) {
      +                    filtered_out_ids.insert(location_id.clone());
      +                    return false;
      +                }
      +            }
      +            true
      +        });
      +        // Also filter out those locations whose parent locations were filtered out.
      +        location_to_data_map.retain(|location, _| {
      +            if location.get_tid().has_id_suffix("_param") {
      +                return true;
      +            }
      +            for parent in location
      +                .get_location()
      +                .get_all_parent_locations(self.stack_id.bytesize())
      +            {
      +                let parent_id = AbstractIdentifier::new(location.get_tid().clone(), parent);
      +                if filtered_out_ids.contains(&parent_id) {
      +                    return false;
      +                }
      +            }
      +            true
      +        });
      +    }
      +
      +    /// Add abstract locations based on register values to the location to pointer data map.
      +    /// The TID for the corresponding abstract IDs is the given `call_tid`.
      +    ///
      +    /// This function assumes that `self` has already been minimized
      +    /// and thus all non-parameter register values have been removed from the state.
      +    fn add_register_based_root_locations_to_location_to_pointer_data_map(
      +        &self,
      +        call_tid: &Tid,
      +        location_to_data_map: &mut BTreeMap<AbstractIdentifier, Data>,
      +    ) {
      +        for (var, value) in self.register.iter() {
      +            if !var.is_temp && self.contains_non_param_pointer(value) {
      +                let location = AbstractLocation::from_var(var).unwrap();
      +                let id = AbstractIdentifier::new(call_tid.clone(), location);
      +                location_to_data_map.insert(id.clone(), value.clone());
      +            }
      +        }
      +    }
      +
      +    /// Add abstract locations based on parameter objects to the location to pointer data map.
      +    /// The TID for the corresponding abstract IDs is the given `call_tid` with a `_param` suffix.
      +    ///
      +    /// The TID suffix is necessary to prevent naming collisions with locations based on return registers.
      +    ///
      +    /// This function assumes that the stack memory object of `self` has already been deleted by a call to
      +    /// [`State::minimize_before_return_instruction`](crate::analysis::pointer_inference::State::minimize_before_return_instruction).
      +    fn add_param_based_root_locations_to_location_to_pointer_data_map(
      +        &self,
      +        call_tid: &Tid,
      +        location_to_data_map: &mut BTreeMap<AbstractIdentifier, Data>,
      +    ) {
      +        for (object_id, object) in self.memory.iter() {
      +            if object_id.get_tid() == self.get_fn_tid()
      +                && object_id.get_path_hints().is_empty()
      +                && object_id.get_location().recursion_depth() < POINTER_RECURSION_DEPTH_LIMIT
      +            {
      +                for (index, value) in object.get_mem_region().iter() {
      +                    if self.contains_non_param_pointer(value) {
      +                        let location = object_id
      +                            .get_location()
      +                            .clone()
      +                            .dereferenced(value.bytesize(), self.stack_id.bytesize())
      +                            .with_offset_addendum(*index);
      +                        location_to_data_map.insert(
      +                            AbstractIdentifier::new(
      +                                call_tid.clone().with_id_suffix("_param"),
      +                                location,
      +                            ),
      +                            value.clone(),
      +                        );
      +                    }
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Derive nested locations from the given list of locations to derive
      +    /// and add them to the location to pointer data map.
      +    fn add_derived_locations_to_location_to_pointer_data_map(
      +        &self,
      +        location_to_data_map: &mut BTreeMap<AbstractIdentifier, Data>,
      +        mut locations_to_derive: BTreeMap<AbstractIdentifier, Data>,
      +    ) {
      +        while let Some((location_id, location_data)) = locations_to_derive.pop_first() {
      +            if location_id.get_location().recursion_depth() >= POINTER_RECURSION_DEPTH_LIMIT {
      +                continue;
      +            }
      +            'data_target_loop: for (object_id, object_offset) in location_data.get_relative_values()
      +            {
      +                if object_id.get_tid() == self.get_fn_tid() && object_id.get_path_hints().is_empty()
      +                {
      +                    // Ignore parameter objects
      +                    continue 'data_target_loop;
      +                }
      +                let object_offset = match object_offset.try_to_offset() {
      +                    Ok(offset) => offset,
      +                    Err(_) => continue 'data_target_loop,
      +                };
      +                let mem_object = match self.memory.get_object(object_id) {
      +                    Some(object) => object,
      +                    None => continue 'data_target_loop,
      +                };
      +                for (elem_offset, elem_data) in mem_object.get_mem_region().iter() {
      +                    if self.contains_non_param_pointer(elem_data) {
      +                        // We want to create a new abstract location for this element.
      +                        // But the same abstract location may already exist, so we may have to merge values instead.
      +                        let new_location_offset = *elem_offset - object_offset; // TODO: Check correctness of this offset!
      +                        let new_location = location_id
      +                            .get_location()
      +                            .clone()
      +                            .dereferenced(elem_data.bytesize(), self.stack_id.bytesize())
      +                            .with_offset_addendum(new_location_offset);
      +                        let new_location_id =
      +                            AbstractIdentifier::new(location_id.get_tid().clone(), new_location);
      +                        let new_location_data = elem_data.clone();
      +                        location_to_data_map
      +                            .entry(new_location_id.clone())
      +                            .and_modify(|loc_data| *loc_data = loc_data.merge(&new_location_data))
      +                            .or_insert(new_location_data.clone());
      +                        locations_to_derive
      +                            .entry(new_location_id.clone())
      +                            .and_modify(|loc_data| *loc_data = loc_data.merge(&new_location_data))
      +                            .or_insert(new_location_data);
      +                    }
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Generate a map from abstract locations pointing to non-parameter memory objects
      +    /// to the data represented by the abstract location in the current state.
      +    ///
      +    /// The abstract locations get different TIDs depending on the root of the location:
      +    /// - If the root is a return register, then the TID is given by the provided `call_tid`.
      +    /// - If the root is a parameter memory object, then the TID is given by appending the suffix `_param` to the `call_tid`.
      +    ///   Since parameter and return register can overlap, the abstract IDs would overlap
      +    ///   if one would use the same TID in both cases.
      +    ///
      +    /// For return register based location this function also generates nested abstract locations.
      +    ///
      +    /// This function assumes that
      +    /// [`State::minimize_before_return_instruction`](crate::analysis::pointer_inference::State::minimize_before_return_instruction)
      +    /// has been called on `self` beforehand.
      +    pub fn map_abstract_locations_to_pointer_data(
      +        &self,
      +        call_tid: &Tid,
      +    ) -> BTreeMap<AbstractIdentifier, Data> {
      +        let mut location_to_data_map = BTreeMap::new();
      +        self.add_register_based_root_locations_to_location_to_pointer_data_map(
      +            call_tid,
      +            &mut location_to_data_map,
      +        );
      +        let locations_to_derive = location_to_data_map.clone();
      +        self.add_param_based_root_locations_to_location_to_pointer_data_map(
      +            call_tid,
      +            &mut location_to_data_map,
      +        );
      +        // Add derived locations based on return register locations.
      +        // FIXME: We cannot add derived locations based on parameter objects,
      +        // because the location and ID of their parent objects would be ambiguous
      +        // between parameter objects and other derived locations.
      +        self.add_derived_locations_to_location_to_pointer_data_map(
      +            &mut location_to_data_map,
      +            locations_to_derive,
      +        );
      +        location_to_data_map
      +    }
      +
      +    /// Returns `true` if the value contains at least one reference to a non-parameter
      +    /// (and non-stack) memory object tracked by the current state.
      +    fn contains_non_param_pointer(&self, value: &Data) -> bool {
      +        for id in value.referenced_ids() {
      +            if (id.get_tid() != self.get_fn_tid() || !id.get_path_hints().is_empty())
      +                && self.memory.contains(id)
      +            {
      +                return true;
      +            }
      +        }
      +        false
      +    }
       }
       
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/mod.rs.html index ce31e95c6..feee2444b 100644 --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/mod.rs.html +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/mod.rs.html @@ -1,4 +1,4 @@ -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -262,12 +262,199 @@
       262
       263
       264
      -
      use super::object_list::AbstractObjectList;
      +265
      +266
      +267
      +268
      +269
      +270
      +271
      +272
      +273
      +274
      +275
      +276
      +277
      +278
      +279
      +280
      +281
      +282
      +283
      +284
      +285
      +286
      +287
      +288
      +289
      +290
      +291
      +292
      +293
      +294
      +295
      +296
      +297
      +298
      +299
      +300
      +301
      +302
      +303
      +304
      +305
      +306
      +307
      +308
      +309
      +310
      +311
      +312
      +313
      +314
      +315
      +316
      +317
      +318
      +319
      +320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
      +333
      +334
      +335
      +336
      +337
      +338
      +339
      +340
      +341
      +342
      +343
      +344
      +345
      +346
      +347
      +348
      +349
      +350
      +351
      +352
      +353
      +354
      +355
      +356
      +357
      +358
      +359
      +360
      +361
      +362
      +363
      +364
      +365
      +366
      +367
      +368
      +369
      +370
      +371
      +372
      +373
      +374
      +375
      +376
      +377
      +378
      +379
      +380
      +381
      +382
      +383
      +384
      +385
      +386
      +387
      +388
      +389
      +390
      +391
      +392
      +393
      +394
      +395
      +396
      +397
      +398
      +399
      +400
      +401
      +402
      +403
      +404
      +405
      +406
      +407
      +408
      +409
      +410
      +411
      +412
      +413
      +414
      +415
      +416
      +417
      +418
      +419
      +420
      +421
      +422
      +423
      +424
      +425
      +426
      +427
      +428
      +429
      +430
      +431
      +432
      +433
      +434
      +435
      +436
      +437
      +438
      +439
      +440
      +441
      +442
      +443
      +444
      +445
      +446
      +447
      +448
      +
      use super::object::AbstractObject;
      +use super::object_list::AbstractObjectList;
       use super::Data;
       use crate::abstract_domain::*;
      +use crate::analysis::function_signature::AccessPattern;
       use crate::analysis::function_signature::FunctionSignature;
       use crate::intermediate_representation::*;
       use crate::prelude::*;
      +use std::collections::HashSet;
       use std::collections::{BTreeMap, BTreeSet};
       use std::sync::Arc;
       
      @@ -331,38 +518,120 @@
               stack_register: &Variable,
               function_tid: Tid,
           ) -> State {
      -        let global_addresses = fn_sig.global_parameters.keys().cloned().collect();
      +        let global_addresses = fn_sig
      +            .global_parameters
      +            .keys()
      +            .map(|location| match location {
      +                AbstractLocation::GlobalAddress { address, .. }
      +                | AbstractLocation::GlobalPointer(address, _) => *address,
      +                _ => panic!("Unexpected non-global parameter"),
      +            })
      +            .collect();
               let mock_global_memory = RuntimeMemoryImage::empty(true);
               let mut state = State::new(stack_register, function_tid.clone(), global_addresses);
               // Set parameter values and create parameter memory objects.
      -        for (arg, access_pattern) in &fn_sig.parameters {
      -            let param_id = AbstractIdentifier::from_arg(&function_tid, arg);
      -            match arg {
      -                Arg::Register {
      -                    expr: Expression::Var(var),
      -                    ..
      -                } => state.set_register(
      -                    var,
      -                    Data::from_target(param_id.clone(), Bitvector::zero(var.size.into()).into()),
      -                ),
      -                Arg::Register { .. } => continue, // Parameters in floating point registers are currently ignored.
      -                Arg::Stack { address, size, .. } => {
      -                    let param_data =
      -                        Data::from_target(param_id.clone(), Bitvector::zero((*size).into()).into());
      -                    state
      -                        .write_to_address(address, &param_data, &mock_global_memory)
      -                        .unwrap();
      -                }
      +        for params in sort_params_by_recursion_depth(&fn_sig.parameters).values() {
      +            for (param_location, access_pattern) in params {
      +                state.add_param(param_location, access_pattern, &mock_global_memory);
                   }
      -            if access_pattern.is_dereferenced() {
      -                state
      -                    .memory
      -                    .add_abstract_object(param_id, stack_register.size, None);
      +        }
      +        for (recursion_depth, params) in sort_params_by_recursion_depth(&fn_sig.global_parameters) {
      +            if recursion_depth > 0 {
      +                for (param_location, access_pattern) in params {
      +                    state.add_param(param_location, access_pattern, &mock_global_memory);
      +                }
                   }
               }
               state
           }
       
      +    /// Add the given parameter to the function start state represented by `self`:
      +    /// For the given parameter location, add a parameter object if it was dereferenced (according to the access pattern)
      +    /// and write the pointer to the parameter object to the corresponding existing memory object of `self`.
      +    ///
      +    /// This function assumes that the parent memory object of `param` already exists if `param` is a nested parameter.
      +    fn add_param(
      +        &mut self,
      +        param: &AbstractLocation,
      +        access_pattern: &AccessPattern,
      +        global_memory: &RuntimeMemoryImage,
      +    ) {
      +        let param_id = AbstractIdentifier::new(self.stack_id.get_tid().clone(), param.clone());
      +        if !matches!(param, AbstractLocation::GlobalAddress { .. })
      +            && access_pattern.is_dereferenced()
      +        {
      +            self.memory
      +                .add_abstract_object(param_id.clone(), self.stack_id.bytesize(), None);
      +        }
      +        match param {
      +            AbstractLocation::Register(var) => {
      +                self.set_register(
      +                    var,
      +                    Data::from_target(param_id, Bitvector::zero(param.bytesize().into()).into()),
      +                );
      +            }
      +            AbstractLocation::Pointer(_, _) => {
      +                let (parent_location, offset) =
      +                    param.get_parent_location(self.stack_id.bytesize()).unwrap();
      +                let parent_id =
      +                    AbstractIdentifier::new(self.stack_id.get_tid().clone(), parent_location);
      +                self.store_value(
      +                    &Data::from_target(
      +                        parent_id,
      +                        Bitvector::from_i64(offset)
      +                            .into_resize_signed(self.stack_id.bytesize())
      +                            .into(),
      +                    ),
      +                    &Data::from_target(
      +                        param_id.clone(),
      +                        Bitvector::zero(param_id.bytesize().into()).into(),
      +                    ),
      +                    global_memory,
      +                )
      +                .unwrap();
      +            }
      +            AbstractLocation::GlobalAddress { .. } => (),
      +            AbstractLocation::GlobalPointer(_, _) => {
      +                let (parent_location, offset) =
      +                    param.get_parent_location(self.stack_id.bytesize()).unwrap();
      +                if let AbstractLocation::GlobalAddress { address, size: _ } = parent_location {
      +                    let parent_id = self.get_global_mem_id();
      +                    self.store_value(
      +                        &Data::from_target(
      +                            parent_id,
      +                            Bitvector::from_u64(address + offset as u64)
      +                                .into_resize_signed(self.stack_id.bytesize())
      +                                .into(),
      +                        ),
      +                        &Data::from_target(
      +                            param_id.clone(),
      +                            Bitvector::zero(param_id.bytesize().into()).into(),
      +                        ),
      +                        global_memory,
      +                    )
      +                    .unwrap();
      +                } else {
      +                    let parent_id =
      +                        AbstractIdentifier::new(self.stack_id.get_tid().clone(), parent_location);
      +                    self.store_value(
      +                        &Data::from_target(
      +                            parent_id,
      +                            Bitvector::from_i64(offset)
      +                                .into_resize_signed(self.stack_id.bytesize())
      +                                .into(),
      +                        ),
      +                        &Data::from_target(
      +                            param_id.clone(),
      +                            Bitvector::zero(param_id.bytesize().into()).into(),
      +                        ),
      +                        global_memory,
      +                    )
      +                    .unwrap();
      +                }
      +            }
      +        }
      +    }
      +
           /// Set the MIPS link register `t9` to the address of the callee TID.
           ///
           /// According to the System V ABI for MIPS the caller has to save the callee address in register `t9`
      @@ -388,6 +657,89 @@
               Ok(())
           }
       
      +    /// Remove all objects and registers from the state whose contents will not be used after returning to a caller.
      +    ///
      +    /// All remaining memory objects after the minimization are reachable in the caller
      +    /// either via a parameter object that may have been mutated in the call
      +    /// or via a return register.
      +    pub fn minimize_before_return_instruction(
      +        &mut self,
      +        fn_sig: &FunctionSignature,
      +        cconv: &CallingConvention,
      +    ) {
      +        self.clear_non_return_register(cconv);
      +        self.remove_immutable_parameter_objects(fn_sig);
      +        self.memory.remove(&self.stack_id);
      +        self.remove_unreferenced_objects();
      +    }
      +
      +    /// Remove all parameter objects (including global parameter objects) that are not marked as mutably accessed.
      +    /// Used to minimize state before a return instruction.
      +    fn remove_immutable_parameter_objects(&mut self, fn_sig: &FunctionSignature) {
      +        let current_fn_tid = self.get_fn_tid().clone();
      +        self.memory.retain(|object_id, _object| {
      +            if *object_id.get_tid() == current_fn_tid && object_id.get_path_hints().is_empty() {
      +                if let Some(access_pattern) = fn_sig.parameters.get(object_id.get_location()) {
      +                    if !access_pattern.is_mutably_dereferenced() {
      +                        return false;
      +                    }
      +                }
      +                if let Some(access_pattern) = fn_sig.global_parameters.get(object_id.get_location())
      +                {
      +                    if !access_pattern.is_mutably_dereferenced() {
      +                        return false;
      +                    }
      +                }
      +            }
      +            true
      +        });
      +    }
      +
      +    /// Clear all non-return registers from the state, including all virtual registers.
      +    /// This function is used to minimize the state before a return instruction.
      +    fn clear_non_return_register(&mut self, cconv: &CallingConvention) {
      +        let return_register: HashSet<Variable> = cconv
      +            .get_all_return_register()
      +            .into_iter()
      +            .cloned()
      +            .collect();
      +        self.register
      +            .retain(|var, _value| return_register.contains(var));
      +    }
      +
      +    /// Try to determine unique pointer locations for non-parameter memory objects.
      +    /// When successful, merge all referenced non-parameter objects for that location
      +    /// and replace the pointer with a pointer to the merged object.
      +    ///
      +    /// The merged objects get new abstract IDs generated from the call TID and their abstract location in the state.
      +    ///
      +    /// This function leaves pointers to parameter objects as is,
      +    /// while pointers to non-parameter objects, that were not merged (e.g. due to pointers being not unique) are replaced with `Top`.
      +    pub fn merge_mem_objects_with_unique_abstract_location(&mut self, call_tid: &Tid) {
      +        let mut location_to_data_map = self.map_abstract_locations_to_pointer_data(call_tid);
      +        self.filter_location_to_pointer_data_map(&mut location_to_data_map);
      +        let location_to_object_map =
      +            self.generate_target_objects_for_new_locations(&location_to_data_map);
      +        self.replace_unified_mem_objects(location_to_object_map);
      +        self.replace_ids_to_non_parameter_objects(&location_to_data_map);
      +        self.insert_pointers_to_unified_objects(&location_to_data_map, call_tid);
      +    }
      +
      +    /// Remove all memory objects corresponding to non-parameter IDs.
      +    /// Afterwards, add the memory objects in the location to object map to the state.
      +    fn replace_unified_mem_objects(
      +        &mut self,
      +        location_to_object_map: BTreeMap<AbstractIdentifier, AbstractObject>,
      +    ) {
      +        let current_fn_tid = self.get_fn_tid().clone();
      +        self.memory.retain(|object_id, _| {
      +            *object_id.get_tid() == current_fn_tid && object_id.get_path_hints().is_empty()
      +        });
      +        for (id, object) in location_to_object_map {
      +            self.memory.insert(id, object);
      +        }
      +    }
      +
           /// Clear all non-callee-saved registers from the state.
           /// This automatically also removes all virtual registers.
           /// The parameter is a list of callee-saved register names.
      @@ -524,6 +876,22 @@
           }
       }
       
      +/// Sort parameters by recursion depth.
      +/// Helper function when one has to iterate over parameters in order of their recursion depth.
      +fn sort_params_by_recursion_depth(
      +    params: &BTreeMap<AbstractLocation, AccessPattern>,
      +) -> BTreeMap<u64, BTreeMap<&AbstractLocation, &AccessPattern>> {
      +    let mut sorted_params = BTreeMap::new();
      +    for (param, access_pattern) in params {
      +        let recursion_depth = param.recursion_depth();
      +        let bucket = sorted_params
      +            .entry(recursion_depth)
      +            .or_insert(BTreeMap::new());
      +        bucket.insert(param, access_pattern);
      +    }
      +    sorted_params
      +}
      +
       #[cfg(test)]
       mod tests;
       
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/value_specialization.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/value_specialization.rs.html index d4aa90127..68f371a36 100644 --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/value_specialization.rs.html +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/state/value_specialization.rs.html @@ -1,4 +1,4 @@ -value_specialization.rs - source
      1
      +value_specialization.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/statistics.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/statistics.rs.html
      index fd30532b2..846518b7f 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/statistics.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/statistics.rs.html
      @@ -1,4 +1,4 @@
      -statistics.rs - source
      1
      +statistics.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/vsa_result_impl.rs.html b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/vsa_result_impl.rs.html
      index e65bdcc5d..65ee4ab28 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/pointer_inference/vsa_result_impl.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/pointer_inference/vsa_result_impl.rs.html
      @@ -1,4 +1,4 @@
      -vsa_result_impl.rs - source
      1
      +vsa_result_impl.rs - source
      1
       2
       3
       4
      @@ -31,8 +31,19 @@
       31
       32
       33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
       
      use super::*;
      -use crate::analysis::vsa_results::VsaResult;
      +use crate::{abstract_domain::AbstractLocation, analysis::vsa_results::VsaResult};
       
       /// Implementation of the [`VsaResult`] trait for providing other analyses with an easy-to-use interface
       /// to use the value set and points-to analysis results of the pointer inference.
      @@ -63,5 +74,16 @@
                   .eval_parameter_arg(parameter, &context.project.runtime_memory_image)
                   .ok()
           }
      +
      +    /// Evaluate the value of the given parameter at the given jump instruction.
      +    fn eval_parameter_location_at_call(
      +        &self,
      +        jmp_tid: &Tid,
      +        parameter: &AbstractLocation,
      +    ) -> Option<Data> {
      +        let state = self.states_at_tids.get(jmp_tid)?;
      +        let context = self.computation.get_context().get_context();
      +        Some(state.eval_abstract_location(parameter, &context.project.runtime_memory_image))
      +    }
       }
       
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/analysis/stack_alignment_substitution/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/stack_alignment_substitution/mod.rs.html index f9687572d..b85a7819e 100644 --- a/doc/html/src/cwe_checker_lib/analysis/stack_alignment_substitution/mod.rs.html +++ b/doc/html/src/cwe_checker_lib/analysis/stack_alignment_substitution/mod.rs.html @@ -1,4 +1,4 @@ -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -320,7 +320,7 @@
       
       /// Returns the tid of the target of the first Jmp::Branch of the provided block.
       fn get_first_branch_tid(blk: &Term<Blk>) -> Option<&Tid> {
      -    if let Some(jmp) = blk.term.jmps.get(0) {
      +    if let Some(jmp) = blk.term.jmps.first() {
               if let Jmp::Branch(jump_to_blk) = &jmp.term {
                   return Some(jump_to_blk);
               }
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/mod.rs.html
      index 4e9ac7e1d..499c6b78f 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -181,7 +181,7 @@
           /// The keys are of the form `(Def-TID, Current-Sub-TID)`
           /// to distinguish the nodes for blocks contained in more than one function.
           pub block_start_node_map: HashMap<(Tid, Tid), NodeIndex>,
      -    /// A set containing a given [`Def`](crate::intermediate_representation::Def) as the first `Def` of the block.
      +    /// A set containing a given [`Def`] as the first `Def` of the block.
           /// The keys are of the form `(Def-TID, Current-Sub-TID)`
           /// to distinguish the nodes for blocks contained in more than one function.
           pub block_first_def_set: HashSet<(Tid, Tid)>,
      @@ -211,7 +211,7 @@
               for (node_id, node) in pointer_inference_results.get_graph().node_references() {
                   match node {
                       Node::BlkStart(block, sub) => {
      -                    if let Some(def) = block.term.defs.get(0) {
      +                    if let Some(def) = block.term.defs.first() {
                               block_start_node_map.insert((def.tid.clone(), sub.tid.clone()), node_id);
                               block_first_def_set.insert((def.tid.clone(), sub.tid.clone()));
                           }
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls.rs.html
      index c488d7f6b..c9b4677fa 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls.rs.html
      @@ -1,4 +1,4 @@
      -symbol_calls.rs - source
      1
      +symbol_calls.rs - source
      1
       2
       3
       4
      @@ -340,7 +340,7 @@
       
           /// Regex that filters format specifier from a format string.
           pub fn re_format_specifier() -> Regex {
      -        Regex::new(r#"%\d{0,2}([c,C,d,i,o,u,x,X,e,E,f,F,g,G,a,A,n,p,s,S]|hi|hd|hu|li|ld|lu|lli|lld|llu|lf|lg|le|la|lF|lG|lE|lA|Lf|Lg|Le|La|LF|LG|LE|LA)"#).expect("No valid regex!")
      +        Regex::new(r"%\d{0,2}([c,C,d,i,o,u,x,X,e,E,f,F,g,G,a,A,n,p,s,S]|hi|hd|hu|li|ld|lu|lli|lld|llu|lf|lg|le|la|lF|lG|lE|lA|Lf|Lg|Le|La|LF|LG|LE|LA)").expect("No valid regex!")
           }
       
           /// Merges domains from multiple pointer targets. The merged domain serves as input to a format string.
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/memcpy.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/memcpy.rs.html
      index 06957c5db..02f355dbc 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/memcpy.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/memcpy.rs.html
      @@ -1,4 +1,4 @@
      -memcpy.rs - source
      1
      +memcpy.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/scanf.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/scanf.rs.html
      index 9690fb5f8..bedf8d5fd 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/scanf.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/scanf.rs.html
      @@ -1,4 +1,4 @@
      -scanf.rs - source
      1
      +scanf.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/sprintf.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/sprintf.rs.html
      index 76646444d..62b062149 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/sprintf.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/sprintf.rs.html
      @@ -1,4 +1,4 @@
      -sprintf.rs - source
      1
      +sprintf.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/strcat.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/strcat.rs.html
      index abcd2b5b1..844dac426 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/strcat.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/symbol_calls/strcat.rs.html
      @@ -1,4 +1,4 @@
      -strcat.rs - source
      1
      +strcat.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/trait_impls.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/trait_impls.rs.html
      index 6edff2238..ce7bc6a26 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/trait_impls.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/context/trait_impls.rs.html
      @@ -1,4 +1,4 @@
      -trait_impls.rs - source
      1
      +trait_impls.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/mod.rs.html
      index 935b2dfa4..039955462 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -197,7 +197,7 @@
       
               let mut sub_to_entry_blocks_map = HashMap::new();
               for sub in project.program.term.subs.values() {
      -            if let Some(entry_block) = sub.term.blocks.get(0) {
      +            if let Some(entry_block) = sub.term.blocks.first() {
                       sub_to_entry_blocks_map.insert(sub.tid.clone(), entry_block.tid.clone());
                   }
               }
      diff --git a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/state/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/state/mod.rs.html
      index 1932f27aa..5bb623790 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/string_abstraction/state/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/string_abstraction/state/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/analysis/vsa_results/mod.rs.html b/doc/html/src/cwe_checker_lib/analysis/vsa_results/mod.rs.html
      index 805374f98..1375347af 100644
      --- a/doc/html/src/cwe_checker_lib/analysis/vsa_results/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/analysis/vsa_results/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -31,10 +31,19 @@
       31
       32
       33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
       
      //! This module provides the [`VsaResult`] trait
       //! which defines an interface for the results of analyses similar to a value set analysis.
       
      -use crate::intermediate_representation::{Arg, Expression};
      +use crate::abstract_domain::AbstractLocation;
      +use crate::intermediate_representation::{Arg, Expression};
       use crate::prelude::*;
       
       /// A trait providing an interface for accessing the results of a value set analysis.
      @@ -61,6 +70,13 @@
           /// Return the value of a parameter at the given jump instruction.
           fn eval_parameter_arg_at_call(&self, jmp_tid: &Tid, param: &Arg) -> Option<Self::ValueDomain>;
       
      +    /// Return the value of a parameter at the given jump instruction.
      +    fn eval_parameter_location_at_call(
      +        &self,
      +        jmp_tid: &Tid,
      +        param: &AbstractLocation,
      +    ) -> Option<Self::ValueDomain>;
      +
           /// Evaluate the value of the given expression at the given jump instruction.
           fn eval_at_jmp(&self, jmp_tid: &Tid, expression: &Expression) -> Option<Self::ValueDomain>;
       }
      diff --git a/doc/html/src/cwe_checker_lib/checkers.rs.html b/doc/html/src/cwe_checker_lib/checkers.rs.html
      index 7bb1caedf..cb92a1ace 100644
      --- a/doc/html/src/cwe_checker_lib/checkers.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers.rs.html
      @@ -1,4 +1,4 @@
      -checkers.rs - source
      1
      +checkers.rs - source
      1
       2
       3
       4
      @@ -21,6 +21,7 @@
       21
       22
       23
      +24
       
      //! The implemented CWE checks.
       //! See their module descriptions for detailed information about each check.
       //!
      @@ -34,6 +35,7 @@
       pub mod cwe_215;
       pub mod cwe_243;
       pub mod cwe_332;
      +pub mod cwe_337;
       pub mod cwe_367;
       pub mod cwe_416;
       pub mod cwe_426;
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/bounds_computation.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/bounds_computation.rs.html
      index c055a4927..dad59f45c 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/bounds_computation.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/bounds_computation.rs.html
      @@ -1,4 +1,4 @@
      -bounds_computation.rs - source
      1
      +bounds_computation.rs - source
      1
       2
       3
       4
      @@ -211,6 +211,8 @@
       211
       212
       213
      +214
      +215
       
      use super::Context;
       use crate::abstract_domain::{AbstractIdentifier, DataDomain, IntervalDomain, TryToBitvec};
       use crate::prelude::*;
      @@ -320,7 +322,7 @@
                           .function_signatures
                           .get(id.get_tid())
                           .unwrap()
      -                    .get_stack_params_total_size();
      +                    .get_stack_params_total_size(&self.project.stack_pointer_register);
                       replace_if_smaller_bound(
                           &mut upper_bound,
                           BoundsMetadata::from_source(
      @@ -348,7 +350,9 @@
               object_id: &AbstractIdentifier,
               current_stack_frame_id: &AbstractIdentifier,
           ) -> (Option<BoundsMetadata>, Option<BoundsMetadata>) {
      -        if self
      +        // FIXME: The malloc-tid-to-object-size-map check does not work anymore,
      +        // because we do not use path hints in the PointerInference anymore.
      +        if self
                   .malloc_tid_to_object_size_map
                   .contains_key(object_id.get_tid())
               {
      @@ -366,7 +370,7 @@
                       .function_signatures
                       .get(object_id.get_tid())
                       .unwrap()
      -                .get_stack_params_total_size();
      +                .get_stack_params_total_size(&self.project.stack_pointer_register);
                   (None, Some(BoundsMetadata::new(stack_frame_upper_bound)))
               } else if object_id.get_tid() == current_stack_frame_id.get_tid()
                   && object_id.get_path_hints().is_empty()
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/mod.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/mod.rs.html
      index 34a65f93e..45f47fe2b 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -309,6 +309,8 @@
       309
       310
       311
      +312
      +313
       
      use crate::abstract_domain::*;
       use crate::analysis::callgraph::CallGraph;
       use crate::analysis::function_signature::FunctionSignature;
      @@ -400,7 +402,9 @@
           /// then the absolute value is used and unknown origins of the size value are ignored.
           /// If more than one possible absolute value for the size is found then the minimum value for the size is returned.
           pub fn compute_size_of_heap_object(&self, object_id: &AbstractIdentifier) -> BitvectorDomain {
      -        if let Some(object_size) = self.malloc_tid_to_object_size_map.get(object_id.get_tid()) {
      +        // FIXME: We use path hints, which are not longer provided by the PointerInference, to substitute some values.
      +        // We either have to change that or make sure that we provide the path hints ourselves.
      +        if let Some(object_size) = self.malloc_tid_to_object_size_map.get(object_id.get_tid()) {
                   let fn_tid_at_malloc_call = self.call_to_caller_fn_map[object_id.get_tid()].clone();
                   let object_size = self.recursively_substitute_param_values_context_sensitive(
                       object_size,
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/param_replacement.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/param_replacement.rs.html
      index 647971af1..cd62c336c 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/param_replacement.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/param_replacement.rs.html
      @@ -1,4 +1,4 @@
      -param_replacement.rs - source
      1
      +param_replacement.rs - source
      1
       2
       3
       4
      @@ -308,6 +308,7 @@
       308
       309
       310
      +311
       
      use super::Context;
       use crate::abstract_domain::*;
       use crate::analysis::pointer_inference::Data;
      @@ -502,9 +503,10 @@
               .get(callee_tid)
           {
               for param_arg in fn_sig.parameters.keys() {
      -            if let Some(param_value) = vsa_results.eval_parameter_arg_at_call(&call.tid, param_arg)
      +            if let Some(param_value) =
      +                vsa_results.eval_parameter_location_at_call(&call.tid, param_arg)
                   {
      -                let param_id = AbstractIdentifier::from_arg(&call.tid, param_arg);
      +                let param_id = AbstractIdentifier::new(call.tid.clone(), param_arg.clone());
                       replacement_map.insert(param_id, param_value);
                   }
               }
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/trait_impls.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/trait_impls.rs.html
      index 9638211d7..5d6d7dc3c 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/trait_impls.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/context/trait_impls.rs.html
      @@ -1,4 +1,4 @@
      -trait_impls.rs - source
      1
      +trait_impls.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/mod.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/mod.rs.html
      index a16ec8c73..33aade232 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -92,6 +92,23 @@
       92
       93
       94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
       
      //! This module implements a check for CWE-119: Buffer Overflow
       //! and its variants CWE-125: Out-of-bounds Read and CWE-787: Out-of-bounds Write.
       //!
      @@ -107,10 +124,13 @@
       //!
       //! The check uses the results of the [Pointer Inference analysis](`crate::analysis::pointer_inference`)
       //! to check whether any memory accesses may point outside of the bounds of the corresponding memory objects.
      -//! For this the results of the Pointer Inference analysis are aggregated interprocedurally.
      -//! Additionally, the check uses a lightweight intraprocedural dataflow fixpoint computation
      +//! Additionally, the check uses a lightweight dataflow fixpoint computation
       //! to ensure that for each memory object only the first access outside of its bounds is flagged as a CWE.
       //!
      +//! Currently, the check is only partially interprocedural.
      +//! Bounds of parameter objects can be detected, but bounds of memory objects created in called functions
      +//! (other than the standard allocation functions) will not be detected.
      +//!
       //! ## False Positives
       //!
       //! - Any analysis imprecision of the Pointer Inference analysis may lead to false positive results in this check.
      @@ -134,6 +154,20 @@
       //! this still may miss buffer overflows occuring in the called function.
       //! - Right now the check only considers buffers on the stack or the heap, but not buffers in global memory.
       //! Thus corresponding overflows of buffers in global memory are not detected.
      +//! - Since the check is only partially interprocedural at the moment,
      +//! it will miss object sizes of objects created in called functions.
      +//! For example, if allocations are wrapped in simple wrapper functions,
      +//! the analysis will miss overflows for corresponding objects, because it cannot determine their object sizes.
      +
      +// FIXME: The current implementation uses path hints for memory object IDs to determine object sizes interprocedurally.
      +// But the number of path hint combinations can grow exponentially
      +// with the call depth to the actual allocation size of a callee-created object.
      +// This led to state explosion in the PointerInference and thus path hints are not longer provided by the PointerInference.
      +// But without the path hints that this analysis depended on, the check can only resolve sizes of parameter objects,
      +// but not of objects returned from called functions (other than the standard allocation functions).
      +// A future implementation needs a better way to determine object sizes interprocedurally,
      +// probably depending on several fixpoint computations to circumvent the state explosion problems
      +// that the old implementation is vulnerable to.
       
       use crate::analysis::pointer_inference::Data;
       use crate::prelude::*;
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/state.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/state.rs.html
      index 828c0ca0c..155738d59 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/state.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/state.rs.html
      @@ -1,4 +1,4 @@
      -state.rs - source
      1
      +state.rs - source
      1
       2
       3
       4
      @@ -393,7 +393,7 @@
               };
               let stack_upper_bound = std::cmp::max(
                   stack_upper_bound,
      -            function_sig.get_stack_params_total_size(),
      +            function_sig.get_stack_params_total_size(&project.stack_pointer_register),
               );
               let object_lower_bounds = BTreeMap::from([(
                   stack_id.clone(),
      @@ -617,7 +617,7 @@
                   &caller_tid,
                   state.stack_id.get_tid(),
               );
      -        tids.extend(call_sequence_tids.into_iter());
      +        tids.extend(call_sequence_tids);
           }
           // Build a string out of the TID list
           tids.iter()
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_119/stubs.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_119/stubs.rs.html
      index b6c913f1a..23aad5a2f 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_119/stubs.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_119/stubs.rs.html
      @@ -1,4 +1,4 @@
      -stubs.rs - source
      1
      +stubs.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_134.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_134.rs.html
      index bcd7d0637..5301ec810 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_134.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_134.rs.html
      @@ -1,4 +1,4 @@
      -cwe_134.rs - source
      1
      +cwe_134.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_190.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_190.rs.html
      index 6bc1899de..8e9013410 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_190.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_190.rs.html
      @@ -1,4 +1,4 @@
      -cwe_190.rs - source
      1
      +cwe_190.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_215.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_215.rs.html
      index fbbb47ab5..5fca4e31f 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_215.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_215.rs.html
      @@ -1,4 +1,4 @@
      -cwe_215.rs - source
      1
      +cwe_215.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_243.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_243.rs.html
      index 8abeb7d28..21af39445 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_243.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_243.rs.html
      @@ -1,4 +1,4 @@
      -cwe_243.rs - source
      1
      +cwe_243.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_332.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_332.rs.html
      index 0261d9d04..e56d12d96 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_332.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_332.rs.html
      @@ -1,4 +1,4 @@
      -cwe_332.rs - source
      1
      +cwe_332.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_337.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_337.rs.html
      new file mode 100644
      index 000000000..99d7838e4
      --- /dev/null
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_337.rs.html
      @@ -0,0 +1,469 @@
      +cwe_337.rs - source
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +25
      +26
      +27
      +28
      +29
      +30
      +31
      +32
      +33
      +34
      +35
      +36
      +37
      +38
      +39
      +40
      +41
      +42
      +43
      +44
      +45
      +46
      +47
      +48
      +49
      +50
      +51
      +52
      +53
      +54
      +55
      +56
      +57
      +58
      +59
      +60
      +61
      +62
      +63
      +64
      +65
      +66
      +67
      +68
      +69
      +70
      +71
      +72
      +73
      +74
      +75
      +76
      +77
      +78
      +79
      +80
      +81
      +82
      +83
      +84
      +85
      +86
      +87
      +88
      +89
      +90
      +91
      +92
      +93
      +94
      +95
      +96
      +97
      +98
      +99
      +100
      +101
      +102
      +103
      +104
      +105
      +106
      +107
      +108
      +109
      +110
      +111
      +112
      +113
      +114
      +115
      +116
      +117
      +118
      +119
      +120
      +121
      +122
      +123
      +124
      +125
      +126
      +127
      +128
      +129
      +130
      +131
      +132
      +133
      +134
      +135
      +136
      +137
      +138
      +139
      +140
      +141
      +142
      +143
      +144
      +145
      +146
      +147
      +148
      +149
      +150
      +151
      +152
      +153
      +154
      +155
      +156
      +157
      +158
      +159
      +160
      +161
      +162
      +163
      +164
      +165
      +166
      +167
      +168
      +169
      +170
      +171
      +172
      +173
      +174
      +175
      +176
      +177
      +178
      +179
      +180
      +181
      +182
      +183
      +184
      +185
      +186
      +187
      +188
      +189
      +190
      +191
      +192
      +193
      +194
      +195
      +196
      +197
      +198
      +199
      +200
      +201
      +202
      +203
      +204
      +205
      +206
      +207
      +208
      +209
      +210
      +211
      +212
      +213
      +214
      +215
      +216
      +217
      +218
      +219
      +220
      +221
      +222
      +223
      +224
      +225
      +226
      +227
      +228
      +229
      +230
      +231
      +232
      +233
      +234
      +
      //! This module implements a check for CWE-337: Predictable Seed in Pseudo-Random Number Generator (PRNG)
      +//!
      +//! The use of predictable seeds significantly reduces the number of possible seeds that an attacker would need
      +//! to test in order to predict which random numbers will be generated by the PRNG.
      +//!
      +//! See <https://cwe.mitre.org/data/definitions/337.html> for a detailed description.
      +//!
      +//! ## How the check works
      +//!
      +//! Using dataflow analysis we search for an execution path where the result of a time source, like `time`,
      +//! is used as an argument to a PRNG seeding function, like `srand`.
      +//!
      +//! ### Symbols configurable in config.json
      +//!
      +//! Both the sources of predictable seeds and the seeding functions can be configured using the `sources`
      +//! and `seeding_functions` respectively.
      +
      +use crate::analysis::graph::{Edge, Graph, Node};
      +use crate::intermediate_representation::*;
      +use crate::prelude::*;
      +use crate::utils::log::{CweWarning, LogMessage};
      +use crate::CweModule;
      +
      +use crate::abstract_domain::AbstractDomain;
      +use crate::analysis::forward_interprocedural_fixpoint::create_computation;
      +use crate::analysis::interprocedural_fixpoint_generic::NodeValue;
      +
      +use petgraph::visit::EdgeRef;
      +use std::collections::BTreeMap;
      +use std::collections::HashMap;
      +
      +use crate::checkers::cwe_476::state::*;
      +use crate::checkers::cwe_476::taint::*;
      +
      +/// The module name and version
      +pub static CWE_MODULE: CweModule = CweModule {
      +    name: "CWE337",
      +    version: "0.1",
      +    run: check_cwe,
      +};
      +
      +/// The configuration struct
      +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
      +pub struct Config {
      +    /// Sources of predictable seeds.
      +    sources: Vec<String>,
      +    /// Random number seeding functions.
      +    seeding_functions: Vec<String>,
      +}
      +
      +/// This check checks if a return value of any of the sources (as determined by the config file)
      +/// is used as a direct parameter of any of the sinks (as determined by the config file).
      +/// Currently, this is only used to detect whether a call of `time` leads into a call of `srand`,
      +/// only tracks registers and not memory locations and stops at any call.
      +pub fn check_cwe(
      +    analysis_results: &AnalysisResults,
      +    cwe_params: &serde_json::Value,
      +) -> (Vec<LogMessage>, Vec<CweWarning>) {
      +    let project = analysis_results.project;
      +    let graph = analysis_results.control_flow_graph;
      +
      +    let (cwe_sender, cwe_receiver) = crossbeam_channel::unbounded();
      +
      +    let config: Config = serde_json::from_value(cwe_params.clone())
      +        .expect("Invalid configuration inside config.json for CWE337.");
      +    let source_map = crate::utils::symbol_utils::get_symbol_map(project, &config.sources[..]);
      +    let sink_map =
      +        crate::utils::symbol_utils::get_symbol_map(project, &config.seeding_functions[..]);
      +
      +    if source_map.is_empty() || sink_map.is_empty() {
      +        return (Vec::new(), Vec::new());
      +    }
      +
      +    let context = Context {
      +        control_flow_graph: graph,
      +        sink_map: &sink_map,
      +        cwe_collector: &cwe_sender,
      +    };
      +    let mut computation = create_computation(context, None);
      +
      +    for edge in graph.edge_references() {
      +        if let Edge::ExternCallStub(jmp) = edge.weight() {
      +            if let Jmp::Call { target, .. } = &jmp.term {
      +                if let Some(symbol) = source_map.get(target) {
      +                    let node = edge.target();
      +                    computation.set_node_value(node, NodeValue::Value(State::new(symbol, None)));
      +                }
      +            }
      +        }
      +    }
      +    computation.compute_with_max_steps(100); // FIXME: This number should be in the config.
      +
      +    let mut cwe_warnings = BTreeMap::new();
      +    for cwe in cwe_receiver.try_iter() {
      +        cwe_warnings.insert(cwe.addresses[0].clone(), cwe);
      +    }
      +    let cwe_warnings = cwe_warnings.into_values().collect();
      +
      +    (Vec::new(), cwe_warnings)
      +}
      +
      +/// The Context struct for the forward_interprocedural_fixpoint algorithm.
      +pub struct Context<'a> {
      +    /// The underlying control flow graph for the algorithm.
      +    control_flow_graph: &'a Graph<'a>,
      +    /// A map of symbols to use as sinks for the algorithm.
      +    sink_map: &'a HashMap<Tid, &'a ExternSymbol>,
      +    /// A channel where found CWE hits can be sent to.
      +    cwe_collector: &'a crossbeam_channel::Sender<CweWarning>,
      +}
      +
      +impl<'a> Context<'a> {
      +    fn generate_cwe_warning(&self, sink_call: &Term<Jmp>, sink_symbol: &ExternSymbol) {
      +        let cwe_warning = CweWarning::new(
      +            CWE_MODULE.name,
      +            CWE_MODULE.version,
      +            format!(
      +                "RNG seed function {} at {} is seeded with predictable seed source.",
      +                sink_symbol.name, sink_call.tid.address,
      +            ),
      +        )
      +        .tids(vec![format!("{}", sink_call.tid)])
      +        .addresses(vec![sink_call.tid.address.clone()])
      +        .symbols(vec![sink_symbol.name.clone()]);
      +        let _ = self.cwe_collector.send(cwe_warning);
      +    }
      +}
      +
      +impl<'a> crate::analysis::forward_interprocedural_fixpoint::Context<'a> for Context<'a> {
      +    type Value = State;
      +
      +    /// Provide access to the control flow graph.
      +    fn get_graph(&self) -> &Graph<'a> {
      +        self.control_flow_graph
      +    }
      +
      +    /// Just forward the value merging to the [`AbstractDomain`].
      +    fn merge(&self, value_1: &Self::Value, value_2: &Self::Value) -> Self::Value {
      +        value_1.merge(value_2)
      +    }
      +
      +    /// Keep track of register taint through Defs.
      +    /// Currently, we never taint memory.
      +    fn update_def(&self, state: &State, def: &Term<Def>) -> Option<Self::Value> {
      +        if state.is_empty() {
      +            return None;
      +        }
      +
      +        let mut new_state = state.clone();
      +        match &def.term {
      +            Def::Assign { var, value } => {
      +                new_state.set_register_taint(var, state.eval(value));
      +            }
      +            Def::Load { var, .. } => {
      +                // FIXME: CWE476 uses pointer_inference here to load taint from memory.
      +                new_state.set_register_taint(var, Taint::Top(var.size));
      +            }
      +            Def::Store { .. } => {}
      +        }
      +
      +        Some(new_state)
      +    }
      +
      +    /// We don't care if there was some condition on the random value.
      +    fn update_jump(
      +        &self,
      +        state: &State,
      +        _jump: &Term<Jmp>,
      +        _untaken_conditional: Option<&Term<Jmp>>,
      +        _target: &Term<Blk>,
      +    ) -> Option<Self::Value> {
      +        Some(state.clone())
      +    }
      +
      +    /// For now we stop the search on any sort of call.
      +    fn update_call(
      +        &self,
      +        _value: &Self::Value,
      +        _call: &Term<Jmp>,
      +        _target: &Node,
      +        _calling_convention: &Option<String>,
      +    ) -> Option<Self::Value> {
      +        None
      +    }
      +
      +    /// For now we stop the search on any sort of call.
      +    fn update_return(
      +        &self,
      +        _value: Option<&Self::Value>,
      +        _value_before_call: Option<&Self::Value>,
      +        _call_term: &Term<Jmp>,
      +        _return_term: &Term<Jmp>,
      +        _calling_convention: &Option<String>,
      +    ) -> Option<Self::Value> {
      +        None
      +    }
      +
      +    /// For now we stop the search on any sort of call.
      +    /// But report a cwe warning, if we encountered a call to one of the sink symbols.
      +    fn update_call_stub(&self, state: &State, call: &Term<Jmp>) -> Option<Self::Value> {
      +        if state.is_empty() {
      +            return None;
      +        }
      +
      +        match &call.term {
      +            Jmp::Call { target, .. } => {
      +                if let Some(sink_symbol) = self.sink_map.get(target) {
      +                    for parameter in sink_symbol.parameters.iter() {
      +                        if let Arg::Register { expr, .. } = parameter {
      +                            if state.eval(expr).is_tainted() {
      +                                self.generate_cwe_warning(call, sink_symbol);
      +                            }
      +                        }
      +                    }
      +                }
      +            }
      +            Jmp::CallInd { .. } => {}
      +            _ => panic!("Malformed control flow graph encountered."),
      +        }
      +
      +        None
      +    }
      +
      +    /// We don't care if there was some condition on the random value.
      +    fn specialize_conditional(
      +        &self,
      +        state: &State,
      +        _condition: &Expression,
      +        _block_before_condition: &Term<Blk>,
      +        _is_true: bool,
      +    ) -> Option<Self::Value> {
      +        Some(state.clone())
      +    }
      +}
      +
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_367.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_367.rs.html index 690ef335c..70cf3a57d 100644 --- a/doc/html/src/cwe_checker_lib/checkers/cwe_367.rs.html +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_367.rs.html @@ -1,4 +1,4 @@ -cwe_367.rs - source
      1
      +cwe_367.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_416/context.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_416/context.rs.html
      index 1944549bd..d30dd23d5 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_416/context.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_416/context.rs.html
      @@ -1,4 +1,4 @@
      -context.rs - source
      1
      +context.rs - source
      1
       2
       3
       4
      @@ -449,7 +449,7 @@
               state: &mut State,
               call_tid: &Tid,
               call_params: impl IntoIterator<Item = &'b Arg>,
      -    ) -> Option<Vec<(AbstractIdentifier, Tid)>> {
      +    ) -> Option<Vec<(AbstractIdentifier, Vec<Tid>)>> {
               let mut warnings = Vec::new();
               for arg in call_params {
                   if let Some(arg_value) = self
      @@ -485,7 +485,7 @@
                   if access_pattern.is_dereferenced() {
                       if let Some(arg_value) = self
                           .pointer_inference
      -                    .eval_parameter_arg_at_call(call_tid, arg)
      +                    .eval_parameter_location_at_call(call_tid, arg)
                       {
                           if let Some(mut warnings) = state.check_address_for_use_after_free(&arg_value) {
                               warning_causes.append(&mut warnings);
      @@ -547,7 +547,7 @@
               name: &str,
               description: String,
               location: &Tid,
      -        warning_causes: Vec<(AbstractIdentifier, Tid)>,
      +        warning_causes: Vec<(AbstractIdentifier, Vec<Tid>)>,
               root_function: &Tid,
           ) {
               let cwe_warning = CweWarning {
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_416/mod.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_416/mod.rs.html
      index e7df58135..45e5818a2 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_416/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_416/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -318,6 +318,18 @@
       318
       319
       320
      +321
      +322
      +323
      +324
      +325
      +326
      +327
      +328
      +329
      +330
      +331
      +332
       
      //! This module implements a check for CWE-415: Double Free and CWE-416: Use After Free.
       //!
       //! If a program tries to reference memory objects or other resources after they have been freed
      @@ -339,10 +351,15 @@
       //!
       //! ### Symbols configurable in config.json
       //!
      -//! The `deallocation_symbols` are the names of extern functions that deallocate memory.
      +//! - The `deallocation_symbols` are the names of extern functions that deallocate memory.
       //! The check always assumes that the first parameter of such a function is the memory object to be freed.
       //! The check also assumes that memory is always freed by such a call,
       //! which can lead to false positive warnings for functions like `realloc`, where the memory object may not be freed by the call.
      +//! - The `always_include_full_path_to_free_site` flag controls the amount of context information printed in the CWE warnings.
      +//! If set to `true`, then the warning contains the full path in the callgraph from the root function to an actual `free`-site.
      +//! If set to `false`, then the path may be shortened:
      +//! A call to some function `func` may be reported as the `free`-site
      +//! if the actual `free`-operation is contained in `func` or some callee of `func`.
       //!
       //! ## False Positives
       //!
      @@ -362,21 +379,21 @@
       //! - Memory objects not tracked by the Pointer Inference analysis or pointer targets missed by the Pointer Inference
       //! may lead to missed CWEs in this check.
       //! - Pointers freed by other operations than calls to the deallocation symbols contained in the config.json will be missed by the analysis.
      +//! - Pointers freed and flagged in the same call are not marked as freed in the caller.
      +//! This reduces false positives and duplicates, but may also result in some false negatives.
      +//! - Objects freed in the same call where they are created are not marked as freed in the caller.
      +//! This reduces false positives, but may also result in some false negatives.
      +//! - Pointers to recursively defined data structures like linked lists are heuristically identified and ignored.
      +//! This reduces false positives generated when such structures are recursively freed in a loop,
      +//! but also prevents detection of bugs involving such pointers.
       
      -use std::collections::BTreeSet;
      -use std::collections::HashMap;
      -use std::collections::HashSet;
      -
      -use crate::abstract_domain::AbstractDomain;
      -use crate::abstract_domain::AbstractIdentifier;
      -use crate::analysis::fixpoint::Computation;
      -use crate::analysis::forward_interprocedural_fixpoint::GeneralizedContext;
      -use crate::analysis::graph::Node;
      -use crate::analysis::interprocedural_fixpoint_generic::NodeValue;
      +use crate::abstract_domain::AbstractIdentifier;
       use crate::prelude::*;
       use crate::utils::log::CweWarning;
       use crate::utils::log::LogMessage;
       use crate::CweModule;
      +use std::collections::BTreeSet;
      +use std::collections::HashSet;
       
       /// The module name and version
       pub static CWE_MODULE: CweModule = CweModule {
      @@ -391,6 +408,9 @@
           /// The names of symbols that free memory (e.g. the "free" function of C).
           /// The analysis always assumes that the memory object to be freed is the first parameter of the function.
           deallocation_symbols: Vec<String>,
      +    /// If this flag is set to `true`,
      +    /// then always include the full path to the actual `free`-site in the callgraph in the CWE warning context information.
      +    always_include_full_path_to_free_site: bool,
       }
       
       mod context;
      @@ -434,12 +454,14 @@
       
           fixpoint_computation.compute_with_max_steps(100);
       
      -    let mut warnings = HashSet::new();
      +    let mut warnings = BTreeSet::new();
           while let Ok(warning) = cwe_warning_receiver.try_recv() {
               warnings.insert(warning);
           }
      -    let return_site_states = collect_return_site_states(&fixpoint_computation);
      -    let cwes = generate_context_information_for_warnings(return_site_states, warnings);
      +    let cwes = generate_context_information_for_warnings(
      +        warnings,
      +        config.always_include_full_path_to_free_site,
      +    );
       
           let mut logs = BTreeSet::new();
           while let Ok(log_msg) = log_receiver.try_recv() {
      @@ -457,18 +479,15 @@
           cwe: CweWarning,
           /// The TID of the function in which the CWE warning was generated.
           root_function: Tid,
      -    /// Pairs of object IDs and the sites where the object was freed.
      -    /// If the free-site is the same function call from which the object ID originates
      -    /// then the CWE needs to be post-processed to give more exact information about the
      -    /// free-site inside the function call.
      -    object_and_free_ids: Vec<(AbstractIdentifier, Tid)>,
      +    /// Pairs of object IDs and the paths to the actual free sites.
      +    object_and_free_ids: Vec<(AbstractIdentifier, Vec<Tid>)>,
       }
       
       impl WarningContext {
           /// Generate a new warning context object.
           pub fn new(
               cwe: CweWarning,
      -        object_and_free_ids: Vec<(AbstractIdentifier, Tid)>,
      +        object_and_free_ids: Vec<(AbstractIdentifier, Vec<Tid>)>,
               root_function: Tid,
           ) -> Self {
               WarningContext {
      @@ -479,96 +498,94 @@
           }
       }
       
      -/// For each function call TID collect the state of the callee just before returning to the caller.
      -fn collect_return_site_states<'a>(
      -    fixpoint: &Computation<GeneralizedContext<'a, Context<'a>>>,
      -) -> HashMap<Tid, State> {
      -    let mut call_tid_to_return_state_map: HashMap<Tid, State> = HashMap::new();
      -    let graph = fixpoint.get_graph();
      -    for node in graph.node_indices() {
      -        let call_tid = match graph[node] {
      -            Node::CallReturn { call, return_: _ } => call.0.term.jmps[0].tid.clone(),
      -            _ => continue,
      -        };
      -        let node_value = match fixpoint.get_node_value(node) {
      -            Some(value) => value,
      -            None => continue,
      -        };
      -        let return_state = match node_value {
      -            NodeValue::CallFlowCombinator {
      -                call_stub: _,
      -                interprocedural_flow,
      -            } => {
      -                if let Some(state) = interprocedural_flow {
      -                    state.clone()
      -                } else {
      -                    continue;
      -                }
      -            }
      -            _ => panic!("Unexpexted NodeValue type encountered."),
      -        };
      -        // There exists one CallReturn node for each return instruction in the callee,
      -        // so we have to merge the corresponding states here.
      -        call_tid_to_return_state_map
      -            .entry(call_tid)
      -            .and_modify(|saved_return_state| {
      -                *saved_return_state = saved_return_state.merge(&return_state)
      -            })
      -            .or_insert(return_state);
      +/// Shorten the path to the "free"-site so that it ends in the first call
      +/// that is not contained in the path to the object origin.
      +fn get_shortended_path_to_source_of_free(
      +    object_id: &AbstractIdentifier,
      +    free_path: &[Tid],
      +) -> Vec<Tid> {
      +    let mut object_id = object_id.clone();
      +    let mut shortened_free_path = free_path.to_vec();
      +    while let (shortened_id, Some(last_path_hint)) = object_id.without_last_path_hint() {
      +        if Some(&last_path_hint) == shortened_free_path.last() {
      +            object_id = shortened_id;
      +            shortened_free_path.pop();
      +        } else {
      +            break;
      +        }
      +    }
      +    // Return the free path without the shortened free path
      +    if shortened_free_path.is_empty() {
      +        free_path.to_vec()
      +    } else {
      +        free_path[(shortened_free_path.len() - 1)..].to_vec()
           }
      -    call_tid_to_return_state_map
       }
       
      -/// If the ID of the "free"-site is the same call from which the object ID originates from
      -/// then (recursively) identify the real "free"-site inside the call.
      -/// Also return a list of call TIDs that lead to the real "free"-site.
      -///
      -/// The function returns an error if the source object was already flagged in some of the callees.
      -/// In such a case the corresponding CWE warning should be removed,
      -/// since there already exists another CWE warning with the same root cause.
      -fn get_source_of_free(
      +/// Get the part of the path to the "free"-site that is not shared with the path to the object origin site.
      +fn get_root_cause_for_returned_dangling_pointers(
           object_id: &AbstractIdentifier,
      -    free_id: &Tid,
      -    return_site_states: &HashMap<Tid, State>,
      -) -> Result<(Tid, Vec<Tid>), ()> {
      -    if let (inner_object, Some(path_hint_id)) = object_id.without_last_path_hint() {
      -        if path_hint_id == *free_id {
      -            if let Some(return_state) = return_site_states.get(free_id) {
      -                if return_state.is_id_already_flagged(&inner_object) {
      -                    return Err(());
      -                }
      -                if let Some(inner_free) = return_state.get_free_tid_if_dangling(&inner_object) {
      -                    let (root_free, mut callgraph_ids) =
      -                        get_source_of_free(&inner_object, inner_free, return_site_states)?;
      -                    callgraph_ids.push(path_hint_id);
      -                    return Ok((root_free, callgraph_ids));
      -                }
      -            }
      +    free_path: &[Tid],
      +) -> Vec<Tid> {
      +    let mut object_id = object_id.clone();
      +    let mut shortened_free_path = free_path.to_vec();
      +    while let (shortened_id, Some(last_path_hint)) = object_id.without_last_path_hint() {
      +        if Some(&last_path_hint) == shortened_free_path.last() {
      +            object_id = shortened_id;
      +            shortened_free_path.pop();
      +        } else {
      +            break;
               }
           }
      -    // No inner source apart from the given free_id could be identified
      -    Ok((free_id.clone(), Vec::new()))
      +    if shortened_free_path.is_empty() {
      +        vec![free_path[0].clone()]
      +    } else {
      +        shortened_free_path
      +    }
      +}
      +
      +/// Return `true` if the object originates in the same call as the "free"-site.
      +fn is_case_of_returned_dangling_pointer(object_id: &AbstractIdentifier, free_path: &[Tid]) -> bool {
      +    // This implicitly uses that the `free_path` is never empty.
      +    object_id.get_path_hints().last() == free_path.last()
       }
       
       /// Generate context information for CWE warnings.
       /// E.g. relevant callgraph addresses are added to each CWE here.
       fn generate_context_information_for_warnings(
      -    return_site_states: HashMap<Tid, State>,
      -    warnings: HashSet<WarningContext>,
      +    warnings: BTreeSet<WarningContext>,
      +    generate_full_paths_to_free_site: bool,
       ) -> BTreeSet<CweWarning> {
           let mut processed_warnings = BTreeSet::new();
      +    let mut root_causes_for_returned_dangling_pointers = HashSet::new();
      +
           for mut warning in warnings {
               let mut context_infos = Vec::new();
      -        let mut relevant_callgraph_tids = Vec::new();
      -        for (object_id, free_id) in warning.object_and_free_ids.iter() {
      -            if let Ok((root_free_id, mut callgraph_ids_to_free)) =
      -                get_source_of_free(object_id, free_id, &return_site_states)
      -            {
      -                relevant_callgraph_tids.append(&mut callgraph_ids_to_free);
      -                context_infos.push(format!(
      -                    "Accessed ID {object_id} may have been freed before at {root_free_id}."
      -                ));
      +        let mut relevant_callgraph_tids = BTreeSet::new();
      +        for (object_id, mut free_path) in warning.object_and_free_ids.into_iter() {
      +            if is_case_of_returned_dangling_pointer(&object_id, &free_path) {
      +                let root_cause =
      +                    get_root_cause_for_returned_dangling_pointers(&object_id, &free_path);
      +                if root_causes_for_returned_dangling_pointers.contains(&root_cause) {
      +                    // Skip this warning root cause, since another warning with the same root cause was already generated.
      +                    // FIXME: This is a coarse heuristic to reduce false positives.
      +                    // However, it is still possible that some but not all of these cases are real bugs
      +                    // and that this heuristic chooses the wrong representative.
      +                    continue;
      +                } else {
      +                    root_causes_for_returned_dangling_pointers.insert(root_cause);
      +                }
      +            }
      +            if !generate_full_paths_to_free_site {
      +                free_path = get_shortended_path_to_source_of_free(&object_id, &free_path);
                   }
      +            for id in &free_path[1..] {
      +                relevant_callgraph_tids.insert(id.clone());
      +            }
      +            context_infos.push(format!(
      +                "Accessed ID {object_id} may have been freed before at {}.",
      +                free_path[0]
      +            ));
               }
               if context_infos.is_empty() {
                   // Skip (delete) this CWE warning,
      @@ -606,36 +623,43 @@
                   Tid::new("object_origin_tid"),
                   AbstractLocation::Register(variable!("RAX:8")),
               );
      -        let path_id = id.with_path_hint(Tid::new("call_tid")).unwrap();
      -        let object_and_free_ids = vec![(path_id, Tid::new("call_tid"))];
      +        let object_id = id.with_path_hint(Tid::new("call_tid")).unwrap();
      +        let object_and_free_ids = vec![(
      +            object_id.clone(),
      +            vec![Tid::new("free_tid"), Tid::new("call_tid")],
      +        )];
       
               let cwe = CweWarning::new("CWE416", "test", "mock_cwe");
               let warning_context =
                   WarningContext::new(cwe, object_and_free_ids, Tid::new("root_func_tid"));
      -        let warnings = HashSet::from([warning_context]);
      +        let warnings = BTreeSet::from([warning_context.clone()]);
       
               // Test warning context generation
      -        let return_state = State::mock(
      -            Tid::new("callee_tid"),
      -            &[(id.clone(), Tid::new("free_tid"))],
      -            &[],
      -        );
      -        let return_site_states = HashMap::from([(Tid::new("call_tid"), return_state)]);
      -        let processed_warnings =
      -            generate_context_information_for_warnings(return_site_states, warnings.clone());
      +        let processed_warnings = generate_context_information_for_warnings(warnings.clone(), false);
               assert_eq!(processed_warnings.len(), 1);
               let processed_cwe = processed_warnings.iter().next().unwrap();
               assert_eq!(&processed_cwe.other[0], &[
      -            "Accessed ID object_origin_tid(->call_tid) @ RAX may have been freed before at free_tid.".to_string(),
      +            "Accessed ID object_origin_tid(->call_tid) @ RAX:i64 may have been freed before at free_tid.".to_string(),
                   "Relevant callgraph TIDs: [root_func_tid, call_tid]".to_string(),
               ]);
       
               // Test warning filtering
      -        let return_state = State::mock(Tid::new("callee_tid"), &[], &[id.clone()]);
      -        let return_site_states = HashMap::from([(Tid::new("call_tid"), return_state)]);
      -        let processed_warnings =
      -            generate_context_information_for_warnings(return_site_states, warnings);
      -        assert_eq!(processed_warnings.len(), 0)
      +        let object_and_free_ids_2 = vec![(
      +            object_id
      +                .with_path_hint(Tid::new("outer_call_tid"))
      +                .unwrap(),
      +            vec![
      +                Tid::new("free_tid"),
      +                Tid::new("call_tid"),
      +                Tid::new("outer_call_tid"),
      +            ],
      +        )];
      +        let cwe_2 = CweWarning::new("CWE416", "test", "mock_cwe_2");
      +        let warning_context_2 =
      +            WarningContext::new(cwe_2, object_and_free_ids_2, Tid::new("root_func_tid_2"));
      +        let warnings = BTreeSet::from([warning_context, warning_context_2]);
      +        let processed_warnings = generate_context_information_for_warnings(warnings, false);
      +        assert_eq!(processed_warnings.len(), 1)
           }
       }
       
      \ No newline at end of file diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_416/state.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_416/state.rs.html index 39c276019..51889c61f 100644 --- a/doc/html/src/cwe_checker_lib/checkers/cwe_416/state.rs.html +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_416/state.rs.html @@ -1,4 +1,4 @@ -state.rs - source
      1
      +state.rs - source
      1
       2
       3
       4
      @@ -338,35 +338,182 @@
       338
       339
       340
      +341
      +342
      +343
      +344
      +345
      +346
      +347
      +348
      +349
      +350
      +351
      +352
      +353
      +354
      +355
      +356
      +357
      +358
      +359
      +360
      +361
      +362
      +363
      +364
      +365
      +366
      +367
      +368
      +369
      +370
      +371
      +372
      +373
      +374
      +375
      +376
      +377
      +378
      +379
      +380
      +381
      +382
      +383
      +384
      +385
      +386
      +387
      +388
      +389
      +390
      +391
      +392
      +393
      +394
      +395
      +396
      +397
      +398
      +399
      +400
      +401
      +402
      +403
      +404
      +405
      +406
      +407
      +408
      +409
      +410
      +411
      +412
      +413
      +414
      +415
      +416
      +417
      +418
      +419
      +420
      +421
      +422
      +423
      +424
      +425
      +426
      +427
      +428
      +429
      +430
      +431
      +432
      +433
      +434
      +435
      +436
      +437
      +438
      +439
      +440
      +441
      +442
      +443
      +444
      +445
      +446
      +447
      +448
      +449
      +450
      +451
      +452
      +453
      +454
      +455
      +456
      +457
      +458
      +459
      +460
      +461
      +462
      +463
      +464
      +465
      +466
       
      use crate::analysis::pointer_inference::State as PiState;
       use crate::{
           abstract_domain::{AbstractDomain, AbstractIdentifier, DomainMap, UnionMergeStrategy},
           analysis::pointer_inference::Data,
           prelude::*,
       };
      -use std::collections::BTreeMap;
      +use std::collections::{BTreeMap, BTreeSet};
       
       /// The state of a memory object for which at least one possible call to a `free`-like function was detected.
       #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
       enum ObjectState {
           /// The object is already freed, i.e. pointers to it are dangling.
      -    /// The associated TID denotes the point in time when the object was freed.
      -    Dangling(Tid),
      +    /// The associated TIDs denote the point in time when the object was freed
      +    /// and possibly the call path taken to that point in time.
      +    Dangling(Vec<Tid>),
           /// The object is already freed and a use-after-free CWE message for it was already generated.
           /// This object state is used to prevent duplicate CWE warnings with the same root cause.
      -    AlreadyFlagged,
      +    /// It still holds a path to a point in time where the object was freed.
      +    AlreadyFlagged(Vec<Tid>),
       }
       
       impl AbstractDomain for ObjectState {
           /// Merge two object states.
      -    /// If both object states are dangling then use the source TID of `self` in the result.
      +    /// If both object states are identical then use the shorter path to `free` in the result.
           fn merge(&self, other: &Self) -> Self {
      +        use std::cmp::Ordering;
      +
               match (self, other) {
      -            (ObjectState::AlreadyFlagged, _) | (_, ObjectState::AlreadyFlagged) => {
      -                ObjectState::AlreadyFlagged
      +            (
      +                ObjectState::AlreadyFlagged(free_path),
      +                ObjectState::AlreadyFlagged(other_free_path),
      +            ) => {
      +                let shortest_path = match free_path.len().cmp(&other_free_path.len()) {
      +                    Ordering::Less => free_path.clone(),
      +                    Ordering::Equal => std::cmp::min(free_path, other_free_path).clone(),
      +                    Ordering::Greater => other_free_path.clone(),
      +                };
      +                ObjectState::AlreadyFlagged(shortest_path)
                   }
      -            (ObjectState::Dangling(tid), ObjectState::Dangling(other_tid)) => {
      -                ObjectState::Dangling(std::cmp::min(tid, other_tid).clone())
      +            (ObjectState::AlreadyFlagged(free_path), _)
      +            | (_, ObjectState::AlreadyFlagged(free_path)) => {
      +                ObjectState::AlreadyFlagged(free_path.clone())
      +            }
      +            (ObjectState::Dangling(free_path), ObjectState::Dangling(other_free_path)) => {
      +                let shortest_path = match free_path.len().cmp(&other_free_path.len()) {
      +                    Ordering::Less => free_path.clone(),
      +                    Ordering::Equal => std::cmp::min(free_path, other_free_path).clone(),
      +                    Ordering::Greater => other_free_path.clone(),
      +                };
      +                ObjectState::Dangling(shortest_path)
                   }
               }
           }
      @@ -377,12 +524,19 @@
           }
       }
       
      -/// The `State` currently only keeps track of the list of TIDs of memory object that may have been freed already
      +/// The `State` keeps track of the list of abstract IDs of memory objects that may have been freed already
       /// together with the corresponding object states.
       #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
       pub struct State {
      -    pub current_fn_tid: Tid,
      -    dangling_objects: DomainMap<AbstractIdentifier, ObjectState, UnionMergeStrategy>,
      +    /// The TID of the current function.
      +    pub current_fn_tid: Tid,
      +    /// Map from the abstract ID of dangling objects to their object state.
      +    dangling_objects: DomainMap<AbstractIdentifier, ObjectState, UnionMergeStrategy>,
      +    /// Memory objects that were generated and freed in the same call are tracked in a separate map.
      +    /// Such objects are often analysis errors.
      +    /// Tracking them separately prevents them from masking genuine Use-After-Free cases in the caller.
      +    dangling_objects_generated_and_freed_in_same_call:
      +        DomainMap<AbstractIdentifier, ObjectState, UnionMergeStrategy>,
       }
       
       impl State {
      @@ -391,40 +545,37 @@
               State {
                   current_fn_tid,
                   dangling_objects: BTreeMap::new().into(),
      +            dangling_objects_generated_and_freed_in_same_call: BTreeMap::new().into(),
               }
           }
       
      -    /// Return whether the given object ID is already flagged in this state,
      -    /// i.e. whether a CWE warning was already generated for this object.
      -    pub fn is_id_already_flagged(&self, object_id: &AbstractIdentifier) -> bool {
      -        self.dangling_objects.get(object_id) == Some(&ObjectState::AlreadyFlagged)
      -    }
      -
      -    /// If the given `object_id` represents a dangling object, return the TID of the site where it was freed.
      -    pub fn get_free_tid_if_dangling(&self, object_id: &AbstractIdentifier) -> Option<&Tid> {
      -        if let Some(ObjectState::Dangling(free_tid)) = self.dangling_objects.get(object_id) {
      -            Some(free_tid)
      -        } else {
      -            None
      -        }
      -    }
      -
           /// Check the given address on whether it may point to already freed memory.
           /// For each possible dangling pointer target the abstract ID of the object
      -    /// and the TID of the corresponding site where the object was freed is returned.
      +    /// and the path to the corresponding site where the object was freed is returned.
           /// The object states of corresponding memory objects are set to [`ObjectState::AlreadyFlagged`]
           /// to prevent reporting duplicate CWE messages with the same root cause.
           pub fn check_address_for_use_after_free(
               &mut self,
               address: &Data,
      -    ) -> Option<Vec<(AbstractIdentifier, Tid)>> {
      +    ) -> Option<Vec<(AbstractIdentifier, Vec<Tid>)>> {
               let mut free_ids_of_dangling_pointers = Vec::new();
               for id in address.get_relative_values().keys() {
      -            if let Some(ObjectState::Dangling(free_id)) = self.dangling_objects.get(id) {
      -                free_ids_of_dangling_pointers.push((id.clone(), free_id.clone()));
      +            if let Some(ObjectState::Dangling(free_id_path)) = self.dangling_objects.get(id) {
      +                let free_id_path = free_id_path.clone();
      +                free_ids_of_dangling_pointers.push((id.clone(), free_id_path.clone()));
       
                       self.dangling_objects
      -                    .insert(id.clone(), ObjectState::AlreadyFlagged);
      +                    .insert(id.clone(), ObjectState::AlreadyFlagged(free_id_path));
      +            }
      +            if let Some(ObjectState::Dangling(free_id_path)) = self
      +                .dangling_objects_generated_and_freed_in_same_call
      +                .get(id)
      +            {
      +                let free_id_path = free_id_path.clone();
      +                free_ids_of_dangling_pointers.push((id.clone(), free_id_path.clone()));
      +
      +                self.dangling_objects_generated_and_freed_in_same_call
      +                    .insert(id.clone(), ObjectState::AlreadyFlagged(free_id_path));
                   }
               }
               if free_ids_of_dangling_pointers.is_empty() {
      @@ -434,29 +585,63 @@
               }
           }
       
      +    /// Mark the given object ID as freed with the given `free_id_path` denoting the path to the site where it is freed.
      +    ///
      +    /// If the object ID was already marked as dangling,
      +    /// return it plus the (previously saved) path to the site where it was freed.
      +    #[must_use]
      +    fn mark_as_freed(
      +        &mut self,
      +        object_id: &AbstractIdentifier,
      +        free_id_path: Vec<Tid>,
      +        pi_state: &PiState,
      +    ) -> Option<(AbstractIdentifier, Vec<Tid>)> {
      +        if pi_state.memory.is_unique_object(object_id).ok() == Some(false) {
      +            // FIXME: We cannot distinguish different objects represented by the same ID.
      +            // So to avoid producing lots of false positive warnings
      +            // we ignore these cases by not marking these IDs as freed.
      +            return None;
      +        }
      +        if object_id.get_path_hints().last() == free_id_path.last() {
      +            // The object was created in the same call as it is now freed.
      +            if let Some(ObjectState::Dangling(old_free_id_path)) = self
      +                .dangling_objects_generated_and_freed_in_same_call
      +                .insert(
      +                    object_id.clone(),
      +                    ObjectState::Dangling(free_id_path.clone()),
      +                )
      +            {
      +                return Some((object_id.clone(), old_free_id_path.clone()));
      +            }
      +        } else if let Some(ObjectState::Dangling(old_free_id_path)) = self.dangling_objects.insert(
      +            object_id.clone(),
      +            ObjectState::Dangling(free_id_path.clone()),
      +        ) {
      +            return Some((object_id.clone(), old_free_id_path.clone()));
      +        }
      +
      +        None
      +    }
      +
           /// All TIDs that the given `param` may point to are marked as freed, i.e. pointers to them are dangling.
           /// For each ID that was already marked as dangling return a string describing the root cause of a possible double free bug.
      +    ///
      +    /// The function heuristically detects IDs related to recursive data structures (e.g. linked lists).
      +    /// Such IDs are ignored when marking objects as freed.
           pub fn handle_param_of_free_call(
               &mut self,
               call_tid: &Tid,
               param: &Data,
               pi_state: &PiState,
      -    ) -> Option<Vec<(AbstractIdentifier, Tid)>> {
      +    ) -> Option<Vec<(AbstractIdentifier, Vec<Tid>)>> {
               // FIXME: This function could also generate debug log messages whenever nonsensical information is detected.
               // E.g. stack frame IDs or non-zero ID offsets can be indicators of other bugs.
               let mut warnings = Vec::new();
      -        for id in param.get_relative_values().keys() {
      -            if pi_state.memory.is_unique_object(id).ok() == Some(false) {
      -                // FIXME: We cannot distinguish different objects represented by the same ID.
      -                // So to avoid producing lots of false positive warnings
      -                // we ignore these cases by not marking these IDs as freed.
      -                continue;
      -            }
      -            if let Some(ObjectState::Dangling(old_free_id)) = self
      -                .dangling_objects
      -                .insert(id.clone(), ObjectState::Dangling(call_tid.clone()))
      -            {
      -                warnings.push((id.clone(), old_free_id.clone()));
      +        let generic_pointer_size = pi_state.stack_id.bytesize();
      +        // Heuristically ignore recursive IDs
      +        for id in get_non_recursive_ids(param, generic_pointer_size) {
      +            if let Some(warning_data) = self.mark_as_freed(id, vec![call_tid.clone()], pi_state) {
      +                warnings.push(warning_data);
                   }
               }
               if !warnings.is_empty() {
      @@ -467,8 +652,11 @@
           }
       
           /// Add objects that were freed in the callee of a function call to the list of dangling pointers of `self`.
      -    /// May return a list of warnings if cases of possible double frees are detected,
      -    /// i.e. if an already freed object may also have been freed in the callee.
      +    /// Note that this function does not check for double frees.
      +    ///
      +    /// The function heuristically detects when parameter values contain IDs
      +    /// corresponding to recursive data structures (e.g. linked lists).
      +    /// Such IDs are ignored, i.e. their object status is not transferred from the callee.
           pub fn collect_freed_objects_from_called_function(
               &mut self,
               state_before_return: &State,
      @@ -476,27 +664,33 @@
               call_tid: &Tid,
               pi_state: &PiState,
           ) {
      +        let generic_pointer_size = pi_state.stack_id.bytesize();
      +        let call_tid_with_suffix = call_tid.clone().with_id_suffix("_param");
      +
               for (callee_id, callee_object_state) in state_before_return.dangling_objects.iter() {
                   if let Some(caller_value) = id_replacement_map.get(callee_id) {
      -                for caller_id in caller_value.get_relative_values().keys() {
      -                    if pi_state.memory.is_unique_object(caller_id).ok() != Some(false) {
      -                        // FIXME: We cannot distinguish different objects represented by the same ID.
      -                        // So to avoid producing lots of false positive warnings we ignore these cases.
      -                        match (callee_object_state, self.dangling_objects.get(caller_id)) {
      -                            // Case 1: The dangling object is unknown to the caller, so we add it.
      -                            (ObjectState::Dangling(_), None)
      -                            | (ObjectState::AlreadyFlagged, None) => {
      -                                self.dangling_objects.insert(
      -                                    caller_id.clone(),
      -                                    ObjectState::Dangling(call_tid.clone()),
      -                                );
      -                            }
      -                            // Case 2: The dangling object is already known to the caller.
      -                            // If this were a case of Use-After-Free, then this should have been flagged when checking the call parameters.
      -                            // Thus we can simply leave the object state as it is.
      -                            (_, Some(ObjectState::Dangling(_)))
      -                            | (_, Some(&ObjectState::AlreadyFlagged)) => (),
      +                // Heuristically filter out recursive IDs
      +                for caller_id in get_non_recursive_ids(caller_value, generic_pointer_size) {
      +                    if caller_id.get_tid() == call_tid
      +                        || caller_id.get_tid() == &call_tid_with_suffix
      +                    {
      +                        // FIXME: We heuristically ignore free operations if they happen in the same call as the creation of the object.
      +                        // This reduces false positives, but also produces false negatives for some returned dangling pointers.
      +                        continue;
      +                    }
      +
      +                    match callee_object_state {
      +                        ObjectState::Dangling(callee_free_path) => {
      +                            let mut free_id_path = callee_free_path.clone();
      +                            free_id_path.push(call_tid.clone());
      +                            let _ = self.mark_as_freed(caller_id, free_id_path, pi_state);
                               }
      +                        // FIXME: To reduce false positives and duplicates we heuristically assume
      +                        // that if an object is flagged in the callee
      +                        // then Use After Frees in the caller are duplicates from the flagged access in the callee.
      +                        // And that the corresponding dangling objects do not reach the caller in this case.
      +                        // Note that this heuristic will produce false negatives in some cases.
      +                        ObjectState::AlreadyFlagged(_) => (),
                           }
                       }
                   }
      @@ -510,6 +704,9 @@
               State {
                   current_fn_tid: self.current_fn_tid.clone(),
                   dangling_objects: self.dangling_objects.merge(&other.dangling_objects),
      +            dangling_objects_generated_and_freed_in_same_call: self
      +                .dangling_objects_generated_and_freed_in_same_call
      +                .merge(&other.dangling_objects_generated_and_freed_in_same_call),
               }
           }
       
      @@ -525,65 +722,90 @@
           #[allow(dead_code)]
           pub fn to_json_compact(&self) -> serde_json::Value {
               use serde_json::*;
      +        let format_vec = |vec| {
      +            let mut string = String::new();
      +            for elem in vec {
      +                string += &format!("{},", elem);
      +            }
      +            string
      +        };
      +
               let mut state_map = Map::new();
               state_map.insert(
                   "current_function".to_string(),
                   Value::String(format!("{}", self.current_fn_tid)),
               );
               for (id, object_state) in self.dangling_objects.iter() {
      -            if let ObjectState::Dangling(free_tid) = object_state {
      -                state_map.insert(
      +            match object_state {
      +                ObjectState::Dangling(free_path) => state_map.insert(
                           format!("{id}"),
      -                    Value::String(format!("Dangling({free_tid})")),
      -                );
      -            } else {
      -                state_map.insert(
      +                    Value::String(format!("Dangling([{}])", format_vec(free_path))),
      +                ),
      +                ObjectState::AlreadyFlagged(free_path) => state_map.insert(
                           format!("{id}"),
      -                    Value::String("Already flagged".to_string()),
      -                );
      -            }
      +                    Value::String(format!("Already flagged([{}])", format_vec(free_path))),
      +                ),
      +            };
      +        }
      +        for (id, object_state) in self
      +            .dangling_objects_generated_and_freed_in_same_call
      +            .iter()
      +        {
      +            match object_state {
      +                ObjectState::Dangling(free_path) => state_map.insert(
      +                    format!("{id} (already dangling in callee)"),
      +                    Value::String(format!("Dangling([{}])", format_vec(free_path))),
      +                ),
      +                ObjectState::AlreadyFlagged(free_path) => state_map.insert(
      +                    format!("{id} (already dangling in callee)"),
      +                    Value::String(format!("Already flagged([{}])", format_vec(free_path))),
      +                ),
      +            };
               }
               Value::Object(state_map)
           }
       }
       
      +/// Return the set of relative IDs contained in the input `data` after filtering out recursive IDs.
      +///
      +/// An ID is *recursive*, i.e. assumed to correspond to a recursive data structure like a linked list,
      +/// if its parent abstract location is also contained as an ID in `data`
      +/// or if some ID contained in `data` has this ID as its parent.
      +fn get_non_recursive_ids(
      +    data: &Data,
      +    generic_pointer_size: ByteSize,
      +) -> BTreeSet<&AbstractIdentifier> {
      +    let ids: BTreeSet<_> = data.get_relative_values().keys().collect();
      +    let mut filtered_ids = ids.clone();
      +    for id in &ids {
      +        if let Some(parent_id) = id.get_id_with_parent_location(generic_pointer_size) {
      +            if ids.contains(&parent_id) {
      +                filtered_ids.remove(*id);
      +                filtered_ids.remove(&parent_id);
      +            }
      +        }
      +    }
      +    filtered_ids
      +}
      +
       #[cfg(test)]
       pub mod tests {
           use super::*;
      -    use crate::{bitvec, intermediate_representation::parsing, variable};
      +    use crate::{
      +        abstract_domain::DataDomain, bitvec, intermediate_representation::parsing, variable,
      +    };
           use std::collections::BTreeSet;
       
      -    impl State {
      -        pub fn mock(
      -            current_fn_tid: Tid,
      -            dangling_ids: &[(AbstractIdentifier, Tid)],
      -            already_flagged_ids: &[AbstractIdentifier],
      -        ) -> Self {
      -            let mut state = State::new(current_fn_tid);
      -            for (id, free_id) in dangling_ids.iter() {
      -                state
      -                    .dangling_objects
      -                    .insert(id.clone(), ObjectState::Dangling(free_id.clone()));
      -            }
      -            for id in already_flagged_ids.iter() {
      -                state
      -                    .dangling_objects
      -                    .insert(id.clone(), ObjectState::AlreadyFlagged);
      -            }
      -            state
      -        }
      -    }
      -
           #[test]
           fn test_check_address_for_use_after_free() {
               let mut state = State::new(Tid::new("current_fn"));
               state.dangling_objects.insert(
                   AbstractIdentifier::mock("obj_id", "RAX", 8),
      -            ObjectState::Dangling(Tid::new("free_call")),
      +            ObjectState::Dangling(vec![Tid::new("free_call")]),
               );
               state.dangling_objects.insert(
                   AbstractIdentifier::mock("flagged_obj_id", "RAX", 8),
      -            ObjectState::AlreadyFlagged,
      +            ObjectState::AlreadyFlagged(vec![Tid::new("free_call")]),
               );
               let address = Data::mock_from_target_map(BTreeMap::from([
                   (
      @@ -609,14 +831,14 @@
                       .dangling_objects
                       .get(&AbstractIdentifier::mock("obj_id", "RAX", 8))
                       .unwrap(),
      -            ObjectState::AlreadyFlagged
      +            ObjectState::AlreadyFlagged(vec![Tid::new("free_call")])
               );
               assert_eq!(
                   *state
                       .dangling_objects
                       .get(&AbstractIdentifier::mock("flagged_obj_id", "RAX", 8))
                       .unwrap(),
      -            ObjectState::AlreadyFlagged
      +            ObjectState::AlreadyFlagged(vec![Tid::new("free_call")])
               );
           }
       
      @@ -637,7 +859,7 @@
                       .dangling_objects
                       .get(&AbstractIdentifier::mock("obj_id", "RAX", 8))
                       .unwrap(),
      -            ObjectState::Dangling(Tid::new("free_call"))
      +            ObjectState::Dangling(vec![Tid::new("free_call")])
               );
               // Check that a second free operation yields a double free warning.
               assert!(state
      @@ -651,7 +873,7 @@
               let mut state_before_return = State::new(Tid::new("callee_fn_tid"));
               state_before_return.dangling_objects.insert(
                   AbstractIdentifier::mock("callee_obj_tid", "RAX", 8),
      -            ObjectState::Dangling(Tid::new("free_tid")),
      +            ObjectState::Dangling(vec![Tid::new("free_tid")]),
               );
               let pi_state = PiState::new(&variable!("RSP:8"), Tid::new("call"), BTreeSet::new());
               let id_replacement_map = BTreeMap::from([(
      @@ -674,7 +896,37 @@
                       .dangling_objects
                       .get(&AbstractIdentifier::mock("caller_tid", "RBX", 8))
                       .unwrap(),
      -            &ObjectState::Dangling(Tid::new("call_tid"))
      +            &ObjectState::Dangling(vec![Tid::new("free_tid"), Tid::new("call_tid")])
      +        );
      +    }
      +
      +    #[test]
      +    fn test_filtering_of_recursive_ids() {
      +        let data = DataDomain::mock_from_target_map(BTreeMap::from([
      +            (
      +                AbstractIdentifier::mock_nested("time1", "r0:4", &[], 4),
      +                bitvec!("0x0:4").into(),
      +            ),
      +            (
      +                AbstractIdentifier::mock_nested("time1", "r0:4", &[0], 4),
      +                bitvec!("0x0:4").into(),
      +            ),
      +            (
      +                AbstractIdentifier::mock_nested("unique1", "r0:4", &[], 4),
      +                bitvec!("0x0:4").into(),
      +            ),
      +            (
      +                AbstractIdentifier::mock_nested("unique2", "r0:4", &[0], 4),
      +                bitvec!("0x0:4").into(),
      +            ),
      +        ]));
      +        let filtered_ids = get_non_recursive_ids(&data, ByteSize::new(4));
      +        assert_eq!(
      +            filtered_ids,
      +            BTreeSet::from([
      +                &AbstractIdentifier::mock_nested("unique1", "r0:4", &[], 4),
      +                &AbstractIdentifier::mock_nested("unique2", "r0:4", &[0], 4)
      +            ])
               );
           }
       }
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_426.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_426.rs.html
      index f0460ee8b..bcd884a38 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_426.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_426.rs.html
      @@ -1,4 +1,4 @@
      -cwe_426.rs - source
      1
      +cwe_426.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_467.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_467.rs.html
      index a76c71efc..1094487db 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_467.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_467.rs.html
      @@ -1,4 +1,4 @@
      -cwe_467.rs - source
      1
      +cwe_467.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_476.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_476.rs.html
      index ebbeacd0b..59958faed 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_476.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_476.rs.html
      @@ -1,4 +1,4 @@
      -cwe_476.rs - source
      1
      +cwe_476.rs - source
      1
       2
       3
       4
      @@ -125,6 +125,8 @@
       125
       126
       127
      +128
      +129
       
      //! This module implements a check for CWE-476: NULL Pointer Dereference.
       //!
       //! Functions like `malloc()` may return NULL values instead of pointers to indicate
      @@ -174,10 +176,12 @@
       use petgraph::visit::EdgeRef;
       use std::collections::BTreeMap;
       
      -mod state;
      +/// Module for the taint tracking state. Reused by the check for CWE-337, hence public.
      +pub mod state;
       use state::*;
       
      -mod taint;
      +/// Taint tracking module. Reused by the check for CWE-337, hence public.
      +pub mod taint;
       pub use taint::*;
       
       mod context;
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_476/context.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_476/context.rs.html
      index 5be4a7b4f..24b76f2a3 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_476/context.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_476/context.rs.html
      @@ -1,4 +1,4 @@
      -context.rs - source
      1
      +context.rs - source
      1
       2
       3
       4
      @@ -534,6 +534,26 @@
       534
       535
       536
      +537
      +538
      +539
      +540
      +541
      +542
      +543
      +544
      +545
      +546
      +547
      +548
      +549
      +550
      +551
      +552
      +553
      +554
      +555
      +556
       
      use super::State;
       use super::Taint;
       use super::CWE_MODULE;
      @@ -606,7 +626,7 @@
               for (node_id, node) in graph.node_references() {
                   match node {
                       Node::BlkStart(block, sub) => {
      -                    if let Some(def) = block.term.defs.get(0) {
      +                    if let Some(def) = block.term.defs.first() {
                               block_start_node_map.insert((def.tid.clone(), sub.tid.clone()), node_id);
                           }
                       }
      @@ -751,14 +771,26 @@
           /// If a possible  parameter register of the call contains taint,
           /// generate a CWE warning and return `None`.
           /// Else remove all taint contained in non-callee-saved registers.
      -    fn handle_generic_call(&self, state: &State, call_tid: &Tid) -> Option<State> {
      +    fn handle_generic_call(
      +        &self,
      +        state: &State,
      +        call_tid: &Tid,
      +        calling_convention_hint: &Option<String>,
      +    ) -> Option<State> {
               let pi_state_option = self.get_current_pointer_inference_state(state, call_tid);
      -        if state.check_generic_function_params_for_taint(self.project, pi_state_option.as_ref()) {
      +        if state.check_generic_function_params_for_taint(
      +            self.project,
      +            pi_state_option.as_ref(),
      +            calling_convention_hint,
      +        ) {
                   self.generate_cwe_warning(call_tid);
                   return None;
               }
               let mut new_state = state.clone();
      -        if let Some(calling_conv) = self.project.get_standard_calling_convention() {
      +        if let Some(calling_conv) = self
      +            .project
      +            .get_specific_calling_convention(calling_convention_hint)
      +        {
                   new_state.remove_non_callee_saved_taint(calling_conv);
               }
               Some(new_state)
      @@ -796,10 +828,14 @@
               state: &State,
               call: &Term<Jmp>,
               _target: &Node,
      -        _calling_convention: &Option<String>,
      +        calling_convention: &Option<String>,
           ) -> Option<Self::Value> {
               let pi_state_option = self.get_current_pointer_inference_state(state, &call.tid);
      -        if state.check_generic_function_params_for_taint(self.project, pi_state_option.as_ref()) {
      +        if state.check_generic_function_params_for_taint(
      +            self.project,
      +            pi_state_option.as_ref(),
      +            calling_convention,
      +        ) {
                   self.generate_cwe_warning(&call.tid);
               }
               None
      @@ -831,7 +867,7 @@
                           panic!("Extern symbol not found.");
                       }
                   }
      -            Jmp::CallInd { .. } => self.handle_generic_call(state, &call.tid),
      +            Jmp::CallInd { .. } => self.handle_generic_call(state, &call.tid, &None),
                   _ => panic!("Malformed control flow graph encountered."),
               }
           }
      @@ -927,18 +963,22 @@
               state_before_call: Option<&State>,
               call_term: &Term<Jmp>,
               return_term: &Term<Jmp>,
      -        _calling_convention: &Option<String>,
      +        calling_convention: &Option<String>,
           ) -> Option<State> {
               if let Some(state) = state_before_return {
                   // If taint is returned, generate a CWE warning
                   let pi_state_option = self.get_current_pointer_inference_state(state, &return_term.tid);
      -            if state.check_return_values_for_taint(self.project, pi_state_option.as_ref()) {
      +            if state.check_return_values_for_taint(
      +                self.project,
      +                pi_state_option.as_ref(),
      +                calling_convention,
      +            ) {
                       self.generate_cwe_warning(&return_term.tid);
                   }
                   // Do not return early in case `state_before_call` is also set (possible for recursive functions).
               }
               if let Some(state) = state_before_call {
      -            self.handle_generic_call(state, &call_term.tid)
      +            self.handle_generic_call(state, &call_term.tid, calling_convention)
               } else {
                   None
               }
      @@ -1007,12 +1047,12 @@
               let mut state = State::mock();
       
               assert!(context
      -            .handle_generic_call(&state, &Tid::new("call_tid"))
      +            .handle_generic_call(&state, &Tid::new("call_tid"), &None)
                   .is_some());
       
               state.set_register_taint(&variable!("RDX:8"), Taint::Tainted(ByteSize::new(8)));
               assert!(context
      -            .handle_generic_call(&state, &Tid::new("call_tid"))
      +            .handle_generic_call(&state, &Tid::new("call_tid"), &None)
                   .is_none());
           }
       
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_476/state.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_476/state.rs.html
      index 8c9b1d10e..02f58657c 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_476/state.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_476/state.rs.html
      @@ -1,4 +1,4 @@
      -state.rs - source
      1
      +state.rs - source
      1
       2
       3
       4
      @@ -486,6 +486,12 @@
       486
       487
       488
      +489
      +490
      +491
      +492
      +493
      +494
       
      use crate::abstract_domain::{
           AbstractDomain, AbstractIdentifier, MemRegion, RegisterDomain, SizedDomain, TryToBitvec,
       };
      @@ -763,14 +769,17 @@
           }
       
           /// Check whether a generic function call may contain tainted values in its parameters.
      -    /// Since we don't know the actual calling convention of the call,
      -    /// we approximate the parameters with all parameter registers of the standard calling convention of the project.
      +    /// Since we don't know the actual parameters of the call,
      +    /// we approximate the parameters with all parameter registers of the calling convention of the function
      +    /// or of the standard calling convention of the project.
           pub fn check_generic_function_params_for_taint(
               &self,
               project: &Project,
               pi_state_option: Option<&PointerInferenceState>,
      +        calling_convention_hint: &Option<String>,
           ) -> bool {
      -        if let Some(calling_conv) = project.get_standard_calling_convention() {
      +        if let Some(calling_conv) = project.get_specific_calling_convention(calling_convention_hint)
      +        {
                   let mut all_parameters = calling_conv.integer_parameter_register.clone();
                   for float_param in calling_conv.float_parameter_register.iter() {
                       for var in float_param.input_vars() {
      @@ -786,13 +795,16 @@
       
           /// Check whether the return registers may contain tainted values or point to objects containing tainted values.
           /// Since we don't know the actual return registers,
      -    /// we approximate them by all return registers of the standard calling convention of the project.
      +    /// we approximate them by all return registers of the calling convention of the function
      +    /// or of the standard calling convention of the project.
           pub fn check_return_values_for_taint(
               &self,
               project: &Project,
               pi_state_option: Option<&PointerInferenceState>,
      +        calling_convention_hint: &Option<String>,
           ) -> bool {
      -        if let Some(calling_conv) = project.get_standard_calling_convention() {
      +        if let Some(calling_conv) = project.get_specific_calling_convention(calling_convention_hint)
      +        {
                   self.check_register_list_for_taint(
                       &calling_conv.integer_return_register[..],
                       pi_state_option,
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_476/taint.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_476/taint.rs.html
      index bade1f21c..16946a040 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_476/taint.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_476/taint.rs.html
      @@ -1,4 +1,4 @@
      -taint.rs - source
      1
      +taint.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_560.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_560.rs.html
      index 5c8a0c505..55ef6acc3 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_560.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_560.rs.html
      @@ -1,4 +1,4 @@
      -cwe_560.rs - source
      1
      +cwe_560.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_676.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_676.rs.html
      index cd276bf60..75d06a710 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_676.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_676.rs.html
      @@ -1,4 +1,4 @@
      -cwe_676.rs - source
      1
      +cwe_676.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_78.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_78.rs.html
      index 4986bf406..3dac1db69 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_78.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_78.rs.html
      @@ -1,4 +1,4 @@
      -cwe_78.rs - source
      1
      +cwe_78.rs - source
      1
       2
       3
       4
      @@ -414,7 +414,7 @@
           if let Some(Arg::Register {
               expr: Expression::Var(var),
               ..
      -    }) = system_symbol.parameters.get(0)
      +    }) = system_symbol.parameters.first()
           {
               if let Some(value) = source_state.get_variable_to_pointer_map().get(var) {
                   let contains_string_constant = value.get_absolute_value().is_some();
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_782.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_782.rs.html
      index 61e0229a7..40223b861 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_782.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_782.rs.html
      @@ -1,4 +1,4 @@
      -cwe_782.rs - source
      1
      +cwe_782.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/checkers/cwe_789.rs.html b/doc/html/src/cwe_checker_lib/checkers/cwe_789.rs.html
      index d41db2c2a..8207d4d75 100644
      --- a/doc/html/src/cwe_checker_lib/checkers/cwe_789.rs.html
      +++ b/doc/html/src/cwe_checker_lib/checkers/cwe_789.rs.html
      @@ -1,4 +1,4 @@
      -cwe_789.rs - source
      1
      +cwe_789.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/bitvector.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/bitvector.rs.html
      index d257ce22a..2679576ec 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/bitvector.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/bitvector.rs.html
      @@ -1,4 +1,4 @@
      -bitvector.rs - source
      1
      +bitvector.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/blk.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/blk.rs.html
      index e32d9d5e4..3c02c935e 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/blk.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/blk.rs.html
      @@ -1,4 +1,4 @@
      -blk.rs - source
      1
      +blk.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/def.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/def.rs.html
      index 4d5225f48..3cc0fba8c 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/def.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/def.rs.html
      @@ -1,4 +1,4 @@
      -def.rs - source
      1
      +def.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/expression.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/expression.rs.html
      index 918c9dd0d..288a505bd 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/expression.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/expression.rs.html
      @@ -1,4 +1,4 @@
      -expression.rs - source
      1
      +expression.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/expression/builder.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/expression/builder.rs.html
      index b0c9ed6b0..8f326b4ea 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/expression/builder.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/expression/builder.rs.html
      @@ -1,4 +1,4 @@
      -builder.rs - source
      1
      +builder.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/expression/trivial_operation_substitution.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/expression/trivial_operation_substitution.rs.html
      index 73a56b53b..51836695b 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/expression/trivial_operation_substitution.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/expression/trivial_operation_substitution.rs.html
      @@ -1,4 +1,4 @@
      -trivial_operation_substitution.rs - source
      1
      +trivial_operation_substitution.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/jmp.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/jmp.rs.html
      index 8235a5e8b..49ec14c1a 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/jmp.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/jmp.rs.html
      @@ -1,4 +1,4 @@
      -jmp.rs - source
      1
      +jmp.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/mod.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/mod.rs.html
      index 938cccf78..1ccae79d2 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/program.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/program.rs.html
      index 8ad20f720..289187d54 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/program.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/program.rs.html
      @@ -1,4 +1,4 @@
      -program.rs - source
      1
      +program.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/project.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/project.rs.html
      index cd5003338..2a8a0331a 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/project.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/project.rs.html
      @@ -1,4 +1,4 @@
      -project.rs - source
      1
      +project.rs - source
      1
       2
       3
       4
      @@ -371,6 +371,10 @@
       371
       372
       373
      +374
      +375
      +376
      +377
       
      use super::*;
       use crate::utils::log::LogMessage;
       use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
      @@ -420,16 +424,20 @@
           }
       
           /// Try to find a specific calling convention in the list of calling conventions in the project.
      -    /// If not given a calling convention (i.e. given `None`) then falls back to `get_standard_calling_convention`
      +    /// If not given a calling convention (i.e. given `None`) or the given calling convention name was not found
      +    /// then falls back to `get_standard_calling_convention`.
           pub fn get_specific_calling_convention(
               &self,
               cconv_name_opt: &Option<String>,
           ) -> Option<&CallingConvention> {
      -        if let Some(cconv_name) = cconv_name_opt {
      -            self.calling_conventions.get(cconv_name)
      -        } else {
      -            self.get_standard_calling_convention()
      -        }
      +        // FIXME: On x86 Windows binaries we can get a strange edge case:
      +        // For some reason we get cases where Ghidra annotates a function with `__cdecl` as calling convention,
      +        // but the general calling convention list only contains `__fastcall` and `__thiscall`.
      +        // We should investigate this, so that we do not have to fall back to the standard calling convention.
      +        cconv_name_opt
      +            .as_ref()
      +            .and_then(|cconv_name| self.calling_conventions.get(cconv_name))
      +            .or_else(|| self.get_standard_calling_convention())
           }
       
           /// Return the calling convention associated to the given extern symbol.
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/project/block_duplication_normalization.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/project/block_duplication_normalization.rs.html
      index 448c5f701..6503e3e22 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/project/block_duplication_normalization.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/project/block_duplication_normalization.rs.html
      @@ -1,4 +1,4 @@
      -block_duplication_normalization.rs - source
      1
      +block_duplication_normalization.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/project/propagate_control_flow.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/project/propagate_control_flow.rs.html
      index b18b1a4d4..c4b930d94 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/project/propagate_control_flow.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/project/propagate_control_flow.rs.html
      @@ -1,4 +1,4 @@
      -propagate_control_flow.rs - source
      1
      +propagate_control_flow.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/runtime_memory_image.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/runtime_memory_image.rs.html
      index 012ec3a2e..01eb0530e 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/runtime_memory_image.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/runtime_memory_image.rs.html
      @@ -1,4 +1,4 @@
      -runtime_memory_image.rs - source
      1
      +runtime_memory_image.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/sub.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/sub.rs.html
      index 50ce7bbc6..8d932c634 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/sub.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/sub.rs.html
      @@ -1,4 +1,4 @@
      -sub.rs - source
      1
      +sub.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/term.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/term.rs.html
      index 58ef94151..f3e80ec7d 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/term.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/term.rs.html
      @@ -1,4 +1,4 @@
      -term.rs - source
      1
      +term.rs - source
      1
       2
       3
       4
      @@ -58,6 +58,11 @@
       58
       59
       60
      +61
      +62
      +63
      +64
      +65
       
      use crate::prelude::*;
       
       mod builder_high_lvl;
      @@ -91,6 +96,11 @@
               }
           }
       
      +    /// Returns true if the ID string ends with the provided suffix.
      +    pub fn has_id_suffix(&self, suffix: &str) -> bool {
      +        self.id.ends_with(suffix)
      +    }
      +
           /// Generate the ID of a block starting at the given address.
           ///
           /// Note that the block may not actually exist.
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_high_lvl.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_high_lvl.rs.html
      index c39602228..c74b8a505 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_high_lvl.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_high_lvl.rs.html
      @@ -1,4 +1,4 @@
      -builder_high_lvl.rs - source
      1
      +builder_high_lvl.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_low_lvl.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_low_lvl.rs.html
      index 2c2fa9ac9..9217bf146 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_low_lvl.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/term/builder_low_lvl.rs.html
      @@ -1,4 +1,4 @@
      -builder_low_lvl.rs - source
      1
      +builder_low_lvl.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/intermediate_representation/variable.rs.html b/doc/html/src/cwe_checker_lib/intermediate_representation/variable.rs.html
      index 6e84ec216..2098d7710 100644
      --- a/doc/html/src/cwe_checker_lib/intermediate_representation/variable.rs.html
      +++ b/doc/html/src/cwe_checker_lib/intermediate_representation/variable.rs.html
      @@ -1,4 +1,4 @@
      -variable.rs - source
      1
      +variable.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/lib.rs.html b/doc/html/src/cwe_checker_lib/lib.rs.html
      index 97d8629f8..d4d1b7b4b 100644
      --- a/doc/html/src/cwe_checker_lib/lib.rs.html
      +++ b/doc/html/src/cwe_checker_lib/lib.rs.html
      @@ -1,4 +1,4 @@
      -lib.rs - source
      1
      +lib.rs - source
      1
       2
       3
       4
      @@ -127,6 +127,7 @@
       127
       128
       129
      +130
       
      /*!
       The main library of the cwe_checker containing all CWE checks and analysis modules.
       
      @@ -244,6 +245,7 @@
               &crate::checkers::cwe_215::CWE_MODULE,
               &crate::checkers::cwe_243::CWE_MODULE,
               &crate::checkers::cwe_332::CWE_MODULE,
      +        &crate::checkers::cwe_337::CWE_MODULE,
               &crate::checkers::cwe_367::CWE_MODULE,
               &crate::checkers::cwe_416::CWE_MODULE,
               &crate::checkers::cwe_426::CWE_MODULE,
      diff --git a/doc/html/src/cwe_checker_lib/pcode/expressions.rs.html b/doc/html/src/cwe_checker_lib/pcode/expressions.rs.html
      index 8838d967b..60732aed0 100644
      --- a/doc/html/src/cwe_checker_lib/pcode/expressions.rs.html
      +++ b/doc/html/src/cwe_checker_lib/pcode/expressions.rs.html
      @@ -1,4 +1,4 @@
      -expressions.rs - source
      1
      +expressions.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/pcode/mod.rs.html b/doc/html/src/cwe_checker_lib/pcode/mod.rs.html
      index de8bfc65b..ffff85369 100644
      --- a/doc/html/src/cwe_checker_lib/pcode/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/pcode/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/pcode/subregister_substitution/mod.rs.html b/doc/html/src/cwe_checker_lib/pcode/subregister_substitution/mod.rs.html
      index 5ac3f2b33..53bcf1ad7 100644
      --- a/doc/html/src/cwe_checker_lib/pcode/subregister_substitution/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/pcode/subregister_substitution/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/pcode/term.rs.html b/doc/html/src/cwe_checker_lib/pcode/term.rs.html
      index 2fb8f7076..6e95532b3 100644
      --- a/doc/html/src/cwe_checker_lib/pcode/term.rs.html
      +++ b/doc/html/src/cwe_checker_lib/pcode/term.rs.html
      @@ -1,4 +1,4 @@
      -term.rs - source
      1
      +term.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/pipeline/mod.rs.html b/doc/html/src/cwe_checker_lib/pipeline/mod.rs.html
      index ecd6003d4..5bb0fee7a 100644
      --- a/doc/html/src/cwe_checker_lib/pipeline/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/pipeline/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      @@ -58,7 +58,7 @@
       use crate::utils::{binary::BareMetalConfig, ghidra::get_project_from_ghidra};
       use std::path::Path;
       
      -/// Disassemble the given binary and parse it to a [`Project`](crate::intermediate_representation::Project) struct.
      +/// Disassemble the given binary and parse it to a [`Project`] struct.
       ///
       /// If successful, returns the binary file (as a byte vector), the parsed project struct,
       /// and a vector of log messages generated during the process.
      diff --git a/doc/html/src/cwe_checker_lib/pipeline/results.rs.html b/doc/html/src/cwe_checker_lib/pipeline/results.rs.html
      index a4087bb26..7a6ba87fc 100644
      --- a/doc/html/src/cwe_checker_lib/pipeline/results.rs.html
      +++ b/doc/html/src/cwe_checker_lib/pipeline/results.rs.html
      @@ -1,4 +1,4 @@
      -results.rs - source
      1
      +results.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/utils/arguments.rs.html b/doc/html/src/cwe_checker_lib/utils/arguments.rs.html
      index 79e73b96b..a45a6775f 100644
      --- a/doc/html/src/cwe_checker_lib/utils/arguments.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/arguments.rs.html
      @@ -1,4 +1,4 @@
      -arguments.rs - source
      1
      +arguments.rs - source
      1
       2
       3
       4
      @@ -312,7 +312,7 @@
           // - `[\.]?\d*` matches the precision parameter (for printf-like functions)
           // - `[cCdiouxXeEfFgGaAnpsS]` matches a format specifier without length parameter.
           // - `hi|hd|hu|li|ld|lu|lli|lld|llu|lf|lg|le|la|lF|lG|lE|lA|Lf|Lg|Le|La|LF|LG|LE|LA` matches format specifiers with length parameter.
      -    let re = Regex::new(r#"%[+\-#0]{0,1}\d*[\.]?\d*([cCdiouxXeEfFgGaAnpsS]|hi|hd|hu|li|ld|lu|lli|lld|llu|lf|lg|le|la|lF|lG|lE|lA|Lf|Lg|Le|La|LF|LG|LE|LA)"#)
      +    let re = Regex::new(r"%[+\-#0]{0,1}\d*[\.]?\d*([cCdiouxXeEfFgGaAnpsS]|hi|hd|hu|li|ld|lu|lli|lld|llu|lf|lg|le|la|lF|lG|lE|lA|Lf|Lg|Le|La|LF|LG|LE|LA)")
               .expect("No valid regex!");
       
           let datatype_map: Vec<(Datatype, ByteSize)> = re
      diff --git a/doc/html/src/cwe_checker_lib/utils/binary.rs.html b/doc/html/src/cwe_checker_lib/utils/binary.rs.html
      index 1621e8aa4..34a62f2b6 100644
      --- a/doc/html/src/cwe_checker_lib/utils/binary.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/binary.rs.html
      @@ -1,4 +1,4 @@
      -binary.rs - source
      1
      +binary.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/utils/ghidra.rs.html b/doc/html/src/cwe_checker_lib/utils/ghidra.rs.html
      index 27d651c6e..cc13eed18 100644
      --- a/doc/html/src/cwe_checker_lib/utils/ghidra.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/ghidra.rs.html
      @@ -1,4 +1,4 @@
      -ghidra.rs - source
      1
      +ghidra.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/utils/graph_utils.rs.html b/doc/html/src/cwe_checker_lib/utils/graph_utils.rs.html
      index 525af93af..3566fadaf 100644
      --- a/doc/html/src/cwe_checker_lib/utils/graph_utils.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/graph_utils.rs.html
      @@ -1,4 +1,4 @@
      -graph_utils.rs - source
      1
      +graph_utils.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/utils/log.rs.html b/doc/html/src/cwe_checker_lib/utils/log.rs.html
      index 673b0ad96..c394a3468 100644
      --- a/doc/html/src/cwe_checker_lib/utils/log.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/log.rs.html
      @@ -1,4 +1,4 @@
      -log.rs - source
      1
      +log.rs - source
      1
       2
       3
       4
      @@ -750,7 +750,7 @@
               let logs = logs_with_address
                   .values()
                   .cloned()
      -            .chain(general_logs.into_iter())
      +            .chain(general_logs)
                   .collect();
               let cwes = collected_cwes.into_values().collect();
               (logs, cwes)
      diff --git a/doc/html/src/cwe_checker_lib/utils/mod.rs.html b/doc/html/src/cwe_checker_lib/utils/mod.rs.html
      index 7149f4041..c6855c7ad 100644
      --- a/doc/html/src/cwe_checker_lib/utils/mod.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      1
      +mod.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/src/cwe_checker_lib/utils/symbol_utils.rs.html b/doc/html/src/cwe_checker_lib/utils/symbol_utils.rs.html
      index 30eb9d325..85a831139 100644
      --- a/doc/html/src/cwe_checker_lib/utils/symbol_utils.rs.html
      +++ b/doc/html/src/cwe_checker_lib/utils/symbol_utils.rs.html
      @@ -1,4 +1,4 @@
      -symbol_utils.rs - source
      1
      +symbol_utils.rs - source
      1
       2
       3
       4
      diff --git a/doc/html/static.files/ayu-614652228113ac93.css b/doc/html/static.files/ayu-614652228113ac93.css
      deleted file mode 100644
      index 8fd09c9e4..000000000
      --- a/doc/html/static.files/ayu-614652228113ac93.css
      +++ /dev/null
      @@ -1 +0,0 @@
      - :root{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--source-sidebar-background-selected:#14191f;--source-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}h1,h2,h3,h4,h1 a,.sidebar h2 a,.sidebar h3 a,#source-sidebar>.title{color:#fff;}h4{border:none;}.docblock code{color:#ffb454;}.docblock a>code{color:#39AFD7 !important;}.code-header,.docblock pre>code,pre,pre>code,.item-info code,.rustdoc.source .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#source-sidebar div.files>a:hover,details.dir-entry summary:hover,#source-sidebar div.files>a:focus,details.dir-entry summary:focus,#source-sidebar div.files>a.selected{color:#ffb44c;}.sidebar-elems .location{color:#ff7733;}.src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}.search-results a:hover,.search-results a:focus{color:#fff !important;background-color:#3c3c3c;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}#search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}#search-tabs>button:not(.selected){border:none;background-color:transparent !important;}#search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#settings-menu>a img{filter:invert(100);}
      \ No newline at end of file
      diff --git a/doc/html/static.files/dark-1097f8e92a01e3cf.css b/doc/html/static.files/dark-1097f8e92a01e3cf.css
      deleted file mode 100644
      index 1e5e7d194..000000000
      --- a/doc/html/static.files/dark-1097f8e92a01e3cf.css
      +++ /dev/null
      @@ -1 +0,0 @@
      -:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--source-sidebar-background-selected:#333;--source-sidebar-background-hover:#444;--table-alt-row-background-color:#2A2A2A;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}
      \ No newline at end of file
      diff --git a/doc/html/static.files/light-0f8c037637f9eb3e.css b/doc/html/static.files/light-0f8c037637f9eb3e.css
      deleted file mode 100644
      index 21c3a859b..000000000
      --- a/doc/html/static.files/light-0f8c037637f9eb3e.css
      +++ /dev/null
      @@ -1 +0,0 @@
      -:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#F5F5F5;--sidebar-background-color-hover:#E0E0E0;--code-block-background-color:#F5F5F5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#ffffff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--source-sidebar-background-selected:#fff;--source-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#F5F5F5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}
      \ No newline at end of file
      diff --git a/doc/html/static.files/main-9dd44ab47b99a0fb.js b/doc/html/static.files/main-9dd44ab47b99a0fb.js
      new file mode 100644
      index 000000000..cfb9a38fc
      --- /dev/null
      +++ b/doc/html/static.files/main-9dd44ab47b99a0fb.js
      @@ -0,0 +1,12 @@
      +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.body,"crate")){mobileTitle.innerText=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

      "+searchState.loadingText+"

      ";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElem=document.getElementById(implId);if(implElem&&implElem.parentElement.tagName==="SUMMARY"&&implElem.parentElement.parentElement.tagName==="DETAILS"){onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/([^-]+)-([0-9]+)/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0)}})}}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.body,"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;if(link.href===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("opaque","opaque-types","Opaque Types");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=null;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
      "+window.NOTABLE_TRAITS[notable_ty]+"
      "}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
      "+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
      "+x[1]+"
      ").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

      Keyboard Shortcuts

      "+shortcuts+"
      ";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

      "+x+"

      ").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

      Search Tricks

      "+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/doc/html/static.files/main-f61008743c98d196.js b/doc/html/static.files/main-f61008743c98d196.js deleted file mode 100644 index 18fb9381c..000000000 --- a/doc/html/static.files/main-f61008743c98d196.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileLocationTitle=document.querySelector(".mobile-topbar h2");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss(getVar("static-root-path")+getVar("settings-css"));loadScript(getVar("static-root-path")+getVar("settings-js"));preLoadCss(getVar("static-root-path")+getVar("theme-light-css"));preLoadCss(getVar("static-root-path")+getVar("theme-dark-css"));preLoadCss(getVar("static-root-path")+getVar("theme-ayu-css"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:()=>{switchDisplayedElement(null);document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

      "+searchState.loadingText+"

      ";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();switchDisplayedElement(null);if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=script?script.getAttribute("data-ignore-extern-crates"):"";for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.indexOf(lib)!==-1){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
      "+window.NOTABLE_TRAITS[notable_ty]+"
      "}else if(e.getAttribute("title")!==undefined){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("title")));wrapper.appendChild(titleContent)}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(event.relatedTarget,e)){hideTooltip(true)}}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=function(){this.TOOLTIP_FORCE_VISIBLE=this.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!this.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(this);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}showTooltip(this)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){hideTooltip(true)}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ - the rustdoc book.";const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
      "+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
      "+x[1]+"
      ").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

      Keyboard Shortcuts

      "+shortcuts+"
      ";const infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

      "+x+"

      ").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

      Search Tricks

      "+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=function(switchFocus){hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=function(){onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/doc/html/static.files/noscript-13285aec31fa243e.css b/doc/html/static.files/noscript-13285aec31fa243e.css deleted file mode 100644 index c32e0cb13..000000000 --- a/doc/html/static.files/noscript-13285aec31fa243e.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.source .sidebar{display:none;}.notable-traits{display:none;} \ No newline at end of file diff --git a/doc/html/static.files/noscript-5d8b3c7633ad77ba.css b/doc/html/static.files/noscript-5d8b3c7633ad77ba.css new file mode 100644 index 000000000..8c63ef065 --- /dev/null +++ b/doc/html/static.files/noscript-5d8b3c7633ad77ba.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}@media (prefers-color-scheme:dark){:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}} \ No newline at end of file diff --git a/doc/html/static.files/rustdoc-9ee3a5e31a2afa3e.css b/doc/html/static.files/rustdoc-9ee3a5e31a2afa3e.css new file mode 100644 index 000000000..8749d0eb1 --- /dev/null +++ b/doc/html/static.files/rustdoc-9ee3a5e31a2afa3e.css @@ -0,0 +1,10 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.src .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 -16px 0 -16px;text-align:center;}.sidebar-crate h2 a{display:block;margin:0 calc(-24px + 0.25rem) 0 -0.5rem;padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.5rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;margin-top:calc((-16px + 0.57rem ) / 2 );}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:850px){#search-tabs .count{display:block;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.src-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"]{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a,:root[data-theme="ayu"] #source-sidebar>.title{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/doc/html/static.files/rustdoc-ba5701c5741a7b69.css b/doc/html/static.files/rustdoc-ba5701c5741a7b69.css deleted file mode 100644 index 55584a76d..000000000 --- a/doc/html/static.files/rustdoc-ba5701c5741a7b69.css +++ /dev/null @@ -1,8 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.srclink,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name .primitive>i,.result-name .keyword>i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}p:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.source .content pre{padding:20px;}.rustdoc.source .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.source .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#source-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.source .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.source-sidebar-expanded .source .sidebar{overflow-y:auto;flex-basis:300px;}.source-sidebar-expanded .source .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.source) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.source .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.source nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}@-moz-document url-prefix(){#crate-search{padding-left:0px;padding-right:19px;}}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div{flex:1;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name span.alias{color:var(--search-results-alias-color);}.search-results .result-name span.grey{color:var(--search-results-grey-color);}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;align-items:center;white-space:pre-wrap;border-radius:3px;display:inline-flex;vertical-align:text-bottom;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.source .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#source-sidebar{width:100%;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#source-sidebar div.files>a:hover,details.dir-entry summary:hover,#source-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--source-sidebar-background-hover);}#source-sidebar div.files>a.selected{background-color:var(--source-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.source main,.rustdoc.source .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.source-sidebar-expanded .source .sidebar,.rustdoc:not(.source) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#search-tabs .count{display:block;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.source-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.source-sidebar-expanded .source .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.source nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.srclink,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/doc/html/static.files/search-8fbf244ebcf71464.js b/doc/html/static.files/search-8fbf244ebcf71464.js new file mode 100644 index 000000000..168023b4b --- /dev/null +++ b/doc/html/static.files/search-8fbf244ebcf71464.js @@ -0,0 +1,5 @@ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias","generic",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const TY_GENERIC=itemTypes.indexOf("generic");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:null,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem,whereClause,mgensInout){return unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgensInout,mgens=>{if(mgensInout){for(const[fid,qid]of mgens.entries()){mgensInout.set(fid,qid)}}return true})}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb){let mgens=new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;let fl=fnTypesIn.length;let fnTypes=fnTypesIn.slice();const backtracking=[];let i=0;let j=0;const backtrack=()=>{while(backtracking.length!==0){const{fnTypesScratch,mgensScratch,queryElemsOffset,fnTypesOffset,unbox,}=backtracking.pop();mgens=new Map(mgensScratch);const fnType=fnTypesScratch[fnTypesOffset];const queryElem=queryElems[queryElemsOffset];if(unbox){if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}mgens.set(fnType.id,0)}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;fnTypes=fnTypesScratch.toSpliced(fnTypesOffset,1,...generics);fl=fnTypes.length;i=queryElemsOffset-1}else{if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}mgens.set(fnType.id,queryElem.id)}fnTypes=fnTypesScratch.slice();fl=fnTypes.length;const tmp=fnTypes[queryElemsOffset];fnTypes[queryElemsOffset]=fnTypes[fnTypesOffset];fnTypes[fnTypesOffset]=tmp;i=queryElemsOffset}return true}return false};for(i=0;i!==ql;++i){const queryElem=queryElems[i];const matchCandidates=[];let fnTypesScratch=null;let mgensScratch=null;for(j=i;j!==fl;++j){const fnType=fnTypes[j];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgens,mgensScratch=>{matchCandidates.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:false,});return false})}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}if(!mgensScratch){mgensScratch=new Map(mgens)}backtracking.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:true,})}}if(matchCandidates.length===0){if(backtrack()){continue}else{return false}}const{fnTypesOffset:candidate,mgensScratch:mgensNew}=matchCandidates.pop();if(fnTypes[candidate].id<0&&queryElems[i].id<0){mgens.set(fnTypes[candidate].id,queryElems[i].id)}for(const[fid,qid]of mgensNew){mgens.set(fid,qid)}const tmp=fnTypes[candidate];fnTypes[candidate]=fnTypes[i];fnTypes[i]=tmp;for(const otherCandidate of matchCandidates){backtracking.push(otherCandidate)}while(i===(ql-1)&&solutionCb&&!solutionCb(mgens)){if(!backtrack()){return false}}}return true}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgens.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}else{if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(fnType.id!==queryElem.id){return false}if(fnType.generics.length===0&&queryElem.generics.length!==0){return false}const queryElemPathLength=queryElem.pathWithoutLast.length;if(queryElemPathLength>0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i=0){if(!whereClause){return false}if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause)}else if(fnType.generics&&fnType.generics.length>0){return checkIfInList(fnType.generics,queryElem,whereClause)}return false}function checkIfInList(list,elem,whereClause){for(const entry of list){if(checkType(entry,elem,whereClause)){return true}}return false}function checkType(row,elem,whereClause){if(row.id===null){return row.generics.length>0?checkIfInList(row.generics,elem,whereClause):false}if(row.id<0&&elem.id>=0){const gid=(-row.id)-1;return checkIfInList(whereClause[gid],elem,whereClause)}if(row.id<0&&elem.id<0){return true}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem,whereClause,new Map())}return true}return checkIfInList(row.generics,elem,whereClause)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,implDisambiguator:item.implDisambiguator,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens)})){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem){if(typeNameIdMap.has(elem.pathLast)){elem.id=typeNameIdMap.get(elem.pathLast)}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.pathLast,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
      \ +${item.alias} - see \ +
      `}resultName.insertAdjacentHTML("beforeend",`
      ${alias}\ +${item.displayPath}${name}\ +
      `);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
      "+"Try on DuckDuckGo?

      "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
      "}let output=`

      Results${crates}

      `;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

      Query parser error: "${error.join("")}".

      `;output+="
      "+makeTabHeader(0,"In Names",ret_others[1])+"
      ";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
      "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
      "}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
      "+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
      ";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

      "+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

      `}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

      "+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

      `}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.map(type=>buildItemSearchType(type,lowercasePaths))}function buildItemSearchType(type,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}if(pathIndex<0){return{id:pathIndex,ty:TY_GENERIC,path:null,generics,}}if(pathIndex===0){return{id:null,ty:null,path:null,generics,}}const item=lowercasePaths[pathIndex-1];return{id:buildTypeMapIndex(item.name),ty:item.ty,path:item.path,generics,}}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}lowercasePaths.push({ty:ty,name:name.toLowerCase(),path:path});paths[i]={ty:ty,name:name,path:path}}lastPath="";len=itemTypes.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/doc/html/static.files/search-e077946657036a58.js b/doc/html/static.files/search-e077946657036a58.js deleted file mode 100644 index 3b21179bf..000000000 --- a/doc/html/static.files/search-e077946657036a58.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;const ALIASES=new Map();function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-".indexOf(c)!==-1}function isStopCharacter(c){return isWhitespace(c)||isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","||isWhitespaceCharacter(c)}function isWhitespaceCharacter(c){return c===" "||c==="\t"}function createQueryElement(query,parserState,name,generics,isInGenerics){if(name==="*"||(name.length===0&&generics.length===0)){return}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["You cannot have more than one element if you use quotes"]}const pathSegments=name.split("::");if(pathSegments.length>1){for(let i=0,len=pathSegments.length;i=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;while(parserState.pos"){extra="<"}else if(endChar===""){extra="->"}else{extra=endChar}throw["Unexpected ",c," after ",extra]}if(!foundStopChar){if(endChar!==""){throw["Expected ",",",", "," "," or ",endChar,", found ",c,]}throw["Expected ",","," or "," ",", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar===">");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ","<"]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ","<"]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery;for(let pos=start;pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"]}if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["You cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}if(!foundStopChar){if(parserState.typeFilter!==null){throw["Expected ",",",", "," "," or ","->",", found ",c,]}throw["Expected ",",",", "," ",", ",":"," or ","->",", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter)"]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,literalSearch:false,error:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id>-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(row,elem,defaultDistance,maxEditDistance){if(row.generics.length===0){return elem.generics.length===0?defaultDistance:maxEditDistance+1}else if(row.generics.length>0&&row.generics[0].name===null){return checkGenerics(row.generics[0],elem,defaultDistance,maxEditDistance)}if(elem.generics.length>0&&row.generics.length>=elem.generics.length){const elems=new Map();for(const entry of row.generics){if(entry.name===""){if(checkGenerics(entry,elem,maxEditDistance+1,maxEditDistance)!==0){return maxEditDistance+1}continue}let currentEntryElems;if(elems.has(entry.name)){currentEntryElems=elems.get(entry.name)}else{currentEntryElems=[];elems.set(entry.name,currentEntryElems)}currentEntryElems.push(entry)}const handleGeneric=generic=>{if(!elems.has(generic.name)){return false}const matchElems=elems.get(generic.name);const matchIdx=matchElems.findIndex(tmp_elem=>{if(checkGenerics(tmp_elem,generic,0,maxEditDistance)!==0){return false}return typePassesFilter(generic.typeFilter,tmp_elem.ty)});if(matchIdx===-1){return false}matchElems.splice(matchIdx,1);if(matchElems.length===0){elems.delete(generic.name)}return true};for(const generic of elem.generics){if(generic.typeFilter!==-1&&!handleGeneric(generic)){return maxEditDistance+1}}for(const generic of elem.generics){if(generic.typeFilter===-1&&!handleGeneric(generic)){return maxEditDistance+1}}return 0}return maxEditDistance+1}function checkIfInGenerics(row,elem,maxEditDistance){let dist=maxEditDistance+1;for(const entry of row.generics){dist=Math.min(checkType(entry,elem,true,maxEditDistance),dist);if(dist===0){break}}return dist}function checkType(row,elem,literalSearch,maxEditDistance){if(row.name===null){if(row.generics.length>0){return checkIfInGenerics(row,elem,maxEditDistance)}return maxEditDistance+1}let dist;if(typePassesFilter(elem.typeFilter,row.ty)){dist=editDistance(row.name,elem.name,maxEditDistance)}else{dist=maxEditDistance+1}if(literalSearch){if(dist!==0){if(elem.generics.length===0){const checkGeneric=row.generics.length>0;if(checkGeneric&&row.generics.findIndex(tmp_elem=>tmp_elem.name===elem.name&&typePassesFilter(elem.typeFilter,tmp_elem.ty))!==-1){return 0}}return maxEditDistance+1}else if(elem.generics.length>0){return checkGenerics(row,elem,maxEditDistance+1,maxEditDistance)}return 0}else if(row.generics.length>0){if(elem.generics.length===0){if(dist===0){return 0}dist=Math.min(dist,checkIfInGenerics(row,elem,maxEditDistance));return dist}else if(dist>maxEditDistance){return checkIfInGenerics(row,elem,maxEditDistance)}else{const tmp_dist=checkGenerics(row,elem,dist,maxEditDistance);if(tmp_dist>maxEditDistance){return maxEditDistance+1}return(tmp_dist+dist)/2}}else if(elem.generics.length>0){return maxEditDistance+1}return dist}function findArg(row,elem,maxEditDistance,skipPositions){let dist=maxEditDistance+1;let position=-1;if(row&&row.type&&row.type.inputs&&row.type.inputs.length>0){let i=0;for(const input of row.type.inputs){if(skipPositions.indexOf(i)!==-1){i+=1;continue}const typeDist=checkType(input,elem,parsedQuery.literalSearch,maxEditDistance);if(typeDist===0){return{dist:0,position:i}}if(typeDist0){const ret=row.type.output;let i=0;for(const ret_ty of ret){if(skipPositions.indexOf(i)!==-1){i+=1;continue}const typeDist=checkType(ret_ty,elem,parsedQuery.literalSearch,maxEditDistance);if(typeDist===0){return{dist:0,position:i}}if(typeDistlength){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let dist,index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=findArg(row,elem,maxEditDistance,[]);const returned=checkReturned(row,elem,maxEditDistance,[]);addIntoResults(results_in_args,fullId,pos,-1,in_args.dist,0,maxEditDistance);addIntoResults(results_returned,fullId,pos,-1,returned.dist,0,maxEditDistance);if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let totalDist=0;let nbDist=0;function checkArgs(elems,callback){const skipPositions=[];for(const elem of elems){const{dist,position}=callback(row,elem,maxEditDistance,skipPositions);if(dist<=1){nbDist+=1;totalDist+=dist;skipPositions.push(position)}else{return false}}return true}if(!checkArgs(parsedQuery.elems,findArg)){return}if(!checkArgs(parsedQuery.returned,checkReturned)){return}if(nbDist===0){return}const dist=Math.round(totalDist/nbDist);addIntoResults(results,row.id,pos,0,dist,0,maxEditDistance)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];length+=1;let extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){const alias=document.createElement("span");alias.className="alias";const bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");link.appendChild(resultName);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
      "+"Try on DuckDuckGo?

      "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
      "}let output=`

      Results${crates}

      `;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value}`}else{error[index]=value}});output+=`

      Query parser error: "${error.join("")}".

      `;output+="
      "+makeTabHeader(0,"In Names",ret_others[1])+"
      ";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
      "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
      "}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
      "+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
      ";currentTab=0}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";if(browserSupportsHistoryApi()){const newURL=buildUrl(query.original,filterCrates);if(!history.state&&!params.search){history.pushState(null,"",newURL)}else{history.replaceState(null,"",newURL)}}showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;return types.map(type=>{let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}return{name:pathIndex===0?null:lowercasePaths[pathIndex-1].name,ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:generics,}})}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){const pathIndex=functionSearchType[INPUTS_DATA];inputs=[{name:pathIndex===0?null:lowercasePaths[pathIndex-1].name,ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){const pathIndex=functionSearchType[OUTPUT_DATA];output=[{name:pathIndex===0?null:lowercasePaths[pathIndex-1].name,ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}return{inputs,output,}}function buildIndex(rawSearchIndex){searchIndex=[];const searchWords=[];const charA="A".charCodeAt(0);let currentIndex=0;let id=0;for(const crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}let crateSize=0;const crateCorpus=rawSearchIndex[crate];searchWords.push(crate);const crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),deprecated:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionSearchTypes=crateCorpus.f;const deprecatedItems=new Set(crateCorpus.c);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];let len=paths.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const params=searchState.getQueryStringParams();const query=searchState.input.value.trim();if(!history.state&&!params.search){history.pushState(null,"",buildUrl(query,null))}else{history.replaceState(null,"",buildUrl(query,null))}}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/doc/html/static.files/settings-298e1ea74db45b39.js b/doc/html/static.files/settings-74424d7eec62a23e.js similarity index 54% rename from doc/html/static.files/settings-298e1ea74db45b39.js rename to doc/html/static.files/settings-74424d7eec62a23e.js index a426aef32..3014f75c5 100644 --- a/doc/html/static.files/settings-298e1ea74db45b39.js +++ b/doc/html/static.files/settings-74424d7eec62a23e.js @@ -1,4 +1,4 @@ -"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function handleKey(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return}switch(getVirtualKey(ev)){case"Enter":case"Return":case"Space":ev.target.checked=!ev.target.checked;ev.preventDefault();break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)};toggle.onkeyup=handleKey;toggle.onkeyrelease=handleKey});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\
      ${setting_name}
      `;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ @@ -14,4 +14,4 @@ \ ${setting_name}\ \ -
      `}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
      ${buildSettingsPageSections(settings)}
      `;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=function(event){event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=function(event){if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file +
      `}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
      ${buildSettingsPageSections(settings)}
      `;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=event=>{event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/doc/html/static.files/settings-7bfb4c59cc6bc502.css b/doc/html/static.files/settings-7bfb4c59cc6bc502.css deleted file mode 100644 index 79ad21581..000000000 --- a/doc/html/static.files/settings-7bfb4c59cc6bc502.css +++ /dev/null @@ -1,3 +0,0 @@ -.setting-line{margin:1.2em 0.6em;position:relative;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;color:inherit;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-check input:checked{content:url('data:image/svg+xml,\ - \ - ');}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;} \ No newline at end of file diff --git a/doc/html/static.files/source-script-905937fbbdc8e9ea.js b/doc/html/static.files/source-script-905937fbbdc8e9ea.js deleted file mode 100644 index fc5080998..000000000 --- a/doc/html/static.files/source-script-905937fbbdc8e9ea.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const rootPath=document.getElementById("rustdoc-vars").attributes["data-root-path"].value;const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth"){addClass(document.documentElement,"source-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"source-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="src-sidebar-toggle";const inner=document.createElement("button");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}inner.onclick=toggleSidebar;sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="source-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(key=>{sourcesIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSourceHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSourceLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSourceHighlight)});highlightSourceLines();window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file diff --git a/doc/html/static.files/src-script-3280b574d94e47b4.js b/doc/html/static.files/src-script-3280b574d94e47b4.js new file mode 100644 index 000000000..9ea88921e --- /dev/null +++ b/doc/html/static.files/src-script-3280b574d94e47b4.js @@ -0,0 +1 @@ +"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth"){addClass(document.documentElement,"src-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"src-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="src-sidebar-toggle";const inner=document.createElement("button");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}inner.onclick=toggleSidebar;sidebarToggle.appendChild(inner);return sidebarToggle}function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(srcIndex).forEach(key=>{srcIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(srcIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSrcLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSrcLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/doc/html/static.files/storage-62ce34ea385b278a.js b/doc/html/static.files/storage-62ce34ea385b278a.js deleted file mode 100644 index 6f4ec2e54..000000000 --- a/doc/html/static.files/storage-62ce34ea385b278a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.getElementById("rustdoc-vars");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}let newHref;if(newThemeName==="light"||newThemeName==="dark"||newThemeName==="ayu"){newHref=getVar("static-root-path")+getVar("theme-"+newThemeName+"-css")}else{newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css"}if(!window.currentTheme){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"source-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/doc/html/static.files/storage-fec3eaa3851e447d.js b/doc/html/static.files/storage-fec3eaa3851e447d.js new file mode 100644 index 000000000..a687118f3 --- /dev/null +++ b/doc/html/static.files/storage-fec3eaa3851e447d.js @@ -0,0 +1 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/doc/html/implementors/clap_builder/derive/trait.Args.js b/doc/html/trait.impl/clap/derive/trait.Args.js similarity index 100% rename from doc/html/implementors/clap_builder/derive/trait.Args.js rename to doc/html/trait.impl/clap/derive/trait.Args.js diff --git a/doc/html/implementors/clap_builder/derive/trait.CommandFactory.js b/doc/html/trait.impl/clap/derive/trait.CommandFactory.js similarity index 100% rename from doc/html/implementors/clap_builder/derive/trait.CommandFactory.js rename to doc/html/trait.impl/clap/derive/trait.CommandFactory.js diff --git a/doc/html/implementors/clap_builder/derive/trait.FromArgMatches.js b/doc/html/trait.impl/clap/derive/trait.FromArgMatches.js similarity index 100% rename from doc/html/implementors/clap_builder/derive/trait.FromArgMatches.js rename to doc/html/trait.impl/clap/derive/trait.FromArgMatches.js diff --git a/doc/html/implementors/clap_builder/derive/trait.Parser.js b/doc/html/trait.impl/clap/derive/trait.Parser.js similarity index 100% rename from doc/html/implementors/clap_builder/derive/trait.Parser.js rename to doc/html/trait.impl/clap/derive/trait.Parser.js diff --git a/doc/html/trait.impl/core/clone/trait.Clone.js b/doc/html/trait.impl/core/clone/trait.Clone.js new file mode 100644 index 000000000..a18544e1a --- /dev/null +++ b/doc/html/trait.impl/core/clone/trait.Clone.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Clone for CweTestCase"]], +"cwe_checker_lib":[["impl Clone for Config"],["impl Clone for Taint"],["impl Clone for Config"],["impl Clone for Config"],["impl Clone for Arg"],["impl Clone for StringLocation"],["impl Clone for Config"],["impl Clone for DatatypeProperties"],["impl Clone for ExternSymbol"],["impl Clone for Variable"],["impl Clone for Variable"],["impl Clone for BinOpType"],["impl<T: Clone + RegisterDomain> Clone for DataDomain<T>"],["impl Clone for Config"],["impl Clone for CastOpType"],["impl Clone for RegisterProperties"],["impl Clone for MemorySegment"],["impl Clone for Expression"],["impl Clone for Datatype"],["impl Clone for BitvectorDomain"],["impl Clone for Config"],["impl Clone for State"],["impl Clone for Config"],["impl<'a> Clone for Edge<'a>"],["impl Clone for Program"],["impl Clone for WarningContext"],["impl Clone for Call"],["impl Clone for CharacterInclusionDomain"],["impl Clone for AbstractMemoryLocation"],["impl Clone for AbstractIdentifierData"],["impl<T: Clone> Clone for Term<T>"],["impl Clone for AbstractObject"],["impl Clone for Config"],["impl Clone for LogThreadMsg"],["impl Clone for JmpType"],["impl Clone for Expression"],["impl Clone for ArgIntent"],["impl<'a> Clone for AnalysisResults<'a>"],["impl Clone for Tid"],["impl Clone for Sub"],["impl Clone for CallingConvention"],["impl Clone for CweWarning"],["impl Clone for CallingConvention"],["impl Clone for Program"],["impl Clone for Config"],["impl<'a> Clone for Node<'a>"],["impl Clone for AbstractIdentifier"],["impl Clone for Project"],["impl Clone for Label"],["impl Clone for Config"],["impl Clone for Arg"],["impl Clone for Sub"],["impl Clone for Config"],["impl Clone for IntersectMergeStrategy"],["impl Clone for ExpressionType"],["impl Clone for Config"],["impl Clone for ObjectType"],["impl Clone for LogLevel"],["impl Clone for Interval"],["impl Clone for UnOpType"],["impl Clone for Project"],["impl Clone for ExternSymbol"],["impl<T: Clone + PartialEq + Eq + Clone> Clone for NodeValue<T>"],["impl Clone for Jmp"],["impl Clone for FunctionSignature"],["impl Clone for BrickDomain"],["impl Clone for Config"],["impl Clone for IntervalDomain"],["impl Clone for ByteSize"],["impl Clone for UnionMergeStrategy"],["impl Clone for Def"],["impl Clone for CharacterSet"],["impl Clone for Config"],["impl<T: Clone + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Clone for State<T>"],["impl<T: Clone + AbstractDomain + SizedDomain + HasTop + Debug> Clone for MemRegion<T>"],["impl Clone for RuntimeMemoryImage"],["impl Clone for AbstractLocation"],["impl Clone for Blk"],["impl Clone for BricksDomain"],["impl Clone for Jmp"],["impl Clone for State"],["impl Clone for AccessPattern"],["impl<K, V, S> Clone for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Clone,\n V: AbstractDomain + Clone,\n S: MapMergeStrategy<K, V> + Clone,"],["impl Clone for BareMetalConfig"],["impl Clone for Def"],["impl Clone for LogMessage"],["impl Clone for Blk"],["impl Clone for MergeTopStrategy"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/cmp/trait.Eq.js b/doc/html/trait.impl/core/cmp/trait.Eq.js new file mode 100644 index 000000000..0a5716637 --- /dev/null +++ b/doc/html/trait.impl/core/cmp/trait.Eq.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Eq for CweTestCase"]], +"cwe_checker_lib":[["impl Eq for Jmp"],["impl Eq for Config"],["impl Eq for JmpType"],["impl Eq for StringLocation"],["impl Eq for Config"],["impl Eq for BitvectorDomain"],["impl Eq for Config"],["impl Eq for Label"],["impl Eq for ArgIntent"],["impl Eq for Blk"],["impl Eq for Config"],["impl Eq for Jmp"],["impl<T: Eq> Eq for Term<T>"],["impl Eq for AbstractLocation"],["impl<T: Eq + PartialEq + Eq + Clone> Eq for NodeValue<T>"],["impl Eq for Arg"],["impl<T: Eq + RegisterDomain> Eq for DataDomain<T>"],["impl<T: Eq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Eq for State<T>"],["impl Eq for Variable"],["impl Eq for Config"],["impl Eq for State"],["impl Eq for Expression"],["impl Eq for Sub"],["impl Eq for Sub"],["impl Eq for ByteSize"],["impl Eq for Config"],["impl Eq for FunctionSignature"],["impl Eq for UnOpType"],["impl Eq for IntervalDomain"],["impl Eq for AbstractObject"],["impl<T: Eq + AbstractDomain + SizedDomain + HasTop + Debug> Eq for MemRegion<T>"],["impl Eq for CastOpType"],["impl Eq for LogThreadMsg"],["impl Eq for IntersectMergeStrategy"],["impl Eq for ExternSymbol"],["impl Eq for CallingConvention"],["impl Eq for CweWarning"],["impl Eq for UnionMergeStrategy"],["impl Eq for Arg"],["impl Eq for Tid"],["impl Eq for MemorySegment"],["impl Eq for Config"],["impl Eq for Expression"],["impl Eq for ExpressionType"],["impl Eq for Datatype"],["impl Eq for BinOpType"],["impl Eq for ExternSymbol"],["impl Eq for AbstractIdentifierData"],["impl Eq for RegisterProperties"],["impl Eq for Config"],["impl Eq for Config"],["impl Eq for CharacterInclusionDomain"],["impl Eq for AccessPattern"],["impl Eq for Def"],["impl<'a> Eq for Node<'a>"],["impl Eq for AbstractIdentifier"],["impl Eq for Program"],["impl Eq for Def"],["impl Eq for RuntimeMemoryImage"],["impl Eq for MergeTopStrategy"],["impl Eq for Config"],["impl<K, V, S> Eq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Eq,\n V: AbstractDomain + Eq,\n S: MapMergeStrategy<K, V> + Eq,"],["impl Eq for LogMessage"],["impl Eq for CharacterSet"],["impl Eq for BricksDomain"],["impl Eq for Blk"],["impl Eq for WarningContext"],["impl Eq for AbstractMemoryLocation"],["impl Eq for State"],["impl Eq for ObjectType"],["impl Eq for Project"],["impl<'a> Eq for Edge<'a>"],["impl Eq for Config"],["impl Eq for Config"],["impl Eq for DatatypeProperties"],["impl Eq for CallingConvention"],["impl Eq for Project"],["impl Eq for BareMetalConfig"],["impl Eq for Program"],["impl Eq for Config"],["impl Eq for BrickDomain"],["impl Eq for Call"],["impl Eq for Taint"],["impl Eq for LogLevel"],["impl Eq for Interval"],["impl Eq for Config"],["impl Eq for Variable"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/cmp/trait.Ord.js b/doc/html/trait.impl/core/cmp/trait.Ord.js new file mode 100644 index 000000000..5c85c1c2d --- /dev/null +++ b/doc/html/trait.impl/core/cmp/trait.Ord.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl Ord for AccessPattern"],["impl Ord for ObjectType"],["impl Ord for LogLevel"],["impl Ord for Variable"],["impl Ord for CweWarning"],["impl Ord for AbstractIdentifierData"],["impl Ord for Tid"],["impl Ord for LogThreadMsg"],["impl Ord for ByteSize"],["impl Ord for AbstractIdentifier"],["impl Ord for WarningContext"],["impl Ord for LogMessage"],["impl Ord for AbstractLocation"],["impl Ord for AbstractMemoryLocation"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/cmp/trait.PartialEq.js b/doc/html/trait.impl/core/cmp/trait.PartialEq.js new file mode 100644 index 000000000..59c02df24 --- /dev/null +++ b/doc/html/trait.impl/core/cmp/trait.PartialEq.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl PartialEq for CweTestCase"]], +"cwe_checker_lib":[["impl<T: PartialEq + PartialEq + Eq + Clone> PartialEq for NodeValue<T>"],["impl PartialEq for Def"],["impl PartialEq for ByteSize"],["impl PartialEq for RegisterProperties"],["impl<T: PartialEq + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> PartialEq for State<T>"],["impl PartialEq for BitvectorDomain"],["impl PartialEq for Config"],["impl PartialEq for Config"],["impl PartialEq for AbstractMemoryLocation"],["impl PartialEq for Config"],["impl PartialEq for Config"],["impl PartialEq for Program"],["impl PartialEq for Config"],["impl PartialEq for ExternSymbol"],["impl PartialEq for Config"],["impl PartialEq for Config"],["impl PartialEq for CallingConvention"],["impl PartialEq for BinOpType"],["impl PartialEq for Expression"],["impl PartialEq for ExpressionType"],["impl PartialEq for State"],["impl PartialEq for State"],["impl PartialEq for Tid"],["impl PartialEq for LogMessage"],["impl PartialEq for Config"],["impl PartialEq for FunctionSignature"],["impl PartialEq for Interval"],["impl PartialEq for CallingConvention"],["impl PartialEq for CharacterSet"],["impl PartialEq for LogLevel"],["impl PartialEq for AbstractIdentifier"],["impl PartialEq for Taint"],["impl PartialEq for Config"],["impl PartialEq for BareMetalConfig"],["impl PartialEq for ArgIntent"],["impl<'a> PartialEq for Edge<'a>"],["impl PartialEq for Sub"],["impl PartialEq for IntervalDomain"],["impl PartialEq for WarningContext"],["impl<T: PartialEq> PartialEq for Term<T>"],["impl PartialEq for MergeTopStrategy"],["impl<T: PartialEq + RegisterDomain> PartialEq for DataDomain<T>"],["impl PartialEq for ExternSymbol"],["impl PartialEq for BrickDomain"],["impl PartialEq for UnOpType"],["impl PartialEq for MemorySegment"],["impl PartialEq for AbstractLocation"],["impl PartialEq for Config"],["impl PartialEq for CastOpType"],["impl PartialEq for Config"],["impl PartialEq for Config"],["impl PartialEq for AbstractObject"],["impl PartialEq for Def"],["impl PartialEq for Config"],["impl PartialEq for Variable"],["impl PartialEq for AccessPattern"],["impl PartialEq for Config"],["impl PartialEq for Variable"],["impl PartialEq for Project"],["impl PartialEq for JmpType"],["impl<T: PartialEq + AbstractDomain + SizedDomain + HasTop + Debug> PartialEq for MemRegion<T>"],["impl PartialEq for Arg"],["impl PartialEq for StringLocation"],["impl PartialEq for ObjectType"],["impl PartialEq for Call"],["impl PartialEq for Jmp"],["impl PartialEq for Blk"],["impl PartialEq for Sub"],["impl PartialEq for Program"],["impl<K, V, S> PartialEq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + PartialEq,\n V: AbstractDomain + PartialEq,\n S: MapMergeStrategy<K, V> + PartialEq,"],["impl PartialEq for LogThreadMsg"],["impl<'a> PartialEq for Node<'a>"],["impl PartialEq for Label"],["impl PartialEq for Jmp"],["impl PartialEq for Project"],["impl PartialEq for Arg"],["impl PartialEq for Expression"],["impl PartialEq for BricksDomain"],["impl PartialEq for RuntimeMemoryImage"],["impl PartialEq for DatatypeProperties"],["impl PartialEq for CweWarning"],["impl PartialEq for Datatype"],["impl PartialEq for UnionMergeStrategy"],["impl PartialEq for CharacterInclusionDomain"],["impl PartialEq for IntersectMergeStrategy"],["impl PartialEq for Blk"],["impl PartialEq for AbstractIdentifierData"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/cmp/trait.PartialOrd.js b/doc/html/trait.impl/core/cmp/trait.PartialOrd.js new file mode 100644 index 000000000..1631e4165 --- /dev/null +++ b/doc/html/trait.impl/core/cmp/trait.PartialOrd.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl PartialOrd for CweWarning"],["impl PartialOrd for LogMessage"],["impl PartialOrd for AbstractLocation"],["impl PartialOrd for WarningContext"],["impl PartialOrd for AbstractIdentifier"],["impl PartialOrd for AbstractMemoryLocation"],["impl PartialOrd for AccessPattern"],["impl PartialOrd for LogThreadMsg"],["impl PartialOrd for ByteSize"],["impl PartialOrd for Variable"],["impl PartialOrd for LogLevel"],["impl PartialOrd for Tid"],["impl PartialOrd for ObjectType"],["impl PartialOrd for AbstractIdentifierData"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/convert/trait.From.js b/doc/html/trait.impl/core/convert/trait.From.js new file mode 100644 index 000000000..be36bdab5 --- /dev/null +++ b/doc/html/trait.impl/core/convert/trait.From.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl From<Expression> for Expression"],["impl From<&RegisterProperties> for Variable"],["impl From<ExpressionType> for CastOpType"],["impl From<ApInt> for IntervalDomain"],["impl From<CweWarning> for LogThreadMsg"],["impl From<ByteSize> for u64"],["impl From<LogMessage> for LogThreadMsg"],["impl From<String> for CharacterInclusionDomain"],["impl From<ApInt> for BitvectorDomain"],["impl<T: RegisterDomain> From<T> for DataDomain<T>"],["impl From<ApInt> for Interval"],["impl From<String> for Datatype"],["impl<K, V, S> From<BTreeMap<K, V>> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl From<Jmp> for Jmp"],["impl From<ExpressionType> for BinOpType"],["impl<T: RegisterDomain + From<Bitvector>> From<ApInt> for DataDomain<T>"],["impl From<Interval> for IntervalDomain"],["impl From<ExpressionType> for UnOpType"],["impl From<Variable> for Variable"],["impl From<u64> for ByteSize"],["impl From<ByteSize> for BitWidth"],["impl From<String> for BricksDomain"],["impl From<Variable> for Expression"],["impl From<BitWidth> for ByteSize"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/default/trait.Default.js b/doc/html/trait.impl/core/default/trait.Default.js new file mode 100644 index 000000000..004cdd9cd --- /dev/null +++ b/doc/html/trait.impl/core/default/trait.Default.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl Default for FunctionSignature"],["impl Default for CweWarning"],["impl Default for AccessPattern"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/fmt/trait.Binary.js b/doc/html/trait.impl/core/fmt/trait.Binary.js similarity index 87% rename from doc/html/implementors/core/fmt/trait.Binary.js rename to doc/html/trait.impl/core/fmt/trait.Binary.js index b542e1202..0255bd133 100644 --- a/doc/html/implementors/core/fmt/trait.Binary.js +++ b/doc/html/trait.impl/core/fmt/trait.Binary.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl Binary for ByteSize"]] +"cwe_checker_lib":[["impl Binary for ByteSize"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/fmt/trait.Debug.js b/doc/html/trait.impl/core/fmt/trait.Debug.js new file mode 100644 index 000000000..c4245187f --- /dev/null +++ b/doc/html/trait.impl/core/fmt/trait.Debug.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Debug for CweTestCase"]], +"cwe_checker":[["impl Debug for CmdlineArgs"]], +"cwe_checker_install":[["impl Debug for GhidraConfig"],["impl Debug for CmdlineArgs"]], +"cwe_checker_lib":[["impl Debug for State"],["impl Debug for ByteSize"],["impl Debug for Variable"],["impl Debug for Project"],["impl Debug for Config"],["impl Debug for LogMessage"],["impl Debug for RegisterProperties"],["impl Debug for Def"],["impl Debug for LogThreadMsg"],["impl Debug for Config"],["impl Debug for Config"],["impl Debug for AbstractMemoryLocation"],["impl<T: Debug + RegisterDomain> Debug for DataDomain<T>"],["impl Debug for Arg"],["impl Debug for ExternSymbol"],["impl Debug for Taint"],["impl Debug for CallingConvention"],["impl<K, V, S> Debug for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Debug,\n V: AbstractDomain + Debug,\n S: MapMergeStrategy<K, V> + Debug,"],["impl Debug for ObjectType"],["impl Debug for Variable"],["impl Debug for Interval"],["impl Debug for AbstractLocation"],["impl Debug for Blk"],["impl<'a> Debug for Node<'a>"],["impl<T: Debug + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> Debug for State<T>"],["impl Debug for CharacterSet"],["impl Debug for Blk"],["impl<T: Debug> Debug for Term<T>"],["impl Debug for ExternSymbol"],["impl Debug for Sub"],["impl Debug for Def"],["impl Debug for RuntimeMemoryImage"],["impl Debug for MergeTopStrategy"],["impl Debug for LogLevel"],["impl Debug for Jmp"],["impl Debug for Label"],["impl Debug for Project"],["impl Debug for Call"],["impl<T: Debug + AbstractDomain + SizedDomain + HasTop + Debug> Debug for MemRegion<T>"],["impl Debug for IntervalDomain"],["impl Debug for Expression"],["impl Debug for IntersectMergeStrategy"],["impl Debug for FunctionSignature"],["impl Debug for MemorySegment"],["impl Debug for BareMetalConfig"],["impl Debug for State"],["impl<'a> Debug for Edge<'a>"],["impl Debug for AbstractIdentifier"],["impl Debug for Config"],["impl Debug for ArgIntent"],["impl Debug for Config"],["impl Debug for Config"],["impl Debug for Sub"],["impl Debug for BricksDomain"],["impl Debug for CastOpType"],["impl Debug for UnOpType"],["impl Debug for Config"],["impl Debug for BinOpType"],["impl Debug for AbstractObject"],["impl Debug for Config"],["impl Debug for BitvectorDomain"],["impl Debug for Program"],["impl Debug for CharacterInclusionDomain"],["impl Debug for Tid"],["impl Debug for JmpType"],["impl Debug for Program"],["impl Debug for Config"],["impl Debug for AccessPattern"],["impl Debug for WarningContext"],["impl Debug for Arg"],["impl Debug for Config"],["impl Debug for BrickDomain"],["impl Debug for Jmp"],["impl Debug for AbstractIdentifierData"],["impl Debug for Config"],["impl Debug for Expression"],["impl Debug for Config"],["impl Debug for CallingConvention"],["impl Debug for StringLocation"],["impl Debug for Datatype"],["impl Debug for ExpressionType"],["impl Debug for UnionMergeStrategy"],["impl Debug for Config"],["impl Debug for Config"],["impl Debug for DatatypeProperties"],["impl Debug for CweWarning"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/fmt/trait.Display.js b/doc/html/trait.impl/core/fmt/trait.Display.js new file mode 100644 index 000000000..d94fc1390 --- /dev/null +++ b/doc/html/trait.impl/core/fmt/trait.Display.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl Display for ByteSize"],["impl<'a> Display for Node<'a>"],["impl Display for BrickDomain"],["impl Display for AbstractIdentifier"],["impl Display for CastOpType"],["impl Display for Expression"],["impl Display for Jmp"],["impl Display for CharacterInclusionDomain"],["impl Display for IntervalDomain"],["impl Display for BinOpType"],["impl Display for BricksDomain"],["impl Display for AbstractLocation"],["impl Display for CweWarning"],["impl Display for Taint"],["impl Display for Def"],["impl Display for AbstractMemoryLocation"],["impl Display for Blk"],["impl Display for CharacterSet"],["impl Display for Variable"],["impl Display for AccessPattern"],["impl Display for UnOpType"],["impl Display for BitvectorDomain"],["impl Display for LogMessage"],["impl Display for CweModule"],["impl Display for Tid"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/fmt/trait.LowerHex.js b/doc/html/trait.impl/core/fmt/trait.LowerHex.js similarity index 87% rename from doc/html/implementors/core/fmt/trait.LowerHex.js rename to doc/html/trait.impl/core/fmt/trait.LowerHex.js index f1b7b9fb4..39e478b8c 100644 --- a/doc/html/implementors/core/fmt/trait.LowerHex.js +++ b/doc/html/trait.impl/core/fmt/trait.LowerHex.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl LowerHex for ByteSize"]] +"cwe_checker_lib":[["impl LowerHex for ByteSize"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/fmt/trait.Octal.js b/doc/html/trait.impl/core/fmt/trait.Octal.js similarity index 87% rename from doc/html/implementors/core/fmt/trait.Octal.js rename to doc/html/trait.impl/core/fmt/trait.Octal.js index 313838768..ad7b99bd7 100644 --- a/doc/html/implementors/core/fmt/trait.Octal.js +++ b/doc/html/trait.impl/core/fmt/trait.Octal.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl Octal for ByteSize"]] +"cwe_checker_lib":[["impl Octal for ByteSize"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/fmt/trait.UpperHex.js b/doc/html/trait.impl/core/fmt/trait.UpperHex.js similarity index 87% rename from doc/html/implementors/core/fmt/trait.UpperHex.js rename to doc/html/trait.impl/core/fmt/trait.UpperHex.js index 9e0cb61ce..4d00f51af 100644 --- a/doc/html/implementors/core/fmt/trait.UpperHex.js +++ b/doc/html/trait.impl/core/fmt/trait.UpperHex.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl UpperHex for ByteSize"]] +"cwe_checker_lib":[["impl UpperHex for ByteSize"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/hash/trait.Hash.js b/doc/html/trait.impl/core/hash/trait.Hash.js new file mode 100644 index 000000000..6d5df4706 --- /dev/null +++ b/doc/html/trait.impl/core/hash/trait.Hash.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Hash for CweTestCase"]], +"cwe_checker_lib":[["impl Hash for LogLevel"],["impl Hash for Config"],["impl Hash for BareMetalConfig"],["impl Hash for UnOpType"],["impl Hash for Expression"],["impl Hash for AbstractIdentifierData"],["impl Hash for AbstractLocation"],["impl Hash for WarningContext"],["impl Hash for Config"],["impl Hash for ArgIntent"],["impl Hash for RuntimeMemoryImage"],["impl Hash for RegisterProperties"],["impl Hash for Config"],["impl<'a> Hash for Edge<'a>"],["impl Hash for Variable"],["impl Hash for CweWarning"],["impl Hash for Taint"],["impl Hash for Config"],["impl<T: Hash + AbstractDomain + SizedDomain + HasTop + Debug> Hash for MemRegion<T>"],["impl<'a> Hash for Node<'a>"],["impl Hash for Config"],["impl Hash for Arg"],["impl Hash for Config"],["impl Hash for BitvectorDomain"],["impl Hash for Config"],["impl Hash for Call"],["impl Hash for LogThreadMsg"],["impl Hash for Config"],["impl<T: Hash + RegisterDomain> Hash for DataDomain<T>"],["impl Hash for Config"],["impl Hash for IntervalDomain"],["impl Hash for Blk"],["impl Hash for Blk"],["impl Hash for ObjectType"],["impl Hash for Variable"],["impl Hash for Config"],["impl Hash for AbstractMemoryLocation"],["impl Hash for BinOpType"],["impl Hash for Jmp"],["impl Hash for Label"],["impl Hash for CastOpType"],["impl Hash for CallingConvention"],["impl Hash for ExpressionType"],["impl Hash for ExternSymbol"],["impl Hash for ByteSize"],["impl Hash for Sub"],["impl Hash for CallingConvention"],["impl Hash for Interval"],["impl Hash for Def"],["impl Hash for MemorySegment"],["impl Hash for Expression"],["impl Hash for Datatype"],["impl Hash for Arg"],["impl Hash for Program"],["impl Hash for LogMessage"],["impl Hash for Def"],["impl Hash for AbstractIdentifier"],["impl Hash for Tid"],["impl Hash for ExternSymbol"],["impl Hash for DatatypeProperties"],["impl Hash for JmpType"],["impl Hash for Config"],["impl Hash for Sub"],["impl Hash for Config"],["impl<T: Hash> Hash for Term<T>"],["impl Hash for Project"],["impl Hash for Jmp"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.AddAssign.js b/doc/html/trait.impl/core/iter/traits/accum/trait.Sum.js similarity index 50% rename from doc/html/implementors/core/ops/arith/trait.AddAssign.js rename to doc/html/trait.impl/core/iter/traits/accum/trait.Sum.js index 7108af948..525f2978a 100644 --- a/doc/html/implementors/core/ops/arith/trait.AddAssign.js +++ b/doc/html/trait.impl/core/iter/traits/accum/trait.Sum.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl AddAssign<ByteSize> for ByteSize"]] +"cwe_checker_lib":[["impl Sum for ByteSize"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/iter/traits/collect/trait.FromIterator.js b/doc/html/trait.impl/core/iter/traits/collect/trait.FromIterator.js similarity index 78% rename from doc/html/implementors/core/iter/traits/collect/trait.FromIterator.js rename to doc/html/trait.impl/core/iter/traits/collect/trait.FromIterator.js index 3cedc872f..ef3096c5a 100644 --- a/doc/html/implementors/core/iter/traits/collect/trait.FromIterator.js +++ b/doc/html/trait.impl/core/iter/traits/collect/trait.FromIterator.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<K, V, S> FromIterator<(K, V)> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"]] +"cwe_checker_lib":[["impl<K, V, S> FromIterator<(K, V)> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.Copy.js b/doc/html/trait.impl/core/marker/trait.Copy.js new file mode 100644 index 000000000..388b458ab --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.Copy.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl Copy for JmpType"],["impl<'a> Copy for Node<'a>"],["impl Copy for Taint"],["impl Copy for CastOpType"],["impl Copy for AccessPattern"],["impl Copy for BinOpType"],["impl<'a> Copy for AnalysisResults<'a>"],["impl Copy for UnOpType"],["impl Copy for ExpressionType"],["impl<'a> Copy for Edge<'a>"],["impl Copy for ObjectType"],["impl Copy for ByteSize"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.Freeze.js b/doc/html/trait.impl/core/marker/trait.Freeze.js new file mode 100644 index 000000000..d29a438df --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.Freeze.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Freeze for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], +"cwe_checker":[["impl Freeze for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], +"cwe_checker_install":[["impl Freeze for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Freeze for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], +"cwe_checker_lib":[["impl Freeze for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Freeze for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::location::AbstractLocation"]],["impl Freeze for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::mem_location::AbstractMemoryLocation"]],["impl Freeze for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Freeze for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl<T> Freeze for DataDomain<T>where\n T: Freeze,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Freeze for MemRegion<T>",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Freeze for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Freeze for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Freeze for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Freeze for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Freeze for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Freeze for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Freeze for DomainMap<K, V, S>",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Freeze for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Freeze for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Freeze for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Freeze for GeneralizedContext<'a, T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Freeze for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Freeze for Computation<T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Freeze for GeneralizedContext<'a, T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Freeze for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Freeze for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Freeze for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Freeze for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Freeze for NodeValue<T>where\n T: Freeze,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Freeze for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Freeze for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Freeze for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Freeze for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Freeze for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Freeze for Context<'a, T>",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Freeze for State<T>",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Freeze for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Freeze for StringAbstraction<'a, T>",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Freeze for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_337::Config"]],["impl<'a> Freeze for Context<'a>",1,["cwe_checker_lib::checkers::cwe_337::Context"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Freeze for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Freeze for State",1,["cwe_checker_lib::checkers::cwe_476::state::State"]],["impl Freeze for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Freeze for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Freeze for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Freeze for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Freeze for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Freeze for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Freeze for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Freeze for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Freeze for Term<T>where\n T: Freeze,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Freeze for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Freeze for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Freeze for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Freeze for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Freeze for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Freeze for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Freeze for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Freeze for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Freeze for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Freeze for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Freeze for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Freeze for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Freeze for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Freeze for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Freeze for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Freeze for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Freeze for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Freeze for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Freeze for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Freeze for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Freeze for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Freeze for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Freeze for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Freeze for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Freeze for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Freeze for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Freeze for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Freeze for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Freeze for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Freeze for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Freeze for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Freeze for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Freeze for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Freeze for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Freeze for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Freeze for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Freeze for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Freeze for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Freeze for CweModule",1,["cwe_checker_lib::CweModule"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.Send.js b/doc/html/trait.impl/core/marker/trait.Send.js new file mode 100644 index 000000000..1debba38d --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.Send.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Send for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], +"cwe_checker":[["impl Send for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], +"cwe_checker_install":[["impl Send for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Send for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], +"cwe_checker_lib":[["impl Send for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Send for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::location::AbstractLocation"]],["impl Send for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::mem_location::AbstractMemoryLocation"]],["impl Send for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Send for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl<T> Send for DataDomain<T>where\n T: Send,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Send for MemRegion<T>where\n T: Send + Sync,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Send for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Send for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Send for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Send for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Send for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Send for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Send for DomainMap<K, V, S>where\n K: Send + Sync,\n S: Send,\n V: Send + Sync,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Send for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Send for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Send for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Send for GeneralizedContext<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Send for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Send for Computation<T>where\n T: Send,\n <T as Context>::NodeValue: Send,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Send for GeneralizedContext<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Send for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Send for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Send for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Send for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Send for NodeValue<T>where\n T: Send,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Send for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Send for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Send for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Send for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Send for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Send for Context<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Send for State<T>where\n T: Send,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Send for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Send for StringAbstraction<'a, T>where\n T: Send,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Send for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_337::Config"]],["impl<'a> Send for Context<'a>",1,["cwe_checker_lib::checkers::cwe_337::Context"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Send for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Send for State",1,["cwe_checker_lib::checkers::cwe_476::state::State"]],["impl Send for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Send for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Send for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Send for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Send for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Send for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Send for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Send for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Send for Term<T>where\n T: Send,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Send for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Send for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Send for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Send for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Send for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Send for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Send for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Send for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Send for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Send for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Send for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Send for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Send for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Send for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Send for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Send for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Send for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Send for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Send for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Send for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Send for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Send for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Send for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Send for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Send for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Send for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Send for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Send for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Send for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Send for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Send for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Send for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Send for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Send for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Send for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Send for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Send for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Send for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Send for CweModule",1,["cwe_checker_lib::CweModule"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.StructuralEq.js b/doc/html/trait.impl/core/marker/trait.StructuralEq.js new file mode 100644 index 000000000..d568d25cf --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.StructuralEq.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl StructuralEq for CweTestCase"]], +"cwe_checker_lib":[["impl StructuralEq for Expression"],["impl StructuralEq for CastOpType"],["impl StructuralEq for FunctionSignature"],["impl StructuralEq for BareMetalConfig"],["impl StructuralEq for Config"],["impl StructuralEq for UnionMergeStrategy"],["impl StructuralEq for Arg"],["impl StructuralEq for Variable"],["impl StructuralEq for Label"],["impl StructuralEq for Expression"],["impl StructuralEq for Sub"],["impl StructuralEq for StringLocation"],["impl StructuralEq for Program"],["impl<T: PartialEq + Eq + Clone> StructuralEq for NodeValue<T>"],["impl<T> StructuralEq for Term<T>"],["impl StructuralEq for ExternSymbol"],["impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralEq for State<T>"],["impl StructuralEq for Sub"],["impl StructuralEq for BitvectorDomain"],["impl StructuralEq for RegisterProperties"],["impl StructuralEq for CweWarning"],["impl StructuralEq for Project"],["impl StructuralEq for MergeTopStrategy"],["impl StructuralEq for DatatypeProperties"],["impl StructuralEq for Config"],["impl StructuralEq for CharacterInclusionDomain"],["impl StructuralEq for Jmp"],["impl StructuralEq for Project"],["impl StructuralEq for Config"],["impl StructuralEq for BricksDomain"],["impl StructuralEq for Def"],["impl StructuralEq for ByteSize"],["impl StructuralEq for Config"],["impl StructuralEq for CallingConvention"],["impl StructuralEq for Config"],["impl StructuralEq for Taint"],["impl StructuralEq for ObjectType"],["impl StructuralEq for Config"],["impl StructuralEq for Config"],["impl StructuralEq for State"],["impl StructuralEq for LogMessage"],["impl StructuralEq for CharacterSet"],["impl StructuralEq for State"],["impl StructuralEq for ArgIntent"],["impl StructuralEq for Config"],["impl StructuralEq for Config"],["impl StructuralEq for IntervalDomain"],["impl<'a> StructuralEq for Edge<'a>"],["impl StructuralEq for Config"],["impl StructuralEq for JmpType"],["impl StructuralEq for UnOpType"],["impl StructuralEq for RuntimeMemoryImage"],["impl StructuralEq for LogLevel"],["impl StructuralEq for AbstractIdentifier"],["impl StructuralEq for Config"],["impl StructuralEq for Config"],["impl StructuralEq for Call"],["impl StructuralEq for AbstractObject"],["impl StructuralEq for Blk"],["impl StructuralEq for Program"],["impl StructuralEq for WarningContext"],["impl StructuralEq for AccessPattern"],["impl StructuralEq for MemorySegment"],["impl<K, V, S> StructuralEq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl StructuralEq for Config"],["impl StructuralEq for Config"],["impl StructuralEq for BrickDomain"],["impl<'a> StructuralEq for Node<'a>"],["impl StructuralEq for LogThreadMsg"],["impl StructuralEq for IntersectMergeStrategy"],["impl StructuralEq for Variable"],["impl StructuralEq for Datatype"],["impl StructuralEq for Blk"],["impl StructuralEq for AbstractMemoryLocation"],["impl StructuralEq for Interval"],["impl StructuralEq for ExternSymbol"],["impl StructuralEq for Jmp"],["impl StructuralEq for BinOpType"],["impl StructuralEq for Tid"],["impl StructuralEq for CallingConvention"],["impl StructuralEq for AbstractIdentifierData"],["impl StructuralEq for ExpressionType"],["impl StructuralEq for AbstractLocation"],["impl<T: RegisterDomain> StructuralEq for DataDomain<T>"],["impl StructuralEq for Def"],["impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralEq for MemRegion<T>"],["impl StructuralEq for Arg"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.StructuralPartialEq.js b/doc/html/trait.impl/core/marker/trait.StructuralPartialEq.js new file mode 100644 index 000000000..4dbc13cae --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl StructuralPartialEq for CweTestCase"]], +"cwe_checker_lib":[["impl StructuralPartialEq for Jmp"],["impl StructuralPartialEq for Taint"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Def"],["impl<T: PartialEq + Eq + Clone> StructuralPartialEq for NodeValue<T>"],["impl StructuralPartialEq for RuntimeMemoryImage"],["impl StructuralPartialEq for ExternSymbol"],["impl StructuralPartialEq for AbstractObject"],["impl StructuralPartialEq for Config"],["impl<'a> StructuralPartialEq for Edge<'a>"],["impl StructuralPartialEq for IntersectMergeStrategy"],["impl StructuralPartialEq for ExpressionType"],["impl StructuralPartialEq for Sub"],["impl StructuralPartialEq for AbstractLocation"],["impl StructuralPartialEq for IntervalDomain"],["impl StructuralPartialEq for Interval"],["impl StructuralPartialEq for BareMetalConfig"],["impl StructuralPartialEq for Blk"],["impl<'a> StructuralPartialEq for Node<'a>"],["impl StructuralPartialEq for LogMessage"],["impl StructuralPartialEq for StringLocation"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for AccessPattern"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Expression"],["impl StructuralPartialEq for Def"],["impl StructuralPartialEq for UnOpType"],["impl StructuralPartialEq for Arg"],["impl StructuralPartialEq for FunctionSignature"],["impl StructuralPartialEq for Program"],["impl StructuralPartialEq for ObjectType"],["impl StructuralPartialEq for Variable"],["impl StructuralPartialEq for Arg"],["impl StructuralPartialEq for UnionMergeStrategy"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Project"],["impl StructuralPartialEq for BrickDomain"],["impl StructuralPartialEq for AbstractIdentifierData"],["impl StructuralPartialEq for CharacterSet"],["impl StructuralPartialEq for CallingConvention"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for CharacterInclusionDomain"],["impl StructuralPartialEq for AbstractMemoryLocation"],["impl<T> StructuralPartialEq for Term<T>"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for MemorySegment"],["impl StructuralPartialEq for State"],["impl<T: AbstractDomain + SizedDomain + HasTop + Debug> StructuralPartialEq for MemRegion<T>"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for CallingConvention"],["impl<T: AbstractDomain + DomainInsertion + HasTop + Eq + From<String>> StructuralPartialEq for State<T>"],["impl StructuralPartialEq for JmpType"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for ExternSymbol"],["impl StructuralPartialEq for LogThreadMsg"],["impl StructuralPartialEq for RegisterProperties"],["impl StructuralPartialEq for CweWarning"],["impl StructuralPartialEq for Datatype"],["impl StructuralPartialEq for Call"],["impl StructuralPartialEq for Sub"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for BricksDomain"],["impl StructuralPartialEq for ByteSize"],["impl StructuralPartialEq for Jmp"],["impl StructuralPartialEq for LogLevel"],["impl StructuralPartialEq for WarningContext"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for BinOpType"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Tid"],["impl<K, V, S> StructuralPartialEq for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl StructuralPartialEq for BitvectorDomain"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for Variable"],["impl StructuralPartialEq for Expression"],["impl StructuralPartialEq for Label"],["impl StructuralPartialEq for DatatypeProperties"],["impl StructuralPartialEq for CastOpType"],["impl StructuralPartialEq for Program"],["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for ArgIntent"],["impl StructuralPartialEq for MergeTopStrategy"],["impl StructuralPartialEq for Blk"],["impl StructuralPartialEq for AbstractIdentifier"],["impl<T: RegisterDomain> StructuralPartialEq for DataDomain<T>"],["impl StructuralPartialEq for Project"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.Sync.js b/doc/html/trait.impl/core/marker/trait.Sync.js new file mode 100644 index 000000000..5331dc676 --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.Sync.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Sync for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], +"cwe_checker":[["impl Sync for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], +"cwe_checker_install":[["impl Sync for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Sync for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], +"cwe_checker_lib":[["impl Sync for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Sync for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::location::AbstractLocation"]],["impl Sync for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::mem_location::AbstractMemoryLocation"]],["impl Sync for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Sync for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl<T> Sync for DataDomain<T>where\n T: Sync,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Sync for MemRegion<T>where\n T: Send + Sync,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Sync for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Sync for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Sync for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Sync for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Sync for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Sync for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Sync for DomainMap<K, V, S>where\n K: Send + Sync,\n S: Sync,\n V: Send + Sync,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Sync for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Sync for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Sync for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Sync for GeneralizedContext<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Sync for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Sync for Computation<T>where\n T: Sync,\n <T as Context>::NodeValue: Sync,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Sync for GeneralizedContext<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Sync for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Sync for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Sync for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Sync for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Sync for NodeValue<T>where\n T: Sync,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Sync for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Sync for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Sync for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Sync for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Sync for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Sync for Context<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Sync for State<T>where\n T: Sync,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Sync for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Sync for StringAbstraction<'a, T>where\n T: Sync,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Sync for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_337::Config"]],["impl<'a> Sync for Context<'a>",1,["cwe_checker_lib::checkers::cwe_337::Context"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Sync for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Sync for State",1,["cwe_checker_lib::checkers::cwe_476::state::State"]],["impl Sync for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Sync for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Sync for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Sync for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Sync for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Sync for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Sync for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Sync for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Sync for Term<T>where\n T: Sync,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Sync for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Sync for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Sync for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Sync for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Sync for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Sync for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Sync for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Sync for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Sync for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Sync for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Sync for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Sync for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Sync for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Sync for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Sync for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Sync for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Sync for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Sync for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Sync for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Sync for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Sync for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Sync for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Sync for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Sync for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Sync for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Sync for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Sync for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Sync for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Sync for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Sync for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Sync for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Sync for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Sync for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Sync for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Sync for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Sync for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Sync for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Sync for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Sync for CweModule",1,["cwe_checker_lib::CweModule"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/marker/trait.Unpin.js b/doc/html/trait.impl/core/marker/trait.Unpin.js new file mode 100644 index 000000000..f57814b96 --- /dev/null +++ b/doc/html/trait.impl/core/marker/trait.Unpin.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl Unpin for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], +"cwe_checker":[["impl Unpin for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], +"cwe_checker_install":[["impl Unpin for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl Unpin for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], +"cwe_checker_lib":[["impl Unpin for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl Unpin for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::location::AbstractLocation"]],["impl Unpin for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::mem_location::AbstractMemoryLocation"]],["impl Unpin for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl Unpin for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl<T> Unpin for DataDomain<T>where\n T: Unpin,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> Unpin for MemRegion<T>",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl Unpin for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl Unpin for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl Unpin for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl Unpin for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl Unpin for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl Unpin for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> Unpin for DomainMap<K, V, S>where\n S: Unpin,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl Unpin for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl Unpin for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl Unpin for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> Unpin for GeneralizedContext<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> Unpin for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> Unpin for Computation<T>where\n T: Unpin,\n <T as Context>::NodeValue: Unpin,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> Unpin for GeneralizedContext<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl Unpin for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl Unpin for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> Unpin for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> Unpin for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> Unpin for NodeValue<T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl Unpin for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl Unpin for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl Unpin for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl Unpin for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> Unpin for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> Unpin for Context<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> Unpin for State<T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl Unpin for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> Unpin for StringAbstraction<'a, T>where\n T: Unpin,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl Unpin for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_337::Config"]],["impl<'a> Unpin for Context<'a>",1,["cwe_checker_lib::checkers::cwe_337::Context"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl Unpin for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl Unpin for State",1,["cwe_checker_lib::checkers::cwe_476::state::State"]],["impl Unpin for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl Unpin for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl Unpin for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl Unpin for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl Unpin for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl Unpin for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl Unpin for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl Unpin for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> Unpin for Term<T>where\n T: Unpin,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl Unpin for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl Unpin for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl Unpin for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl Unpin for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl Unpin for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl Unpin for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl Unpin for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl Unpin for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl Unpin for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl Unpin for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl Unpin for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl Unpin for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl Unpin for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl Unpin for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl Unpin for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl Unpin for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl Unpin for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl Unpin for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl Unpin for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl Unpin for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl Unpin for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl Unpin for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl Unpin for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl Unpin for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl Unpin for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl Unpin for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl Unpin for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl Unpin for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl Unpin for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl Unpin for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> Unpin for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl Unpin for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl Unpin for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl Unpin for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl Unpin for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl Unpin for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl Unpin for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl Unpin for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl Unpin for CweModule",1,["cwe_checker_lib::CweModule"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/ops/arith/trait.Add.js b/doc/html/trait.impl/core/ops/arith/trait.Add.js new file mode 100644 index 000000000..2d377c910 --- /dev/null +++ b/doc/html/trait.impl/core/ops/arith/trait.Add.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl Add for IntervalDomain"],["impl<T: RegisterDomain> Add for DataDomain<T>"],["impl Add for ByteSize"],["impl Add for BitvectorDomain"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/ops/arith/trait.AddAssign.js b/doc/html/trait.impl/core/ops/arith/trait.AddAssign.js new file mode 100644 index 000000000..0368f697c --- /dev/null +++ b/doc/html/trait.impl/core/ops/arith/trait.AddAssign.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl AddAssign for ByteSize"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.Div.js b/doc/html/trait.impl/core/ops/arith/trait.Div.js similarity index 73% rename from doc/html/implementors/core/ops/arith/trait.Div.js rename to doc/html/trait.impl/core/ops/arith/trait.Div.js index 6bbd69950..bb78d0eea 100644 --- a/doc/html/implementors/core/ops/arith/trait.Div.js +++ b/doc/html/trait.impl/core/ops/arith/trait.Div.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> Div<__RhsT> for ByteSizewhere\n u64: Div<__RhsT, Output = u64>,"]] +"cwe_checker_lib":[["impl<__RhsT> Div<__RhsT> for ByteSizewhere\n u64: Div<__RhsT, Output = u64>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.DivAssign.js b/doc/html/trait.impl/core/ops/arith/trait.DivAssign.js similarity index 78% rename from doc/html/implementors/core/ops/arith/trait.DivAssign.js rename to doc/html/trait.impl/core/ops/arith/trait.DivAssign.js index 3bbf84ca8..47889ce10 100644 --- a/doc/html/implementors/core/ops/arith/trait.DivAssign.js +++ b/doc/html/trait.impl/core/ops/arith/trait.DivAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> DivAssign<__RhsT> for ByteSizewhere\n u64: DivAssign<__RhsT>,"]] +"cwe_checker_lib":[["impl<__RhsT> DivAssign<__RhsT> for ByteSizewhere\n u64: DivAssign<__RhsT>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.Mul.js b/doc/html/trait.impl/core/ops/arith/trait.Mul.js similarity index 73% rename from doc/html/implementors/core/ops/arith/trait.Mul.js rename to doc/html/trait.impl/core/ops/arith/trait.Mul.js index fa0b147f7..674551979 100644 --- a/doc/html/implementors/core/ops/arith/trait.Mul.js +++ b/doc/html/trait.impl/core/ops/arith/trait.Mul.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> Mul<__RhsT> for ByteSizewhere\n u64: Mul<__RhsT, Output = u64>,"]] +"cwe_checker_lib":[["impl<__RhsT> Mul<__RhsT> for ByteSizewhere\n u64: Mul<__RhsT, Output = u64>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.MulAssign.js b/doc/html/trait.impl/core/ops/arith/trait.MulAssign.js similarity index 78% rename from doc/html/implementors/core/ops/arith/trait.MulAssign.js rename to doc/html/trait.impl/core/ops/arith/trait.MulAssign.js index c2233794c..402dfcc6e 100644 --- a/doc/html/implementors/core/ops/arith/trait.MulAssign.js +++ b/doc/html/trait.impl/core/ops/arith/trait.MulAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> MulAssign<__RhsT> for ByteSizewhere\n u64: MulAssign<__RhsT>,"]] +"cwe_checker_lib":[["impl<__RhsT> MulAssign<__RhsT> for ByteSizewhere\n u64: MulAssign<__RhsT>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.Neg.js b/doc/html/trait.impl/core/ops/arith/trait.Neg.js similarity index 51% rename from doc/html/implementors/core/ops/arith/trait.Neg.js rename to doc/html/trait.impl/core/ops/arith/trait.Neg.js index 48964384f..4145d40ba 100644 --- a/doc/html/implementors/core/ops/arith/trait.Neg.js +++ b/doc/html/trait.impl/core/ops/arith/trait.Neg.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl Neg for BitvectorDomain"],["impl Neg for IntervalDomain"]] +"cwe_checker_lib":[["impl Neg for IntervalDomain"],["impl Neg for BitvectorDomain"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.Rem.js b/doc/html/trait.impl/core/ops/arith/trait.Rem.js similarity index 73% rename from doc/html/implementors/core/ops/arith/trait.Rem.js rename to doc/html/trait.impl/core/ops/arith/trait.Rem.js index e28a804d3..e60750b04 100644 --- a/doc/html/implementors/core/ops/arith/trait.Rem.js +++ b/doc/html/trait.impl/core/ops/arith/trait.Rem.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> Rem<__RhsT> for ByteSizewhere\n u64: Rem<__RhsT, Output = u64>,"]] +"cwe_checker_lib":[["impl<__RhsT> Rem<__RhsT> for ByteSizewhere\n u64: Rem<__RhsT, Output = u64>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/arith/trait.RemAssign.js b/doc/html/trait.impl/core/ops/arith/trait.RemAssign.js similarity index 78% rename from doc/html/implementors/core/ops/arith/trait.RemAssign.js rename to doc/html/trait.impl/core/ops/arith/trait.RemAssign.js index 57986db89..3c75e1b99 100644 --- a/doc/html/implementors/core/ops/arith/trait.RemAssign.js +++ b/doc/html/trait.impl/core/ops/arith/trait.RemAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> RemAssign<__RhsT> for ByteSizewhere\n u64: RemAssign<__RhsT>,"]] +"cwe_checker_lib":[["impl<__RhsT> RemAssign<__RhsT> for ByteSizewhere\n u64: RemAssign<__RhsT>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/ops/arith/trait.Sub.js b/doc/html/trait.impl/core/ops/arith/trait.Sub.js new file mode 100644 index 000000000..4e30e05ff --- /dev/null +++ b/doc/html/trait.impl/core/ops/arith/trait.Sub.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl Sub for ByteSize"],["impl Sub for IntervalDomain"],["impl<T: RegisterDomain> Sub for DataDomain<T>"],["impl Sub for BitvectorDomain"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/ops/arith/trait.SubAssign.js b/doc/html/trait.impl/core/ops/arith/trait.SubAssign.js new file mode 100644 index 000000000..fbc6ad2be --- /dev/null +++ b/doc/html/trait.impl/core/ops/arith/trait.SubAssign.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl SubAssign for ByteSize"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/bit/trait.Not.js b/doc/html/trait.impl/core/ops/bit/trait.Not.js similarity index 87% rename from doc/html/implementors/core/ops/bit/trait.Not.js rename to doc/html/trait.impl/core/ops/bit/trait.Not.js index 8b7ca5b44..036862a2b 100644 --- a/doc/html/implementors/core/ops/bit/trait.Not.js +++ b/doc/html/trait.impl/core/ops/bit/trait.Not.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl Not for ByteSize"]] +"cwe_checker_lib":[["impl Not for ByteSize"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/bit/trait.Shl.js b/doc/html/trait.impl/core/ops/bit/trait.Shl.js similarity index 72% rename from doc/html/implementors/core/ops/bit/trait.Shl.js rename to doc/html/trait.impl/core/ops/bit/trait.Shl.js index 7acffd496..2bd4b8e3e 100644 --- a/doc/html/implementors/core/ops/bit/trait.Shl.js +++ b/doc/html/trait.impl/core/ops/bit/trait.Shl.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> Shl<__RhsT> for ByteSizewhere\n u64: Shl<__RhsT, Output = u64>,"]] +"cwe_checker_lib":[["impl<__RhsT> Shl<__RhsT> for ByteSizewhere\n u64: Shl<__RhsT, Output = u64>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/bit/trait.ShlAssign.js b/doc/html/trait.impl/core/ops/bit/trait.ShlAssign.js similarity index 78% rename from doc/html/implementors/core/ops/bit/trait.ShlAssign.js rename to doc/html/trait.impl/core/ops/bit/trait.ShlAssign.js index 58de655bc..7797db0e8 100644 --- a/doc/html/implementors/core/ops/bit/trait.ShlAssign.js +++ b/doc/html/trait.impl/core/ops/bit/trait.ShlAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> ShlAssign<__RhsT> for ByteSizewhere\n u64: ShlAssign<__RhsT>,"]] +"cwe_checker_lib":[["impl<__RhsT> ShlAssign<__RhsT> for ByteSizewhere\n u64: ShlAssign<__RhsT>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/bit/trait.Shr.js b/doc/html/trait.impl/core/ops/bit/trait.Shr.js similarity index 72% rename from doc/html/implementors/core/ops/bit/trait.Shr.js rename to doc/html/trait.impl/core/ops/bit/trait.Shr.js index 875ee30ba..13712fa47 100644 --- a/doc/html/implementors/core/ops/bit/trait.Shr.js +++ b/doc/html/trait.impl/core/ops/bit/trait.Shr.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> Shr<__RhsT> for ByteSizewhere\n u64: Shr<__RhsT, Output = u64>,"]] +"cwe_checker_lib":[["impl<__RhsT> Shr<__RhsT> for ByteSizewhere\n u64: Shr<__RhsT, Output = u64>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/bit/trait.ShrAssign.js b/doc/html/trait.impl/core/ops/bit/trait.ShrAssign.js similarity index 78% rename from doc/html/implementors/core/ops/bit/trait.ShrAssign.js rename to doc/html/trait.impl/core/ops/bit/trait.ShrAssign.js index bef832f08..e862d7306 100644 --- a/doc/html/implementors/core/ops/bit/trait.ShrAssign.js +++ b/doc/html/trait.impl/core/ops/bit/trait.ShrAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<__RhsT> ShrAssign<__RhsT> for ByteSizewhere\n u64: ShrAssign<__RhsT>,"]] +"cwe_checker_lib":[["impl<__RhsT> ShrAssign<__RhsT> for ByteSizewhere\n u64: ShrAssign<__RhsT>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/ops/deref/trait.Deref.js b/doc/html/trait.impl/core/ops/deref/trait.Deref.js new file mode 100644 index 000000000..1cc7e8565 --- /dev/null +++ b/doc/html/trait.impl/core/ops/deref/trait.Deref.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"cwe_checker_lib":[["impl<K, V, S> Deref for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"],["impl Deref for AbstractIdentifierwhere\n Arc<AbstractIdentifierData>: Deref,"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/deref/trait.DerefMut.js b/doc/html/trait.impl/core/ops/deref/trait.DerefMut.js similarity index 81% rename from doc/html/implementors/core/ops/deref/trait.DerefMut.js rename to doc/html/trait.impl/core/ops/deref/trait.DerefMut.js index 023acb240..b1084b7a3 100644 --- a/doc/html/implementors/core/ops/deref/trait.DerefMut.js +++ b/doc/html/trait.impl/core/ops/deref/trait.DerefMut.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl<K, V, S> DerefMut for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"]] +"cwe_checker_lib":[["impl<K, V, S> DerefMut for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone,\n V: AbstractDomain,\n S: MapMergeStrategy<K, V>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/core/ops/drop/trait.Drop.js b/doc/html/trait.impl/core/ops/drop/trait.Drop.js similarity index 86% rename from doc/html/implementors/core/ops/drop/trait.Drop.js rename to doc/html/trait.impl/core/ops/drop/trait.Drop.js index bf0f26d7a..746e52575 100644 --- a/doc/html/implementors/core/ops/drop/trait.Drop.js +++ b/doc/html/trait.impl/core/ops/drop/trait.Drop.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"cwe_checker_lib":[["impl Drop for LogThread"]] +"cwe_checker_lib":[["impl Drop for LogThread"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/html/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js new file mode 100644 index 000000000..90cf14125 --- /dev/null +++ b/doc/html/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl RefUnwindSafe for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], +"cwe_checker":[["impl RefUnwindSafe for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], +"cwe_checker_install":[["impl RefUnwindSafe for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl RefUnwindSafe for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], +"cwe_checker_lib":[["impl RefUnwindSafe for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl RefUnwindSafe for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::location::AbstractLocation"]],["impl RefUnwindSafe for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::mem_location::AbstractMemoryLocation"]],["impl RefUnwindSafe for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl RefUnwindSafe for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl<T> RefUnwindSafe for DataDomain<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> RefUnwindSafe for MemRegion<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl RefUnwindSafe for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl RefUnwindSafe for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl RefUnwindSafe for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl RefUnwindSafe for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl RefUnwindSafe for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl RefUnwindSafe for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> RefUnwindSafe for DomainMap<K, V, S>where\n K: RefUnwindSafe,\n S: RefUnwindSafe,\n V: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl RefUnwindSafe for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl RefUnwindSafe for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl RefUnwindSafe for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> RefUnwindSafe for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> RefUnwindSafe for Computation<T>where\n T: RefUnwindSafe,\n <T as Context>::NodeValue: RefUnwindSafe,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> RefUnwindSafe for GeneralizedContext<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl RefUnwindSafe for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl RefUnwindSafe for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> RefUnwindSafe for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> RefUnwindSafe for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> RefUnwindSafe for NodeValue<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl RefUnwindSafe for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl RefUnwindSafe for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl RefUnwindSafe for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> RefUnwindSafe for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> RefUnwindSafe for Context<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> RefUnwindSafe for State<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> RefUnwindSafe for StringAbstraction<'a, T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl RefUnwindSafe for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_337::Config"]],["impl<'a> RefUnwindSafe for Context<'a>",1,["cwe_checker_lib::checkers::cwe_337::Context"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl RefUnwindSafe for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl RefUnwindSafe for State",1,["cwe_checker_lib::checkers::cwe_476::state::State"]],["impl RefUnwindSafe for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl RefUnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl RefUnwindSafe for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl RefUnwindSafe for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl RefUnwindSafe for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl RefUnwindSafe for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl RefUnwindSafe for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl RefUnwindSafe for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> RefUnwindSafe for Term<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl RefUnwindSafe for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl RefUnwindSafe for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl RefUnwindSafe for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl RefUnwindSafe for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl RefUnwindSafe for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl RefUnwindSafe for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl RefUnwindSafe for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl RefUnwindSafe for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl RefUnwindSafe for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl RefUnwindSafe for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl RefUnwindSafe for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl RefUnwindSafe for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl RefUnwindSafe for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl RefUnwindSafe for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl RefUnwindSafe for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl RefUnwindSafe for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl RefUnwindSafe for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl RefUnwindSafe for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl RefUnwindSafe for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl RefUnwindSafe for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl RefUnwindSafe for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl RefUnwindSafe for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl RefUnwindSafe for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl RefUnwindSafe for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl RefUnwindSafe for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl RefUnwindSafe for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl RefUnwindSafe for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl RefUnwindSafe for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl RefUnwindSafe for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl RefUnwindSafe for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> RefUnwindSafe for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl RefUnwindSafe for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl RefUnwindSafe for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl RefUnwindSafe for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl RefUnwindSafe for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl RefUnwindSafe for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl RefUnwindSafe for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl !RefUnwindSafe for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl RefUnwindSafe for CweModule",1,["cwe_checker_lib::CweModule"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/doc/html/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js new file mode 100644 index 000000000..f7f109815 --- /dev/null +++ b/doc/html/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -0,0 +1,6 @@ +(function() {var implementors = { +"acceptance_tests_ghidra":[["impl UnwindSafe for CweTestCase",1,["acceptance_tests_ghidra::CweTestCase"]]], +"cwe_checker":[["impl UnwindSafe for CmdlineArgs",1,["cwe_checker::CmdlineArgs"]]], +"cwe_checker_install":[["impl UnwindSafe for CmdlineArgs",1,["cwe_checker_install::CmdlineArgs"]],["impl UnwindSafe for GhidraConfig",1,["cwe_checker_install::GhidraConfig"]]], +"cwe_checker_lib":[["impl UnwindSafe for BitvectorDomain",1,["cwe_checker_lib::abstract_domain::bitvector::BitvectorDomain"]],["impl UnwindSafe for AbstractLocation",1,["cwe_checker_lib::abstract_domain::identifier::location::AbstractLocation"]],["impl UnwindSafe for AbstractMemoryLocation",1,["cwe_checker_lib::abstract_domain::identifier::mem_location::AbstractMemoryLocation"]],["impl UnwindSafe for AbstractIdentifier",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifier"]],["impl UnwindSafe for AbstractIdentifierData",1,["cwe_checker_lib::abstract_domain::identifier::AbstractIdentifierData"]],["impl<T> UnwindSafe for DataDomain<T>where\n T: UnwindSafe + RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::data::DataDomain"]],["impl<T> UnwindSafe for MemRegion<T>where\n T: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::mem_region::MemRegion"]],["impl UnwindSafe for Interval",1,["cwe_checker_lib::abstract_domain::interval::simple_interval::Interval"]],["impl UnwindSafe for IntervalDomain",1,["cwe_checker_lib::abstract_domain::interval::IntervalDomain"]],["impl UnwindSafe for BricksDomain",1,["cwe_checker_lib::abstract_domain::bricks::BricksDomain"]],["impl UnwindSafe for BrickDomain",1,["cwe_checker_lib::abstract_domain::bricks::BrickDomain"]],["impl UnwindSafe for CharacterInclusionDomain",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterInclusionDomain"]],["impl UnwindSafe for CharacterSet",1,["cwe_checker_lib::abstract_domain::character_inclusion::CharacterSet"]],["impl<K, V, S> UnwindSafe for DomainMap<K, V, S>where\n K: RefUnwindSafe,\n S: UnwindSafe,\n V: RefUnwindSafe,",1,["cwe_checker_lib::abstract_domain::domain_map::DomainMap"]],["impl UnwindSafe for UnionMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::UnionMergeStrategy"]],["impl UnwindSafe for IntersectMergeStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::IntersectMergeStrategy"]],["impl UnwindSafe for MergeTopStrategy",1,["cwe_checker_lib::abstract_domain::domain_map::MergeTopStrategy"]],["impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::backward_interprocedural_fixpoint::GeneralizedContext"]],["impl<'a> UnwindSafe for Context<'a>",1,["cwe_checker_lib::analysis::expression_propagation::Context"]],["impl<T> UnwindSafe for Computation<T>where\n T: UnwindSafe,\n <T as Context>::NodeValue: UnwindSafe,",1,["cwe_checker_lib::analysis::fixpoint::Computation"]],["impl<'a, T> UnwindSafe for GeneralizedContext<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::forward_interprocedural_fixpoint::GeneralizedContext"]],["impl UnwindSafe for AccessPattern",1,["cwe_checker_lib::analysis::function_signature::access_pattern::AccessPattern"]],["impl UnwindSafe for FunctionSignature",1,["cwe_checker_lib::analysis::function_signature::FunctionSignature"]],["impl<'a> UnwindSafe for Node<'a>",1,["cwe_checker_lib::analysis::graph::Node"]],["impl<'a> UnwindSafe for Edge<'a>",1,["cwe_checker_lib::analysis::graph::Edge"]],["impl<T> UnwindSafe for NodeValue<T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::interprocedural_fixpoint_generic::NodeValue"]],["impl UnwindSafe for AbstractObject",1,["cwe_checker_lib::analysis::pointer_inference::object::AbstractObject"]],["impl UnwindSafe for ObjectType",1,["cwe_checker_lib::analysis::pointer_inference::object::ObjectType"]],["impl UnwindSafe for State",1,["cwe_checker_lib::analysis::pointer_inference::state::State"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::analysis::pointer_inference::Config"]],["impl<'a> UnwindSafe for PointerInference<'a>",1,["cwe_checker_lib::analysis::pointer_inference::PointerInference"]],["impl<'a, T> UnwindSafe for Context<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::context::Context"]],["impl<T> UnwindSafe for State<T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::state::State"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::analysis::string_abstraction::Config"]],["impl<'a, T> UnwindSafe for StringAbstraction<'a, T>where\n T: UnwindSafe,",1,["cwe_checker_lib::analysis::string_abstraction::StringAbstraction"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_134::Config"]],["impl UnwindSafe for StringLocation",1,["cwe_checker_lib::checkers::cwe_134::StringLocation"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_190::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_243::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_332::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_337::Config"]],["impl<'a> UnwindSafe for Context<'a>",1,["cwe_checker_lib::checkers::cwe_337::Context"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_416::Config"]],["impl UnwindSafe for WarningContext",1,["cwe_checker_lib::checkers::cwe_416::WarningContext"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_426::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_467::Config"]],["impl UnwindSafe for State",1,["cwe_checker_lib::checkers::cwe_476::state::State"]],["impl UnwindSafe for Taint",1,["cwe_checker_lib::checkers::cwe_476::taint::Taint"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_476::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_676::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_78::Config"]],["impl UnwindSafe for Config",1,["cwe_checker_lib::checkers::cwe_789::Config"]],["impl UnwindSafe for Variable",1,["cwe_checker_lib::intermediate_representation::variable::Variable"]],["impl UnwindSafe for Expression",1,["cwe_checker_lib::intermediate_representation::expression::Expression"]],["impl UnwindSafe for BinOpType",1,["cwe_checker_lib::intermediate_representation::expression::BinOpType"]],["impl UnwindSafe for CastOpType",1,["cwe_checker_lib::intermediate_representation::expression::CastOpType"]],["impl UnwindSafe for UnOpType",1,["cwe_checker_lib::intermediate_representation::expression::UnOpType"]],["impl UnwindSafe for Tid",1,["cwe_checker_lib::intermediate_representation::term::Tid"]],["impl<T> UnwindSafe for Term<T>where\n T: UnwindSafe,",1,["cwe_checker_lib::intermediate_representation::term::Term"]],["impl UnwindSafe for Def",1,["cwe_checker_lib::intermediate_representation::def::Def"]],["impl UnwindSafe for Jmp",1,["cwe_checker_lib::intermediate_representation::jmp::Jmp"]],["impl UnwindSafe for Blk",1,["cwe_checker_lib::intermediate_representation::blk::Blk"]],["impl UnwindSafe for Sub",1,["cwe_checker_lib::intermediate_representation::sub::Sub"]],["impl UnwindSafe for Arg",1,["cwe_checker_lib::intermediate_representation::sub::Arg"]],["impl UnwindSafe for ExternSymbol",1,["cwe_checker_lib::intermediate_representation::sub::ExternSymbol"]],["impl UnwindSafe for CallingConvention",1,["cwe_checker_lib::intermediate_representation::sub::CallingConvention"]],["impl UnwindSafe for Program",1,["cwe_checker_lib::intermediate_representation::program::Program"]],["impl UnwindSafe for Project",1,["cwe_checker_lib::intermediate_representation::project::Project"]],["impl UnwindSafe for RuntimeMemoryImage",1,["cwe_checker_lib::intermediate_representation::runtime_memory_image::RuntimeMemoryImage"]],["impl UnwindSafe for ByteSize",1,["cwe_checker_lib::intermediate_representation::ByteSize"]],["impl UnwindSafe for DatatypeProperties",1,["cwe_checker_lib::intermediate_representation::DatatypeProperties"]],["impl UnwindSafe for Datatype",1,["cwe_checker_lib::intermediate_representation::Datatype"]],["impl UnwindSafe for Variable",1,["cwe_checker_lib::pcode::expressions::Variable"]],["impl UnwindSafe for Expression",1,["cwe_checker_lib::pcode::expressions::Expression"]],["impl UnwindSafe for ExpressionType",1,["cwe_checker_lib::pcode::expressions::ExpressionType"]],["impl UnwindSafe for RegisterProperties",1,["cwe_checker_lib::pcode::expressions::RegisterProperties"]],["impl UnwindSafe for Call",1,["cwe_checker_lib::pcode::term::Call"]],["impl UnwindSafe for Jmp",1,["cwe_checker_lib::pcode::term::Jmp"]],["impl UnwindSafe for JmpType",1,["cwe_checker_lib::pcode::term::JmpType"]],["impl UnwindSafe for Label",1,["cwe_checker_lib::pcode::term::Label"]],["impl UnwindSafe for Def",1,["cwe_checker_lib::pcode::term::Def"]],["impl UnwindSafe for Blk",1,["cwe_checker_lib::pcode::term::Blk"]],["impl UnwindSafe for Arg",1,["cwe_checker_lib::pcode::term::Arg"]],["impl UnwindSafe for ArgIntent",1,["cwe_checker_lib::pcode::term::ArgIntent"]],["impl UnwindSafe for Sub",1,["cwe_checker_lib::pcode::term::Sub"]],["impl UnwindSafe for ExternSymbol",1,["cwe_checker_lib::pcode::term::ExternSymbol"]],["impl UnwindSafe for Program",1,["cwe_checker_lib::pcode::term::Program"]],["impl UnwindSafe for CallingConvention",1,["cwe_checker_lib::pcode::term::CallingConvention"]],["impl UnwindSafe for Project",1,["cwe_checker_lib::pcode::term::Project"]],["impl<'a> UnwindSafe for AnalysisResults<'a>",1,["cwe_checker_lib::pipeline::results::AnalysisResults"]],["impl UnwindSafe for BareMetalConfig",1,["cwe_checker_lib::utils::binary::BareMetalConfig"]],["impl UnwindSafe for MemorySegment",1,["cwe_checker_lib::utils::binary::MemorySegment"]],["impl UnwindSafe for CweWarning",1,["cwe_checker_lib::utils::log::CweWarning"]],["impl UnwindSafe for LogMessage",1,["cwe_checker_lib::utils::log::LogMessage"]],["impl UnwindSafe for LogLevel",1,["cwe_checker_lib::utils::log::LogLevel"]],["impl UnwindSafe for LogThreadMsg",1,["cwe_checker_lib::utils::log::LogThreadMsg"]],["impl !UnwindSafe for LogThread",1,["cwe_checker_lib::utils::log::LogThread"]],["impl UnwindSafe for CweModule",1,["cwe_checker_lib::CweModule"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/domain_map/trait.MapMergeStrategy.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/domain_map/trait.MapMergeStrategy.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/domain_map/trait.MapMergeStrategy.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/domain_map/trait.MapMergeStrategy.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/strings/trait.DomainInsertion.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/strings/trait.DomainInsertion.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/strings/trait.DomainInsertion.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/strings/trait.DomainInsertion.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.AbstractDomain.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.AbstractDomain.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.AbstractDomain.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.AbstractDomain.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.HasTop.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.HasTop.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.HasTop.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.HasTop.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.RegisterDomain.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.RegisterDomain.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.RegisterDomain.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.RegisterDomain.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.SizedDomain.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.SizedDomain.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.SizedDomain.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.SizedDomain.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.SpecializeByConditional.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.TryToBitvec.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.TryToBitvec.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.TryToBitvec.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.TryToBitvec.js diff --git a/doc/html/implementors/cwe_checker_lib/abstract_domain/trait.TryToInterval.js b/doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.TryToInterval.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/abstract_domain/trait.TryToInterval.js rename to doc/html/trait.impl/cwe_checker_lib/abstract_domain/trait.TryToInterval.js diff --git a/doc/html/implementors/cwe_checker_lib/analysis/fixpoint/trait.Context.js b/doc/html/trait.impl/cwe_checker_lib/analysis/fixpoint/trait.Context.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/analysis/fixpoint/trait.Context.js rename to doc/html/trait.impl/cwe_checker_lib/analysis/fixpoint/trait.Context.js diff --git a/doc/html/implementors/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.js b/doc/html/trait.impl/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.js rename to doc/html/trait.impl/cwe_checker_lib/analysis/forward_interprocedural_fixpoint/trait.Context.js diff --git a/doc/html/implementors/cwe_checker_lib/analysis/vsa_results/trait.VsaResult.js b/doc/html/trait.impl/cwe_checker_lib/analysis/vsa_results/trait.VsaResult.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/analysis/vsa_results/trait.VsaResult.js rename to doc/html/trait.impl/cwe_checker_lib/analysis/vsa_results/trait.VsaResult.js diff --git a/doc/html/implementors/cwe_checker_lib/intermediate_representation/bitvector/trait.BitvectorExtended.js b/doc/html/trait.impl/cwe_checker_lib/intermediate_representation/bitvector/trait.BitvectorExtended.js similarity index 100% rename from doc/html/implementors/cwe_checker_lib/intermediate_representation/bitvector/trait.BitvectorExtended.js rename to doc/html/trait.impl/cwe_checker_lib/intermediate_representation/bitvector/trait.BitvectorExtended.js diff --git a/doc/html/trait.impl/serde/de/trait.Deserialize.js b/doc/html/trait.impl/serde/de/trait.Deserialize.js new file mode 100644 index 000000000..a8619c7bb --- /dev/null +++ b/doc/html/trait.impl/serde/de/trait.Deserialize.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"cwe_checker_install":[["impl<'de> Deserialize<'de> for GhidraConfig"]], +"cwe_checker_lib":[["impl<'de> Deserialize<'de> for MergeTopStrategy"],["impl<'de> Deserialize<'de> for BitvectorDomain"],["impl<'de> Deserialize<'de> for BinOpType"],["impl<'de> Deserialize<'de> for Arg"],["impl<'de> Deserialize<'de> for AccessPattern"],["impl<'de> Deserialize<'de> for Def"],["impl<'de> Deserialize<'de> for ByteSize"],["impl<'de> Deserialize<'de> for Variable"],["impl<'de> Deserialize<'de> for AbstractIdentifier"],["impl<'de> Deserialize<'de> for FunctionSignature"],["impl<'de> Deserialize<'de> for Label"],["impl<'de> Deserialize<'de> for IntervalDomain"],["impl<'de> Deserialize<'de> for Jmp"],["impl<'de> Deserialize<'de> for Variable"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for AbstractLocation"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for ArgIntent"],["impl<'de> Deserialize<'de> for RuntimeMemoryImage"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for JmpType"],["impl<'de, T> Deserialize<'de> for DataDomain<T>where\n T: Deserialize<'de> + RegisterDomain,"],["impl<'de> Deserialize<'de> for Blk"],["impl<'de, T> Deserialize<'de> for Term<T>where\n T: Deserialize<'de>,"],["impl<'de> Deserialize<'de> for DatatypeProperties"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Def"],["impl<'de> Deserialize<'de> for CharacterSet"],["impl<'de> Deserialize<'de> for AbstractObject"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for UnOpType"],["impl<'de> Deserialize<'de> for StringLocation"],["impl<'de> Deserialize<'de> for CallingConvention"],["impl<'de, T> Deserialize<'de> for MemRegion<T>where\n T: Deserialize<'de> + AbstractDomain + SizedDomain + HasTop + Debug,"],["impl<'de> Deserialize<'de> for ExternSymbol"],["impl<'de> Deserialize<'de> for Program"],["impl<'de> Deserialize<'de> for RegisterProperties"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for State"],["impl<'de> Deserialize<'de> for CharacterInclusionDomain"],["impl<'de> Deserialize<'de> for Datatype"],["impl<'de> Deserialize<'de> for ExternSymbol"],["impl<'de> Deserialize<'de> for AbstractMemoryLocation"],["impl<'de> Deserialize<'de> for Tid"],["impl<'de> Deserialize<'de> for BricksDomain"],["impl<'de, T> Deserialize<'de> for NodeValue<T>where\n T: Deserialize<'de> + PartialEq + Eq + Clone,"],["impl<'de> Deserialize<'de> for IntersectMergeStrategy"],["impl<'de> Deserialize<'de> for CallingConvention"],["impl<'de> Deserialize<'de> for ExpressionType"],["impl<'de> Deserialize<'de> for Blk"],["impl<'de> Deserialize<'de> for MemorySegment"],["impl<'de> Deserialize<'de> for Arg"],["impl<'de> Deserialize<'de> for AbstractIdentifierData"],["impl<'de> Deserialize<'de> for Project"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Program"],["impl<'de> Deserialize<'de> for Project"],["impl<'de> Deserialize<'de> for ObjectType"],["impl<'de> Deserialize<'de> for CweWarning"],["impl<'de> Deserialize<'de> for CastOpType"],["impl<'de> Deserialize<'de> for BareMetalConfig"],["impl<'de> Deserialize<'de> for Taint"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for UnionMergeStrategy"],["impl<'de, K, V, S> Deserialize<'de> for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Deserialize<'de>,\n V: AbstractDomain + Deserialize<'de>,\n S: MapMergeStrategy<K, V>,"],["impl<'de> Deserialize<'de> for State"],["impl<'de> Deserialize<'de> for BrickDomain"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for Call"],["impl<'de> Deserialize<'de> for Expression"],["impl<'de> Deserialize<'de> for Jmp"],["impl<'de> Deserialize<'de> for LogMessage"],["impl<'de> Deserialize<'de> for Expression"],["impl<'de> Deserialize<'de> for Config"],["impl<'de, T> Deserialize<'de> for State<T>where\n T: Deserialize<'de> + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,"],["impl<'de> Deserialize<'de> for Sub"],["impl<'de> Deserialize<'de> for Interval"],["impl<'de> Deserialize<'de> for Config"],["impl<'de> Deserialize<'de> for LogLevel"],["impl<'de> Deserialize<'de> for Sub"],["impl<'de> Deserialize<'de> for LogThreadMsg"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/trait.impl/serde/ser/trait.Serialize.js b/doc/html/trait.impl/serde/ser/trait.Serialize.js new file mode 100644 index 000000000..34c5d7dbc --- /dev/null +++ b/doc/html/trait.impl/serde/ser/trait.Serialize.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"cwe_checker_install":[["impl Serialize for GhidraConfig"]], +"cwe_checker_lib":[["impl<T> Serialize for MemRegion<T>where\n T: Serialize + AbstractDomain + SizedDomain + HasTop + Debug,"],["impl Serialize for DatatypeProperties"],["impl Serialize for Config"],["impl Serialize for Config"],["impl Serialize for ExternSymbol"],["impl Serialize for MergeTopStrategy"],["impl Serialize for ByteSize"],["impl Serialize for Config"],["impl Serialize for Arg"],["impl Serialize for IntervalDomain"],["impl Serialize for ArgIntent"],["impl Serialize for ObjectType"],["impl Serialize for UnOpType"],["impl Serialize for RegisterProperties"],["impl Serialize for BrickDomain"],["impl<'a> Serialize for Edge<'a>"],["impl Serialize for Sub"],["impl Serialize for BitvectorDomain"],["impl Serialize for Program"],["impl Serialize for Tid"],["impl Serialize for BinOpType"],["impl Serialize for CharacterSet"],["impl Serialize for Expression"],["impl Serialize for Sub"],["impl Serialize for RuntimeMemoryImage"],["impl Serialize for AbstractObject"],["impl Serialize for Label"],["impl Serialize for AbstractIdentifierData"],["impl Serialize for AbstractIdentifier"],["impl Serialize for Program"],["impl Serialize for Arg"],["impl Serialize for Config"],["impl Serialize for Jmp"],["impl Serialize for AbstractMemoryLocation"],["impl Serialize for Variable"],["impl Serialize for Def"],["impl Serialize for CallingConvention"],["impl Serialize for Jmp"],["impl Serialize for CharacterInclusionDomain"],["impl Serialize for LogThreadMsg"],["impl<K, V, S> Serialize for DomainMap<K, V, S>where\n K: PartialOrd + Ord + Clone + Serialize,\n V: AbstractDomain + Serialize,\n S: MapMergeStrategy<K, V>,"],["impl Serialize for FunctionSignature"],["impl Serialize for CallingConvention"],["impl Serialize for Config"],["impl Serialize for Config"],["impl Serialize for Datatype"],["impl Serialize for Project"],["impl<T> Serialize for State<T>where\n T: Serialize + AbstractDomain + DomainInsertion + HasTop + Eq + From<String>,"],["impl<'a> Serialize for Node<'a>"],["impl Serialize for JmpType"],["impl Serialize for Expression"],["impl Serialize for Config"],["impl Serialize for MemorySegment"],["impl Serialize for AbstractLocation"],["impl Serialize for Call"],["impl Serialize for Interval"],["impl Serialize for Blk"],["impl Serialize for Taint"],["impl Serialize for BricksDomain"],["impl Serialize for Config"],["impl Serialize for Def"],["impl Serialize for Config"],["impl Serialize for Config"],["impl<T> Serialize for NodeValue<T>where\n T: Serialize + PartialEq + Eq + Clone,"],["impl<T> Serialize for DataDomain<T>where\n T: Serialize + RegisterDomain,"],["impl Serialize for Config"],["impl Serialize for Variable"],["impl Serialize for LogLevel"],["impl Serialize for Config"],["impl Serialize for IntersectMergeStrategy"],["impl Serialize for AccessPattern"],["impl Serialize for Blk"],["impl Serialize for LogMessage"],["impl Serialize for ExternSymbol"],["impl Serialize for CweWarning"],["impl<T> Serialize for Term<T>where\n T: Serialize,"],["impl Serialize for UnionMergeStrategy"],["impl Serialize for StringLocation"],["impl Serialize for Config"],["impl Serialize for State"],["impl Serialize for State"],["impl Serialize for CastOpType"],["impl Serialize for ExpressionType"],["impl Serialize for Config"],["impl Serialize for Project"],["impl Serialize for BareMetalConfig"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/html/type.impl/apint/apint/struct.ApInt.js b/doc/html/type.impl/apint/apint/struct.ApInt.js new file mode 100644 index 000000000..d851bab44 --- /dev/null +++ b/doc/html/type.impl/apint/apint/struct.ApInt.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"cwe_checker_lib":[["
      source§

      impl ApInt

      source

      pub fn from_bit<B>(bit: B) -> ApIntwhere\n B: Into<Bit>,

      Creates a new ApInt from the given Bit value with a bit width of 1.

      \n

      This function is generic over types that are convertible to Bit such as bool.

      \n
      source

      pub fn from_i8(val: i8) -> ApInt

      Creates a new ApInt from a given i8 value with a bit-width of 8.

      \n
      source

      pub fn from_u8(val: u8) -> ApInt

      Creates a new ApInt from a given u8 value with a bit-width of 8.

      \n
      source

      pub fn from_i16(val: i16) -> ApInt

      Creates a new ApInt from a given i16 value with a bit-width of 16.

      \n
      source

      pub fn from_u16(val: u16) -> ApInt

      Creates a new ApInt from a given u16 value with a bit-width of 16.

      \n
      source

      pub fn from_i32(val: i32) -> ApInt

      Creates a new ApInt from a given i32 value with a bit-width of 32.

      \n
      source

      pub fn from_u32(val: u32) -> ApInt

      Creates a new ApInt from a given u32 value with a bit-width of 32.

      \n
      source

      pub fn from_i64(val: i64) -> ApInt

      Creates a new ApInt from a given i64 value with a bit-width of 64.

      \n
      source

      pub fn from_u64(val: u64) -> ApInt

      Creates a new ApInt from a given u64 value with a bit-width of 64.

      \n
      source

      pub fn from_i128(val: i128) -> ApInt

      Creates a new ApInt from a given i128 value with a bit-width of 128.

      \n
      source

      pub fn from_u128(val: u128) -> ApInt

      Creates a new ApInt from a given u128 value with a bit-width of 128.

      \n
      source

      pub fn zero(width: BitWidth) -> ApInt

      Creates a new ApInt with the given bit width that represents zero.

      \n
      source

      pub fn one(width: BitWidth) -> ApInt

      Creates a new ApInt with the given bit width that represents one.

      \n
      source

      pub fn all_unset(width: BitWidth) -> ApInt

      Creates a new ApInt with the given bit width that has all bits unset.

      \n

      Note: This is equal to calling ApInt::zero with the given width.

      \n
      source

      pub fn all_set(width: BitWidth) -> ApInt

      Creates a new ApInt with the given bit width that has all bits set.

      \n
      source

      pub fn unsigned_min_value(width: BitWidth) -> ApInt

      Returns the smallest unsigned ApInt that can be represented by the given BitWidth.

      \n
      source

      pub fn unsigned_max_value(width: BitWidth) -> ApInt

      Returns the largest unsigned ApInt that can be represented by the given BitWidth.

      \n
      source

      pub fn signed_min_value(width: BitWidth) -> ApInt

      Returns the smallest signed ApInt that can be represented by the given BitWidth.

      \n
      source

      pub fn signed_max_value(width: BitWidth) -> ApInt

      Returns the largest signed ApInt that can be represented by the given BitWidth.

      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn assign(&mut self, rhs: &ApInt)

      Assigns rhs to this ApInt.

      \n

      This mutates digits and may affect the bitwidth of self\nwhich might result in an expensive operations.

      \n

      After this operation rhs and self are equal to each other.

      \n
      source

      pub fn strict_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Strictly assigns rhs to this ApInt.

      \n

      After this operation rhs and self are equal to each other.

      \n

      Note: Strict assigns protect against mutating the bit width\nof self and thus return an error instead of executing a probably\nexpensive assign operation.

      \n
      Errors
      \n
        \n
      • If rhs and self have unmatching bit widths.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn into_truncate<W>(self, target_width: W) -> Result<ApInt, Error>where\n W: Into<BitWidth>,

      Tries to truncate this ApInt inplace to the given target_width\nand returns the result.

      \n
      Note
      \n
        \n
      • This is useful for method chaining.
      • \n
      • For more details look into\ntruncate.
      • \n
      \n
      Errors
      \n
        \n
      • If the target_width is greater than the current width.
      • \n
      \n
      source

      pub fn truncate<W>(&mut self, target_width: W) -> Result<(), Error>where\n W: Into<BitWidth>,

      Tries to truncate this ApInt inplace to the given target_width.

      \n
      Note
      \n
        \n
      • This is a no-op if self.width() and target_width are equal.
      • \n
      • This operation is inplace as long as self.width() and target_width\nrequire the same amount of digits for their representation.
      • \n
      \n
      Errors
      \n
        \n
      • If the target_width is greater than the current width.
      • \n
      \n
      source

      pub fn into_zero_extend<W>(self, target_width: W) -> Result<ApInt, Error>where\n W: Into<BitWidth>,

      Tries to zero-extend this ApInt inplace to the given target_width\nand returns the result.

      \n
      Note
      \n
        \n
      • This is useful for method chaining.
      • \n
      • For more details look into\nzero_extend.
      • \n
      \n
      Errors
      \n
        \n
      • If the target_width is less than the current width.
      • \n
      \n
      source

      pub fn zero_extend<W>(&mut self, target_width: W) -> Result<(), Error>where\n W: Into<BitWidth>,

      Tries to zero-extend this ApInt inplace to the given target_width.

      \n
      Note
      \n
        \n
      • This is a no-op if self.width() and target_width are equal.
      • \n
      • This operation is inplace as long as self.width() and target_width\nrequire the same amount of digits for their representation.
      • \n
      \n
      Errors
      \n
        \n
      • If the target_width is less than the current width.
      • \n
      \n
      source

      pub fn into_sign_extend<W>(self, target_width: W) -> Result<ApInt, Error>where\n W: Into<BitWidth>,

      Tries to sign-extend this ApInt inplace to the given target_width\nand returns the result.

      \n
      Note
      \n
        \n
      • This is useful for method chaining.
      • \n
      • For more details look into\nsign_extend.
      • \n
      \n
      Errors
      \n
        \n
      • If the target_width is less than the current width.
      • \n
      \n
      source

      pub fn sign_extend<W>(&mut self, target_width: W) -> Result<(), Error>where\n W: Into<BitWidth>,

      Tries to sign-extend this ApInt inplace to the given target_width.

      \n
      Note
      \n
        \n
      • This is a no-op if self.width() and target_width are equal.
      • \n
      • This operation is inplace as long as self.width() and target_width\nrequire the same amount of digits for their representation.
      • \n
      \n
      Errors
      \n
        \n
      • If the target_width is less than the current width.
      • \n
      \n
      source

      pub fn into_zero_resize<W>(self, target_width: W) -> ApIntwhere\n W: Into<BitWidth>,

      Zero-resizes this ApInt to the given target_width\nand returns the result.

      \n
      Note
      \n
        \n
      • This is useful for method chaining.
      • \n
      • For more details look into\nzero_resize.
      • \n
      \n
      source

      pub fn into_sign_resize<W>(self, target_width: W) -> ApIntwhere\n W: Into<BitWidth>,

      Sign-resizes this ApInt to the given target_width\nand returns the result.

      \n
      Note
      \n
        \n
      • This is useful for method chaining.
      • \n
      • For more details look into\nsign_resize.
      • \n
      \n
      source

      pub fn zero_resize<W>(&mut self, target_width: W)where\n W: Into<BitWidth>,

      Zero-resizes the given ApInt inplace.

      \n
      Note
      \n

      This operation will forward to

      \n
        \n
      • truncate\nif target_width is less than or equal to the width of\nthe given ApInt
      • \n
      • zero_extend\notherwise
      • \n
      \n
      source

      pub fn sign_resize<W>(&mut self, target_width: W)where\n W: Into<BitWidth>,

      Sign-resizes the given ApInt inplace.

      \n
      Note
      \n

      This operation will forward to

      \n
        \n
      • truncate\nif target_width is less than or equal to the width of\nthe given ApInt
      • \n
      • sign_extend\notherwise
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn is_zero(&self) -> bool

      Returns true if this ApInt represents the value zero (0).

      \n
      Note
      \n
        \n
      • Zero (0) is also called the additive neutral element.
      • \n
      • This operation is more efficient than comparing two instances\nof ApInt for the same reason.
      • \n
      \n
      source

      pub fn is_one(&self) -> bool

      Returns true if this ApInt represents the value one (1).

      \n
      Note
      \n
        \n
      • One (1) is also called the multiplicative neutral element.
      • \n
      • This operation is more efficient than comparing two instances\nof ApInt for the same reason.
      • \n
      \n
      source

      pub fn is_even(&self) -> bool

      Returns true if this ApInt represents an even number.

      \n
      source

      pub fn is_odd(&self) -> bool

      Returns true if this ApInt represents an odd number.

      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn into_bitnot(self) -> ApInt

      Flips all bits of self and returns the result.

      \n
      source

      pub fn bitnot(&mut self)

      Flip all bits of this ApInt inplace.

      \n
      source

      pub fn into_checked_bitand(self, rhs: &ApInt) -> Result<ApInt, Error>

      Tries to bit-and assign this ApInt inplace to rhs\nand returns the result.

      \n

      Note: This forwards to\nchecked_bitand.

      \n
      Errors
      \n

      If self and rhs have unmatching bit widths.

      \n
      source

      pub fn checked_bitand_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Bit-and assigns all bits of this ApInt with the bits of rhs.

      \n

      Note: This operation is inplace of self and won’t allocate memory.

      \n
      Errors
      \n

      If self and rhs have unmatching bit widths.

      \n
      source

      pub fn into_checked_bitor(self, rhs: &ApInt) -> Result<ApInt, Error>

      Tries to bit-and assign this ApInt inplace to rhs\nand returns the result.

      \n

      Note: This forwards to\nchecked_bitor.

      \n
      Errors
      \n

      If self and rhs have unmatching bit widths.

      \n
      source

      pub fn checked_bitor_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Bit-or assigns all bits of this ApInt with the bits of rhs.

      \n

      Note: This operation is inplace of self and won’t allocate memory.

      \n
      Errors
      \n

      If self and rhs have unmatching bit widths.

      \n
      source

      pub fn into_checked_bitxor(self, rhs: &ApInt) -> Result<ApInt, Error>

      Tries to bit-xor assign this ApInt inplace to rhs\nand returns the result.

      \n

      Note: This forwards to\nchecked_bitxor.

      \n
      Errors
      \n

      If self and rhs have unmatching bit widths.

      \n
      source

      pub fn checked_bitxor_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Bit-xor assigns all bits of this ApInt with the bits of rhs.

      \n

      Note: This operation is inplace of self and won’t allocate memory.

      \n
      Errors
      \n

      If self and rhs have unmatching bit widths.

      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn get_bit_at<P>(&self, pos: P) -> Result<Bit, Error>where\n P: Into<BitPos>,

      Returns the bit at the given bit position pos.

      \n

      This returns

      \n
        \n
      • Bit::Set if the bit at pos is 1
      • \n
      • Bit::Unset otherwise
      • \n
      \n
      Errors
      \n
        \n
      • If pos is not a valid bit position for the width of this ApInt.
      • \n
      \n
      source

      pub fn set_bit_at<P>(&mut self, pos: P) -> Result<(), Error>where\n P: Into<BitPos>,

      Sets the bit at the given bit position pos to one (1).

      \n
      Errors
      \n
        \n
      • If pos is not a valid bit position for the width of this ApInt.
      • \n
      \n
      source

      pub fn unset_bit_at<P>(&mut self, pos: P) -> Result<(), Error>where\n P: Into<BitPos>,

      Sets the bit at the given bit position pos to zero (0).

      \n
      Errors
      \n
        \n
      • If pos is not a valid bit position for the width of this ApInt.
      • \n
      \n
      source

      pub fn flip_bit_at<P>(&mut self, pos: P) -> Result<(), Error>where\n P: Into<BitPos>,

      Flips the bit at the given bit position pos.

      \n
      Note
      \n
        \n
      • If the bit at the given position was 0 it will be 1\nafter this operation and vice versa.
      • \n
      \n
      Errors
      \n
        \n
      • If pos is not a valid bit position for the width of this ApInt.
      • \n
      \n
      source

      pub fn set_all(&mut self)

      Sets all bits of this ApInt to one (1).

      \n
      source

      pub fn is_all_set(&self) -> bool

      Returns``trueif all bits in theApInt` are set.

      \n
      source

      pub fn unset_all(&mut self)

      Sets all bits of this ApInt to zero (0).

      \n
      source

      pub fn is_all_unset(&self) -> bool

      Returns true if all bits in the ApInt are unset.

      \n
      source

      pub fn flip_all(&mut self)

      Flips all bits of this ApInt.

      \n
      source

      pub fn sign_bit(&self) -> Bit

      Returns the sign bit of this ApInt.

      \n

      Note: This is equal to the most significant bit of this ApInt.

      \n
      source

      pub fn set_sign_bit(&mut self)

      Sets the sign bit of this ApInt to one (1).

      \n
      source

      pub fn unset_sign_bit(&mut self)

      Sets the sign bit of this ApInt to zero (0).

      \n
      source

      pub fn flip_sign_bit(&mut self)

      Flips the sign bit of this ApInt.

      \n
      Note
      \n
        \n
      • If the sign bit was 0 it will be 1 after this operation and vice versa.
      • \n
      • Depending on the interpretation of the ApInt this\noperation changes its signedness.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn count_ones(&self) -> usize

      Returns the number of ones in the binary representation of this ApInt.

      \n
      source

      pub fn count_zeros(&self) -> usize

      Returns the number of zeros in the binary representation of this ApInt.

      \n
      source

      pub fn leading_zeros(&self) -> usize

      Returns the number of leading zeros in the binary representation of this ApInt.

      \n
      source

      pub fn trailing_zeros(&self) -> usize

      Returns the number of trailing zeros in the binary representation of this ApInt.

      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn checked_ult(&self, rhs: &ApInt) -> Result<bool, Error>

      Unsigned less-than (ult) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self < rhs.
      • \n
      • Interprets both ApInt instances as unsigned values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_ule(&self, rhs: &ApInt) -> Result<bool, Error>

      Unsigned less-equals (ule) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self <= rhs.
      • \n
      • Interprets both ApInt instances as unsigned values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_ugt(&self, rhs: &ApInt) -> Result<bool, Error>

      Unsigned greater-than (ugt) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self > rhs.
      • \n
      • Interprets both ApInt instances as unsigned values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_uge(&self, rhs: &ApInt) -> Result<bool, Error>

      Unsigned greater-equals (uge) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self >= rhs.
      • \n
      • Interprets both ApInt instances as unsigned values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_slt(&self, rhs: &ApInt) -> Result<bool, Error>

      Signed less-than (slt) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self < rhs.
      • \n
      • Interprets both ApInt instances as signed values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_sle(&self, rhs: &ApInt) -> Result<bool, Error>

      Signed less-equals (sle) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self <= rhs.
      • \n
      • Interprets both ApInt instances as signed values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_sgt(&self, rhs: &ApInt) -> Result<bool, Error>

      Signed greater-than (sgt) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self > rhs.
      • \n
      • Interprets both ApInt instances as signed values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_sge(&self, rhs: &ApInt) -> Result<bool, Error>

      Signed greater-equals (sge) comparison between self and rhs.

      \n
      Note
      \n
        \n
      • Returns Ok(true) if self >= rhs.
      • \n
      • Interprets both ApInt instances as signed values.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn into_negate(self) -> ApInt

      Negates this ApInt inplace and returns the result.

      \n

      Note: This will not allocate memory.

      \n
      source

      pub fn negate(&mut self)

      Negates this ApInt inplace.

      \n

      Note: This will not allocate memory.

      \n
      source

      pub fn into_checked_add(self, rhs: &ApInt) -> Result<ApInt, Error>

      Adds rhs to self and returns the result.

      \n

      Note: This will not allocate memory.

      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_add_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Add-assigns rhs to self inplace.

      \n

      Note: This will not allocate memory.

      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn into_checked_sub(self, rhs: &ApInt) -> Result<ApInt, Error>

      Subtracts rhs from self and returns the result.

      \n
      Note
      \n

      In the low-level bit-wise representation there is no difference between signed\nand unsigned subtraction of fixed bit-width integers. (Cite: LLVM)

      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_sub_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Subtract-assigns rhs from self inplace.

      \n
      Note
      \n

      In the low-level bit-wise representation there is no difference between signed\nand unsigned subtraction of fixed bit-width integers. (Cite: LLVM)

      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn into_checked_mul(self, rhs: &ApInt) -> Result<ApInt, Error>

      Multiplies rhs with self and returns the result.

      \n
      Note
      \n

      In the low-level bit-wise representation there is no difference between signed\nand unsigned multiplication of fixed bit-width integers. (Cite: LLVM)

      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_mul_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Multiply-assigns rhs to self inplace.

      \n
      Note
      \n

      In the low-level bit-wise representation there is no difference between signed\nand unsigned multiplication of fixed bit-width integers. (Cite: LLVM)

      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn into_checked_udiv(self, rhs: &ApInt) -> Result<ApInt, Error>

      Divides self by rhs using unsigned interpretation and returns the result.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_udiv_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Assignes self to the division of self by rhs using unsigned\ninterpretation of the values.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn into_checked_sdiv(self, rhs: &ApInt) -> Result<ApInt, Error>

      Divides self by rhs using signed interpretation and returns the result.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_sdiv_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Assignes self to the division of self by rhs using signed\ninterpretation of the values.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn into_checked_urem(self, rhs: &ApInt) -> Result<ApInt, Error>

      Calculates the unsigned remainder of self by rhs and returns the result.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_urem_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Assignes self to the unsigned remainder of self by rhs.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn into_checked_srem(self, rhs: &ApInt) -> Result<ApInt, Error>

      Calculates the signed remainder of self by rhs and returns the result.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      source

      pub fn checked_srem_assign(&mut self, rhs: &ApInt) -> Result<(), Error>

      Assignes self to the signed remainder of self by rhs.

      \n
      Note
      \n
        \n
      • This operation will not allocate memory and computes inplace of self.
      • \n
      • In the low-level machine abstraction signed division and unsigned division\nare two different operations.
      • \n
      \n
      Errors
      \n
        \n
      • If self and rhs have unmatching bit widths.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn checked_shl_assign<S>(&mut self, shift_amount: S) -> Result<(), Error>where\n S: Into<ShiftAmount>,

      Shift this ApInt left by the given shift_amount bits.

      \n

      This operation is inplace and will not allocate memory.

      \n
      Errors
      \n
        \n
      • If the given shift_amount is invalid for the bit width of this ApInt.
      • \n
      \n
      source

      pub fn into_checked_shl<S>(self, shift_amount: S) -> Result<ApInt, Error>where\n S: Into<ShiftAmount>,

      Shift this ApInt left by the given shift_amount bits and returns the result.

      \n

      This operation is inplace and will not allocate memory.

      \n
      Errors
      \n
        \n
      • If the given shift_amount is invalid for the bit width of this ApInt.
      • \n
      \n
      source

      pub fn checked_lshr_assign<S>(&mut self, shift_amount: S) -> Result<(), Error>where\n S: Into<ShiftAmount>,

      Logically right-shifts this ApInt by the given shift_amount bits.

      \n

      This operation is inplace and will not allocate memory.

      \n
      Errors
      \n
        \n
      • If the given shift_amount is invalid for the bit width of this ApInt.
      • \n
      \n
      source

      pub fn into_checked_lshr<S>(self, shift_amount: S) -> Result<ApInt, Error>where\n S: Into<ShiftAmount>,

      Logically right-shifts this ApInt by the given shift_amount bits\nand returns the result.

      \n

      This operation is inplace and will not allocate memory.

      \n
      Errors
      \n
        \n
      • If the given shift_amount is invalid for the bit width of this ApInt.
      • \n
      \n
      source

      pub fn checked_ashr_assign<S>(&mut self, shift_amount: S) -> Result<(), Error>where\n S: Into<ShiftAmount>,

      Arithmetically right-shifts this ApInt by the given shift_amount bits.

      \n

      This operation is inplace and will not allocate memory.

      \n
      Note
      \n

      Arithmetic shifting copies the sign bit instead of filling up with zeros.

      \n
      Errors
      \n
        \n
      • If the given shift_amount is invalid for the bit width of this ApInt.
      • \n
      \n
      source

      pub fn into_checked_ashr<S>(self, shift_amount: S) -> Result<ApInt, Error>where\n S: Into<ShiftAmount>,

      Arithmetically right-shifts this ApInt by the given shift_amount bits\nand returns the result.

      \n

      This operation is inplace and will not allocate memory.

      \n
      Note
      \n

      Arithmetic shifting copies the sign bit instead of filling up with zeros.

      \n
      Errors
      \n
        \n
      • If the given shift_amount is invalid for the bit width of this ApInt.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn from_str_radix<R, S>(radix: R, input: S) -> Result<ApInt, Error>where\n R: Into<Radix>,\n S: AsRef<str>,

      Parses the given input String with the given Radix and returns an ApInt\nwith the given target_width BitWidth.

      \n

      Note: The given input is parsed as big-endian value. This means, the most significant bit (MSB)\nis the leftst bit in the string representation provided by the user.

      \n

      The string is assumed to contain no whitespace and contain only values within a subset of the \nrange of 0..9 and a..z depending on the given radix.

      \n

      The string is assumed to have no sign as ApInt does not handle signdness.

      \n
      Errors
      \n
        \n
      • If input is empty.
      • \n
      • If input is not a valid representation for an ApInt for the given radix.
      • \n
      • If input has trailing zero characters (0), e.g. "0042" instead of "42".
      • \n
      • If input represents an ApInt value that does not fit into the given target_bitwidth.
      • \n
      \n
      Examples
      \n
      let a = ApInt::from_str_radix(10, "42");      // ok\nlet b = ApInt::from_str_radix( 2, "1011011"); // ok (dec. = 91)\nlet c = ApInt::from_str_radix(16, "ffcc00");  // ok (dec. = 16763904)\nlet c = ApInt::from_str_radix(10, "256");     // Error: 256 does not fit within 8 bits!\nlet d = ApInt::from_str_radix( 2, "01020");   // Error: Invalid digit '2' at position 3 for given radix.\nlet e = ApInt::from_str_radix(16, "hello");   // Error: "hello" is not a valid ApInt representation!
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn as_string_with_radix<R>(&self, radix: R) -> Stringwhere\n R: Into<Radix>,

      Returns a String representation of the binary encoded ApInt for the given Radix.

      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn resize_to_bool(&self) -> bool

      Resizes this ApInt to a bool primitive type.

      \n

      Bits in this ApInt that are not within the bounds\nof the bool are being ignored.

      \n
      Note
      \n
        \n
      • Basically this returns true if the least significant\nbit of this ApInt is 1 and false otherwise.
      • \n
      \n
      source

      pub fn resize_to_i8(&self) -> i8

      Resizes this ApInt to a i8 primitive type.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 8 bits the value is\nsign extended to the target bit width.
      • \n
      • All bits but the least significant 8 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_u8(&self) -> u8

      Resizes this ApInt to a u8 primitive type.

      \n
      Note
      \n
        \n
      • All bits but the least significant 8 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_i16(&self) -> i16

      Resizes this ApInt to a i16 primitive type.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 16 bits the value is\nsign extended to the target bit width.
      • \n
      • All bits but the least significant 16 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_u16(&self) -> u16

      Resizes this ApInt to a u16 primitive type.

      \n
      Note
      \n
        \n
      • All bits but the least significant 16 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_i32(&self) -> i32

      Resizes this ApInt to a i32 primitive type.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 32 bits the value is\nsign extended to the target bit width.
      • \n
      • All bits but the least significant 32 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_u32(&self) -> u32

      Resizes this ApInt to a u32 primitive type.

      \n
      Note
      \n
        \n
      • All bits but the least significant 32 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_i64(&self) -> i64

      Resizes this ApInt to a i64 primitive type.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 64 bits the value is\nsign extended to the target bit width.
      • \n
      • All bits but the least significant 64 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_u64(&self) -> u64

      Resizes this ApInt to a u64 primitive type.

      \n
      Note
      \n
        \n
      • All bits but the least significant 64 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_i128(&self) -> i128

      Resizes this ApInt to a i128 primitive type.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 128 bits the value is\nsign extended to the target bit width.
      • \n
      • All bits but the least significant 128 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      source

      pub fn resize_to_u128(&self) -> u128

      Resizes this ApInt to a u128 primitive type.

      \n
      Note
      \n
        \n
      • All bits but the least significant 128 bits are\nbeing ignored by this operation to construct the\nresult.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn try_to_bool(&self) -> Result<bool, Error>

      Tries to represent the value of this ApInt as a bool.

      \n
      Note
      \n

      This returns true if the value represented by this ApInt\nis 1, returns false if the value represented by this\nApInt is 0 and returns an error otherwise.

      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a bool.
      • \n
      \n
      source

      pub fn try_to_i8(&self) -> Result<i8, Error>

      Tries to represent the value of this ApInt as a i8.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 8 bits the value is\nsign extended to the target bit width.
      • \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u8.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a i8.
      • \n
      \n
      source

      pub fn try_to_u8(&self) -> Result<u8, Error>

      Tries to represent the value of this ApInt as a u8.

      \n
      Note
      \n
        \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u8.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a u8.
      • \n
      \n
      source

      pub fn try_to_i16(&self) -> Result<i16, Error>

      Tries to represent the value of this ApInt as a i16.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 16 bits the value is\nsign extended to the target bit width.
      • \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u16.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a i16.
      • \n
      \n
      source

      pub fn try_to_u16(&self) -> Result<u16, Error>

      Tries to represent the value of this ApInt as a u16.

      \n
      Note
      \n
        \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u16.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a u16.
      • \n
      \n
      source

      pub fn try_to_i32(&self) -> Result<i32, Error>

      Tries to represent the value of this ApInt as a i32.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 32 bits the value is\nsign extended to the target bit width.
      • \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u32.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a i32.
      • \n
      \n
      source

      pub fn try_to_u32(&self) -> Result<u32, Error>

      Tries to represent the value of this ApInt as a u32.

      \n
      Note
      \n
        \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u32.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a u32.
      • \n
      \n
      source

      pub fn try_to_i64(&self) -> Result<i64, Error>

      Tries to represent the value of this ApInt as a i64.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 64 bits the value is\nsign extended to the target bit width.
      • \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u64.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a i64.
      • \n
      \n
      source

      pub fn try_to_u64(&self) -> Result<u64, Error>

      Tries to represent the value of this ApInt as a u64.

      \n
      Note
      \n
        \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u64.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a u64.
      • \n
      \n
      source

      pub fn try_to_i128(&self) -> Result<i128, Error>

      Tries to represent the value of this ApInt as a i128.

      \n
      Note
      \n
        \n
      • This operation will conserve the signedness of the\nvalue. This means that for ApInt instances with\na BitWidth less than 128 bits the value is\nsign extended to the target bit width.
      • \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u128.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a i128.
      • \n
      \n
      source

      pub fn try_to_u128(&self) -> Result<u128, Error>

      Tries to represent the value of this ApInt as a u128.

      \n
      Note
      \n
        \n
      • This conversion is possible as long as the value represented\nby this ApInt does not exceed the maximum value of u128.
      • \n
      \n
      Complexity
      \n
        \n
      • 𝒪(n) where n is the number of digits of this ApInt.
      • \n
      \n
      Errors
      \n
        \n
      • If the value represented by this ApInt can not be\nrepresented by a u128.
      • \n
      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl ApInt

      source

      pub fn random_with_width(width: BitWidth) -> ApInt

      Creates a new ApInt with the given BitWidth and random Digits.

      \n
      source

      pub fn random_with_width_using<R>(width: BitWidth, rng: &mut R) -> ApIntwhere\n R: Rng,

      Creates a new ApInt with the given BitWidth and random Digits\nusing the given random number generator.

      \n

      Note: This is useful for cryptographic or testing purposes.

      \n
      source

      pub fn randomize(&mut self)

      Randomizes the digits of this ApInt inplace.

      \n

      This won’t change its BitWidth.

      \n
      source

      pub fn randomize_using<R>(&mut self, rng: &mut R)where\n R: Rng,

      Randomizes the digits of this ApInt inplace using the given\nrandom number generator.

      \n

      This won’t change its BitWidth.

      \n
      ",0,"cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> Add<&'a ApInt> for ApInt

      §

      type Output = ApInt

      The resulting type after applying the + operator.
      source§

      fn add(self, rhs: &'a ApInt) -> <ApInt as Add<&'a ApInt>>::Output

      Performs the + operation. Read more
      ","Add<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Sync for ApInt

      ApInt is safe to share between threads since it does not own\naliasing memory and has no mutable internal state like Cell or RefCell.

      \n
      ","Sync","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Width for ApInt

      source§

      fn width(&self) -> BitWidth

      Returns the BitWidth of this ApInt.

      \n
      ","Width","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Clone for ApInt

      source§

      fn clone(&self) -> ApInt

      Returns a copy of the value. Read more
      1.0.0 · source§

      fn clone_from(&mut self, source: &Self)

      Performs copy-assignment from source. Read more
      ","Clone","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> AddAssign<&'a ApInt> for ApInt

      source§

      fn add_assign(&mut self, rhs: &'a ApInt)

      Performs the += operation. Read more
      ","AddAssign<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> MulAssign<&'a ApInt> for ApInt

      source§

      fn mul_assign(&mut self, rhs: &'a ApInt)

      Performs the *= operation. Read more
      ","MulAssign<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl LowerHex for ApInt

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

      Formats the value using the given formatter.
      ","LowerHex","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl PartialEq for ApInt

      source§

      fn eq(&self, other: &ApInt) -> bool

      This method tests for self and other values to be equal, and is used\nby ==.
      1.0.0 · source§

      fn ne(&self, other: &Rhs) -> bool

      This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
      ","PartialEq","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Octal for ApInt

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

      Formats the value using the given formatter.
      ","Octal","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Hash for ApInt

      source§

      fn hash<H>(&self, state: &mut H)where\n H: Hasher,

      Feeds this value into the given Hasher. Read more
      1.3.0 · source§

      fn hash_slice<H>(data: &[Self], state: &mut H)where\n H: Hasher,\n Self: Sized,

      Feeds a slice of this type into the given Hasher. Read more
      ","Hash","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> BitXorAssign<&'a ApInt> for ApInt

      source§

      fn bitxor_assign(&mut self, rhs: &'a ApInt)

      Performs the ^= operation. Read more
      ","BitXorAssign<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Neg for ApInt

      §

      type Output = ApInt

      The resulting type after applying the - operator.
      source§

      fn neg(self) -> <ApInt as Neg>::Output

      Performs the unary - operation. Read more
      ","Neg","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> BitOrAssign<&'a ApInt> for ApInt

      source§

      fn bitor_assign(&mut self, rhs: &'a ApInt)

      Performs the |= operation. Read more
      ","BitOrAssign<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Debug for ApInt

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

      Formats the value using the given formatter. Read more
      ","Debug","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> SubAssign<&'a ApInt> for ApInt

      source§

      fn sub_assign(&mut self, rhs: &'a ApInt)

      Performs the -= operation. Read more
      ","SubAssign<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Eq for ApInt

      ","Eq","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Drop for ApInt

      source§

      fn drop(&mut self)

      Executes the destructor for this type. Read more
      ","Drop","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Not for ApInt

      §

      type Output = ApInt

      The resulting type after applying the ! operator.
      source§

      fn not(self) -> <ApInt as Not>::Output

      Performs the unary ! operation. Read more
      ","Not","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> Sub<&'a ApInt> for ApInt

      §

      type Output = ApInt

      The resulting type after applying the - operator.
      source§

      fn sub(self, rhs: &'a ApInt) -> <ApInt as Sub<&'a ApInt>>::Output

      Performs the - operation. Read more
      ","Sub<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> Mul<&'a ApInt> for ApInt

      §

      type Output = ApInt

      The resulting type after applying the * operator.
      source§

      fn mul(self, rhs: &'a ApInt) -> <ApInt as Mul<&'a ApInt>>::Output

      Performs the * operation. Read more
      ","Mul<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> BitXor<&'a ApInt> for ApInt

      §

      type Output = ApInt

      The resulting type after applying the ^ operator.
      source§

      fn bitxor(self, rhs: &'a ApInt) -> <ApInt as BitXor<&'a ApInt>>::Output

      Performs the ^ operation. Read more
      ","BitXor<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 8]> for ApInt

      source§

      fn from(val: [i64; 8]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 8]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 2]> for ApInt

      source§

      fn from(val: [i64; 2]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 2]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<i8> for ApInt

      source§

      fn from(val: i8) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<u8> for ApInt

      source§

      fn from(val: u8) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 7]> for ApInt

      source§

      fn from(val: [u64; 7]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 7]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<B> From<B> for ApIntwhere\n B: Into<Bit>,

      source§

      fn from(bit: B) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 5]> for ApInt

      source§

      fn from(val: [u64; 5]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 5]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 7]> for ApInt

      source§

      fn from(val: [i64; 7]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 7]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<u128> for ApInt

      source§

      fn from(val: u128) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<u16> for ApInt

      source§

      fn from(val: u16) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 5]> for ApInt

      source§

      fn from(val: [i64; 5]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 5]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<i32> for ApInt

      source§

      fn from(val: i32) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<i16> for ApInt

      source§

      fn from(val: i16) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<u32> for ApInt

      source§

      fn from(val: u32) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<i128> for ApInt

      source§

      fn from(val: i128) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 6]> for ApInt

      source§

      fn from(val: [u64; 6]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 6]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 2]> for ApInt

      source§

      fn from(val: [u64; 2]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 2]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 3]> for ApInt

      source§

      fn from(val: [u64; 3]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 3]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 32]> for ApInt

      source§

      fn from(val: [u64; 32]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 32]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<u64> for ApInt

      source§

      fn from(val: u64) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<i64> for ApInt

      source§

      fn from(val: i64) -> ApInt

      Converts to this type from the input type.
      ","From","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 4]> for ApInt

      source§

      fn from(val: [u64; 4]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 4]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 3]> for ApInt

      source§

      fn from(val: [i64; 3]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 3]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 32]> for ApInt

      source§

      fn from(val: [i64; 32]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 32]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 6]> for ApInt

      source§

      fn from(val: [i64; 6]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 6]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 4]> for ApInt

      source§

      fn from(val: [i64; 4]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 4]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 8]> for ApInt

      source§

      fn from(val: [u64; 8]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 8]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[u64; 16]> for ApInt

      source§

      fn from(val: [u64; 16]) -> ApInt

      Converts to this type from the input type.
      ","From<[u64; 16]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl From<[i64; 16]> for ApInt

      source§

      fn from(val: [i64; 16]) -> ApInt

      Converts to this type from the input type.
      ","From<[i64; 16]>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> BitAndAssign<&'a ApInt> for ApInt

      source§

      fn bitand_assign(&mut self, rhs: &'a ApInt)

      Performs the &= operation. Read more
      ","BitAndAssign<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Serialize for ApInt

      source§

      fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where\n S: Serializer,

      Serialize this value into the given Serde serializer. Read more
      ","Serialize","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'de> Deserialize<'de> for ApInt

      source§

      fn deserialize<D>(\n deserializer: D\n) -> Result<ApInt, <D as Deserializer<'de>>::Error>where\n D: Deserializer<'de>,

      Deserialize this value from the given Serde deserializer. Read more
      ","Deserialize<'de>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl UpperHex for ApInt

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

      Formats the value using the given formatter.
      ","UpperHex","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> BitAnd<&'a ApInt> for ApInt

      §

      type Output = ApInt

      The resulting type after applying the & operator.
      source§

      fn bitand(self, rhs: &'a ApInt) -> <ApInt as BitAnd<&'a ApInt>>::Output

      Performs the & operation. Read more
      ","BitAnd<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl<'a> BitOr<&'a ApInt> for ApInt

      §

      type Output = ApInt

      The resulting type after applying the | operator.
      source§

      fn bitor(self, rhs: &'a ApInt) -> <ApInt as BitOr<&'a ApInt>>::Output

      Performs the | operation. Read more
      ","BitOr<&'a ApInt>","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Send for ApInt

      ApInt is safe to send between threads since it does not own\naliasing memory and has no reference counting mechanism like Rc.

      \n
      ","Send","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"],["
      source§

      impl Binary for ApInt

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

      Formats the value using the given formatter.
      ","Binary","cwe_checker_lib::intermediate_representation::bitvector::Bitvector"]] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.DataDomain.js b/doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.DataDomain.js new file mode 100644 index 000000000..5e65b038a --- /dev/null +++ b/doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.DataDomain.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"cwe_checker_lib":[["
      source§

      impl<T: RegisterDomain> DataDomain<T>

      source

      pub fn add_offset(&self, offset: &T) -> Self

      Add offset to all contained absolute and relative values of self and return the result.

      \n
      source

      pub fn subtract_offset(&self, offset: &T) -> Self

      Subtract offset from all contained absolute and relative values of self and return the result.

      \n
      ",0,"cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> DataDomain<T>

      source

      pub fn is_empty(&self) -> bool

      Returns true if the domain does not represent any value.

      \n

      The meaning of an empty value depends on the usage of the domain.\nE.g. it may indicate an impossible runtime state of a program in one analysis\nor simply no value of interest in another analysis.

      \n

      An empty value represents the bottom value in the partial order of the domain.

      \n
      source

      pub fn new_empty(size: ByteSize) -> Self

      Return a new empty value with the given bytesize.

      \n
      source

      pub fn replace_abstract_id(\n &mut self,\n old_id: &AbstractIdentifier,\n new_id: &AbstractIdentifier,\n offset_adjustment: &T\n)

      For pointer values replace an abstract identifier with another one and add the offset_adjustment to the pointer offset.\nThis is needed to adjust stack pointer on call and return instructions.

      \n
      source

      pub fn replace_all_ids(\n &mut self,\n replacement_map: &BTreeMap<AbstractIdentifier, Self>\n)

      Replace all abstract IDs in self with the corresponding values given by the replacement_map.

      \n

      For IDs without a replacement value the contains_top_values flag will be set.

      \n
      source

      pub fn referenced_ids(&self) -> impl Iterator<Item = &AbstractIdentifier>

      Return an iterator over all referenced abstract IDs.

      \n
      source

      pub fn get_relative_values(&self) -> &BTreeMap<AbstractIdentifier, T>

      Return the relative values contained in the domain.

      \n
      source

      pub fn set_relative_values(\n &mut self,\n relative_values: BTreeMap<AbstractIdentifier, T>\n)

      Replace the map of relative values with the given one.

      \n
      source

      pub fn get_absolute_value(&self) -> Option<&T>

      Return the absolute value contained in the domain if present

      \n
      source

      pub fn set_absolute_value(&mut self, value: Option<T>)

      Replace the absolute value contained in the domain with the given one.\nA value of None means that the domain does not contain an absolute value.

      \n
      source

      pub fn contains_top(&self) -> bool

      Returns true if the domain contains Top values,\ni.e. values for which neither a value nor an abstract identifier is known.

      \n

      Note that the DataDomain itself has no maximal value,\ni.e. this does not indicate a Top value of the abstract domain.

      \n
      source

      pub fn set_contains_top_flag(&mut self)

      Indicate that the domain may contain Top values\nin addition to the contained absolute and relative values.

      \n

      This does not remove absolute or relative value information from the domain.

      \n
      source

      pub fn unset_contains_top_flag(&mut self)

      Indicate that the domain does not contain any Top values\nin addition to the contained absolute and relative values.

      \n
      source

      pub fn from_target(id: AbstractIdentifier, offset: T) -> Self

      Return a new value representing a variable plus an offset,\nwhere the variable is represented by the given abstract ID.

      \n
      source

      pub fn remove_ids(&mut self, ids_to_remove: &BTreeSet<AbstractIdentifier>)

      Remove all provided IDs from the list of relative values.

      \n
      source

      pub fn get_if_absolute_value(&self) -> Option<&T>

      Return the contained absolute value\nonly if self contains no other (relative or Top) values.

      \n
      source

      pub fn get_if_unique_target(&self) -> Option<(&AbstractIdentifier, &T)>

      Return the target ID and offset of the contained relative value\nif self contains exactly one relative value and no absolute or Top values.

      \n
      ",0,"cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain + Display> DataDomain<T>

      source

      pub fn to_json_compact(&self) -> Value

      Get a more compact json-representation of the data domain.\nIntended for pretty printing, not useable for serialization/deserialization.

      \n
      ",0,"cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> SizedDomain for DataDomain<T>

      source§

      fn bytesize(&self) -> ByteSize

      Return the bytesize of self.

      \n
      source§

      fn new_top(bytesize: ByteSize) -> Self

      Return a new Top element with the given bytesize.

      \n

      Note that DataDomain technically does not have a Top element with respect to the partial order.\nInstead a Top element here represents a non-empty value\nfor which nothing is known about the contained values.

      \n
      ","SizedDomain","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: Clone + RegisterDomain> Clone for DataDomain<T>

      source§

      fn clone(&self) -> DataDomain<T>

      Returns a copy of the value. Read more
      1.0.0 · source§

      fn clone_from(&mut self, source: &Self)

      Performs copy-assignment from source. Read more
      ","Clone","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<'de, T> Deserialize<'de> for DataDomain<T>where\n T: Deserialize<'de> + RegisterDomain,

      source§

      fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where\n __D: Deserializer<'de>,

      Deserialize this value from the given Serde deserializer. Read more
      ","Deserialize<'de>","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: Debug + RegisterDomain> Debug for DataDomain<T>

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result

      Formats the value using the given formatter. Read more
      ","Debug","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: Eq + RegisterDomain> Eq for DataDomain<T>

      ","Eq","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> HasTop for DataDomain<T>

      source§

      fn top(&self) -> Self

      Generate a new Top element with the same bytesize as self.

      \n
      ","HasTop","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> From<T> for DataDomain<T>

      source§

      fn from(value: T) -> Self

      Converts to this type from the input type.
      ","From","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: Hash + RegisterDomain> Hash for DataDomain<T>

      source§

      fn hash<__H: Hasher>(&self, state: &mut __H)

      Feeds this value into the given Hasher. Read more
      1.3.0 · source§

      fn hash_slice<H>(data: &[Self], state: &mut H)where\n H: Hasher,\n Self: Sized,

      Feeds a slice of this type into the given Hasher. Read more
      ","Hash","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> Add for DataDomain<T>

      §

      type Output = DataDomain<T>

      The resulting type after applying the + operator.
      source§

      fn add(self, rhs: Self) -> Self

      Performs the + operation. Read more
      ","Add","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: PartialEq + RegisterDomain> PartialEq for DataDomain<T>

      source§

      fn eq(&self, other: &DataDomain<T>) -> bool

      This method tests for self and other values to be equal, and is used\nby ==.
      1.0.0 · source§

      fn ne(&self, other: &Rhs) -> bool

      This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
      ","PartialEq","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain + TryToBitvec> TryToBitvec for DataDomain<T>

      source§

      fn try_to_bitvec(&self) -> Result<Bitvector, Error>

      If the domain represents a single, absolute value, return it.

      \n
      source§

      fn try_to_offset(&self) -> Result<i64, Error>

      If self represents a single absolute value, try to convert it to a signed integer and return it.\nElse return an error.\nNote that the conversion loses information about the bytesize of the value.
      ","TryToBitvec","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain + From<Bitvector>> From<ApInt> for DataDomain<T>

      source§

      fn from(bitvector: Bitvector) -> Self

      Converts to this type from the input type.
      ","From","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain + TryToInterval> TryToInterval for DataDomain<T>

      source§

      fn try_to_interval(&self) -> Result<Interval, Error>

      If the domain represents (or can be widened to) an interval of absolute values, return the interval.

      \n
      source§

      fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

      If self represents an interval of absolute values (or can be widened to represent such an interval)\nthen return it as an interval of signed integers if the interval is bounded.\nElse return an error.\nNote that the conversion loses information about the bytesize of the values contained in the interval.
      ","TryToInterval","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> Sub for DataDomain<T>

      §

      type Output = DataDomain<T>

      The resulting type after applying the - operator.
      source§

      fn sub(self, rhs: Self) -> Self

      Performs the - operation. Read more
      ","Sub","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: SpecializeByConditional + RegisterDomain> SpecializeByConditional for DataDomain<T>

      source§

      fn intersect(self, other: &Self) -> Result<Self, Error>

      Compute the intersetion of two DataDomains.

      \n

      Note that this implementation is unsound for several reasons:

      \n
        \n
      • For example, it assumes that two different relative values cannot intersect.\nBut that is not true if their offfsets are big enough\nor if the relative values do in fact reference the same object despite having different identifiers.
      • \n
      • If intersecting relative values with absolute values we represent the result with the absolute values.\nBut depending on the use-case an approximation by the relative values could be more precise.
      • \n
      \n
      source§

      fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

      Return the restriction of self to values satisfying self <= bound\nwith self and bound interpreted as signed integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

      Return the restriction of self to values satisfying self <= bound\nwith self and bound interpreted as unsigned integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_signed_greater_equal_bound(\n self,\n bound: &Bitvector\n) -> Result<Self, Error>

      Return the restriction of self to values satisfying self >= bound\nwith self and bound interpreted as signed integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_unsigned_greater_equal_bound(\n self,\n bound: &Bitvector\n) -> Result<Self, Error>

      Return the restriction of self to values satisfying self >= bound\nwith self and bound interpreted as unsigned integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

      Return the restriction of self to values satisfying self != bound\nReturns an error if self only represents one value for which self == bound holds.
      source§

      fn without_widening_hints(self) -> Self

      Remove all widening hints from self.\nNecessary for cases where several sources have widening hints,\nbut only one source should contribute widening hints to the result.
      ","SpecializeByConditional","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T> Serialize for DataDomain<T>where\n T: Serialize + RegisterDomain,

      source§

      fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where\n __S: Serializer,

      Serialize this value into the given Serde serializer. Read more
      ","Serialize","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> RegisterDomain for DataDomain<T>

      source§

      fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

      Compute the (abstract) result of a binary operation

      \n
      source§

      fn un_op(&self, op: UnOpType) -> Self

      Compute the (abstract) result of a unary operation

      \n
      source§

      fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

      extract a sub-bitvector

      \n
      source§

      fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

      Cast a bitvector using the given cast type

      \n
      source§

      fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

      Return the bytesize of the result of the given binary operation.\nHas a generic implementation that should not be overwritten!
      ","RegisterDomain","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> AbstractDomain for DataDomain<T>

      source§

      fn is_top(&self) -> bool

      Return whether the element represents a top element or not.

      \n

      Note that DataDomain technically does not have a Top element with respect to the partial order.\nInstead a Top element here represents a non-empty value\nfor which nothing is known about the contained values.

      \n
      source§

      fn merge(&self, other: &Self) -> Self

      Return an upper bound (with respect to the partial order on the domain) for the two inputs self and other.
      ","AbstractDomain","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> StructuralPartialEq for DataDomain<T>

      ","StructuralPartialEq","cwe_checker_lib::analysis::pointer_inference::Data"],["
      source§

      impl<T: RegisterDomain> StructuralEq for DataDomain<T>

      ","StructuralEq","cwe_checker_lib::analysis::pointer_inference::Data"]] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.IntervalDomain.js b/doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.IntervalDomain.js new file mode 100644 index 000000000..eabb46f8c --- /dev/null +++ b/doc/html/type.impl/cwe_checker_lib/abstract_domain/struct.IntervalDomain.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"cwe_checker_lib":[["
      source§

      impl IntervalDomain

      source

      pub fn add(&self, rhs: &Self) -> Self

      Compute the interval of possible results\nif one adds a value from self to a value from rhs.

      \n
      source

      pub fn sub(&self, rhs: &Self) -> Self

      Compute the interval of possible results\nif one subtracts a value in rhs from a value in self.

      \n
      source

      pub fn signed_mul(&self, rhs: &Self) -> Self

      Compute the interval of possible results\nif one multiplies a value in self with a value in rhs.

      \n
      source

      pub fn shift_left(&self, rhs: &Self) -> Self

      Compute the resulting interval after a left shift operation.\nThe result is only exact if the rhs interval contains exactly one value.

      \n
      ",0,"cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl IntervalDomain

      source

      pub fn new(start: Bitvector, end: Bitvector) -> Self

      Create a new interval domain with the given bounds.

      \n

      Both start and end are inclusive, i.e. contained in the interval.\nThe widening hints are set to None and the stride is set to 1 if start != end.

      \n
      source

      pub fn equal_as_value_sets(&self, other: &IntervalDomain) -> bool

      Returns true if the two intervals represent the same value sets.\nThis function ignores differences in the widening hints of the two intervals.

      \n
      source

      pub fn update_widening_lower_bound(&mut self, bound: &Option<Bitvector>)

      If bound is more exact/restrictive than the current lower bound of self,\nset the lower bound to bound.\nOtherwise keep the old lower bound.

      \n
      source

      pub fn update_widening_upper_bound(&mut self, bound: &Option<Bitvector>)

      If bound is more exact/restrictive than the current upper bound of self,\nset the upper bound to bound.\nOtherwise keep the old upper bound.

      \n
      source

      pub fn signed_merge(&self, other: &IntervalDomain) -> IntervalDomain

      Merge as signed intervals without performing widenings.

      \n
      source

      pub fn signed_merge_and_widen(&self, other: &IntervalDomain) -> IntervalDomain

      Merge as signed intervals and perform widening if necessary.

      \n
      Widening Strategy
      The widening delay
      \n

      Each interval has a widening_delay counter,\nwhich denotes the length of the interval after the last time that widening was performed.\nFor operations with more than one input,\nthe widening delay is set to the maximum of the input widening delays.\nThe only exception to this is the IntervalDomain::intersect() method,\nwhich may lower the value of the widening delay.

      \n
      When to widen
      \n

      If the merged interval equals one of the input intervals as value sets, do not perform widening.\nElse widening is performed if and only if\nthe length of the interval is greater than the widening delay plus the stride of the interval.

      \n
      How to widen
      \n

      If no suitable widening bounds for widening exist, widen to the Top value.\nIf exactly one widening bound exists, widen up to the bound,\nbut do not perform widening in the other direction of the interval.\nIf widening bounds for both directions exist, widen up to the bounds in both directions.

      \n

      After that the widening_delay is set to the length of the resulting interval.

      \n
      source

      pub fn zero_extend(self, width: ByteSize) -> IntervalDomain

      Zero-extend the values in the interval to the given width.

      \n
      source

      pub fn sign_extend(self, width: ByteSize) -> Self

      Sign-extend the values in the interval to the given width.

      \n
      source

      pub fn fits_into_size(&self, size: ByteSize) -> bool

      Check whether all values in the interval are representable by bitvectors of the given size.\nDoes not check whether this is also true for the widening hints.

      \n
      ",0,"cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl SpecializeByConditional for IntervalDomain

      source§

      fn intersect(self, other: &Self) -> Result<Self, Error>

      Compute the intersection of two intervals.\nReturn an error if the intersection is empty.

      \n
      source§

      fn add_signed_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

      Return the restriction of self to values satisfying self <= bound\nwith self and bound interpreted as signed integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_signed_greater_equal_bound(\n self,\n bound: &Bitvector\n) -> Result<Self, Error>

      Return the restriction of self to values satisfying self >= bound\nwith self and bound interpreted as signed integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_unsigned_less_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

      Return the restriction of self to values satisfying self <= bound\nwith self and bound interpreted as unsigned integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_unsigned_greater_equal_bound(\n self,\n bound: &Bitvector\n) -> Result<Self, Error>

      Return the restriction of self to values satisfying self >= bound\nwith self and bound interpreted as unsigned integers.\nReturns an error if no value represented by self can satisfy the comparison.
      source§

      fn add_not_equal_bound(self, bound: &Bitvector) -> Result<Self, Error>

      Return the restriction of self to values satisfying self != bound\nReturns an error if self only represents one value for which self == bound holds.
      source§

      fn without_widening_hints(self) -> Self

      Remove all widening hints from self.\nNecessary for cases where several sources have widening hints,\nbut only one source should contribute widening hints to the result.
      ","SpecializeByConditional","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl<'de> Deserialize<'de> for IntervalDomain

      source§

      fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where\n __D: Deserializer<'de>,

      Deserialize this value from the given Serde deserializer. Read more
      ","Deserialize<'de>","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl HasTop for IntervalDomain

      source§

      fn top(&self) -> Self

      Return a new interval with the same byte size as self and representing the Top value of the domain.

      \n
      ","HasTop","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl From<ApInt> for IntervalDomain

      source§

      fn from(bitvec: Bitvector) -> Self

      Create an interval containing only bitvec.

      \n
      ","From","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl TryToBitvec for IntervalDomain

      source§

      fn try_to_bitvec(&self) -> Result<Bitvector, Error>

      If the domain represents an interval of length one, return the contained value.

      \n
      source§

      fn try_to_offset(&self) -> Result<i64, Error>

      If self represents a single absolute value, try to convert it to a signed integer and return it.\nElse return an error.\nNote that the conversion loses information about the bytesize of the value.
      ","TryToBitvec","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Serialize for IntervalDomain

      source§

      fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where\n __S: Serializer,

      Serialize this value into the given Serde serializer. Read more
      ","Serialize","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl StructuralPartialEq for IntervalDomain

      ","StructuralPartialEq","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Add for IntervalDomain

      §

      type Output = IntervalDomain

      The resulting type after applying the + operator.
      source§

      fn add(self, rhs: Self) -> Self

      Performs the + operation. Read more
      ","Add","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Eq for IntervalDomain

      ","Eq","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Display for IntervalDomain

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result

      Formats the value using the given formatter. Read more
      ","Display","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl AbstractDomain for IntervalDomain

      source§

      fn merge(&self, other: &IntervalDomain) -> IntervalDomain

      Merge two interval domains and perform widening if necessary.\nSee IntervalDomain::signed_merge_and_widen for the widening strategy.

      \n
      source§

      fn is_top(&self) -> bool

      Return true if the interval spans all possible values.

      \n
      ","AbstractDomain","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Hash for IntervalDomain

      source§

      fn hash<__H: Hasher>(&self, state: &mut __H)

      Feeds this value into the given Hasher. Read more
      1.3.0 · source§

      fn hash_slice<H>(data: &[Self], state: &mut H)where\n H: Hasher,\n Self: Sized,

      Feeds a slice of this type into the given Hasher. Read more
      ","Hash","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl PartialEq for IntervalDomain

      source§

      fn eq(&self, other: &IntervalDomain) -> bool

      This method tests for self and other values to be equal, and is used\nby ==.
      1.0.0 · source§

      fn ne(&self, other: &Rhs) -> bool

      This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
      ","PartialEq","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl RegisterDomain for IntervalDomain

      source§

      fn bin_op(&self, op: BinOpType, rhs: &Self) -> Self

      Compute the result of a binary operation between two interval domains.

      \n

      For binary operations that are not explicitly implemented\nthe result is only exact if both intervals contain exactly one value.

      \n
      source§

      fn un_op(&self, op: UnOpType) -> Self

      Compute the result of an unary operation on the interval domain.

      \n
      source§

      fn subpiece(&self, low_byte: ByteSize, size: ByteSize) -> Self

      Take a sub-bitvector of the values in the interval domain.

      \n
      source§

      fn cast(&self, kind: CastOpType, width: ByteSize) -> Self

      Compute the result of a cast operation on the interval domain.

      \n
      source§

      fn bin_op_bytesize(&self, op: BinOpType, rhs: &Self) -> ByteSize

      Return the bytesize of the result of the given binary operation.\nHas a generic implementation that should not be overwritten!
      ","RegisterDomain","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Neg for IntervalDomain

      §

      type Output = IntervalDomain

      The resulting type after applying the - operator.
      source§

      fn neg(self) -> Self

      Performs the unary - operation. Read more
      ","Neg","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Sub for IntervalDomain

      §

      type Output = IntervalDomain

      The resulting type after applying the - operator.
      source§

      fn sub(self, rhs: Self) -> Self

      Performs the - operation. Read more
      ","Sub","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Debug for IntervalDomain

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result

      Formats the value using the given formatter. Read more
      ","Debug","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl StructuralEq for IntervalDomain

      ","StructuralEq","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl From<Interval> for IntervalDomain

      source§

      fn from(interval: Interval) -> IntervalDomain

      Generate an interval domain without widening hints.

      \n
      ","From","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl Clone for IntervalDomain

      source§

      fn clone(&self) -> IntervalDomain

      Returns a copy of the value. Read more
      1.0.0 · source§

      fn clone_from(&mut self, source: &Self)

      Performs copy-assignment from source. Read more
      ","Clone","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl TryToInterval for IntervalDomain

      source§

      fn try_to_interval(&self) -> Result<Interval, Error>

      If the domain represents a bounded (i.e. not Top) interval, return it.

      \n
      source§

      fn try_to_offset_interval(&self) -> Result<(i64, i64), Error>

      If self represents an interval of absolute values (or can be widened to represent such an interval)\nthen return it as an interval of signed integers if the interval is bounded.\nElse return an error.\nNote that the conversion loses information about the bytesize of the values contained in the interval.
      ","TryToInterval","cwe_checker_lib::analysis::pointer_inference::ValueDomain"],["
      source§

      impl SizedDomain for IntervalDomain

      source§

      fn bytesize(&self) -> ByteSize

      Return the size in bytes of the represented values.

      \n
      source§

      fn new_top(bytesize: ByteSize) -> Self

      Return a new Top value with the given bytesize.

      \n
      ","SizedDomain","cwe_checker_lib::analysis::pointer_inference::ValueDomain"]] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/doc/html/type.impl/petgraph/graph_impl/type.DiGraph.js b/doc/html/type.impl/petgraph/graph_impl/type.DiGraph.js new file mode 100644 index 000000000..a5e33d705 --- /dev/null +++ b/doc/html/type.impl/petgraph/graph_impl/type.DiGraph.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"cwe_checker_lib":[] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/doc/html/type.impl/std/primitive.fn.js b/doc/html/type.impl/std/primitive.fn.js new file mode 100644 index 000000000..a5e33d705 --- /dev/null +++ b/doc/html/type.impl/std/primitive.fn.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"cwe_checker_lib":[] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file